summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorC. McEnroe2020-03-22 11:26:16 -0400
committerC. McEnroe2020-03-22 11:26:16 -0400
commit61828a12e9651fb672331df400ebd4120673852a (patch)
tree2d20bc122f411acde9a094e0821d76c40792dcca
parent8da45d918333e9ca74f645e899f757c6a9925fe8 (diff)
Handle user mode changes
-rw-r--r--handle.c19
1 files changed, 18 insertions, 1 deletions
diff --git a/handle.c b/handle.c
index b0f94d4..4392094 100644
--- a/handle.c
+++ b/handle.c
@@ -539,8 +539,25 @@ static const char *ChanModes[256] = {
static void handleMode(struct Message *msg) {
require(msg, true, 2);
+
if (!strchr(network.chanTypes, msg->params[0][0])) {
- // TODO: User mode changes.
+ bool set = true;
+ char buf[1024] = "";
+ for (char *ch = msg->params[1]; *ch; ++ch) {
+ if (*ch == '+') { set = true; continue; }
+ if (*ch == '-') { set = false; continue; }
+ const char *name = UserModes[(byte)*ch];
+ if (!name) name = (const char[]) { "-+"[set], *ch, '\0' };
+ catf(
+ buf, sizeof(buf), ", %ssets \3%02d%s\3 %s",
+ (set ? "" : "un"), self.color, msg->params[0], name
+ );
+ }
+ if (!buf[0]) return;
+ uiFormat(
+ Network, Warm, tagTime(msg),
+ "\3%02d%s\3\t%s", hash(msg->user), msg->nick, &buf[2]
+ );
return;
}