diff options
-rw-r--r-- | chat.c | 36 |
1 files 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 }, |