From d34bff9ed6fb8258dbc1caf8b738581ee50c4729 Mon Sep 17 00:00:00 2001 From: Drew DeVault Date: Wed, 26 May 2021 19:28:24 -0400 Subject: [PATCH] Implement /kick and KICK handling in buffers --- commands.js | 16 ++++++++++++++++ components/app.js | 16 ++++++++++++++++ components/buffer.js | 5 +++++ 3 files changed, 37 insertions(+) diff --git a/commands.js b/commands.js index 0459ac6..5359f69 100644 --- a/commands.js +++ b/commands.js @@ -56,6 +56,22 @@ export default { getActiveClient(app).send({ command: "JOIN", params: [channel] }); }, }, + "kick": { + usage: "", + description: "Remove a user from the channel", + execute: (app, args) => { + var user = args[0]; + 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, user]; + if (args.length > 1) { + params.push(args.slice(1).join(" ")); + } + getActiveClient(app).send({ command: "KICK", params }); + }, + }, "me": { usage: "", description: "Send an action message to the current buffer", diff --git a/components/app.js b/components/app.js index 99a47fe..6d3b706 100644 --- a/components/app.js +++ b/components/app.js @@ -690,6 +690,22 @@ export default class App extends Component { }); this.addMessage(netID, channel, msg); + if (msg.prefix.name == client.nick) { + this.receipts.delete(channel); + this.saveReceipts(); + } + break; + case "KICK": + var channel = msg.params[0]; + var user = msg.params[1]; + + this.setBufferState({ network: netID, name: channel }, (buf) => { + var members = new Map(buf.members); + members.delete(user); + return { members }; + }); + this.addMessage(netID, channel, msg); + if (msg.prefix.name == client.nick) { this.receipts.delete(channel); this.saveReceipts(); diff --git a/components/buffer.js b/components/buffer.js index de8c09a..8723656 100644 --- a/components/buffer.js +++ b/components/buffer.js @@ -94,6 +94,11 @@ class LogLine extends Component { ${createNick(msg.prefix.name)} has left `; break; + case "KICK": + content = html` + ${createNick(msg.params[1])} was kicked by ${createNick(msg.prefix.name)} (${msg.params.slice(2)}) + `; + break; case "QUIT": content = html` ${createNick(msg.prefix.name)} has quit