diff options
author | June McEnroe <june@causal.agency> | 2018-08-13 14:37:37 -0400 |
---|---|---|
committer | June McEnroe <june@causal.agency> | 2018-08-13 14:37:37 -0400 |
commit | 372b79b59e961f07699b6c9a1d03ae7ca1c11ea3 (patch) | |
tree | 944ece448e14b6c32262285f5e91e8da1aee3712 | |
parent | Add /query, /part and /close (diff) | |
download | catgirl-372b79b59e961f07699b6c9a1d03ae7ca1c11ea3.tar.gz catgirl-372b79b59e961f07699b6c9a1d03ae7ca1c11ea3.zip |
Detect pings anywhere in message
-rw-r--r-- | handle.c | 18 |
1 files changed, 16 insertions, 2 deletions
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 <http://www.gnu.org/licenses/>. */ +#include <ctype.h> #include <err.h> #include <stdarg.h> #include <stdio.h> @@ -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) { |