diff options
Diffstat (limited to 'osrc/watbot_irc.py')
-rw-r--r-- | osrc/watbot_irc.py | 102 |
1 files changed, 102 insertions, 0 deletions
diff --git a/osrc/watbot_irc.py b/osrc/watbot_irc.py new file mode 100644 index 0000000..4360745 --- /dev/null +++ b/osrc/watbot_irc.py @@ -0,0 +1,102 @@ +#!/usr/bin/python + +import irc.client +import ssl + +class WatbotIRC: + """irc frontend class""" + + def __init__(self, config, game): + + self.config = config + self.game = game + + self.client = irc.client.IRC() + server = self.client.server() + + if not config["ssl"]: + server.connect( + config["server"], + config["port"], + config["bot_nick"], + username = config["bot_nick"], + ircname = (config["prefix"] + " help"), + ) + else: + ssl_factory = irc.connection.Factory(wrapper=ssl.wrap_socket) + server.connect( + config["server"], + config["port"], + config["bot_nick"], + username = config["bot_nick"], + ircname = (config["prefix"] + " help"), + connect_factory = ssl_factory + ) + + + self.client.add_global_handler("welcome", self.on_connect) + self.client.add_global_handler("privmsg", self.on_msg) + self.client.add_global_handler("pubmsg", self.on_msg) + self.client.add_global_handler("disconnect", self.on_disconnect) + + + def main_loop(self): + self.client.process_forever() + + def on_connect(self, connection, event): + if self.config["nickserv"]: + connection.privmsg("nickserv", "identify " + self.config["password"]) + + connection.join(self.config["channel"]) + + def on_msg(self, connection, event): + for a in event.arguments: + self.do_command(connection, event.source, event.target, a) + + def do_command(self, connection, source, target, commandline): + + cl_list = commandline.strip().split(" ", 2) + + if len(cl_list) > 0: + if cl_list[0].lower() == "wat": + cl_list = [ self.config["prefix"], "wat" ] + + if len(cl_list) < 2: + return + + if cl_list[0].lower() != self.config["prefix"]: + return + + command = cl_list[1].lower() + if len(cl_list) > 2: + args_list = cl_list[2].split(" ") + else: + args_list = [] + + if self.config["nickserv"]: + # The @ must be there, irc standard + host = source.split("@")[1] + host_split = host.split("/") + if len(host_split) < 3: + return + + # Only allow nickserved users + if host_split[0] != "tripsit": + return + + #nick = host_split[2] + nick = source.split("!", 1)[0] + + output = self.game.do_command(nick, command, args_list) + + + if target == self.config["bot_nick"]: + target = nick + + if not output is None: + connection.privmsg(target, output) + + def on_disconnect(self, connection, event): + raise SystemExit() + + |