From db0a69dcfdbb6c886563b7b0e8f2092661a53c9a Mon Sep 17 00:00:00 2001 From: Simon Ser Date: Sat, 16 Nov 2024 12:27:34 +0100 Subject: [PATCH] commands: use Map instead of object --- commands.js | 116 ++++++++++++++++++++++++++++++---------------- components/app.js | 4 +- 2 files changed, 79 insertions(+), 41 deletions(-) diff --git a/commands.js b/commands.js index 1661a25..fbeda5a 100644 --- a/commands.js +++ b/commands.js @@ -53,6 +53,7 @@ function markServerBufferUnread(app) { } const join = { + name: "join", usage: " [password]", description: "Join a channel", execute: (app, args) => { @@ -69,6 +70,7 @@ const join = { }; const kick = { + name: "kick", usage: " [comment]", description: "Remove a user from the channel", execute: (app, args) => { @@ -83,6 +85,7 @@ const kick = { }; const ban = { + name: "ban", usage: "[nick]", description: "Ban a user from the channel, or display the current ban list", execute: (app, args) => { @@ -111,8 +114,9 @@ function givemode(app, args, mode) { }); } -export default { - "away": { +const commands = [ + { + name: "away", usage: "[message]", description: "Set away message", execute: (app, args) => { @@ -123,8 +127,9 @@ export default { getActiveClient(app).send({command: "AWAY", params}); }, }, - "ban": ban, - "buffer": { + ban, + { + name: "buffer", usage: "", description: "Switch to a buffer", execute: (app, args) => { @@ -138,7 +143,8 @@ export default { throw new Error("Unknown buffer"); }, }, - "close": { + { + name: "close", description: "Close the current buffer", execute: (app, args) => { let activeBuffer = app.state.buffers.get(app.state.activeBuffer); @@ -148,29 +154,34 @@ export default { app.close(activeBuffer.id); }, }, - "deop": { + { + name: "deop", usage: "", description: "Remove operator status for a user on this channel", execute: (app, args) => givemode(app, args, "-o"), }, - "devoice": { + { + name: "devoice", usage: "", description: "Remove voiced status for a user on this channel", execute: (app, args) => givemode(app, args, "-v"), }, - "disconnect": { + { + name: "disconnect", description: "Disconnect from the server", execute: (app, args) => { app.disconnect(); }, }, - "help": { + { + name: "help", description: "Show help menu", execute: (app, args) => { app.openHelp(); }, }, - "invite": { + { + name: "invite", usage: "", description: "Invite a user to the channel", execute: (app, args) => { @@ -184,10 +195,11 @@ export default { ]}); }, }, - "j": join, - "join": join, - "kick": kick, - "kickban": { + { ...join, name: "j" }, + join, + kick, + { + name: "kickban", usage: "", description: "Ban a user and removes them from the channel", execute: (app, args) => { @@ -195,7 +207,8 @@ export default { ban.execute(app, args); }, }, - "lusers": { + { + name: "lusers", usage: "[ []]", description: "Request user statistics about the network", execute: (app, args) => { @@ -203,7 +216,8 @@ export default { markServerBufferUnread(app); }, }, - "me": { + { + name: "me", usage: "", description: "Send an action message to the current buffer", execute: (app, args) => { @@ -213,7 +227,8 @@ export default { app.privmsg(target, text); }, }, - "mode": { + { + name: "mode", usage: "[target] [modes] [mode args...]", description: "Query or change a channel or user mode", execute: (app, args) => { @@ -225,7 +240,8 @@ export default { getActiveClient(app).send({ command: "MODE", params: args }); }, }, - "motd": { + { + name: "motd", usage: "[server]", description: "Get the Message Of The Day", execute: (app, args) => { @@ -233,7 +249,8 @@ export default { markServerBufferUnread(app); }, }, - "msg": { + { + name: "msg", usage: " ", description: "Send a message to a nickname or a channel", execute: (app, args) => { @@ -242,7 +259,8 @@ export default { getActiveClient(app).send({ command: "PRIVMSG", params: [target, text] }); }, }, - "nick": { + { + name: "nick", usage: "", description: "Change current nickname", execute: (app, args) => { @@ -250,7 +268,8 @@ export default { getActiveClient(app).send({ command: "NICK", params: [newNick] }); }, }, - "notice": { + { + name: "notice", usage: " ", description: "Send a notice to a nickname or a channel", execute: (app, args) => { @@ -259,12 +278,14 @@ export default { getActiveClient(app).send({ command: "NOTICE", params: [target, text] }); }, }, - "op": { + { + name: "op", usage: "", description: "Give a user operator status on this channel", execute: (app, args) => givemode(app, args, "+o"), }, - "part": { + { + name: "part", usage: "[reason]", description: "Leave a channel", execute: (app, args) => { @@ -277,7 +298,8 @@ export default { getActiveClient(app).send({ command: "PART", params }); }, }, - "query": { + { + name: "query", usage: " [message]", description: "Open a buffer to send messages to a nickname", execute: (app, args) => { @@ -293,7 +315,8 @@ export default { } }, }, - "quiet": { + { + name: "quiet", usage: "[nick]", description: "Quiet a user in the channel, or display the current quiet list", execute: (app, args) => { @@ -307,13 +330,15 @@ export default { } }, }, - "quit": { + { + name: "quit", description: "Quit", execute: (app, args) => { app.close({ name: SERVER_BUFFER }); }, }, - "quote": { + { + name: "quote", usage: "", description: "Send a raw IRC command to the server", execute: (app, args) => { @@ -326,13 +351,15 @@ export default { getActiveClient(app).send(msg); }, }, - "reconnect": { + { + name: "reconnect", description: "Reconnect to the server", execute: (app, args) => { app.reconnect(); }, }, - "setname": { + { + name: "setname", usage: "", description: "Change current realname", execute: (app, args) => { @@ -345,7 +372,8 @@ export default { // TODO: save to local storage }, }, - "stats": { + { + name: "stats", usage: " [server]", description: "Request server statistics", execute: (app, args) => { @@ -361,7 +389,8 @@ export default { markServerBufferUnread(app); }, }, - "topic": { + { + name: "topic", usage: "", description: "Change the topic of the current channel", execute: (app, args) => { @@ -373,26 +402,30 @@ export default { getActiveClient(app).send({ command: "TOPIC", params }); }, }, - "unban": { + { + name: "unban", usage: "", description: "Remove a user from the ban list", execute: (app, args) => { return setUserHostMode(app, args, "-b"); }, }, - "unquiet": { + { + name: "unquiet", usage: "", description: "Remove a user from the quiet list", execute: (app, args) => { return setUserHostMode(app, args, "-q"); }, }, - "voice": { + { + name: "voice", usage: "", description: "Give a user voiced status on this channel", execute: (app, args) => givemode(app, args, "+v"), }, - "who": { + { + name: "who", usage: "", description: "Retrieve a list of users", execute: (app, args) => { @@ -400,7 +433,8 @@ export default { markServerBufferUnread(app); }, }, - "whois": { + { + name: "whois", usage: "", description: "Retrieve information about a user", execute: (app, args) => { @@ -412,7 +446,8 @@ export default { markServerBufferUnread(app); }, }, - "whowas": { + { + name: "whowas", usage: " [count]", description: "Retrieve information about an offline user", execute: (app, args) => { @@ -423,7 +458,8 @@ export default { markServerBufferUnread(app); }, }, - "list": { + { + name: "list", usage: "[filter]", description: "Retrieve a list of channels from a network", execute: (app, args) => { @@ -431,4 +467,6 @@ export default { markServerBufferUnread(app); }, }, -}; +]; + +export default new Map(commands.map((cmd) => [cmd.name, cmd])); diff --git a/components/app.js b/components/app.js index 1cf93ba..d045559 100644 --- a/components/app.js +++ b/components/app.js @@ -1583,7 +1583,7 @@ export default class App extends Component { let name = parts[0].toLowerCase().slice(1); let args = parts.slice(1); - let cmd = commands[name]; + let cmd = commands.get(name); if (!cmd) { this.showError(`Unknown command "${name}" (run "/help" to get a command list)`); return; @@ -1715,7 +1715,7 @@ export default class App extends Component { } if (prefix.startsWith("/")) { - let repl = fromList(Object.keys(commands), prefix.slice(1)); + let repl = fromList([...commands.keys()], prefix.slice(1)); return repl.map((cmd) => "/" + cmd); }