diff --git a/warzone/crates/warzone-client/src/tui/app.rs b/warzone/crates/warzone-client/src/tui/app.rs index f76662c..0684ac8 100644 --- a/warzone/crates/warzone-client/src/tui/app.rs +++ b/warzone/crates/warzone-client/src/tui/app.rs @@ -295,7 +295,8 @@ impl App { } return; } - if text.starts_with("/peer ") { + if text.starts_with("/peer ") || text.starts_with("/p ") { + let text = if text.starts_with("/p ") { format!("/peer {}", &text[3..]) } else { text.clone() }; let raw = text[6..].trim().to_string(); let fp = if raw.starts_with('@') { match self.resolve_alias(&raw[1..], client).await { diff --git a/warzone/crates/warzone-server/src/routes/web.rs b/warzone/crates/warzone-server/src/routes/web.rs index 7b309c1..de29d52 100644 --- a/warzone/crates/warzone-server/src/routes/web.rs +++ b/warzone/crates/warzone-server/src/routes/web.rs @@ -847,6 +847,22 @@ async function doSend() { } catch(e) { addSys('Reply failed: ' + e.message); } return; } + if (text.startsWith('/p ') || text.startsWith('/peer ')) { + let val = text.startsWith('/p ') ? text.slice(3).trim() : text.slice(6).trim(); + if (val.startsWith('@')) { + const resp = await fetch(SERVER + '/v1/alias/resolve/' + val.slice(1)); + const data = await resp.json(); + if (data.error) { addSys('Unknown alias ' + val); return; } + $peerInput.value = data.fingerprint; + addSys(val + ' → ' + data.fingerprint.slice(0,16) + '...'); + } else { + $peerInput.value = val; + } + currentGroup = null; + localStorage.setItem('wz-peer', $peerInput.value); + addSys('Peer set to ' + $peerInput.value.slice(0,16) + '...'); + return; + } if (text.startsWith('/gcreate ')) { await groupCreate(text.slice(9).trim()); return; } if (text.startsWith('/gjoin ')) { await groupJoin(text.slice(7).trim()); return; } if (text === '/gleave') {