]> jfr.im git - irc/quakenet/newserv.git/commitdiff
add HOOK_NICK_PRE_LOSTNICK hook, add irc_onprequit event to modlua
authormeeb <redacted>
Sat, 6 Oct 2012 21:51:51 +0000 (22:51 +0100)
committermeeb <redacted>
Sat, 6 Oct 2012 21:51:51 +0000 (22:51 +0100)
core/hooks.h
lua/luabot.c
nick/nick.c

index 28f961c3efc1ec89f7fb002de3e1aaad232394ba..2a7487ba3207cc7d721affc66543a291dfab1296 100644 (file)
@@ -41,6 +41,7 @@
 #define HOOK_NICK_MODEOPER         307  /* Argument is void*[2] (nick, modes) */
 #define HOOK_NICK_KILL             308  /* Argument is void*[2] (nick, reason) */
 #define HOOK_NICK_MASKPRIVMSG      309  /* Argument is void*[3] (nick, target, message) ** NICK COULD BE NULL ** */
+#define HOOK_NICK_PRE_LOSTNICK     310  /* Argument is nick* */
 
 #define HOOK_CHANNEL_BURST         400  /* Argument is channel pointer */
 #define HOOK_CHANNEL_CREATE        401  /* Argument is void*[2] (channel, nick) */
index a7a3692202d0348d4fe1ce31c0fa85fc24345d8b..29231d52798420b3e08b80ee92a46a71e09aa90f 100644 (file)
@@ -27,6 +27,7 @@ void lua_onauth(int hooknum, void *arg);
 void lua_ondisconnect(int hooknum, void *arg);
 void lua_onmode(int hooknum, void *arg);
 void lua_onop(int hooknum, void *arg);
+void lua_onprequit(int hooknum, void *arg);
 void lua_onquit(int hooknum, void *arg);
 void lua_onrename(int hooknum, void *arg);
 void lua_onconnect(int hooknum, void *arg);
@@ -45,6 +46,7 @@ void lua_registerevents(void) {
   registerhook(HOOK_CHANNEL_KICK, &lua_onkick);
   registerhook(HOOK_CHANNEL_OPPED, &lua_onop);
   registerhook(HOOK_CHANNEL_DEOPPED, &lua_onop);
+  registerhook(HOOK_NICK_PRE_LOSTNICK, &lua_onprequit);
   registerhook(HOOK_NICK_LOSTNICK, &lua_onquit);
   registerhook(HOOK_NICK_RENAME, &lua_onrename);
   registerhook(HOOK_IRC_CONNECTED, &lua_onconnect);
@@ -62,6 +64,7 @@ void lua_deregisterevents(void) {
   deregisterhook(HOOK_IRC_CONNECTED, &lua_onconnect);
   deregisterhook(HOOK_NICK_RENAME, &lua_onrename);
   deregisterhook(HOOK_NICK_LOSTNICK, &lua_onquit);
+  deregisterhook(HOOK_NICK_PRE_LOSTNICK, &lua_onprequit);
   deregisterhook(HOOK_CHANNEL_DEOPPED, &lua_onop);
   deregisterhook(HOOK_CHANNEL_OPPED, &lua_onop);
   deregisterhook(HOOK_CHANNEL_KICK, &lua_onkick);
@@ -380,6 +383,15 @@ void lua_onquit(int hooknum, void *arg) {
   lua_avpcall("irc_onquit", "l", np->numeric);
 }
 
+void lua_onprequit(int hooknum, void *arg) {
+  nick *np = (nick *)arg;
+
+  if(!np)
+    return;
+
+  lua_avpcall("irc_onprequit", "l", np->numeric);
+}
+
 void lua_onauth(int hooknum, void *arg) {
   nick *np = (nick *)arg;
 
index 10203dc64fbb3fe40d973e93fe5e4422c98c319b..6474a5a9ccf0d304d5d29b544e070ff843d741a9 100644 (file)
@@ -166,6 +166,9 @@ void handleserverchange(int hooknum, void *arg) {
 void deletenick(nick *np) {
   nick **nh;
 
+  /* Fire a pre-lostnick trigger to allow hooks to check the channels etc. of a lost nick */
+  triggerhook(HOOK_NICK_PRE_LOSTNICK, np);
+
   /* Fire the hook.  This will deal with removal from channels etc. */
   triggerhook(HOOK_NICK_LOSTNICK, np);