diff --git a/README b/README deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/irc.py b/irc.py index 769b10ff5af0b3e2bfc6e70c945bcfd7f0a1c423..3784116985169a05e11169edeb2cc0d6cc62140c 100644 --- a/irc.py +++ b/irc.py @@ -325,7 +325,7 @@ class IRC(threading.Thread): self.pluginManager.event("action", channel, self.config["nickname"], action) def doQuit(self, message=None): - self.sendLine("QUIT " + (message or "")) + self.sendLine("QUIT :" + (message or "")) self.pluginManager.event("quit", self.config["nickname"], (message or "")) self.running = False diff --git a/plugins/ddg.py b/plugins/ddg.py new file mode 100644 index 0000000000000000000000000000000000000000..86ad9c49380036773bf1f041c5a5838bb5344b32 --- /dev/null +++ b/plugins/ddg.py @@ -0,0 +1,32 @@ +# ddg module +# --gry + +import urllib +import socket +import json + +@plugin +class ddg(object): + def __init__(self, server): + self.server = server + self.commands = ["ddg"] + self.server.handle("command", self.handle_command, self.commands) + + def handle_command(self, channel, user, cmd, args): + if cmd == "ddg": + if len(args) < 1: + self.server.doMessage(channel, user+": DuckDuckGo.com Zero-Click infoboxes search. Syntax: ddg <query>.") + return + try: + request = "+".join(args) + sock = urllib.urlopen("http://api.duckduckgo.com/?q=%s&o=json"%request) + data = sock.read() + sock.close() + if json.loads(data)["AbstractText"] != "": + self.server.doMessage(channel, user+": "+"%s %s)"%(json.loads(data)["AbstractURL"].encode('utf-8'),json.loads(data)["AbstractText"].encode('utf-8')[0:200])) + elif json.loads(data)["Definition"] != "": + self.server.doMessage(channel, user+": "+"%s %s"%(json.loads(data)["DefinitionURL"].encode('utf-8'),json.loads(data)["Definition"].encode('utf-8'))) + except Exception, e: + self.server.doMessage(channel, user+": "+str(e)) + + diff --git a/plugins/dns.py b/plugins/dns.py new file mode 100644 index 0000000000000000000000000000000000000000..5967502b86cf86f323f478a1846903cfbabe3235 --- /dev/null +++ b/plugins/dns.py @@ -0,0 +1,24 @@ +# dns module +# --gry + +import urllib +import socket + +@plugin +class dns(object): + def __init__(self, server): + self.server = server + self.commands = ["dns"] + self.server.handle("command", self.handle_command, self.commands) + + def handle_command(self, channel, user, cmd, args): + if cmd == "dns": + if len(args) < 1: + self.server.doMessage(channel, user+": Return a fully qualified domain name for a list of space-separated IPs or hostnames.") + return + try: + for each in args: + self.server.doMessage(channel, user+": "+ each+" = "+socket.getfqdn(each)) + except Exception, e: + self.server.doMessage(channel, user+": "+str(e)) + diff --git a/plugins/rpn.py b/plugins/rpn.py new file mode 100644 index 0000000000000000000000000000000000000000..16147fc7a3f441f972d4c90e03a389fefb171852 --- /dev/null +++ b/plugins/rpn.py @@ -0,0 +1,42 @@ +# rpn module +# --gry + + +@plugin +class rpn(object): + def __init__(self, server): + self.server = server + self.commands = ["rpn"] + self.server.handle("command", self.handle_command, self.commands) + + def handle_command(self, channel, user, cmd, args): + if cmd == "rpn": + if len(args) < 1: + self.server.doMessage(channel, user+": reverse-polish-notation calculator. syntax: rpn 2 4 1 + / gives 2/5.") + return + self.stack = [] + for char in args: + try: + char = float(char)# if it succeeds, then char is a number + self.stack.append(char) + except Exception,e: #float(char) failed, it's nonsense or an operator + try: + a = float(self.stack.pop()) #last + b = float(self.stack.pop()) #pre-last + if(char == "+"): + self.stack.append(a + b) + elif(char == "-"): + self.stack.append(b - a) + elif(char == "^"): + self.stack.append(pow(b,a)) + elif(char == "*"): + self.stack.append(a * b) + elif(char == "/"): + self.stack.append(b / a) + except Exception, e: + self.conn.reply(str(e)) + return + try: + self.server.doMessage(channel, user+": "+str(self.stack[0])) + except Exception, e: + return