diff options
| author | June McEnroe | 2022-02-26 15:51:42 -0500 | 
|---|---|---|
| committer | June McEnroe | 2022-02-26 15:51:42 -0500 | 
| commit | b6c72806498e95cb08606a7ec46742e5439d3348 (patch) | |
| tree | 08345aae3fa8e302454b627113fab94494f9d3e5 /command.c | |
| parent | b7fe705c9143a8bae6b0e87e62c9568265291484 (diff) | |
Specify commands which depend on caps
Currently only /setname.
Diffstat (limited to 'command.c')
| -rw-r--r-- | command.c | 96 | 
1 files changed, 50 insertions, 46 deletions
@@ -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;  }  | 
