Detect pings anywhere in message
parent
2ae5b6b9ab
commit
372b79b59e
18
handle.c
18
handle.c
|
@ -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) {
|
||||||
|
|
Loading…
Reference in New Issue