Rewrite mode formatting again and write to log
Going back to one line per mode change again because it's easier.master
parent
3dc998272e
commit
bb2f3c7a01
166
handle.c
166
handle.c
|
@ -575,16 +575,16 @@ static void handleReplyUserModeIs(struct Message *msg) {
|
||||||
char buf[1024] = "";
|
char buf[1024] = "";
|
||||||
for (char *ch = msg->params[1]; *ch; ++ch) {
|
for (char *ch = msg->params[1]; *ch; ++ch) {
|
||||||
if (*ch == '+') continue;
|
if (*ch == '+') continue;
|
||||||
if (UserModes[(byte)*ch]) {
|
const char *name = UserModes[(byte)*ch];
|
||||||
catf(buf, sizeof(buf), ", %s", UserModes[(byte)*ch]);
|
catf(
|
||||||
} else {
|
buf, sizeof(buf), ", +%c%s%s",
|
||||||
catf(buf, sizeof(buf), ", +%c", *ch);
|
*ch, (name ? " " : ""), (name ? name : "")
|
||||||
}
|
);
|
||||||
}
|
}
|
||||||
uiFormat(
|
uiFormat(
|
||||||
Network, Warm, tagTime(msg),
|
Network, Warm, tagTime(msg),
|
||||||
"\3%02d%s\3\tis %s",
|
"\3%02d%s\3\tis %s",
|
||||||
self.color, self.nick, (buf[0] ? &buf[2] : buf)
|
self.color, self.nick, (buf[0] ? &buf[2] : "modeless")
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -613,25 +613,28 @@ static void handleReplyChannelModeIs(struct Message *msg) {
|
||||||
for (char *ch = msg->params[2]; *ch; ++ch) {
|
for (char *ch = msg->params[2]; *ch; ++ch) {
|
||||||
if (*ch == '+') continue;
|
if (*ch == '+') continue;
|
||||||
const char *name = ChanModes[(byte)*ch];
|
const char *name = ChanModes[(byte)*ch];
|
||||||
if (!name) name = (const char[]) { '+', *ch, '\0' };
|
|
||||||
if (
|
if (
|
||||||
strchr(network.paramModes, *ch) ||
|
strchr(network.paramModes, *ch) ||
|
||||||
strchr(network.setParamModes, *ch)
|
strchr(network.setParamModes, *ch)
|
||||||
) {
|
) {
|
||||||
assert(param < ParamCap);
|
assert(param < ParamCap);
|
||||||
catf(
|
catf(
|
||||||
buf, sizeof(buf), ", has %s of %s",
|
buf, sizeof(buf), ", +%c%s%s %s",
|
||||||
name, msg->params[param++]
|
*ch, (name ? " " : ""), (name ? name : ""),
|
||||||
|
msg->params[param++]
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
catf(buf, sizeof(buf), ", is %s", name);
|
catf(
|
||||||
|
buf, sizeof(buf), ", +%c%s%s",
|
||||||
|
*ch, (name ? " " : ""), (name ? name : "")
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
uiFormat(
|
uiFormat(
|
||||||
idFor(msg->params[1]), Cold, tagTime(msg),
|
idFor(msg->params[1]), Cold, tagTime(msg),
|
||||||
"\3%02d%s\3\t%s",
|
"\3%02d%s\3\tis %s",
|
||||||
hash(msg->params[1]), msg->params[1],
|
hash(msg->params[1]), msg->params[1],
|
||||||
(buf[0] ? &buf[2] : "has no modes")
|
(buf[0] ? &buf[2] : "modeless")
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -640,109 +643,142 @@ static void handleMode(struct Message *msg) {
|
||||||
|
|
||||||
if (!strchr(network.chanTypes, msg->params[0][0])) {
|
if (!strchr(network.chanTypes, msg->params[0][0])) {
|
||||||
bool set = true;
|
bool set = true;
|
||||||
char buf[1024] = "";
|
|
||||||
for (char *ch = msg->params[1]; *ch; ++ch) {
|
for (char *ch = msg->params[1]; *ch; ++ch) {
|
||||||
if (*ch == '+') { set = true; continue; }
|
if (*ch == '+') { set = true; continue; }
|
||||||
if (*ch == '-') { set = false; continue; }
|
if (*ch == '-') { set = false; continue; }
|
||||||
const char *name = UserModes[(byte)*ch];
|
const char *name = UserModes[(byte)*ch];
|
||||||
if (!name) name = (const char[]) { "-+"[set], *ch, '\0' };
|
uiFormat(
|
||||||
catf(
|
Network, Warm, tagTime(msg),
|
||||||
buf, sizeof(buf), ", %ssets \3%02d%s\3 %s",
|
"\3%02d%s\3\t%ssets \3%02d%s\3 %c%c%s%s",
|
||||||
(set ? "" : "un"), self.color, msg->params[0], name
|
hash(msg->user), msg->nick,
|
||||||
|
(set ? "" : "un"),
|
||||||
|
self.color, msg->params[0],
|
||||||
|
set["-+"], *ch, (name ? " " : ""), (name ? name : "")
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
if (!buf[0]) return;
|
|
||||||
uiFormat(
|
|
||||||
Network, Warm, tagTime(msg),
|
|
||||||
"\3%02d%s\3\t%s", hash(msg->user), msg->nick, &buf[2]
|
|
||||||
);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint id = idFor(msg->params[0]);
|
uint id = idFor(msg->params[0]);
|
||||||
bool set = true;
|
bool set = true;
|
||||||
uint param = 2;
|
uint i = 2;
|
||||||
char buf[1024] = "";
|
|
||||||
|
|
||||||
for (char *ch = msg->params[1]; *ch; ++ch) {
|
for (char *ch = msg->params[1]; *ch; ++ch) {
|
||||||
if (*ch == '+') { set = true; continue; }
|
if (*ch == '+') { set = true; continue; }
|
||||||
if (*ch == '-') { set = false; continue; }
|
if (*ch == '-') { set = false; continue; }
|
||||||
|
|
||||||
|
const char *verb = (set ? "sets" : "unsets");
|
||||||
const char *name = ChanModes[(byte)*ch];
|
const char *name = ChanModes[(byte)*ch];
|
||||||
if (*ch == network.excepts) name = "except";
|
if (*ch == network.excepts) name = "except";
|
||||||
if (*ch == network.invex) name = "invite";
|
if (*ch == network.invex) name = "invite";
|
||||||
if (!name) name = (const char[]) { "-+"[set], *ch, '\0' };
|
const char *mode = (const char[]) {
|
||||||
|
set["-+"], *ch, (name ? ' ' : '\0'), '\0'
|
||||||
|
};
|
||||||
|
if (!name) name = "";
|
||||||
|
|
||||||
if (strchr(network.prefixModes, *ch)) {
|
if (strchr(network.prefixModes, *ch)) {
|
||||||
assert(param < ParamCap);
|
assert(i < ParamCap);
|
||||||
char *nick = msg->params[param++];
|
char *nick = msg->params[i++];
|
||||||
char prefix = network.prefixes[
|
char prefix = network.prefixes[
|
||||||
strchr(network.prefixModes, *ch) - network.prefixModes
|
strchr(network.prefixModes, *ch) - network.prefixModes
|
||||||
];
|
];
|
||||||
catf(
|
uiFormat(
|
||||||
buf, sizeof(buf), ", %s \3%02d%c%s\3 \3%02d%s\3 %s",
|
id, Cold, tagTime(msg),
|
||||||
(set ? "grants" : "revokes"),
|
"\3%02d%s\3\t%s \3%02d%c%s\3 %s%s in \3%02d%s\3",
|
||||||
|
hash(msg->user), msg->nick, verb,
|
||||||
completeColor(id, nick), prefix, nick,
|
completeColor(id, nick), prefix, nick,
|
||||||
hash(msg->params[0]), msg->params[0],
|
mode, name, hash(msg->params[0]), msg->params[0]
|
||||||
name
|
);
|
||||||
|
logFormat(
|
||||||
|
id, tagTime(msg), "%s %s %c%s %s%s in %s",
|
||||||
|
msg->nick, verb, prefix, nick, mode, name, msg->params[0]
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (strchr(network.listModes, *ch)) {
|
if (strchr(network.listModes, *ch)) {
|
||||||
assert(param < ParamCap);
|
assert(i < ParamCap);
|
||||||
char *mask = msg->params[param++];
|
char *mask = msg->params[i++];
|
||||||
if (*ch == 'b') {
|
if (*ch == 'b') {
|
||||||
catf(
|
verb = (set ? "bans" : "unbans");
|
||||||
buf, sizeof(buf), ", %sbans %s from \3%02d%s\3",
|
uiFormat(
|
||||||
(set ? "" : "un"), mask,
|
id, Cold, tagTime(msg),
|
||||||
|
"\3%02d%s\3\t%s %c%c %s from \3%02d%s\3",
|
||||||
|
hash(msg->user), msg->nick, verb, set["-+"], *ch, mask,
|
||||||
hash(msg->params[0]), msg->params[0]
|
hash(msg->params[0]), msg->params[0]
|
||||||
);
|
);
|
||||||
|
logFormat(
|
||||||
|
id, tagTime(msg), "%s %s %c%c %s from %s",
|
||||||
|
msg->nick, verb, set["-+"], *ch, mask, msg->params[0]
|
||||||
|
);
|
||||||
} else {
|
} else {
|
||||||
catf(
|
verb = (set ? "adds" : "removes");
|
||||||
buf, sizeof(buf), ", %s %s %s the \3%02d%s\3 %s list",
|
const char *to = (set ? "to" : "from");
|
||||||
(set ? "adds" : "removes"), mask, (set ? "to" : "from"),
|
uiFormat(
|
||||||
hash(msg->params[0]), msg->params[0], name
|
id, Cold, tagTime(msg),
|
||||||
|
"\3%02d%s\3\t%s %s %s the \3%02d%s\3 %s%s list",
|
||||||
|
hash(msg->user), msg->nick, verb, mask, to,
|
||||||
|
hash(msg->params[0]), msg->params[0], mode, name
|
||||||
|
);
|
||||||
|
logFormat(
|
||||||
|
id, tagTime(msg), "%s %s %s %s the %s %s%s list",
|
||||||
|
msg->nick, verb, mask, to, msg->params[0], mode, name
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (strchr(network.paramModes, *ch)) {
|
if (strchr(network.paramModes, *ch)) {
|
||||||
assert(param < ParamCap);
|
assert(i < ParamCap);
|
||||||
catf(
|
char *param = msg->params[i++];
|
||||||
buf, sizeof(buf), ", %ssets \3%02d%s\3 %s %s %s",
|
uiFormat(
|
||||||
(set ? "" : "un"),
|
id, Cold, tagTime(msg),
|
||||||
hash(msg->params[0]), msg->params[0], name,
|
"\3%02d%s\3\t%s \3%02d%s\3 %s%s %s",
|
||||||
(set ? "to" : "from"), msg->params[param++]
|
hash(msg->user), msg->nick, verb,
|
||||||
|
hash(msg->params[0]), msg->params[0], mode, name, param
|
||||||
|
);
|
||||||
|
logFormat(
|
||||||
|
id, tagTime(msg), "%s %s %s %s%s %s",
|
||||||
|
msg->nick, verb, msg->params[0], mode, name, param
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (strchr(network.setParamModes, *ch) && set) {
|
if (strchr(network.setParamModes, *ch) && set) {
|
||||||
assert(param < ParamCap);
|
assert(i < ParamCap);
|
||||||
catf(
|
char *param = msg->params[i++];
|
||||||
buf, sizeof(buf), ", sets \3%02d%s\3 %s to %s",
|
uiFormat(
|
||||||
hash(msg->params[0]), msg->params[0],
|
id, Cold, tagTime(msg),
|
||||||
name, msg->params[param++]
|
"\3%02d%s\3\t%s \3%02d%s\3 %s%s %s",
|
||||||
|
hash(msg->user), msg->nick, verb,
|
||||||
|
hash(msg->params[0]), msg->params[0], mode, name, param
|
||||||
|
);
|
||||||
|
logFormat(
|
||||||
|
id, tagTime(msg), "%s %s %s %s%s %s",
|
||||||
|
msg->nick, verb, msg->params[0], mode, name, param
|
||||||
);
|
);
|
||||||
} else if (strchr(network.setParamModes, *ch)) {
|
} else if (strchr(network.setParamModes, *ch)) {
|
||||||
catf(
|
uiFormat(
|
||||||
buf, sizeof(buf), ", unsets \3%02d%s\3 %s",
|
id, Cold, tagTime(msg),
|
||||||
hash(msg->params[0]), msg->params[0], name
|
"\3%02d%s\3\t%s \3%02d%s\3 %s%s",
|
||||||
|
hash(msg->user), msg->nick, verb,
|
||||||
|
hash(msg->params[0]), msg->params[0], mode, name
|
||||||
|
);
|
||||||
|
logFormat(
|
||||||
|
id, tagTime(msg), "%s %s %s %s%s",
|
||||||
|
msg->nick, verb, msg->params[0], mode, name
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (strchr(network.channelModes, *ch)) {
|
if (strchr(network.channelModes, *ch)) {
|
||||||
catf(
|
uiFormat(
|
||||||
buf, sizeof(buf), ", %ssets \3%02d%s\3 %s",
|
id, Cold, tagTime(msg),
|
||||||
(set ? "" : "un"), hash(msg->params[0]), msg->params[0], name
|
"\3%02d%s\3\t%s \3%02d%s\3 %s%s",
|
||||||
|
hash(msg->user), msg->nick, verb,
|
||||||
|
hash(msg->params[0]), msg->params[0], mode, name
|
||||||
|
);
|
||||||
|
logFormat(
|
||||||
|
id, tagTime(msg), "%s %s %s %s%s",
|
||||||
|
msg->nick, verb, msg->params[0], mode, name
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!buf[0]) return;
|
|
||||||
uiFormat(
|
|
||||||
id, Cold, tagTime(msg),
|
|
||||||
"\3%02d%s\3\t%s", hash(msg->user), msg->nick, &buf[2]
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void handleErrorChanopPrivsNeeded(struct Message *msg) {
|
static void handleErrorChanopPrivsNeeded(struct Message *msg) {
|
||||||
|
|
Loading…
Reference in New Issue