Only show expected topic/names replies
parent
2cacf15314
commit
b6bf6d62b0
5
chat.h
5
chat.h
|
@ -114,6 +114,11 @@ void ircSend(const char *ptr, size_t len);
|
||||||
void ircFormat(const char *format, ...)
|
void ircFormat(const char *format, ...)
|
||||||
__attribute__((format(printf, 1, 2)));
|
__attribute__((format(printf, 1, 2)));
|
||||||
|
|
||||||
|
extern struct Replies {
|
||||||
|
size_t topic;
|
||||||
|
size_t names;
|
||||||
|
} replies;
|
||||||
|
|
||||||
void handle(struct Message msg);
|
void handle(struct Message msg);
|
||||||
void command(size_t id, char *input);
|
void command(size_t id, char *input);
|
||||||
const char *commandIsPrivmsg(size_t id, const char *input);
|
const char *commandIsPrivmsg(size_t id, const char *input);
|
||||||
|
|
|
@ -71,7 +71,15 @@ static void commandMe(size_t id, char *params) {
|
||||||
}
|
}
|
||||||
|
|
||||||
static void commandJoin(size_t id, char *params) {
|
static void commandJoin(size_t id, char *params) {
|
||||||
|
size_t count = 1;
|
||||||
|
if (params) {
|
||||||
|
for (char *ch = params; *ch && *ch != ' '; ++ch) {
|
||||||
|
if (*ch == ',') count++;
|
||||||
|
}
|
||||||
|
}
|
||||||
ircFormat("JOIN %s\r\n", (params ? params : idNames[id]));
|
ircFormat("JOIN %s\r\n", (params ? params : idNames[id]));
|
||||||
|
replies.topic += count;
|
||||||
|
replies.names += count;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void commandPart(size_t id, char *params) {
|
static void commandPart(size_t id, char *params) {
|
||||||
|
|
23
handle.c
23
handle.c
|
@ -25,6 +25,8 @@
|
||||||
|
|
||||||
#include "chat.h"
|
#include "chat.h"
|
||||||
|
|
||||||
|
struct Replies replies;
|
||||||
|
|
||||||
static const char *CapNames[] = {
|
static const char *CapNames[] = {
|
||||||
#define X(name, id) [id##Bit] = name,
|
#define X(name, id) [id##Bit] = name,
|
||||||
ENUM_CAP
|
ENUM_CAP
|
||||||
|
@ -156,7 +158,15 @@ static void handleReplyWelcome(struct Message *msg) {
|
||||||
require(msg, false, 1);
|
require(msg, false, 1);
|
||||||
set(&self.nick, msg->params[0]);
|
set(&self.nick, msg->params[0]);
|
||||||
completeTouch(None, self.nick, Default);
|
completeTouch(None, self.nick, Default);
|
||||||
if (self.join) ircFormat("JOIN %s\r\n", self.join);
|
if (self.join) {
|
||||||
|
size_t count = 1;
|
||||||
|
for (const char *ch = self.join; *ch && *ch != ' '; ++ch) {
|
||||||
|
if (*ch == ',') count++;
|
||||||
|
}
|
||||||
|
ircFormat("JOIN %s\r\n", self.join);
|
||||||
|
replies.topic += count;
|
||||||
|
replies.names += count;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void handleReplyISupport(struct Message *msg) {
|
static void handleReplyISupport(struct Message *msg) {
|
||||||
|
@ -278,6 +288,7 @@ static void handleQuit(struct Message *msg) {
|
||||||
|
|
||||||
static void handleReplyNames(struct Message *msg) {
|
static void handleReplyNames(struct Message *msg) {
|
||||||
require(msg, false, 4);
|
require(msg, false, 4);
|
||||||
|
if (!replies.names) return;
|
||||||
size_t id = idFor(msg->params[2]);
|
size_t id = idFor(msg->params[2]);
|
||||||
char buf[1024];
|
char buf[1024];
|
||||||
size_t len = 0;
|
size_t len = 0;
|
||||||
|
@ -302,8 +313,15 @@ static void handleReplyNames(struct Message *msg) {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void handleReplyEndOfNames(struct Message *msg) {
|
||||||
|
(void)msg;
|
||||||
|
if (replies.names) replies.names--;
|
||||||
|
}
|
||||||
|
|
||||||
static void handleReplyNoTopic(struct Message *msg) {
|
static void handleReplyNoTopic(struct Message *msg) {
|
||||||
require(msg, false, 2);
|
require(msg, false, 2);
|
||||||
|
if (!replies.topic) return;
|
||||||
|
replies.topic--;
|
||||||
uiFormat(
|
uiFormat(
|
||||||
idFor(msg->params[1]), Cold, tagTime(msg),
|
idFor(msg->params[1]), Cold, tagTime(msg),
|
||||||
"There is no sign in \3%02d%s\3",
|
"There is no sign in \3%02d%s\3",
|
||||||
|
@ -313,6 +331,8 @@ static void handleReplyNoTopic(struct Message *msg) {
|
||||||
|
|
||||||
static void handleReplyTopic(struct Message *msg) {
|
static void handleReplyTopic(struct Message *msg) {
|
||||||
require(msg, false, 3);
|
require(msg, false, 3);
|
||||||
|
if (!replies.topic) return;
|
||||||
|
replies.topic--;
|
||||||
uiFormat(
|
uiFormat(
|
||||||
idFor(msg->params[1]), Cold, tagTime(msg),
|
idFor(msg->params[1]), Cold, tagTime(msg),
|
||||||
"The sign in \3%02d%s\3 reads: %s",
|
"The sign in \3%02d%s\3 reads: %s",
|
||||||
|
@ -421,6 +441,7 @@ static const struct Handler {
|
||||||
{ "331", handleReplyNoTopic },
|
{ "331", handleReplyNoTopic },
|
||||||
{ "332", handleReplyTopic },
|
{ "332", handleReplyTopic },
|
||||||
{ "353", handleReplyNames },
|
{ "353", handleReplyNames },
|
||||||
|
{ "366", handleReplyEndOfNames },
|
||||||
{ "372", handleReplyMOTD },
|
{ "372", handleReplyMOTD },
|
||||||
{ "432", handleErrorErroneousNickname },
|
{ "432", handleErrorErroneousNickname },
|
||||||
{ "433", handleErrorNicknameInUse },
|
{ "433", handleErrorNicknameInUse },
|
||||||
|
|
Loading…
Reference in New Issue