summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--handle.c27
1 files changed, 27 insertions, 0 deletions
diff --git a/handle.c b/handle.c
index 4b15517..f374e36 100644
--- a/handle.c
+++ b/handle.c
@@ -496,6 +496,32 @@ static void handleTopic(struct Message *msg) {
}
}
+static const char *UserModes[256] = {
+ ['O'] = "local oper",
+ ['i'] = "invisible",
+ ['o'] = "oper",
+ ['r'] = "registered",
+ ['w'] = "wallops",
+};
+
+static void handleReplyUserModeIs(struct Message *msg) {
+ require(msg, false, 2);
+ char buf[1024] = "";
+ for (char *ch = msg->params[1]; *ch; ++ch) {
+ if (*ch == '+') continue;
+ if (UserModes[(byte)*ch]) {
+ catf(buf, sizeof(buf), ", %s", UserModes[(byte)*ch]);
+ } else {
+ catf(buf, sizeof(buf), ", mode %c", *ch);
+ }
+ }
+ uiFormat(
+ Network, Warm, tagTime(msg),
+ "\3%02d%s\3\tis%s",
+ self.color, self.nick, (buf[0] ? &buf[1] : buf)
+ );
+}
+
static const char *ModeNames[256] = {
['i'] = "invite-only",
['k'] = "key",
@@ -960,6 +986,7 @@ static const struct Handler {
} Handlers[] = {
{ "001", handleReplyWelcome },
{ "005", handleReplyISupport },
+ { "221", handleReplyUserModeIs },
{ "276", handleReplyWhoisGeneric },
{ "301", handleReplyAway },
{ "305", handleReplyNowAway },