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; | 	char invex; | ||||||
| } network; | } 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 \ | #define ENUM_CAP \ | ||||||
| 	X("causal.agency/consumer", CapConsumer) \ | 	X("causal.agency/consumer", CapConsumer) \ | ||||||
| 	X("chghost", CapChghost) \ | 	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) { | static void commandOps(uint id, char *params) { | ||||||
| 	(void)params; | 	(void)params; | ||||||
| 	ircFormat("WHO %s\r\n", idNames[id]); | 	char buf[1024]; | ||||||
| 	replies[ReplyWho]++; | 	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) { | 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) { | static void handleReplyNames(struct Message *msg) { | ||||||
| 	require(msg, false, 4); | 	require(msg, false, 4); | ||||||
| 	uint id = idFor(msg->params[2]); | 	uint id = idFor(msg->params[2]); | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user