diff options
author | C. McEnroe | 2020-02-08 00:25:09 -0500 |
---|---|---|
committer | C. McEnroe | 2020-02-08 00:25:09 -0500 |
commit | 7ebfeea33041f3d438e2de84760af950000393db (patch) | |
tree | 33b4abec74c4c3b0760b68fa9d150e6ec10b336c | |
parent | 55173ef29777959b0b761097499e3eef397de609 (diff) |
Handle NAMES reply
-rw-r--r-- | handle.c | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/handle.c b/handle.c index fe64f33..44329ff 100644 --- a/handle.c +++ b/handle.c @@ -14,6 +14,7 @@ * along with this program. If not, see <https://www.gnu.org/licenses/>. */ +#include <assert.h> #include <ctype.h> #include <err.h> #include <stdbool.h> @@ -225,6 +226,32 @@ static void handlePart(struct Message *msg) { ); } +static void handleReplyNames(struct Message *msg) { + require(msg, false, 4); + size_t id = idFor(msg->params[2]); + char buf[1024]; + size_t len = 0; + while (msg->params[3]) { + char *name = strsep(&msg->params[3], " "); + name += strspn(name, self.prefixes); + char *nick = strsep(&name, "!"); + char *user = strsep(&name, "@"); + enum Color color = (user ? hash(user) : Default); + completeAdd(id, nick, color); + int n = snprintf( + &buf[len], sizeof(buf) - len, + "%s\3%02d%s\3", (len ? ", " : ""), color, nick + ); + assert(n > 0 && len + n < sizeof(buf)); + len += n; + } + uiFormat( + id, Cold, tagTime(msg), + "In \3%02d%s\3 are %s", + hash(msg->params[2]), msg->params[2], buf + ); +} + static void handleReplyNoTopic(struct Message *msg) { require(msg, false, 2); uiFormat( @@ -359,6 +386,7 @@ static const struct Handler { { "005", handleReplyISupport }, { "331", handleReplyNoTopic }, { "332", handleReplyTopic }, + { "353", handleReplyNames }, { "372", handleReplyMOTD }, { "432", handleErrorErroneousNickname }, { "433", handleErrorNicknameInUse }, |