Generate /ops from cache
This commit is contained in:
		
							parent
							
								
									d043bad63d
								
							
						
					
					
						commit
						fcbe7af1e2
					
				
							
								
								
									
										13
									
								
								chat.h
									
									
									
									
									
								
							
							
						
						
									
										13
									
								
								chat.h
									
									
									
									
									
								
							| @ -168,6 +168,19 @@ extern struct Network { | ||||
| 	char invex; | ||||
| } network; | ||||
| 
 | ||||
| static inline uint prefixBit(char p) { | ||||
| 	char *s = strchr(network.prefixes, p); | ||||
| 	if (!s) return 0; | ||||
| 	return 1 << (s - network.prefixes); | ||||
| } | ||||
| 
 | ||||
| static inline char bitPrefix(uint p) { | ||||
| 	for (uint i = 0; network.prefixes[i]; ++i) { | ||||
| 		if (p & (1 << i)) return network.prefixes[i]; | ||||
| 	} | ||||
| 	return '\0'; | ||||
| } | ||||
| 
 | ||||
| #define ENUM_CAP \ | ||||
| 	X("causal.agency/consumer", CapConsumer) \ | ||||
| 	X("chghost", CapChghost) \ | ||||
|  | ||||
							
								
								
									
										27
									
								
								command.c
									
									
									
									
									
								
							
							
						
						
									
										27
									
								
								command.c
									
									
									
									
									
								
							| @ -219,8 +219,31 @@ static void commandNames(uint id, char *params) { | ||||
| 
 | ||||
| static void commandOps(uint id, char *params) { | ||||
| 	(void)params; | ||||
| 	ircFormat("WHO %s\r\n", idNames[id]); | ||||
| 	replies[ReplyWho]++; | ||||
| 	char buf[1024]; | ||||
| 	char *ptr = buf, *end = &buf[sizeof(buf)]; | ||||
| 	ptr = seprintf( | ||||
| 		ptr, end, "The council of \3%02d%s\3 are ", | ||||
| 		idColors[id], idNames[id] | ||||
| 	); | ||||
| 	bool first = true; | ||||
| 	struct Cursor curs = {0}; | ||||
| 	for (const char *nick; (nick = cacheNextKey(&curs, id));) { | ||||
| 		char prefix = bitPrefix(curs.entry->prefixBits); | ||||
| 		if (!prefix || prefix == '+') continue; | ||||
| 		ptr = seprintf( | ||||
| 			ptr, end, "%s\3%02d%c%s\3", | ||||
| 			(first ? "" : ", "), curs.entry->color, prefix, nick | ||||
| 		); | ||||
| 		first = false; | ||||
| 	} | ||||
| 	if (first) { | ||||
| 		uiFormat( | ||||
| 			id, Warm, NULL, "\3%02d%s\3 is a lawless wasteland", | ||||
| 			idColors[id], idNames[id] | ||||
| 		); | ||||
| 	} else { | ||||
| 		uiWrite(id, Warm, NULL, buf); | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| static void commandInvite(uint id, char *params) { | ||||
|  | ||||
							
								
								
									
										6
									
								
								handle.c
									
									
									
									
									
								
							
							
						
						
									
										6
									
								
								handle.c
									
									
									
									
									
								
							| @ -560,12 +560,6 @@ static void handleErrorUserOnChannel(struct Message *msg) { | ||||
| 	); | ||||
| } | ||||
| 
 | ||||
| static uint prefixBit(char p) { | ||||
| 	char *s = strchr(network.prefixes, p); | ||||
| 	if (!s) return 0; | ||||
| 	return 1 << (s - network.prefixes); | ||||
| } | ||||
| 
 | ||||
| static void handleReplyNames(struct Message *msg) { | ||||
| 	require(msg, false, 4); | ||||
| 	uint id = idFor(msg->params[2]); | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user