diff options
author | June McEnroe <june@causal.agency> | 2022-09-11 17:34:41 -0400 |
---|---|---|
committer | June McEnroe <june@causal.agency> | 2022-09-11 17:34:41 -0400 |
commit | fcbe7af1e2ac2abb71251a51f5384d22cad9a87a (patch) | |
tree | e5583b434defc629f35cf286f69413a1787a610e | |
parent | Set pointer to Entry in Cursor (diff) | |
download | catgirl-fcbe7af1e2ac2abb71251a51f5384d22cad9a87a.tar.gz catgirl-fcbe7af1e2ac2abb71251a51f5384d22cad9a87a.zip |
Generate /ops from cache
-rw-r--r-- | chat.h | 13 | ||||
-rw-r--r-- | command.c | 27 | ||||
-rw-r--r-- | handle.c | 6 |
3 files changed, 38 insertions, 8 deletions
diff --git a/chat.h b/chat.h index c7053c7..198b84e 100644 --- a/chat.h +++ b/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) \ diff --git a/command.c b/command.c index 3acbe76..4fb58da 100644 --- a/command.c +++ b/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) { diff --git a/handle.c b/handle.c index a075d02..cebc7e4 100644 --- a/handle.c +++ b/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]); |