summaryrefslogtreecommitdiff
path: root/command.c
diff options
context:
space:
mode:
authorJune McEnroe2022-02-26 15:51:42 -0500
committerJune McEnroe2022-02-26 15:51:42 -0500
commitb6c72806498e95cb08606a7ec46742e5439d3348 (patch)
tree08345aae3fa8e302454b627113fab94494f9d3e5 /command.c
parentb7fe705c9143a8bae6b0e87e62c9568265291484 (diff)
Specify commands which depend on caps
Currently only /setname.
Diffstat (limited to 'command.c')
-rw-r--r--command.c96
1 files changed, 50 insertions, 46 deletions
diff --git a/command.c b/command.c
index 60281d9..f404498 100644
--- a/command.c
+++ b/command.c
@@ -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;
}