parent
3e67bf6557
commit
f3a56b0d01
2
chat.h
2
chat.h
|
@ -246,8 +246,8 @@ extern struct Replies {
|
||||||
uint list;
|
uint list;
|
||||||
uint mode;
|
uint mode;
|
||||||
uint names;
|
uint names;
|
||||||
uint ops;
|
|
||||||
uint topic;
|
uint topic;
|
||||||
|
uint who;
|
||||||
uint whois;
|
uint whois;
|
||||||
} replies;
|
} replies;
|
||||||
|
|
||||||
|
|
|
@ -176,8 +176,8 @@ static void commandNames(uint id, char *params) {
|
||||||
|
|
||||||
static void commandOps(uint id, char *params) {
|
static void commandOps(uint id, char *params) {
|
||||||
(void)params;
|
(void)params;
|
||||||
ircFormat("NAMES %s\r\n", idNames[id]);
|
ircFormat("WHO %s\r\n", idNames[id]);
|
||||||
replies.ops++;
|
replies.who++;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void commandInvite(uint id, char *params) {
|
static void commandInvite(uint id, char *params) {
|
||||||
|
|
44
handle.c
44
handle.c
|
@ -499,26 +499,52 @@ static void handleReplyNames(struct Message *msg) {
|
||||||
char *user = strsep(&name, "@");
|
char *user = strsep(&name, "@");
|
||||||
enum Color color = (user ? hash(user) : Default);
|
enum Color color = (user ? hash(user) : Default);
|
||||||
completeAdd(id, nick, color);
|
completeAdd(id, nick, color);
|
||||||
if (replies.ops && (prefixes == nick || prefixes[0] == '+')) continue;
|
if (!replies.names) continue;
|
||||||
if (!replies.ops && !replies.names) continue;
|
|
||||||
catf(&cat, "%s\3%02d%s\3", (buf[0] ? ", " : ""), color, prefixes);
|
catf(&cat, "%s\3%02d%s\3", (buf[0] ? ", " : ""), color, prefixes);
|
||||||
}
|
}
|
||||||
if (!cat.len) return;
|
if (!cat.len) return;
|
||||||
uiFormat(
|
uiFormat(
|
||||||
id, Cold, tagTime(msg),
|
id, Cold, tagTime(msg),
|
||||||
"%s \3%02d%s\3 are %s",
|
"In \3%02d%s\3 are %s",
|
||||||
(replies.ops ? "The operators of" : "In"),
|
|
||||||
hash(msg->params[2]), msg->params[2], buf
|
hash(msg->params[2]), msg->params[2], buf
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void handleReplyEndOfNames(struct Message *msg) {
|
static void handleReplyEndOfNames(struct Message *msg) {
|
||||||
(void)msg;
|
(void)msg;
|
||||||
if (replies.ops) {
|
if (replies.names) replies.names--;
|
||||||
replies.ops--;
|
|
||||||
} else if (replies.names) {
|
|
||||||
replies.names--;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static char whoBuf[1024];
|
||||||
|
static struct Cat whoCat = { whoBuf, sizeof(whoBuf), 0 };
|
||||||
|
|
||||||
|
static void handleReplyWho(struct Message *msg) {
|
||||||
|
require(msg, false, 7);
|
||||||
|
if (!replies.who) return;
|
||||||
|
if (!whoCat.len) {
|
||||||
|
catf(
|
||||||
|
&whoCat, "The operators of \3%02d%s\3 are ",
|
||||||
|
hash(msg->params[1]), msg->params[1]
|
||||||
|
);
|
||||||
|
}
|
||||||
|
char *prefixes = &msg->params[6][1];
|
||||||
|
if (prefixes[0] == '*') prefixes++;
|
||||||
|
prefixes[strspn(prefixes, network.prefixes)] = '\0';
|
||||||
|
if (!prefixes[0] || prefixes[0] == '+') return;
|
||||||
|
catf(
|
||||||
|
&whoCat, "%s\3%02d%s%s\3%s",
|
||||||
|
(whoCat.buf[whoCat.len - 1] == ' ' ? "" : ", "),
|
||||||
|
hash(msg->params[2]), prefixes, msg->params[5],
|
||||||
|
(msg->params[6][0] == 'H' ? "" : " (away)")
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void handleReplyEndOfWho(struct Message *msg) {
|
||||||
|
require(msg, false, 2);
|
||||||
|
if (!replies.who) return;
|
||||||
|
replies.who--;
|
||||||
|
uiWrite(idFor(msg->params[1]), Cold, tagTime(msg), whoBuf);
|
||||||
|
whoCat.len = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void handleReplyNoTopic(struct Message *msg) {
|
static void handleReplyNoTopic(struct Message *msg) {
|
||||||
|
@ -1196,6 +1222,7 @@ static const struct Handler {
|
||||||
{ "311", handleReplyWhoisUser },
|
{ "311", handleReplyWhoisUser },
|
||||||
{ "312", handleReplyWhoisServer },
|
{ "312", handleReplyWhoisServer },
|
||||||
{ "313", handleReplyWhoisGeneric },
|
{ "313", handleReplyWhoisGeneric },
|
||||||
|
{ "315", handleReplyEndOfWho },
|
||||||
{ "317", handleReplyWhoisIdle },
|
{ "317", handleReplyWhoisIdle },
|
||||||
{ "318", handleReplyEndOfWhois },
|
{ "318", handleReplyEndOfWhois },
|
||||||
{ "319", handleReplyWhoisChannels },
|
{ "319", handleReplyWhoisChannels },
|
||||||
|
@ -1210,6 +1237,7 @@ static const struct Handler {
|
||||||
{ "347", handleReplyEndOfInviteList },
|
{ "347", handleReplyEndOfInviteList },
|
||||||
{ "348", handleReplyExceptList },
|
{ "348", handleReplyExceptList },
|
||||||
{ "349", handleReplyEndOfExceptList },
|
{ "349", handleReplyEndOfExceptList },
|
||||||
|
{ "352", handleReplyWho },
|
||||||
{ "353", handleReplyNames },
|
{ "353", handleReplyNames },
|
||||||
{ "366", handleReplyEndOfNames },
|
{ "366", handleReplyEndOfNames },
|
||||||
{ "367", handleReplyBanList },
|
{ "367", handleReplyBanList },
|
||||||
|
|
Loading…
Reference in New Issue