summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJune McEnroe2022-02-26 15:51:42 -0500
committerJune McEnroe2022-02-26 15:51:42 -0500
commitb6c72806498e95cb08606a7ec46742e5439d3348 (patch)
tree08345aae3fa8e302454b627113fab94494f9d3e5
parentb7fe705c9143a8bae6b0e87e62c9568265291484 (diff)
Specify commands which depend on caps
Currently only /setname.
-rw-r--r--chat.c3
-rw-r--r--command.c96
-rw-r--r--handle.c3
3 files changed, 53 insertions, 49 deletions
diff --git a/chat.c b/chat.c
index b085165..b74fdc0 100644
--- a/chat.c
+++ b/chat.c
@@ -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);
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;
}
diff --git a/handle.c b/handle.c
index 9f051c7..388a122 100644
--- a/handle.c
+++ b/handle.c
@@ -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) {