Specify commands which depend on caps
Currently only /setname.
This commit is contained in:
		
							parent
							
								
									b7fe705c91
								
							
						
					
					
						commit
						b6c7280649
					
				
							
								
								
									
										3
									
								
								chat.c
									
									
									
									
									
								
							
							
						
						
									
										3
									
								
								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
 | 
					 * 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
 | 
					 * 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(&network.name, host);
 | 
				
			||||||
	set(&self.nick, "*");
 | 
						set(&self.nick, "*");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	commandCompleteAdd();
 | 
					 | 
				
			||||||
	inputCompleteAdd();
 | 
						inputCompleteAdd();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	ircConfig(insecure, trust, cert, priv);
 | 
						ircConfig(insecure, trust, cert, priv);
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										96
									
								
								command.c
									
									
									
									
									
								
							
							
						
						
									
										96
									
								
								command.c
									
									
									
									
									
								
							@ -537,53 +537,54 @@ static const struct Handler {
 | 
				
			|||||||
	const char *cmd;
 | 
						const char *cmd;
 | 
				
			||||||
	Command *fn;
 | 
						Command *fn;
 | 
				
			||||||
	enum Flag flags;
 | 
						enum Flag flags;
 | 
				
			||||||
 | 
						enum Cap caps;
 | 
				
			||||||
} Commands[] = {
 | 
					} Commands[] = {
 | 
				
			||||||
	{ "/away", commandAway, 0 },
 | 
						{ "/away", commandAway, 0, 0 },
 | 
				
			||||||
	{ "/ban", commandBan, 0 },
 | 
						{ "/ban", commandBan, 0, 0 },
 | 
				
			||||||
	{ "/close", commandClose, 0 },
 | 
						{ "/close", commandClose, 0, 0 },
 | 
				
			||||||
	{ "/copy", commandCopy, Restrict | Kiosk },
 | 
						{ "/copy", commandCopy, Restrict | Kiosk, 0 },
 | 
				
			||||||
	{ "/cs", commandCS, 0 },
 | 
						{ "/cs", commandCS, 0, 0 },
 | 
				
			||||||
	{ "/debug", commandDebug, Kiosk },
 | 
						{ "/debug", commandDebug, Kiosk, 0 },
 | 
				
			||||||
	{ "/deop", commandDeop, 0 },
 | 
						{ "/deop", commandDeop, 0, 0 },
 | 
				
			||||||
	{ "/devoice", commandDevoice, 0 },
 | 
						{ "/devoice", commandDevoice, 0, 0 },
 | 
				
			||||||
	{ "/except", commandExcept, 0 },
 | 
						{ "/except", commandExcept, 0, 0 },
 | 
				
			||||||
	{ "/exec", commandExec, Multiline | Restrict | Kiosk },
 | 
						{ "/exec", commandExec, Multiline | Restrict | Kiosk, 0 },
 | 
				
			||||||
	{ "/help", commandHelp, 0 }, // Restrict special case.
 | 
						{ "/help", commandHelp, 0, 0 }, // Restrict special case.
 | 
				
			||||||
	{ "/highlight", commandHighlight, 0 },
 | 
						{ "/highlight", commandHighlight, 0, 0 },
 | 
				
			||||||
	{ "/ignore", commandIgnore, 0 },
 | 
						{ "/ignore", commandIgnore, 0, 0 },
 | 
				
			||||||
	{ "/invex", commandInvex, 0 },
 | 
						{ "/invex", commandInvex, 0, 0 },
 | 
				
			||||||
	{ "/invite", commandInvite, 0 },
 | 
						{ "/invite", commandInvite, 0, 0 },
 | 
				
			||||||
	{ "/join", commandJoin, Kiosk },
 | 
						{ "/join", commandJoin, Kiosk, 0 },
 | 
				
			||||||
	{ "/kick", commandKick, 0 },
 | 
						{ "/kick", commandKick, 0, 0 },
 | 
				
			||||||
	{ "/list", commandList, Kiosk },
 | 
						{ "/list", commandList, Kiosk, 0 },
 | 
				
			||||||
	{ "/me", commandMe, Multiline },
 | 
						{ "/me", commandMe, Multiline, 0 },
 | 
				
			||||||
	{ "/mode", commandMode, 0 },
 | 
						{ "/mode", commandMode, 0, 0 },
 | 
				
			||||||
	{ "/move", commandMove, 0 },
 | 
						{ "/move", commandMove, 0, 0 },
 | 
				
			||||||
	{ "/msg", commandMsg, Multiline | Kiosk },
 | 
						{ "/msg", commandMsg, Multiline | Kiosk, 0 },
 | 
				
			||||||
	{ "/names", commandNames, 0 },
 | 
						{ "/names", commandNames, 0, 0 },
 | 
				
			||||||
	{ "/nick", commandNick, 0 },
 | 
						{ "/nick", commandNick, 0, 0 },
 | 
				
			||||||
	{ "/notice", commandNotice, Multiline },
 | 
						{ "/notice", commandNotice, Multiline, 0 },
 | 
				
			||||||
	{ "/ns", commandNS, 0 },
 | 
						{ "/ns", commandNS, 0, 0 },
 | 
				
			||||||
	{ "/o", commandOpen, Restrict | Kiosk },
 | 
						{ "/o", commandOpen, Restrict | Kiosk, 0 },
 | 
				
			||||||
	{ "/op", commandOp, 0 },
 | 
						{ "/op", commandOp, 0, 0 },
 | 
				
			||||||
	{ "/open", commandOpen, Restrict | Kiosk },
 | 
						{ "/open", commandOpen, Restrict | Kiosk, 0 },
 | 
				
			||||||
	{ "/ops", commandOps, 0 },
 | 
						{ "/ops", commandOps, 0, 0 },
 | 
				
			||||||
	{ "/part", commandPart, Kiosk },
 | 
						{ "/part", commandPart, Kiosk, 0 },
 | 
				
			||||||
	{ "/query", commandQuery, Kiosk },
 | 
						{ "/query", commandQuery, Kiosk, 0 },
 | 
				
			||||||
	{ "/quit", commandQuit, 0 },
 | 
						{ "/quit", commandQuit, 0, 0 },
 | 
				
			||||||
	{ "/quote", commandQuote, Multiline | Kiosk },
 | 
						{ "/quote", commandQuote, Multiline | Kiosk, 0 },
 | 
				
			||||||
	{ "/say", commandPrivmsg, Multiline },
 | 
						{ "/say", commandPrivmsg, Multiline, 0 },
 | 
				
			||||||
	{ "/setname", commandSetname, 0 },
 | 
						{ "/setname", commandSetname, 0, CapSetname },
 | 
				
			||||||
	{ "/topic", commandTopic, 0 },
 | 
						{ "/topic", commandTopic, 0, 0 },
 | 
				
			||||||
	{ "/unban", commandUnban, 0 },
 | 
						{ "/unban", commandUnban, 0, 0 },
 | 
				
			||||||
	{ "/unexcept", commandUnexcept, 0 },
 | 
						{ "/unexcept", commandUnexcept, 0, 0 },
 | 
				
			||||||
	{ "/unhighlight", commandUnhighlight, 0 },
 | 
						{ "/unhighlight", commandUnhighlight, 0, 0 },
 | 
				
			||||||
	{ "/unignore", commandUnignore, 0 },
 | 
						{ "/unignore", commandUnignore, 0, 0 },
 | 
				
			||||||
	{ "/uninvex", commandUninvex, 0 },
 | 
						{ "/uninvex", commandUninvex, 0, 0 },
 | 
				
			||||||
	{ "/voice", commandVoice, 0 },
 | 
						{ "/voice", commandVoice, 0, 0 },
 | 
				
			||||||
	{ "/whois", commandWhois, 0 },
 | 
						{ "/whois", commandWhois, 0, 0 },
 | 
				
			||||||
	{ "/whowas", commandWhowas, 0 },
 | 
						{ "/whowas", commandWhowas, 0, 0 },
 | 
				
			||||||
	{ "/window", commandWindow, 0 },
 | 
						{ "/window", commandWindow, 0, 0 },
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static int compar(const void *cmd, const void *_handler) {
 | 
					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) {
 | 
					static bool commandAvailable(const struct Handler *handler) {
 | 
				
			||||||
	if (handler->flags & Restrict && self.restricted) return false;
 | 
						if (handler->flags & Restrict && self.restricted) return false;
 | 
				
			||||||
	if (handler->flags & Kiosk && self.kiosk) return false;
 | 
						if (handler->flags & Kiosk && self.kiosk) return false;
 | 
				
			||||||
 | 
						if (handler->caps && (handler->caps & self.caps) != handler->caps) {
 | 
				
			||||||
 | 
							return false;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
	return true;
 | 
						return true;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										3
									
								
								handle.c
									
									
									
									
									
								
							
							
						
						
									
										3
									
								
								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
 | 
					 * 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
 | 
					 * 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[ReplyTopicAuto] += count;
 | 
				
			||||||
		replies[ReplyNamesAuto] += count;
 | 
							replies[ReplyNamesAuto] += count;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
						commandCompleteAdd();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void handleReplyISupport(struct Message *msg) {
 | 
					static void handleReplyISupport(struct Message *msg) {
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user