Compare commits

..

No commits in common. "2f1bf8a2fe87660a37cf92a179f590c8493ee983" and "8ff1cd83179b8c00cd892581322e92d9d5a8b70d" have entirely different histories.

6 changed files with 46 additions and 86 deletions

View file

@ -53,7 +53,6 @@ function markServerBufferUnread(app) {
} }
const join = { const join = {
name: "join",
usage: "<name> [password]", usage: "<name> [password]",
description: "Join a channel", description: "Join a channel",
execute: (app, args) => { execute: (app, args) => {
@ -70,7 +69,6 @@ const join = {
}; };
const kick = { const kick = {
name: "kick",
usage: "<nick> [comment]", usage: "<nick> [comment]",
description: "Remove a user from the channel", description: "Remove a user from the channel",
execute: (app, args) => { execute: (app, args) => {
@ -85,7 +83,6 @@ const kick = {
}; };
const ban = { const ban = {
name: "ban",
usage: "[nick]", usage: "[nick]",
description: "Ban a user from the channel, or display the current ban list", description: "Ban a user from the channel, or display the current ban list",
execute: (app, args) => { execute: (app, args) => {
@ -114,9 +111,8 @@ function givemode(app, args, mode) {
}); });
} }
const commands = [ export default {
{ "away": {
name: "away",
usage: "[message]", usage: "[message]",
description: "Set away message", description: "Set away message",
execute: (app, args) => { execute: (app, args) => {
@ -127,9 +123,8 @@ const commands = [
getActiveClient(app).send({command: "AWAY", params}); getActiveClient(app).send({command: "AWAY", params});
}, },
}, },
ban, "ban": ban,
{ "buffer": {
name: "buffer",
usage: "<name>", usage: "<name>",
description: "Switch to a buffer", description: "Switch to a buffer",
execute: (app, args) => { execute: (app, args) => {
@ -143,8 +138,7 @@ const commands = [
throw new Error("Unknown buffer"); throw new Error("Unknown buffer");
}, },
}, },
{ "close": {
name: "close",
description: "Close the current buffer", description: "Close the current buffer",
execute: (app, args) => { execute: (app, args) => {
let activeBuffer = app.state.buffers.get(app.state.activeBuffer); let activeBuffer = app.state.buffers.get(app.state.activeBuffer);
@ -154,34 +148,29 @@ const commands = [
app.close(activeBuffer.id); app.close(activeBuffer.id);
}, },
}, },
{ "deop": {
name: "deop",
usage: "<nick>", usage: "<nick>",
description: "Remove operator status for a user on this channel", description: "Remove operator status for a user on this channel",
execute: (app, args) => givemode(app, args, "-o"), execute: (app, args) => givemode(app, args, "-o"),
}, },
{ "devoice": {
name: "devoice",
usage: "<nick>", usage: "<nick>",
description: "Remove voiced status for a user on this channel", description: "Remove voiced status for a user on this channel",
execute: (app, args) => givemode(app, args, "-v"), execute: (app, args) => givemode(app, args, "-v"),
}, },
{ "disconnect": {
name: "disconnect",
description: "Disconnect from the server", description: "Disconnect from the server",
execute: (app, args) => { execute: (app, args) => {
app.disconnect(); app.disconnect();
}, },
}, },
{ "help": {
name: "help",
description: "Show help menu", description: "Show help menu",
execute: (app, args) => { execute: (app, args) => {
app.openHelp(); app.openHelp();
}, },
}, },
{ "invite": {
name: "invite",
usage: "<nick>", usage: "<nick>",
description: "Invite a user to the channel", description: "Invite a user to the channel",
execute: (app, args) => { execute: (app, args) => {
@ -195,11 +184,10 @@ const commands = [
]}); ]});
}, },
}, },
{ ...join, name: "j" }, "j": join,
join, "join": join,
kick, "kick": kick,
{ "kickban": {
name: "kickban",
usage: "<target>", usage: "<target>",
description: "Ban a user and removes them from the channel", description: "Ban a user and removes them from the channel",
execute: (app, args) => { execute: (app, args) => {
@ -207,8 +195,7 @@ const commands = [
ban.execute(app, args); ban.execute(app, args);
}, },
}, },
{ "lusers": {
name: "lusers",
usage: "[<mask> [<target>]]", usage: "[<mask> [<target>]]",
description: "Request user statistics about the network", description: "Request user statistics about the network",
execute: (app, args) => { execute: (app, args) => {
@ -216,8 +203,7 @@ const commands = [
markServerBufferUnread(app); markServerBufferUnread(app);
}, },
}, },
{ "me": {
name: "me",
usage: "<action>", usage: "<action>",
description: "Send an action message to the current buffer", description: "Send an action message to the current buffer",
execute: (app, args) => { execute: (app, args) => {
@ -227,8 +213,7 @@ const commands = [
app.privmsg(target, text); app.privmsg(target, text);
}, },
}, },
{ "mode": {
name: "mode",
usage: "[target] [modes] [mode args...]", usage: "[target] [modes] [mode args...]",
description: "Query or change a channel or user mode", description: "Query or change a channel or user mode",
execute: (app, args) => { execute: (app, args) => {
@ -240,8 +225,7 @@ const commands = [
getActiveClient(app).send({ command: "MODE", params: args }); getActiveClient(app).send({ command: "MODE", params: args });
}, },
}, },
{ "motd": {
name: "motd",
usage: "[server]", usage: "[server]",
description: "Get the Message Of The Day", description: "Get the Message Of The Day",
execute: (app, args) => { execute: (app, args) => {
@ -249,8 +233,7 @@ const commands = [
markServerBufferUnread(app); markServerBufferUnread(app);
}, },
}, },
{ "msg": {
name: "msg",
usage: "<target> <message>", usage: "<target> <message>",
description: "Send a message to a nickname or a channel", description: "Send a message to a nickname or a channel",
execute: (app, args) => { execute: (app, args) => {
@ -259,8 +242,7 @@ const commands = [
getActiveClient(app).send({ command: "PRIVMSG", params: [target, text] }); getActiveClient(app).send({ command: "PRIVMSG", params: [target, text] });
}, },
}, },
{ "nick": {
name: "nick",
usage: "<nick>", usage: "<nick>",
description: "Change current nickname", description: "Change current nickname",
execute: (app, args) => { execute: (app, args) => {
@ -268,8 +250,7 @@ const commands = [
getActiveClient(app).send({ command: "NICK", params: [newNick] }); getActiveClient(app).send({ command: "NICK", params: [newNick] });
}, },
}, },
{ "notice": {
name: "notice",
usage: "<target> <message>", usage: "<target> <message>",
description: "Send a notice to a nickname or a channel", description: "Send a notice to a nickname or a channel",
execute: (app, args) => { execute: (app, args) => {
@ -278,14 +259,12 @@ const commands = [
getActiveClient(app).send({ command: "NOTICE", params: [target, text] }); getActiveClient(app).send({ command: "NOTICE", params: [target, text] });
}, },
}, },
{ "op": {
name: "op",
usage: "<nick>", usage: "<nick>",
description: "Give a user operator status on this channel", description: "Give a user operator status on this channel",
execute: (app, args) => givemode(app, args, "+o"), execute: (app, args) => givemode(app, args, "+o"),
}, },
{ "part": {
name: "part",
usage: "[reason]", usage: "[reason]",
description: "Leave a channel", description: "Leave a channel",
execute: (app, args) => { execute: (app, args) => {
@ -298,8 +277,7 @@ const commands = [
getActiveClient(app).send({ command: "PART", params }); getActiveClient(app).send({ command: "PART", params });
}, },
}, },
{ "query": {
name: "query",
usage: "<nick> [message]", usage: "<nick> [message]",
description: "Open a buffer to send messages to a nickname", description: "Open a buffer to send messages to a nickname",
execute: (app, args) => { execute: (app, args) => {
@ -315,8 +293,7 @@ const commands = [
} }
}, },
}, },
{ "quiet": {
name: "quiet",
usage: "[nick]", usage: "[nick]",
description: "Quiet a user in the channel, or display the current quiet list", description: "Quiet a user in the channel, or display the current quiet list",
execute: (app, args) => { execute: (app, args) => {
@ -330,15 +307,13 @@ const commands = [
} }
}, },
}, },
{ "quit": {
name: "quit",
description: "Quit", description: "Quit",
execute: (app, args) => { execute: (app, args) => {
app.close({ name: SERVER_BUFFER }); app.close({ name: SERVER_BUFFER });
}, },
}, },
{ "quote": {
name: "quote",
usage: "<command>", usage: "<command>",
description: "Send a raw IRC command to the server", description: "Send a raw IRC command to the server",
execute: (app, args) => { execute: (app, args) => {
@ -351,15 +326,13 @@ const commands = [
getActiveClient(app).send(msg); getActiveClient(app).send(msg);
}, },
}, },
{ "reconnect": {
name: "reconnect",
description: "Reconnect to the server", description: "Reconnect to the server",
execute: (app, args) => { execute: (app, args) => {
app.reconnect(); app.reconnect();
}, },
}, },
{ "setname": {
name: "setname",
usage: "<realname>", usage: "<realname>",
description: "Change current realname", description: "Change current realname",
execute: (app, args) => { execute: (app, args) => {
@ -372,8 +345,7 @@ const commands = [
// TODO: save to local storage // TODO: save to local storage
}, },
}, },
{ "stats": {
name: "stats",
usage: "<query> [server]", usage: "<query> [server]",
description: "Request server statistics", description: "Request server statistics",
execute: (app, args) => { execute: (app, args) => {
@ -389,8 +361,7 @@ const commands = [
markServerBufferUnread(app); markServerBufferUnread(app);
}, },
}, },
{ "topic": {
name: "topic",
usage: "<topic>", usage: "<topic>",
description: "Change the topic of the current channel", description: "Change the topic of the current channel",
execute: (app, args) => { execute: (app, args) => {
@ -402,30 +373,26 @@ const commands = [
getActiveClient(app).send({ command: "TOPIC", params }); getActiveClient(app).send({ command: "TOPIC", params });
}, },
}, },
{ "unban": {
name: "unban",
usage: "<nick>", usage: "<nick>",
description: "Remove a user from the ban list", description: "Remove a user from the ban list",
execute: (app, args) => { execute: (app, args) => {
return setUserHostMode(app, args, "-b"); return setUserHostMode(app, args, "-b");
}, },
}, },
{ "unquiet": {
name: "unquiet",
usage: "<nick>", usage: "<nick>",
description: "Remove a user from the quiet list", description: "Remove a user from the quiet list",
execute: (app, args) => { execute: (app, args) => {
return setUserHostMode(app, args, "-q"); return setUserHostMode(app, args, "-q");
}, },
}, },
{ "voice": {
name: "voice",
usage: "<nick>", usage: "<nick>",
description: "Give a user voiced status on this channel", description: "Give a user voiced status on this channel",
execute: (app, args) => givemode(app, args, "+v"), execute: (app, args) => givemode(app, args, "+v"),
}, },
{ "who": {
name: "who",
usage: "<mask>", usage: "<mask>",
description: "Retrieve a list of users", description: "Retrieve a list of users",
execute: (app, args) => { execute: (app, args) => {
@ -433,8 +400,7 @@ const commands = [
markServerBufferUnread(app); markServerBufferUnread(app);
}, },
}, },
{ "whois": {
name: "whois",
usage: "<nick>", usage: "<nick>",
description: "Retrieve information about a user", description: "Retrieve information about a user",
execute: (app, args) => { execute: (app, args) => {
@ -446,8 +412,7 @@ const commands = [
markServerBufferUnread(app); markServerBufferUnread(app);
}, },
}, },
{ "whowas": {
name: "whowas",
usage: "<nick> [count]", usage: "<nick> [count]",
description: "Retrieve information about an offline user", description: "Retrieve information about an offline user",
execute: (app, args) => { execute: (app, args) => {
@ -458,8 +423,7 @@ const commands = [
markServerBufferUnread(app); markServerBufferUnread(app);
}, },
}, },
{ "list": {
name: "list",
usage: "[filter]", usage: "[filter]",
description: "Retrieve a list of channels from a network", description: "Retrieve a list of channels from a network",
execute: (app, args) => { execute: (app, args) => {
@ -467,6 +431,4 @@ const commands = [
markServerBufferUnread(app); markServerBufferUnread(app);
}, },
}, },
]; };
export default new Map(commands.map((cmd) => [cmd.name, cmd]));

View file

@ -515,7 +515,7 @@ export default class App extends Component {
this.setState((state) => { this.setState((state) => {
let updated; let updated;
[id, updated] = State.createBuffer(state, name, serverID, client); [id, updated] = State.createBuffer(state, name, serverID, client);
isNew = Boolean(updated); isNew = !!updated;
return updated; return updated;
}); });
if (isNew) { if (isNew) {
@ -1583,7 +1583,7 @@ export default class App extends Component {
let name = parts[0].toLowerCase().slice(1); let name = parts[0].toLowerCase().slice(1);
let args = parts.slice(1); let args = parts.slice(1);
let cmd = commands.get(name); let cmd = commands[name];
if (!cmd) { if (!cmd) {
this.showError(`Unknown command "${name}" (run "/help" to get a command list)`); this.showError(`Unknown command "${name}" (run "/help" to get a command list)`);
return; return;
@ -1715,7 +1715,7 @@ export default class App extends Component {
} }
if (prefix.startsWith("/")) { if (prefix.startsWith("/")) {
let repl = fromList([...commands.keys()], prefix.slice(1)); let repl = fromList(Object.keys(commands), prefix.slice(1));
return repl.map((cmd) => "/" + cmd); return repl.map((cmd) => "/" + cmd);
} }

View file

@ -26,8 +26,6 @@ export default [
"eqeqeq": "error", "eqeqeq": "error",
"no-invalid-this": "error", "no-invalid-this": "error",
"prefer-arrow-callback": "error", "prefer-arrow-callback": "error",
"no-implicit-coercion": "warn",
"object-shorthand": "warn",
"@stylistic/js/indent": ["warn", "tab"], "@stylistic/js/indent": ["warn", "tab"],
"@stylistic/js/quotes": ["warn", "double"], "@stylistic/js/quotes": ["warn", "double"],
"@stylistic/js/semi": "warn", "@stylistic/js/semi": "warn",

View file

@ -121,7 +121,7 @@ export function setup(app) {
return; return;
} }
candidates = candidates.filter((binding) => { candidates = candidates.filter((binding) => {
return Boolean(binding.altKey) === event.altKey && Boolean(binding.ctrlKey) === event.ctrlKey; return !!binding.altKey === event.altKey && !!binding.ctrlKey === event.ctrlKey;
}); });
if (candidates.length !== 1) { if (candidates.length !== 1) {
return; return;

View file

@ -853,7 +853,7 @@ export default class Client extends EventTarget {
} }
let msg = { let msg = {
command: "JOIN", command: "JOIN",
params, params: params,
}; };
return this.roundtrip(msg, (msg) => { return this.roundtrip(msg, (msg) => {
switch (msg.command) { switch (msg.command) {
@ -940,7 +940,7 @@ export default class Client extends EventTarget {
} }
if (messages.length >= max) { if (messages.length >= max) {
// There are still more messages to fetch // There are still more messages to fetch
after = { ...after, time: messages[messages.length - 1].tags.time }; after.time = messages[messages.length - 1].tags.time;
return await this.fetchHistoryBetween(target, after, before, limit); return await this.fetchHistoryBetween(target, after, before, limit);
} }
return { messages }; return { messages };

View file

@ -634,7 +634,7 @@ export const State = {
return updateUser(msg.prefix.name, { account }); return updateUser(msg.prefix.name, { account });
case "AWAY": case "AWAY":
let awayMessage = msg.params[0]; let awayMessage = msg.params[0];
return updateUser(msg.prefix.name, { away: Boolean(awayMessage) }); return updateUser(msg.prefix.name, { away: !!awayMessage });
case "TOPIC": case "TOPIC":
channel = msg.params[0]; channel = msg.params[0];
topic = msg.params[1]; topic = msg.params[1];