Specify commands which depend on caps

Currently only /setname.
master
June McEnroe 2022-02-26 15:51:42 -05:00
parent b7fe705c91
commit b6c7280649
3 changed files with 53 additions and 49 deletions

3
chat.c
View File

@ -1,4 +1,4 @@
/* Copyright (C) 2020 C. McEnroe <june@causal.agency>
/* Copyright (C) 2020 June McEnroe <june@causal.agency>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@ -371,7 +371,6 @@ int main(int argc, char *argv[]) {
set(&network.name, host);
set(&self.nick, "*");
commandCompleteAdd();
inputCompleteAdd();
ircConfig(insecure, trust, cert, priv);

View File

@ -537,53 +537,54 @@ static const struct Handler {
const char *cmd;
Command *fn;
enum Flag flags;
enum Cap caps;
} Commands[] = {
{ "/away", commandAway, 0 },
{ "/ban", commandBan, 0 },
{ "/close", commandClose, 0 },
{ "/copy", commandCopy, Restrict | Kiosk },
{ "/cs", commandCS, 0 },
{ "/debug", commandDebug, Kiosk },
{ "/deop", commandDeop, 0 },
{ "/devoice", commandDevoice, 0 },
{ "/except", commandExcept, 0 },
{ "/exec", commandExec, Multiline | Restrict | Kiosk },
{ "/help", commandHelp, 0 }, // Restrict special case.
{ "/highlight", commandHighlight, 0 },
{ "/ignore", commandIgnore, 0 },
{ "/invex", commandInvex, 0 },
{ "/invite", commandInvite, 0 },
{ "/join", commandJoin, Kiosk },
{ "/kick", commandKick, 0 },
{ "/list", commandList, Kiosk },
{ "/me", commandMe, Multiline },
{ "/mode", commandMode, 0 },
{ "/move", commandMove, 0 },
{ "/msg", commandMsg, Multiline | Kiosk },
{ "/names", commandNames, 0 },
{ "/nick", commandNick, 0 },
{ "/notice", commandNotice, Multiline },
{ "/ns", commandNS, 0 },
{ "/o", commandOpen, Restrict | Kiosk },
{ "/op", commandOp, 0 },
{ "/open", commandOpen, Restrict | Kiosk },
{ "/ops", commandOps, 0 },
{ "/part", commandPart, Kiosk },
{ "/query", commandQuery, Kiosk },
{ "/quit", commandQuit, 0 },
{ "/quote", commandQuote, Multiline | Kiosk },
{ "/say", commandPrivmsg, Multiline },
{ "/setname", commandSetname, 0 },
{ "/topic", commandTopic, 0 },
{ "/unban", commandUnban, 0 },
{ "/unexcept", commandUnexcept, 0 },
{ "/unhighlight", commandUnhighlight, 0 },
{ "/unignore", commandUnignore, 0 },
{ "/uninvex", commandUninvex, 0 },
{ "/voice", commandVoice, 0 },
{ "/whois", commandWhois, 0 },
{ "/whowas", commandWhowas, 0 },
{ "/window", commandWindow, 0 },
{ "/away", commandAway, 0, 0 },
{ "/ban", commandBan, 0, 0 },
{ "/close", commandClose, 0, 0 },
{ "/copy", commandCopy, Restrict | Kiosk, 0 },
{ "/cs", commandCS, 0, 0 },
{ "/debug", commandDebug, Kiosk, 0 },
{ "/deop", commandDeop, 0, 0 },
{ "/devoice", commandDevoice, 0, 0 },
{ "/except", commandExcept, 0, 0 },
{ "/exec", commandExec, Multiline | Restrict | Kiosk, 0 },
{ "/help", commandHelp, 0, 0 }, // Restrict special case.
{ "/highlight", commandHighlight, 0, 0 },
{ "/ignore", commandIgnore, 0, 0 },
{ "/invex", commandInvex, 0, 0 },
{ "/invite", commandInvite, 0, 0 },
{ "/join", commandJoin, Kiosk, 0 },
{ "/kick", commandKick, 0, 0 },
{ "/list", commandList, Kiosk, 0 },
{ "/me", commandMe, Multiline, 0 },
{ "/mode", commandMode, 0, 0 },
{ "/move", commandMove, 0, 0 },
{ "/msg", commandMsg, Multiline | Kiosk, 0 },
{ "/names", commandNames, 0, 0 },
{ "/nick", commandNick, 0, 0 },
{ "/notice", commandNotice, Multiline, 0 },
{ "/ns", commandNS, 0, 0 },
{ "/o", commandOpen, Restrict | Kiosk, 0 },
{ "/op", commandOp, 0, 0 },
{ "/open", commandOpen, Restrict | Kiosk, 0 },
{ "/ops", commandOps, 0, 0 },
{ "/part", commandPart, Kiosk, 0 },
{ "/query", commandQuery, Kiosk, 0 },
{ "/quit", commandQuit, 0, 0 },
{ "/quote", commandQuote, Multiline | Kiosk, 0 },
{ "/say", commandPrivmsg, Multiline, 0 },
{ "/setname", commandSetname, 0, CapSetname },
{ "/topic", commandTopic, 0, 0 },
{ "/unban", commandUnban, 0, 0 },
{ "/unexcept", commandUnexcept, 0, 0 },
{ "/unhighlight", commandUnhighlight, 0, 0 },
{ "/unignore", commandUnignore, 0, 0 },
{ "/uninvex", commandUninvex, 0, 0 },
{ "/voice", commandVoice, 0, 0 },
{ "/whois", commandWhois, 0, 0 },
{ "/whowas", commandWhowas, 0, 0 },
{ "/window", commandWindow, 0, 0 },
};
static int compar(const void *cmd, const void *_handler) {
@ -642,6 +643,9 @@ size_t commandWillSplit(uint id, const char *input) {
static bool commandAvailable(const struct Handler *handler) {
if (handler->flags & Restrict && self.restricted) return false;
if (handler->flags & Kiosk && self.kiosk) return false;
if (handler->caps && (handler->caps & self.caps) != handler->caps) {
return false;
}
return true;
}

View File

@ -1,4 +1,4 @@
/* Copyright (C) 2020 C. McEnroe <june@causal.agency>
/* Copyright (C) 2020 June McEnroe <june@causal.agency>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@ -254,6 +254,7 @@ static void handleReplyWelcome(struct Message *msg) {
replies[ReplyTopicAuto] += count;
replies[ReplyNamesAuto] += count;
}
commandCompleteAdd();
}
static void handleReplyISupport(struct Message *msg) {