mirror of
https://codeberg.org/emersion/gamja.git
synced 2024-11-22 15:27:55 -05:00
Compare commits
No commits in common. "2f1bf8a2fe87660a37cf92a179f590c8493ee983" and "8ff1cd83179b8c00cd892581322e92d9d5a8b70d" have entirely different histories.
2f1bf8a2fe
...
8ff1cd8317
6 changed files with 46 additions and 86 deletions
116
commands.js
116
commands.js
|
@ -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]));
|
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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",
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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 };
|
||||||
|
|
2
state.js
2
state.js
|
@ -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];
|
||||||
|
|
Loading…
Reference in a new issue