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
}\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
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
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