From 372b79b59e961f07699b6c9a1d03ae7ca1c11ea3 Mon Sep 17 00:00:00 2001 From: Curtis McEnroe Date: Mon, 13 Aug 2018 14:37:37 -0400 Subject: Detect pings anywhere in message --- handle.c | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) (limited to 'handle.c') diff --git a/handle.c b/handle.c index 80ed1b4..22a4723 100644 --- a/handle.c +++ b/handle.c @@ -14,6 +14,7 @@ * along with this program. If not, see . */ +#include #include #include #include @@ -86,6 +87,20 @@ static bool isSelf(const char *nick, const char *user) { return false; } +static bool isPing(const char *mesg) { + size_t len = strlen(self.nick); + const char *match = mesg; + while (NULL != (match = strcasestr(match, self.nick))) { + char b = (match > mesg ? *(match - 1) : ' '); + char a = (match[len] ? match[len] : ' '); + match = &match[len]; + if (!isspace(b) && !ispunct(b)) continue; + if (!isspace(a) && !ispunct(a)) continue; + return true; + } + return false; +} + typedef void (*Handler)(char *prefix, char *params); static void handlePing(char *prefix, char *params) { @@ -292,13 +307,12 @@ static void handlePrivmsg(char *prefix, char *params) { } if (!isSelf(nick, user)) tabTouch(tag, nick); urlScan(tag, mesg); - bool ping = !strncasecmp(mesg, self.nick, strlen(self.nick)); bool self = isSelf(nick, user); + bool ping = isPing(mesg); uiFmt( tag, "%c\3%d%c%s%c\17 %s", ping["\17\26"], color(user), self["<("], nick, self[">)"], mesg ); - // TODO: always be beeping. } static void handleNotice(char *prefix, char *params) { -- cgit 1.4.1