diff --git a/catgirl.1 b/catgirl.1 index 95e3ecd..0dbed23 100644 --- a/catgirl.1 +++ b/catgirl.1 @@ -123,6 +123,9 @@ may be used to abbreviate a command. .It Ic /join Ar chan Op Ar key Join a channel. . +.It Ic /list Op Ar chan +List channels. +. .It Ic /me Op Ar action Send an action message. . diff --git a/handle.c b/handle.c index e59960b..1364422 100644 --- a/handle.c +++ b/handle.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2018 Curtis McEnroe +/* Copyright (C) 2018, 2019 Curtis McEnroe * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as published by @@ -157,6 +157,35 @@ static void handleReplyMOTD(char *prefix, char *params) { uiFmt(TagStatus, UICold, "%s", mesg); } +static void handleReplyList(char *prefix, char *params) { + char *chan, *count, *topic; + parse(prefix, NULL, NULL, NULL, params, 4, 0, NULL, &chan, &count, &topic); + if (topic[0] == '[') { + char *skip = strstr(topic, "] "); + if (skip) topic = &skip[2]; + } + const char *people = (strcmp(count, "1") ? "people" : "person"); + if (topic[0]) { + uiFmt( + TagStatus, UIWarm, + "You see %s %s in \3%d%s\3 under the banner, \"%s\"", + count, people, colorGen(chan), chan, topic + ); + } else { + uiFmt( + TagStatus, UIWarm, + "You see %s %s in \3%d%s\3", + count, people, colorGen(chan), chan + ); + } +} + +static void handleReplyListEnd(char *prefix, char *params) { + (void)prefix; + (void)params; + uiLog(TagStatus, UICold, L"You don't see anyone else"); +} + static enum IRCColor whoisColor; static void handleReplyWhoisUser(char *prefix, char *params) { char *nick, *user, *host, *real; @@ -499,6 +528,8 @@ static const struct { { "315", handleReplyEndOfWho }, { "317", handleReplyWhoisIdle }, { "319", handleReplyWhoisChannels }, + { "322", handleReplyList }, + { "323", handleReplyListEnd }, { "332", handleReplyTopic }, { "352", handleReplyWho }, { "366", handleReplyEndOfNames }, diff --git a/input.c b/input.c index 81ff1cf..c4f707e 100644 --- a/input.c +++ b/input.c @@ -50,6 +50,16 @@ static void inputJoin(struct Tag tag, char *params) { } } +static void inputList(struct Tag tag, char *params) { + (void)tag; + char *chan = strsep(¶ms, " "); + if (chan) { + ircFmt("LIST %s\r\n", chan); + } else { + ircFmt("LIST\r\n"); + } +} + static void inputMe(struct Tag tag, char *params) { privmsg(tag, true, params ? params : ""); } @@ -189,6 +199,7 @@ static const struct { { "/close", inputClose }, { "/help", inputMan }, { "/join", inputJoin }, + { "/list", inputList }, { "/man", inputMan }, { "/me", inputMe }, { "/move", inputMove },