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