From c609684d2bb7b3e544225b49b748f9a6fa15b4f0 Mon Sep 17 00:00:00 2001 From: Curtis McEnroe Date: Fri, 3 Aug 2018 18:58:19 -0400 Subject: Send a WHO in response to NAMES to get usernames Other than this slight hack, I think coloring by username rather than nick is a much better idea. --- chat.c | 36 +++++++++++++++++++++++++++++++----- 1 file changed, 31 insertions(+), 5 deletions(-) diff --git a/chat.c b/chat.c index 0303004..7058802 100644 --- a/chat.c +++ b/chat.c @@ -294,14 +294,38 @@ static void handleTopic(char *prefix, char *params) { uiTopic(topic); } -static void handle353(char *prefix, char *params) { +static void handle366(char *prefix, char *params) { (void)prefix; shift(¶ms); + char *chan = shift(¶ms); + clientFmt("WHO %s\r\n", chan); +} + +static char whoBuf[4096]; +static size_t whoLen; +static void handle352(char *prefix, char *params) { + (void)prefix; + shift(¶ms); + shift(¶ms); + char *user = shift(¶ms); + shift(¶ms); + shift(¶ms); + char *nick = shift(¶ms); + whoLen += snprintf( + &whoBuf[whoLen], sizeof(whoBuf) - whoLen, + "%s\3%d%s\3", + (whoLen ? ", " : ""), color(user), nick + ); +} +static void handle315(char *prefix, char *params) { + (void)prefix; shift(¶ms); char *chan = shift(¶ms); - char *names = shift(¶ms); - // TODO: Do a WHO instead to get usernames - uiFmt("In %s are %s", chan, names); + whoLen = 0; + uiFmt( + "In \3%d%s\3 are %s", + color(chan), chan, whoBuf + ); } static void handlePrivmsg(char *prefix, char *params) { @@ -324,8 +348,10 @@ static const struct { Handler handler; } HANDLERS[] = { { "001", handle001 }, + { "315", handle315 }, { "332", handle332 }, - { "353", handle353 }, + { "352", handle352 }, + { "366", handle366 }, { "JOIN", handleJoin }, { "NOTICE", handleNotice }, { "PART", handlePart }, -- cgit 1.4.1-2-gfad0