X-Git-Url: https://jfr.im/git/erebus.git/blobdiff_plain/023239aa0ba60717e35ecc6bfea7772bb00b2ca5..56580e4e6b07ddb00b7046e77dc007626ce130fb:/modules/admin_channel.py diff --git a/modules/admin_channel.py b/modules/admin_channel.py index 2899f02..88a6c5a 100644 --- a/modules/admin_channel.py +++ b/modules/admin_channel.py @@ -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,57 @@ 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 %s." % (chan)) - - 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> []', "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(' ', "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.MANAGER) -@lib.help('', "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.deleting = True + 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)