mirror of
https://codeberg.org/emersion/gamja.git
synced 2024-11-14 19:05:01 -05:00
101 lines
2.7 KiB
JavaScript
101 lines
2.7 KiB
JavaScript
import { SERVER_BUFFER, BufferType } from "./state.js";
|
|
|
|
function getActiveClient(app) {
|
|
var buf = app.state.buffers.get(app.state.activeBuffer);
|
|
if (!buf) {
|
|
return null;
|
|
}
|
|
return app.clients.get(buf.network);
|
|
}
|
|
|
|
export default {
|
|
"quit": (app, args) => {
|
|
if (window.localStorage) {
|
|
localStorage.removeItem("autoconnect");
|
|
}
|
|
app.close({ name: SERVER_BUFFER });
|
|
},
|
|
"query": (app, args) => {
|
|
var nick = args[0];
|
|
if (!nick) {
|
|
throw new Error("Missing nickname");
|
|
}
|
|
app.open(nick);
|
|
},
|
|
"close": (app, args) => {
|
|
var activeBuffer = app.state.buffers.get(app.state.activeBuffer);
|
|
if (!activeBuffer || activeBuffer.type == BufferType.SERVER) {
|
|
throw new Error("Not in a user or channel buffer");
|
|
}
|
|
app.close(activeBuffer.id);
|
|
},
|
|
"join": (app, args) => {
|
|
var channel = args[0];
|
|
if (!channel) {
|
|
throw new Error("Missing channel name");
|
|
}
|
|
getActiveClient(app).send({ command: "JOIN", params: [channel] });
|
|
},
|
|
"part": (app, args) => {
|
|
var reason = args.join(" ");
|
|
var activeBuffer = app.state.buffers.get(app.state.activeBuffer);
|
|
if (!activeBuffer || !app.isChannel(activeBuffer.name)) {
|
|
throw new Error("Not in a channel");
|
|
}
|
|
var params = [activeBuffer.name];
|
|
if (reason) {
|
|
params.push(reason);
|
|
}
|
|
getActiveClient(app).send({ command: "PART", params });
|
|
},
|
|
"msg": (app, args) => {
|
|
var target = args[0];
|
|
var text = args.slice(1).join(" ");
|
|
getActiveClient(app).send({ command: "PRIVMSG", params: [target, text] });
|
|
},
|
|
"me": (app, args) => {
|
|
var action = args.join(" ");
|
|
var activeBuffer = app.state.buffers.get(app.state.activeBuffer);
|
|
if (!activeBuffer) {
|
|
throw new Error("Not in a buffer");
|
|
}
|
|
var text = `\x01ACTION ${action}\x01`;
|
|
app.privmsg(activeBuffer.name, text);
|
|
},
|
|
"nick": (app, args) => {
|
|
var newNick = args[0];
|
|
getActiveClient(app).send({ command: "NICK", params: [newNick] });
|
|
},
|
|
"notice": (app, args) => {
|
|
var target = args[0];
|
|
var text = args.slice(1).join(" ");
|
|
getActiveClient(app).send({ command: "NOTICE", params: [target, text] });
|
|
},
|
|
"buffer": (app, args) => {
|
|
var name = args[0];
|
|
for (var buf of app.state.buffers.values()) {
|
|
if (buf.name === name) {
|
|
app.switchBuffer(buf);
|
|
return;
|
|
}
|
|
}
|
|
throw new Error("Unknown buffer");
|
|
},
|
|
"topic": (app, args) => {
|
|
var activeBuffer = app.state.buffers.get(app.state.activeBuffer);
|
|
if (!activeBuffer || !app.isChannel(activeBuffer.name)) {
|
|
throw new Error("Not in a channel");
|
|
}
|
|
var params = [activeBuffer.name];
|
|
if (args.length > 0) {
|
|
params.push(args.join(" "));
|
|
}
|
|
getActiveClient(app).send({ command: "TOPIC", params });
|
|
},
|
|
"reconnect": (app, args) => {
|
|
app.reconnect();
|
|
},
|
|
"disconnect": (app, args) => {
|
|
app.disconnect();
|
|
},
|
|
};
|