Check ignores against id

Otherwise they do not work correctly for QUIT and NICK. This also lets
you ignore private messages only by putting the nick in the third field.
master
C. McEnroe 2020-04-07 13:18:42 -04:00
parent 83a2fb0d34
commit 73bda18110
3 changed files with 12 additions and 11 deletions

2
chat.h
View File

@ -269,7 +269,7 @@ extern struct Ignore {
} ignore; } ignore;
const char *ignoreAdd(const char *pattern); const char *ignoreAdd(const char *pattern);
bool ignoreRemove(const char *pattern); bool ignoreRemove(const char *pattern);
enum Heat ignoreCheck(enum Heat heat, const struct Message *msg); enum Heat ignoreCheck(enum Heat heat, uint id, const struct Message *msg);
extern bool logEnable; extern bool logEnable;
void logFormat(uint id, const time_t *time, const char *format, ...) void logFormat(uint id, const time_t *time, const char *format, ...)

View File

@ -314,7 +314,7 @@ static void handleJoin(struct Message *msg) {
msg->params[2] = NULL; msg->params[2] = NULL;
} }
uiFormat( uiFormat(
id, ignoreCheck(Cold, msg), tagTime(msg), id, ignoreCheck(Cold, id, msg), tagTime(msg),
"\3%02d%s\3\t%s%s%sarrives in \3%02d%s\3", "\3%02d%s\3\t%s%s%sarrives in \3%02d%s\3",
hash(msg->user), msg->nick, hash(msg->user), msg->nick,
(msg->params[2] ? "(" : ""), (msg->params[2] ? "(" : ""),
@ -346,7 +346,7 @@ static void handlePart(struct Message *msg) {
completeRemove(id, msg->nick); completeRemove(id, msg->nick);
urlScan(id, msg->nick, msg->params[1]); urlScan(id, msg->nick, msg->params[1]);
uiFormat( uiFormat(
id, ignoreCheck(Cold, msg), tagTime(msg), id, ignoreCheck(Cold, id, msg), 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, hash(msg->params[0]), msg->params[0], hash(msg->user), msg->nick, hash(msg->params[0]), msg->params[0],
(msg->params[1] ? ": " : ""), (msg->params[1] ?: "") (msg->params[1] ? ": " : ""), (msg->params[1] ?: "")
@ -393,7 +393,7 @@ static void handleNick(struct Message *msg) {
set(&idNames[id], msg->params[0]); set(&idNames[id], msg->params[0]);
} }
uiFormat( uiFormat(
id, ignoreCheck(Cold, msg), tagTime(msg), id, ignoreCheck(Cold, id, msg), tagTime(msg),
"\3%02d%s\3\tis now known as \3%02d%s\3", "\3%02d%s\3\tis now known as \3%02d%s\3",
hash(msg->user), msg->nick, hash(msg->user), msg->params[0] hash(msg->user), msg->nick, hash(msg->user), msg->params[0]
); );
@ -411,7 +411,7 @@ static void handleQuit(struct Message *msg) {
for (uint id; (id = completeID(msg->nick));) { for (uint id; (id = completeID(msg->nick));) {
urlScan(id, msg->nick, msg->params[0]); urlScan(id, msg->nick, msg->params[0]);
uiFormat( uiFormat(
id, ignoreCheck(Cold, msg), tagTime(msg), id, ignoreCheck(Cold, id, msg), tagTime(msg),
"\3%02d%s\3\tleaves%s%s", "\3%02d%s\3\tleaves%s%s",
hash(msg->user), msg->nick, hash(msg->user), msg->nick,
(msg->params[0] ? ": " : ""), (msg->params[0] ?: "") (msg->params[0] ? ": " : ""), (msg->params[0] ?: "")
@ -430,7 +430,7 @@ static void handleInvite(struct Message *msg) {
require(msg, true, 2); require(msg, true, 2);
if (!strcmp(msg->params[0], self.nick)) { if (!strcmp(msg->params[0], self.nick)) {
uiFormat( uiFormat(
Network, ignoreCheck(Hot, msg), tagTime(msg), Network, ignoreCheck(Hot, Network, msg), tagTime(msg),
"\3%02d%s\3\tinvites you to \3%02d%s\3", "\3%02d%s\3\tinvites you to \3%02d%s\3",
hash(msg->user), msg->nick, hash(msg->params[1]), msg->params[1] hash(msg->user), msg->nick, hash(msg->params[1]), msg->params[1]
); );
@ -1106,12 +1106,13 @@ static void handlePrivmsg(struct Message *msg) {
bool mention = !mine && isMention(msg); bool mention = !mine && isMention(msg);
if (!notice && !mine) completeTouch(id, msg->nick, hash(msg->user)); if (!notice && !mine) completeTouch(id, msg->nick, hash(msg->user));
urlScan(id, msg->nick, msg->params[1]); urlScan(id, msg->nick, msg->params[1]);
enum Heat heat = ignoreCheck((mention || query ? Hot : Warm), id, msg);
if (notice) { if (notice) {
if (id != Network) { if (id != Network) {
logFormat(id, tagTime(msg), "-%s- %s", msg->nick, msg->params[1]); logFormat(id, tagTime(msg), "-%s- %s", msg->nick, msg->params[1]);
} }
uiFormat( uiFormat(
id, ignoreCheck(Warm, msg), tagTime(msg), id, ignoreCheck(Warm, id, msg), tagTime(msg),
"\3%d-%s-\3%d\t%s", "\3%d-%s-\3%d\t%s",
hash(msg->user), msg->nick, LightGray, msg->params[1] hash(msg->user), msg->nick, LightGray, msg->params[1]
); );
@ -1119,7 +1120,7 @@ static void handlePrivmsg(struct Message *msg) {
logFormat(id, tagTime(msg), "* %s %s", msg->nick, msg->params[1]); logFormat(id, tagTime(msg), "* %s %s", msg->nick, msg->params[1]);
const char *mentions = colorMentions(id, msg); const char *mentions = colorMentions(id, msg);
uiFormat( uiFormat(
id, ignoreCheck((mention || query ? Hot : Warm), msg), tagTime(msg), id, heat, tagTime(msg),
"%s\35\3%d* %s\17\35\t%s%s", "%s\35\3%d* %s\17\35\t%s%s",
(mention ? "\26" : ""), hash(msg->user), msg->nick, (mention ? "\26" : ""), hash(msg->user), msg->nick,
mentions, msg->params[1] mentions, msg->params[1]
@ -1128,7 +1129,7 @@ static void handlePrivmsg(struct Message *msg) {
logFormat(id, tagTime(msg), "<%s> %s", msg->nick, msg->params[1]); logFormat(id, tagTime(msg), "<%s> %s", msg->nick, msg->params[1]);
const char *mentions = colorMentions(id, msg); const char *mentions = colorMentions(id, msg);
uiFormat( uiFormat(
id, ignoreCheck((mention || query ? Hot : Warm), msg), tagTime(msg), id, heat, tagTime(msg),
"%s\3%d<%s>\17\t%s%s", "%s\3%d<%s>\17\t%s%s",
(mention ? "\26" : ""), hash(msg->user), msg->nick, (mention ? "\26" : ""), hash(msg->user), msg->nick,
mentions, msg->params[1] mentions, msg->params[1]

View File

@ -58,11 +58,11 @@ bool ignoreRemove(const char *pattern) {
return found; return found;
} }
enum Heat ignoreCheck(enum Heat heat, const struct Message *msg) { enum Heat ignoreCheck(enum Heat heat, uint id, const struct Message *msg) {
char match[512]; char match[512];
snprintf( snprintf(
match, sizeof(match), "%s!%s@%s %s %s", match, sizeof(match), "%s!%s@%s %s %s",
msg->nick, msg->user, msg->host, msg->cmd, (msg->params[0] ?: "") msg->nick, msg->user, msg->host, msg->cmd, idNames[id]
); );
for (size_t i = 0; i < ignore.len; ++i) { for (size_t i = 0; i < ignore.len; ++i) {
if (fnmatch(ignore.patterns[i], match, FNM_CASEFOLD)) continue; if (fnmatch(ignore.patterns[i], match, FNM_CASEFOLD)) continue;