]> jfr.im git - irc/evilnet/x3.git/commitdiff
Added 3 new hooks available for python scripts: new_user, nick_change, and server_link
authorrubin <redacted>
Sat, 31 Jan 2009 17:05:45 +0000 (17:05 +0000)
committerrubin <redacted>
Sat, 31 Jan 2009 17:05:45 +0000 (17:05 +0000)
ChangeLog
src/chanserv.c
src/hash.h
src/mod-python.c
src/modpython.py
src/plugins/annoy/plugin.py

index ee3eca4b8c2e2e2fde5c5dd530a0590f09d2aa53..e8349b8afc12d10545c79beeccd248f9103eaa88 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,6 +1,21 @@
 /***********************************************************************
 X3 ChangeLog
 
+2009-01-31  Alex Schumann  <rubin@afternet.org>
+
+       * src/chanserv.c: change server link handlers to return an int
+
+       * src/hash.h: change server link handlers to return an int
+
+       * src/plugins/annoy/plugin.py: add some debug code for testing new
+       hooks
+
+       * src/modpython.py: support for new hooks server_link, nick_change,
+       and new_user
+
+       * src/mod-python.c: support for new hooks server_link, nick_change,
+       and new_user
+
 2009-01-30  Neil Spierling  <sirvulcan@sirvulcan.co.nz>
 
        * src/opserv.c: Warning fix.
index ced5b2c91b981fd6bfe92f751c072c6ae08f9f8a..42e92a0f86d74be55c7d6f24b16608d96d2fd4c4 100644 (file)
@@ -8384,7 +8384,7 @@ handle_unreg(UNUSED_ARG(struct userNode *user), struct handle_info *handle)
     }
 }
 
-static void
+static int 
 handle_server_link(UNUSED_ARG(struct server *server))
 {
     struct chanData *cData;
@@ -8402,6 +8402,7 @@ handle_server_link(UNUSED_ARG(struct server *server))
             timeq_add(now + chanserv_conf.adjust_delay, chanserv_adjust_limit, cData);
         }
     }
+    return 0;
 }
 
 static void
index 842f7569f6150c92e68bc1c222c9ef0ca37d5e6f..cb4cf82e826cf73e77c44cd23afecc2bcc736075 100644 (file)
@@ -366,7 +366,7 @@ struct chanNode* GetChannel(const char *name);
 struct modeNode* GetUserMode(struct chanNode* channel, struct userNode* user);
 unsigned int IsUserP(struct userNode *user);
 
-typedef void (*server_link_func_t) (struct server *server);
+typedef int (*server_link_func_t) (struct server *server);
 void reg_server_link_func(server_link_func_t handler);
 
 typedef int (*new_user_func_t) (struct userNode *user);
index 9bd193cb7f66205fb0b2bb85eec6e3878cbf073a..ca3344c73cbf48041211eabc34d74f216ad67f7e 100644 (file)
@@ -627,6 +627,47 @@ python_handle_join(struct modeNode *mNode)
     }
 }
 
+static int
+python_handle_server_link(struct server *server)
+{
+    log_module(PY_LOG, LOG_INFO, "python module handle_server_link");
+    if(!server) {
+        log_module(PY_LOG, LOG_WARNING, "Python code got server link without server!");
+        return 0;
+    }
+    else {
+        char *args[] = {server->name, server->description};
+        return python_call_handler("server_link", args, 2, "", "", "");
+    }
+}
+
+static int
+python_handle_new_user(struct userNode *user)
+{
+    log_module(PY_LOG, LOG_INFO, "Python module handle_new_user");
+    if(!user) {
+        log_module(PY_LOG, LOG_WARNING, "Python code got new_user without the user");
+        return 0;
+    }
+    else {
+        char *args[] = {user->nick, user->ident, user->hostname, user->info};
+        return python_call_handler("new_user", args, 4, "", "", "");
+    }
+}
+
+static void
+python_handle_nick_change(struct userNode *user, const char *old_nick)
+{
+    log_module(PY_LOG, LOG_INFO, "Python module handle_nick_change");
+    if(!user) {
+        log_module(PY_LOG, LOG_WARNING, "Python code got nick_change without the user!");
+    }
+    else {
+        char *args[] = {user->nick, (char *)old_nick};
+        python_call_handler("nick_change", args, 2, "", "", "");
+    }
+}
+
 /* ----------------------------------------------------------------------------- */
    
 
@@ -756,9 +797,9 @@ int python_init(void) {
 
 //  Please help us by implimenting any of the callbacks listed as TODO below. They already exist
 //  in x3, they just need handle_ bridges implimented. (see python_handle_join for an example)
-//TODO:    reg_server_link_func(python_handle_server_link);
-//TODO:    reg_new_user_func(python_handle_new_user);
-//TODO:    reg_nick_change_func(python_handle_nick_change);
+    reg_server_link_func(python_handle_server_link);
+    reg_new_user_func(python_handle_new_user);
+    reg_nick_change_func(python_handle_nick_change);
 //TODO:    reg_del_user_func(python_handle_del_user);
 //TODO:    reg_account_func(python_handle_account); /* stamping of account name to the ircd */
 //TODO:    reg_handle_rename_func(python_handle_handle_rename); /* handle used to ALSO mean account name */
index c0fc06cd45a916f351db9025a55dc55fc5b68976..34fdbf6821bb2bdac65e10ee7f5159ce6ec12524 100644 (file)
@@ -60,10 +60,20 @@ class handler:
         return 0
 
     def join(self, irc, channel, nick):
-        user = svc.get_user(nick)
+        #user = svc.get_user(nick)
         #print "DEBUG: handler.join()"
-        self.plugins.callhandler("join", irc, [channel, nick], [channel, nick])
-        return 0
+        return self.plugins.callhandler("join", irc, [channel, nick], [channel, nick])
+
+    def server_link(self, irc, name, desc):
+        return self.plugins.callhandler("server_link", irc, [name, desc], [name, desc])
+
+    def new_user(self, irc, nick, ident, hostname, info):
+        # we may filter on all the user fields, but we only pass the nick because
+        # the plugin can get the rest itself
+        return self.plugins.callhandler("new_user", irc, [nick, ident, hostname, info], [nick])
+
+    def nick_change(self, irc, nick, old_nick):
+        return self.plugins.callhandler("nick_change", irc, [nick, old_nick], [nick, old_nick])
         
     def cmd_run(self, irc, cmd):
         #print "DEBUG: handler.cmd_run: %s"%cmd
@@ -79,8 +89,7 @@ class handler:
 
     def cmd_command(self, irc, plugin, cmd, args):
         #print "DEBUG: handel.cmd_command; %s %s; args= %s"%(plugin, cmd, args)
-        self.plugins.callhandler("command", irc, [plugin, cmd], [args])
-        return 0
+        return self.plugins.callhandler("command", irc, [plugin, cmd], [args])
 
     def load(self, irc, plugin):
         return self.plugins.load(plugin)
@@ -143,7 +152,9 @@ class plugins:
 
     def callhandler(self, event, irc, filter, args):
         for hook in self.findhooksforevent(event, filter):
-            hook.trigger(irc, args)
+            if(hook.trigger(irc, args)):
+                return 1
+        return 0
 
     def load(self, name):
         """ Loads a plugin by name """
index 30aa5af36413d17c0316c00a0b6a3d83414a37ba..26e7f13240eccfc19c39076d3d1fce6004eb5798 100644 (file)
@@ -8,8 +8,11 @@ class Annoy:
         self.handler = handler
         self.name = "annoy"
 
-#        irc.send_target_privmsg("O3", "#TheOPS", "%s is loaded"%self.name)
-#        handler.addhook("join", self.on_join, "foobar")
+#       These hooks are for testing, and are commented out by default so as not to annoy
+#       us unless we want to test them
+        #handler.addhook("join", self.on_join, "foobar")
+        #handler.addhook("nick_change", self.nick_change, ["Rubin", None], "testing")
+
         handler.addcommand(self.name, "dance", self.dance)
         handler.addcommand(self.name, "nickof", self.nickof)
         self.test = "footest"
@@ -17,6 +20,11 @@ class Annoy:
 #    def on_join(self, irc, channel, nick):
 #        irc.send_target_privmsg("x3", channel, "%s joined %s:%s "%(nick, channel, self.test))
 
+    def nick_change(self, irc, nick, old_nick):
+        svcinfo = svc.get_info()
+        # opserv pm #theops that someones nick changed
+        irc.send_target_privmsg(svcinfo["opserv"], "#theops", "%s changed nick to %s"%(old_nick, nick) )
+
     def dance(self, irc, args):
         nick = irc.caller
         user = svc.get_user(nick)