mirror of
https://github.com/litruv/lit.ruv.wtf.git
synced 2026-07-24 02:36:02 +10:00
64 lines
2.0 KiB
JavaScript
64 lines
2.0 KiB
JavaScript
/**
|
|
* 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));
|
|
}
|
|
}
|