summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--handle.c46
1 files changed, 42 insertions, 4 deletions
diff --git a/handle.c b/handle.c
index 8a68c95..e636434 100644
--- a/handle.c
+++ b/handle.c
@@ -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) {