]> jfr.im git - erebus.git/blobdiff - modules/admin_channel.py
update comments
[erebus.git] / modules / admin_channel.py
index 0f9f7fe36ef1cacff547be89e7083df514deadf1..68e15e53732e911a6ce642f2b63113d0cf3d03a6 100644 (file)
@@ -1,6 +1,6 @@
 # Erebus IRC bot - Author: Erebus Team
 # vim: fileencoding=utf-8
-# simple module example
+# Channel list management (add, remove channels)
 # This file is released into the public domain; see http://unlicense.org/
 
 # module info
@@ -25,65 +25,58 @@ modstop = lib.modstop
 
 # module code
 
-@lib.hook(clevel=lib.FRIEND)
-@lib.help(None, "rejoin a channel (if the bot has been kicked)")
-def rejoin(bot, user, chan, realtarget, *args):
-       bot.join(str(chan))
-       bot.msg(user, "Rejoined.")
-
-
 def _resolve_user(s):
-       if s.startswith("#"):
-               return lib.parent.User(s, s[1:])
+    if s.startswith("#"):
+        return lib.parent.User(s, s[1:])
+    else:
+        return lib.parent.user(s, create=False)
+
+@lib.hook(needchan=False, glevel=lib.STAFF)
+@lib.help('<#channel> [<nick|#auth>]', "adds a channel and makes the user (yourself by default) its owner")
+@lib.argsGE(1)
+def join(bot, user, chan, realtarget, *args):
+       chname = args[0]
+       target = user
+       if len(args) > 1:
+               target = _resolve_user(args[1])
+               if target is None:
+                       user.msg('User not found (try #auth)')
+                       return
+       if chname[0] != "#":
+               user.msg('Channel must start with a #')
+               return
+       if bot.parent.channel(chname) is not None:
+               user.msg('Channel already exists, maybe you need to !REJOIN it?')
+               return
+
+       bot.parent.query("INSERT INTO chans (bot, chname, active) VALUES (%s, %s, 1)", (bot.permnick, chname))
+
+       chan = bot.parent.newchannel(bot, chname)
+       bot.chans.append(chan)
+       bot.join(chan)
+
+       if chan.setlevel(target.auth, lib.COWNER):
+               return 'Added channel'
        else:
-               return lib.parent.user(s, create=False)
-
-
-def _resolve_level(s):
-       s = s.lower()
-       levels = ['unknown'] + [x.lower() for x in lib.clevs if x is not None]
-       if s in levels:
-               return levels.index(s)
-       try:
-               return int(s)
-       except:
-               pass
-
-
-@lib.hook(('clevel','setlevel','chanlev'), clevel=lib.FRIEND)
-@lib.help('<nick|#auth> <level>', "adds or sets a user's channel access level", "Levels: Unknown, " + ', '.join([x for x in lib.clevs if x]))
-@lib.argsEQ(2)
-def clevel(bot, user, chan, realtarget, *args):
-       target = _resolve_user(args[0])
-       level = _resolve_level(args[1])
-       user_clevel = chan.levelof(user.auth)
-
-       if target is None:
-               return "User not found (try #auth)"
-       if target.auth is None:
-               return "User is not authed"
-       if level is None or level < 0 or level > lib.COWNER:
-               return "Level is unknown"
-
-       target_clevel = chan.levelof(target.auth)
-
-       if not (target == user and level == 0) and user_clevel != lib.COWNER:
-               if user_clevel < lib.MASTER:
-                       return "I'm afraid I can't let you do that. You can only reset your own level to 0."
-               if user_clevel <= target_clevel:
-                       return "I'm afraid I can't let you do that. Your current access level is not higher than theirs."
-               if user_clevel <= level:
-                       return "I'm afraid I can't let you do that. Your current access level is not higher than you are trying to set."
-
-       chan.setlevel(target.auth, level)
-       return "Set #%s channel level to %s" % (target.auth, args[1])
-
-
-@lib.hook(glevel=lib.OWNER)
-@lib.help('<level>', "sets your own clevel on a channel")
-@lib.argsEQ(1)
-def forceclevel(bot, user, chan, realtarget, *args):
-       target = user.auth
-       level = _resolve_level(args[0])
-       chan.setlevel(target, level)
-       return 'Your level on %s has been set to %d' % (chan, level)
+               return "An error occurred!"
+
+
+def _part(user, chan):
+       chan.bot.chans.remove(chan)
+       del lib.parent.chans[chan.name.lower()]
+       lib.parent.query("DELETE FROM chusers WHERE chan = %s", (chan,))
+       lib.parent.query("DELETE FROM chans WHERE chname = %s", (chan,))
+       chan.bot.part(chan)
+       user.msg('Removed channel')
+
+@lib.hook(clevel=lib.COWNER)
+@lib.help(None, "removes the bot from a channel")
+@lib.argsEQ(0)
+def part(bot, user, chan, realtarget, *args):
+       return _part(user, chan)
+
+@lib.hook(glevel=lib.ADMIN)
+@lib.help(None, "removes the bot from a channel")
+@lib.argsEQ(0)
+def fpart(bot, user, chan, realtarget, *args):
+       return _part(user, chan)