Detect pings anywhere in message

weechat-hashes
Curtis McEnroe 2018-08-13 14:37:37 -04:00
parent 2ae5b6b9ab
commit 372b79b59e
No known key found for this signature in database
GPG Key ID: CEA2F97ADCFCD77C
1 changed files with 16 additions and 2 deletions

View File

@ -14,6 +14,7 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
#include <ctype.h>
#include <err.h> #include <err.h>
#include <stdarg.h> #include <stdarg.h>
#include <stdio.h> #include <stdio.h>
@ -86,6 +87,20 @@ static bool isSelf(const char *nick, const char *user) {
return false; 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); typedef void (*Handler)(char *prefix, char *params);
static void handlePing(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); if (!isSelf(nick, user)) tabTouch(tag, nick);
urlScan(tag, mesg); urlScan(tag, mesg);
bool ping = !strncasecmp(mesg, self.nick, strlen(self.nick));
bool self = isSelf(nick, user); bool self = isSelf(nick, user);
bool ping = isPing(mesg);
uiFmt( uiFmt(
tag, "%c\3%d%c%s%c\17 %s", tag, "%c\3%d%c%s%c\17 %s",
ping["\17\26"], color(user), self["<("], nick, self[">)"], mesg ping["\17\26"], color(user), self["<("], nick, self[">)"], mesg
); );
// TODO: always be beeping.
} }
static void handleNotice(char *prefix, char *params) { static void handleNotice(char *prefix, char *params) {