Handle TOPIC and replies

master
C. McEnroe 2020-02-06 02:07:39 -05:00
parent 5fb492f8cd
commit 5e98d83f83
1 changed files with 42 additions and 4 deletions

View File

@ -197,22 +197,57 @@ static void handleJoin(struct Message *msg) {
uiFormat( uiFormat(
id, Cold, tagTime(msg), id, Cold, tagTime(msg),
"\3%02d%s\3\tarrives in \3%02d%s\3", "\3%02d%s\3\tarrives in \3%02d%s\3",
hash(msg->user), msg->nick, idColors[id], idNames[id] hash(msg->user), msg->nick, hash(msg->params[0]), msg->params[0]
); );
} }
static void handlePart(struct Message *msg) { static void handlePart(struct Message *msg) {
require(msg, true, 1); require(msg, true, 1);
size_t id = idFor(msg->params[0]);
uiFormat( uiFormat(
id, Cold, tagTime(msg), idFor(msg->params[0]), Cold, tagTime(msg),
"\3%02d%s\3\tleaves \3%02d%s\3%s%s", "\3%02d%s\3\tleaves \3%02d%s\3%s%s",
hash(msg->user), msg->nick, idColors[id], idNames[id], hash(msg->user), msg->nick, hash(msg->params[0]), msg->params[0],
(msg->params[1] ? ": " : ""), (msg->params[1] ? ": " : ""),
(msg->params[1] ? msg->params[1] : "") (msg->params[1] ? msg->params[1] : "")
); );
} }
static void handleReplyNoTopic(struct Message *msg) {
require(msg, false, 2);
uiFormat(
idFor(msg->params[1]), Cold, tagTime(msg),
"There is no sign in \3%02d%s\3",
hash(msg->params[1]), msg->params[1]
);
}
static void handleReplyTopic(struct Message *msg) {
require(msg, false, 3);
uiFormat(
idFor(msg->params[1]), Cold, tagTime(msg),
"The sign in \3%02d%s\3 reads: %s",
hash(msg->params[1]), msg->params[1], msg->params[2]
);
}
static void handleTopic(struct Message *msg) {
require(msg, true, 2);
if (msg->params[1][0]) {
uiFormat(
idFor(msg->params[0]), Warm, tagTime(msg),
"\3%02d%s\3\tplaces a new sign in \3%02d%s\3: %s",
hash(msg->user), msg->nick, hash(msg->params[0]), msg->params[0],
msg->params[1]
);
} else {
uiFormat(
idFor(msg->params[0]), Warm, tagTime(msg),
"\3%02d%s\3\tremoves the sign in \3%02d%s\3",
hash(msg->user), msg->nick, hash(msg->params[0]), msg->params[0]
);
}
}
static bool isAction(struct Message *msg) { static bool isAction(struct Message *msg) {
if (strncmp(msg->params[1], "\1ACTION ", 8)) return false; if (strncmp(msg->params[1], "\1ACTION ", 8)) return false;
msg->params[1] += 8; msg->params[1] += 8;
@ -256,6 +291,8 @@ static const struct Handler {
} Handlers[] = { } Handlers[] = {
{ "001", handleReplyWelcome }, { "001", handleReplyWelcome },
{ "005", handleReplyISupport }, { "005", handleReplyISupport },
{ "331", handleReplyNoTopic },
{ "332", handleReplyTopic },
{ "372", handleReplyMOTD }, { "372", handleReplyMOTD },
{ "432", handleErrorErroneousNickname }, { "432", handleErrorErroneousNickname },
{ "433", handleErrorNicknameInUse }, { "433", handleErrorNicknameInUse },
@ -271,6 +308,7 @@ static const struct Handler {
{ "PART", handlePart }, { "PART", handlePart },
{ "PING", handlePing }, { "PING", handlePing },
{ "PRIVMSG", handlePrivmsg }, { "PRIVMSG", handlePrivmsg },
{ "TOPIC", handleTopic },
}; };
static int compar(const void *cmd, const void *_handler) { static int compar(const void *cmd, const void *_handler) {