]> jfr.im git - irc/rizon/bncbot.git/commitdiff
Apply znc-1.0 patch from culex
authorAdam <redacted>
Sun, 13 Jan 2013 00:27:49 +0000 (19:27 -0500)
committerAdam <redacted>
Sun, 13 Jan 2013 00:27:49 +0000 (19:27 -0500)
src/net/rizon/bncmanager/BncServer.java

index a750d7f39e14ad724b4d9a0142d03946cd1c7f4e..14aa293d7191e66167cccd1717a110c7e5ae6ad4 100644 (file)
@@ -58,6 +58,12 @@ public class BncServer {
        private HashSet<String> serverPing;\r
 \r
        private BncManager.BncEventHandler connectCallback;\r
+       \r
+       /**\r
+        * If true, we must send ZNC 1.0-compatible commands. Otherwise, we must\r
+        * use ZNC 0.2* commands.\r
+        */\r
+       private boolean znc1 = false;\r
 \r
        public final static String versionString = "BNC Server Class: $Id$";\r
 \r
@@ -140,22 +146,36 @@ public class BncServer {
        }\r
 \r
        public void addUser(String user, String password) {\r
-               privmsg("*admin", String.format("adduser %s %s 127.0.0.1 +6697", user, password));\r
+               final String adminuser = (znc1 ? "*controlpanel" : "*admin");\r
+               final String server = "127.0.0.1 +6697";\r
+               \r
+               if (znc1) {\r
+                       /* ZNC 1.0 won't simply let adduser overwrite users. Since\r
+                        * .bncapprove after a .bncdelete for inactive accounts isn't\r
+                        * exactly unheard of, we need to purge the old user.\r
+                        */\r
+                       privmsg(adminuser, String.format("deluser %s", user));\r
+                       \r
+                       privmsg(adminuser, String.format("adduser %s %s", user, password));\r
+                       privmsg(adminuser, String.format("addnetwork %s Rizon", user));\r
+                       privmsg(adminuser, String.format("addserver %s Rizon %s", user, server));\r
+               } else\r
+                       privmsg(adminuser, String.format("adduser %s %s %s", user, password, server));\r
 \r
                // Set options.\r
-               privmsg("*admin", String.format("set DCCBindHost %s false", user));\r
-               privmsg("*admin", String.format("set DenySetBindHost %s true", user));\r
-               privmsg("*admin", String.format("set DenyLoadMod %s true", user));\r
-               privmsg("*admin", String.format("set BindHost %s 127.0.0.1", user));\r
+               privmsg(adminuser, String.format("set DCCBindHost %s false", user));\r
+               privmsg(adminuser, String.format("set DenySetBindHost %s true", user));\r
+               privmsg(adminuser, String.format("set DenyLoadMod %s true", user));\r
+               privmsg(adminuser, String.format("set BindHost %s 127.0.0.1", user));\r
 \r
                // Load modules.\r
                //privmsg("*admin", String.format("LoadModule %s away ThisIsSecure123", user));\r
-               privmsg("*admin", String.format("LoadModule %s chansaver", user));\r
+               privmsg(adminuser, String.format("LoadModule %s chansaver", user));\r
                //privmsg("*admin", String.format("LoadModule %s force_stickychan #RizonBNC", user));\r
-               privmsg("*admin", String.format("LoadModule %s force_local_conn", user));\r
-               privmsg("*admin", String.format("LoadModule %s nickserv", user));\r
-               privmsg("*admin", String.format("LoadModule %s perform", user));\r
-               privmsg("*admin", String.format("LoadModule %s simple_away", user));\r
+               privmsg(adminuser, String.format("LoadModule %s force_local_conn", user));\r
+               privmsg(adminuser, String.format("LoadModule %s nickserv", user));\r
+               privmsg(adminuser, String.format("LoadModule %s perform", user));\r
+               privmsg(adminuser, String.format("LoadModule %s simple_away", user));\r
 \r
                this.userCount++;\r
        }\r
@@ -491,6 +511,9 @@ public class BncServer {
                                        BncServer.this.connectCallback = null;\r
                                }\r
 \r
+                               // Query admin module so we can adjust the commands we send\r
+                               BncServer.this.privmsg("*admin", "test");\r
+                               \r
                                BncServer.this.privmsg("*status", "userstats");\r
 \r
                                // TODO - Fix so that scan.nextLine() does not have to return for thread to exit.\r
@@ -530,6 +553,11 @@ public class BncServer {
                                                if (serverPing.contains(words[3]))\r
                                                        serverPing.remove(words[3]);\r
                                        }\r
+                                       \r
+                                       // Deal with failure to contact *admin -- meaning we're on 1.0.\r
+                                       else if (line.startsWith(":*status") && words.length == 7\r
+                                               && words[3].equals(":No") && words[6].equals("[admin]"))\r
+                                               znc1 = true;\r
 \r
                                        // Handle connection event log.\r
                                        Matcher connectMatcher = notifyConnectPattern.matcher(line);\r