[pybot-commits] CVS: pybot/pybot/modules servercontrol.py,1.5,1.6 userdata.py,1.5,1.6
Brought to you by:
niemeyer
From: Gustavo N. <nie...@us...> - 2003-08-23 03:08:15
|
Update of /cvsroot/pybot/pybot/pybot/modules In directory sc8-pr-cvs1:/tmp/cvs-serv1170/pybot/modules Modified Files: servercontrol.py userdata.py Log Message: * modules/servercontrol.py: Implemented arbitrary setup of after-connection messages, allowing nick registration on nickserv and similars. Index: servercontrol.py =================================================================== RCS file: /cvsroot/pybot/pybot/pybot/modules/servercontrol.py,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** servercontrol.py 21 Aug 2003 23:24:15 -0000 1.5 --- servercontrol.py 22 Aug 2003 13:22:11 -0000 1.6 *************** *** 35,38 **** --- 35,47 ---- """ + HELP_CONNECTION_MESSAGES = """ + If necessary, you may ask me to send messages to given targets just + after connecting to some server. This is useful, for example, to + identify me to some nick controlling service (like nickserv). To + do that use "[remove] connection message to <target> [on [server] + <server>]: <msg>". To check which messages are configured, use + "show connection messages". Only admins are allowed to use this. + """ + HELP_JOIN = """ You can ask me to join in a given channel using "join [channel] <channel> *************** *** 77,80 **** --- 86,90 ---- db.table("host", "servername,host") db.table("channel", "servername,channel,keyword") + db.table("connectmsg", "servername,target,msg") if config.has_option("global", "default_nick"): *************** *** 104,107 **** --- 114,123 ---- self.re7 = re.compile(r"(?P<cmd>quit|reboot)(?:\s+with\s+(?P<reason>.+))?$", re.I) + # [remove] connection message to <target> [on [server] <server>]: <msg> + self.re8 = re.compile(r"(?P<remove>remove\s+)?connection\s+message\s+to\s+(?P<target>\S+)(?:\s+(?:on|at)\s+(?:server\s+)?(?P<server>\S+))?\s*:\s*(?P<msg>.*?)\s*$", re.I) + + # show connection messages + self.re9 = re.compile(r"show\s+connection\s+messages?\s*$", re.I) + # [dis|re]connect mm.register_help(r"(?:dis|re)?connect$", HELP_CONNECT, *************** *** 116,119 **** --- 132,139 ---- ["show channels", "show servers"]) + # connection message[s] + mm.register_help(r"connection\s+messages?", HELP_CONNECTION_MESSAGES, + "connection messages") + mm.register_perm("showchannels", PERM_SHOWCHANNELS) mm.register_perm("showservers", PERM_SHOWSERVERS) *************** *** 181,184 **** --- 201,208 ---- self.registered_server[server] = 1 cursor = db.cursor() + cursor.execute("select * from connectmsg where servername=%s", + server.servername) + for row in cursor.fetchall(): + server.sendmsg(row.target, None, row.msg) cursor.execute("select * from channel where servername=%s", server.servername) *************** *** 285,288 **** --- 309,314 ---- cursor.execute("delete from host where servername=%s", server.servername) + cursor.execute("delete from connectmsg where servername=%s", + server.servername) server.sendcmd("", "QUIT") server.kill() *************** *** 477,480 **** --- 503,567 ---- else: main.reboot = 1 + else: + msg.answer("%:", [("You're not", ["that good", + "allowed to do this", + "my lord"]), + "No", "Nope"], [".", "!"]) + return 0 + + m = self.re8.match(msg.line) + if m: + if mm.hasperm(msg, "admin"): + target = m.group("target") + servername = m.group("server") + _msg = m.group("msg") + if servername: + server = servers.get(servername) + if not servers.get(servername): + msg.answer("%:", ["Sorry,", "Oops!", "Hummm..."], + "I'm not in this server", [".", "!"]) + return 0 + else: + servername = msg.server.servername + cursor = db.cursor() + if m.group("remove"): + cursor.execute("delete from connectmsg where " + "servername=%s and target=%s and msg=%s", + (servername, target, _msg)) + if cursor.rowcount: + msg.answer("%:", ["Ok", "Done", "Sure", "No problems"], + [".", "!"]) + else: + msg.answer("%:", ["Message not found", + "Couldn't find that message", + "I wasn't able to find that message"], + [".", "!"]) + else: + cursor.execute("insert into connectmsg values (%s,%s,%s)", + (servername, target, _msg)) + msg.answer("%:", ["Ok", "Done", "Sure", "No problems"], + [".", "!"]) + else: + msg.answer("%:", [("You're not", ["that good", + "allowed to do this", + "my lord"]), + "No", "Nope"], [".", "!"]) + return 0 + + m = self.re9.match(msg.line) + if m: + if mm.hasperm(msg, "admin"): + cursor = db.cursor() + cursor.execute("select * from connectmsg") + if cursor.rowcount: + msg.answer("%:", + "The following messages are being sent after " + "connection:") + for row in cursor.fetchall(): + msg.answer("- \"%s\" to %s on server %s" % + (row.msg, row.target, row.servername)) + else: + msg.answer("%:", "No messages are being sent after " + "connection.") else: msg.answer("%:", [("You're not", ["that good", Index: userdata.py =================================================================== RCS file: /cvsroot/pybot/pybot/pybot/modules/userdata.py,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** userdata.py 12 May 2003 20:42:21 -0000 1.5 --- userdata.py 22 Aug 2003 13:22:11 -0000 1.6 *************** *** 65,69 **** class UserData: def __init__(self): ! hooks.register("Message", self.message) db.table("userdata", "servername,nick,type,value") db.table("login", "servername,userstr,lasttime,nick") --- 65,71 ---- class UserData: def __init__(self): ! # Use a lower priority, since we use some ! # regexes which are very generic here. ! hooks.register("Message", self.message, priority=600) db.table("userdata", "servername,nick,type,value") db.table("login", "servername,userstr,lasttime,nick") *************** *** 103,107 **** def unload(self): ! hooks.unregister("Message", self.message) mm.unregister("getuserdata") mm.unregister("setuserdata") --- 105,109 ---- def unload(self): ! hooks.unregister("Message", self.message, priority=600) mm.unregister("getuserdata") mm.unregister("setuserdata") *************** *** 152,156 **** self.login_update(msg) ! if not msg.forme: return None --- 154,160 ---- self.login_update(msg) ! # Check if it's already answered, since we use some ! # regexes which are very generic here. ! if not msg.forme or msg.answered: return None |