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(
id, Cold, tagTime(msg),
"\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) {
require(msg, true, 1);
size_t id = idFor(msg->params[0]);
uiFormat(
id, Cold, tagTime(msg),
idFor(msg->params[0]), Cold, tagTime(msg),
"\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] : "")
);
}
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) {
if (strncmp(msg->params[1], "\1ACTION ", 8)) return false;
msg->params[1] += 8;
@ -256,6 +291,8 @@ static const struct Handler {
} Handlers[] = {
{ "001", handleReplyWelcome },
{ "005", handleReplyISupport },
{ "331", handleReplyNoTopic },
{ "332", handleReplyTopic },
{ "372", handleReplyMOTD },
{ "432", handleErrorErroneousNickname },
{ "433", handleErrorNicknameInUse },
@ -271,6 +308,7 @@ static const struct Handler {
{ "PART", handlePart },
{ "PING", handlePing },
{ "PRIVMSG", handlePrivmsg },
{ "TOPIC", handleTopic },
};
static int compar(const void *cmd, const void *_handler) {