From 69272f8b08b103fb7de5073fa8ce10e552ac27c2 Mon Sep 17 00:00:00 2001 From: FurryHead <furryhead14@yahoo.com> Date: Sun, 19 Jun 2011 15:38:47 +0000 Subject: [PATCH] Fixed doMode; Misc plugin fixes --- .gitignore | 3 +++ guppy.py | 35 ++++++++++++++------------ irc.py | 2 +- plugins/auth.py | 6 ++--- plugins/channeltools.py | 53 +++++++++++++++++++++++++++++++++------- plugins/dynacode.py | 2 ++ plugins/plugintools.py | 54 ++++++++++++++++++----------------------- 7 files changed, 96 insertions(+), 59 deletions(-) diff --git a/.gitignore b/.gitignore index 0d20b64..36dac5c 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,4 @@ *.pyc +conf +*.cfg +*.db diff --git a/guppy.py b/guppy.py index f750b10..3a80b14 100644 --- a/guppy.py +++ b/guppy.py @@ -16,7 +16,6 @@ # # You should have received a copy of the GNU General Public License # along with guppy. If not, see <http://www.gnu.org/licenses/>. -import argparse import sys import os import ConfigParser @@ -34,13 +33,7 @@ class main(object): print(" |___/ |_| |_| |___/ version "+self.version) print("") - if 'HOME' in os.environ: - self.directory = os.environ['HOME'] + '/.guppy/' - elif 'HOMEPATH' in os.environ: - self.directory = os.environ['HOMEPATH'] + '/.guppy/' - else: - self.directory = os.getcwd() + '/conf/' - + self.directory = os.getcwd() + '/conf/' print("Settings directory: %s" % self.directory) if not os.path.exists(self.directory): @@ -48,19 +41,29 @@ class main(object): self.configpath = self.directory + 'main.cfg' self.logpath = self.directory + 'main.log' - parser = argparse.ArgumentParser(description="Start guppy - a modular Python IRC bot.") - parser.add_argument("-c", "--makeconf", required=False, help="generate a new configuration file",action='store_true') - parser.add_argument("-v", "--version", required=False, help="display version information and exit.",action='store_true') - args = parser.parse_args(sys.argv[1:]) - if args.version == True: + helptext = """ +usage: guppy.py [-h] [-c] [-v] + +Start guppy - a modular Python IRC bot. + +optional arguments: + -h, --help show this help message and exit + -c, --makeconf generate a new configuration file + -v, --version display version information and exit. +""" + if "-h" in sys.argv[1:] or "--help" in sys.argv[1:]: + print helptext + exit() + + if "-v" in sys.argv[1:] or "--version" in sys.argv[1:]: exit() + + if "-c" in sys.argv[1:] or "--makeconf" in sys.argv[1:]: + self.makeconf() if os.path.isfile(self.configpath) == False: print("No configuration file found, running makeconf") self.makeconf() - - if args.makeconf == True: - self.makeconf() self.config = ConfigParser.RawConfigParser() self.config.read(self.configpath) diff --git a/irc.py b/irc.py index 778932c..034ca30 100644 --- a/irc.py +++ b/irc.py @@ -371,5 +371,5 @@ class IRC(asynchat.async_chat): self.pluginManager.event("part", channel, User(self.config["nickname"]), message) def doMode(self, channel, mode, user=""): - self.sendLine("MODE "+channel+" "+mode+user) + self.sendLine("MODE "+channel+" "+mode+" "+user) self.pluginManager.event("mode", channel, User(self.config["nickname"]), mode, user) diff --git a/plugins/auth.py b/plugins/auth.py index 1f16f23..2f8dc05 100644 --- a/plugins/auth.py +++ b/plugins/auth.py @@ -204,9 +204,9 @@ class Auth(object): for user in mlist: nick, pw = user.split(":") self.mods[nick] = [pw, pw == ''] - - onick = self.server.config["owner_nick"].lower() - if not onick in self.owners.keys(): + + else: + onick = self.server.config["owner_nick"].lower() self.owners[onick] = ['', True] def isOwner(self, user): diff --git a/plugins/channeltools.py b/plugins/channeltools.py index 92f3e6b..26bc105 100644 --- a/plugins/channeltools.py +++ b/plugins/channeltools.py @@ -3,16 +3,51 @@ class ChannelTools(object): def __init__(self, server): self.server = server - self.commands = [ "join", "part" ] + self.server.pluginManager.loadPlugin("auth") + self.commands = [ "join", "part", "kick", "ban", "mute", "unban", "unmute", "op", "deop", "voice", "devoice", "unop", "unvoice" ] self.server.handle("command", self.handle_command, self.commands) def handle_command(self, channel, user, cmd, args): if self.server.getPlugin("auth").isAdmin(user): - if len(args) < 1: - self.server.doMessage(channel, user+": Not enough arguments.") - return - - if cmd == "join": - self.server.doJoin(args[0]) - elif cmd == "part": - self.server.doPart(args[0]) + if cmd == "op": + if len(args) < 1: + self.server.doMode(channel, "+o", user) + else: + self.server.doMode(channel, "+o", args[0]) + elif cmd == "deop" or cmd == "unop": + if len(args) < 1: + self.server.doMode(channel, "-o", user) + else: + self.server.doMode(channel, "-o", args[0]) + elif cmd == "voice": + if len(args) < 1: + self.server.doMode(channel, "+v", user) + else: + self.server.doMode(channel, "+v", args[0]) + elif cmd == "devoice" or cmd == "unvoice": + if len(args) < 1: + self.server.doMode(channel, "-v", user) + else: + self.server.doMode(channel, "-v", args[0]) + else: + + if len(args) < 1: + self.server.doMessage(channel, user+": Not enough arguments.") + return + + if cmd == "join": + self.server.doJoin(args[0]) + elif cmd == "part": + self.server.doPart(args[0]) + elif self.server.config["nickname"] not in args[0]: + if cmd == "ban": + self.server.doMode(channel, "+b", args[0]) + self.server.doKick(channel, args[0], "Banned!") + elif cmd == "unban": + self.server.doMode(channel, "-b", args[0]) + elif cmd == "mute": + self.server.doMode(channel, "+q", args[0]) + elif cmd == "unmute": + self.server.doMode(channel, "-q", args[0]) + elif cmd == "kick": + self.server.doKick(channel, args[0], "Kicked!") diff --git a/plugins/dynacode.py b/plugins/dynacode.py index ecc80ba..34d0e6d 100644 --- a/plugins/dynacode.py +++ b/plugins/dynacode.py @@ -1,8 +1,10 @@ import sys +@plugin class DynaCode(object): def __init__(self, server): self.server = server + self.server.pluginManager.loadPlugin("auth") self.commands = [ "py" ] self.server.handle("command", self.handle_command, self.commands) diff --git a/plugins/plugintools.py b/plugins/plugintools.py index 9a744bb..8ce51ec 100644 --- a/plugins/plugintools.py +++ b/plugins/plugintools.py @@ -12,13 +12,8 @@ class PluginLoader(object): if self.server.getPlugin("auth").isMod(user): if cmd == "reloadall": self.server.pluginManager.unloadAllPlugins() - errs = self.server.pluginManager.loadAllPlugins() - if errs: - errStr = "" - for k,v in errs: - errStr += "Plugin "+k+": "+v+" ----- " - self.server.doMessage(channel, user+": Exceptions occurred with the following plugins: "+errStr) - return + self.server.pluginManager.loadAllPlugins() + self.server.doMessage(channel, user+": Reloaded all plugins") elif cmd == "allplugins": self.server.doMessage(channel, user+": Available plugins: "+" ".join(sys.modules["irc"].plugins.pList.keys())) return @@ -28,38 +23,37 @@ class PluginLoader(object): return if cmd == "load": - err = self.server.pluginManager.loadPlugin(args[0]) - if err is not None: - if err == "Module has already been loaded.": - self.server.doMessage(channel, user+": Plugin "+args[0]+" has already been loaded.") + if self.server.pluginManager.pluginExists(args[0]): + if self.server.pluginManager.loadedPlugin(args[0]): + self.server.doMessage(channel, user+": Plugin "+args[0]+" has already been loaded") else: - self.server.doMessage(channel, user+": Exception loading plugin "+args[0]+": "+err) + self.server.pluginManager.loadPlugin(args[0]) + self.server.doMessage(channel, user+": Successfully loaded plugin "+args[0]) else: - self.server.doMessage(channel, user+": Successfully loaded plugin "+args[0]+".") + self.server.doMessage(channel, user+": No such plugin "+args[0]) elif cmd == "unload": - if args[0] == self.__module__+"."+self.__class__.__name__: - self.server.doMessage(channel, user+": You can't unload the plugin loader front-end. (You can reload it, though!)") - return - - err = self.server.pluginManager.unloadPlugin(args[0]) - if err is not None: - if err == "Plugin "+args[0]+" is not loaded.": - self.server.doMessage(channel, user+": Plugin "+args[0]+" has not been loaded.") + if self.server.pluginManager.pluginExists(args[0]): + if self.server.pluginManager.loadedPlugin(args[0]): + self.server.pluginManager.unloadPlugin(args[0]) + self.server.doMessage(channel, user+": Successfully unloaded plugin "+args[0]) else: - self.server.doMessage(channel, user+": Exception unloading plugin "+args[0]+": "+err) + self.server.doMessage(channel, user+": Plugin "+args[0]+" has not been loaded") else: - self.server.doMessage(channel, user+": Successfully unloaded plugin "+args[0]+".") + self.server.doMessage(channel, user+": No such plugin "+args[0]) elif cmd == "reload": - err = self.server.pluginManager.reloadPlugin(args[0]) - if err is not None and err: - self.server.doMessage(channel, user+": Exception reloading plugin "+args[0]+": "+" ".join([k+": "+v for k,v in err.items()])) + if self.server.pluginManager.pluginExists(args[0]): + if self.server.pluginManager.loadedPlugin(args[0]): + self.server.pluginManager.reloadPlugin(args[0]) + self.server.doMessage(channel, user+": Successfully reloaded plugin "+args[0]) + else: + self.server.doMessage(channel, user+": Plugin "+args[0]+" has not been loaded") else: - self.server.doMessage(channel, user+": Successfully reloaded plugin "+args[0]+".") + self.server.doMessage(channel, user+": No such plugin "+args[0]) elif cmd == "loaded": if self.server.pluginManager.loadedPlugin(args[0]): - self.server.doMessage(channel, user+": Plugin "+args[0]+" is loaded.") + self.server.doMessage(channel, user+": Plugin "+args[0]+" is loaded") else: if self.server.pluginManager.pluginExists(args[0]): - self.server.doMessage(channel, user+": Plugin "+args[0]+" is not loaded.") + self.server.doMessage(channel, user+": Plugin "+args[0]+" is not loaded") else: - self.server.doMessage(channel, user+": Plugin "+args[0]+" does not exist.") + self.server.doMessage(channel, user+": Plugin "+args[0]+" does not exist") -- GitLab