Generate /ops from cache
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…
Reference in New Issue