mirror of
https://github.com/litruv/lit.ruv.wtf.git
synced 2026-07-24 02:36:02 +10:00
update to node site
This commit is contained in:
63
website/scripts/ChatCommands.js
Normal file
63
website/scripts/ChatCommands.js
Normal file
@@ -0,0 +1,63 @@
|
||||
/**
|
||||
* Handles IRC-style slash commands for the chat node.
|
||||
*/
|
||||
export class ChatCommands {
|
||||
static COMMANDS = [
|
||||
{ name: 'nick', args: '<name>', desc: 'Change display name', aliases: [] },
|
||||
{ name: 'help', args: '', desc: 'Show command list', aliases: [] },
|
||||
];
|
||||
|
||||
/**
|
||||
* @param {import('./ChatNode.js').ChatNode} chat
|
||||
*/
|
||||
constructor(chat) {
|
||||
this.chat = chat;
|
||||
}
|
||||
|
||||
get client() { return this.chat.getClient(); }
|
||||
|
||||
/**
|
||||
* @param {string} message
|
||||
*/
|
||||
async handle(message) {
|
||||
const parts = message.slice(1).split(' ');
|
||||
const command = parts[0].toLowerCase();
|
||||
const args = parts.slice(1);
|
||||
|
||||
const aliasMap = new Map();
|
||||
for (const def of ChatCommands.COMMANDS) {
|
||||
aliasMap.set(def.name, def.name);
|
||||
for (const alias of def.aliases) aliasMap.set(alias, def.name);
|
||||
}
|
||||
|
||||
const canonical = aliasMap.get(command);
|
||||
if (!canonical || typeof this[canonical] !== 'function') {
|
||||
this.chat.addErrorMessage(`Unknown command: /${command}. Type /help for commands.`);
|
||||
return;
|
||||
}
|
||||
await this[canonical](args);
|
||||
}
|
||||
|
||||
async nick(args) {
|
||||
if (!args[0]) {
|
||||
this.chat.addErrorMessage('Usage: /nick NewNickname');
|
||||
return;
|
||||
}
|
||||
try {
|
||||
if (!await this.client.setDisplayName(args[0])) {
|
||||
throw new Error('Server refused');
|
||||
}
|
||||
this.chat.addSystemMessage(`Nickname changed to ${args[0]}`);
|
||||
} catch (e) {
|
||||
this.chat.addErrorMessage(`Failed to change nickname: ${e.message}`);
|
||||
}
|
||||
}
|
||||
|
||||
help() {
|
||||
[
|
||||
'─── Commands ───────────────────────',
|
||||
'Profile: /nick <name>',
|
||||
'─────────────────────────────────────',
|
||||
].forEach(l => this.chat.addSystemMessage(l));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user