]>
jfr.im git - erebus.git/blob - modules/control.py
1 # Erebus IRC bot - Author: Erebus Team
2 # Various highly recommended "control" commands.
3 # This file is released into the public domain; see http://unlicense.org/
7 'author': 'Erebus Team',
8 'license': 'public domain',
16 lib
= modlib
.modlib(__name__
)
17 modstart
= lib
.modstart
23 from collections
import deque
26 @lib.hook(('die','restart'), needchan
=False, glevel
=lib
.MANAGER
)
27 @lib.help(None, "stops the bot")
28 def die(bot
, user
, chan
, realtarget
, *args
):
29 for botitem
in bot
.parent
.bots
.itervalues():
30 for chan
in botitem
.chans
:
31 chan
.fastmsg("Bot is restarting! %s" % ' '.join(args
))
32 bot
.conn
.send("QUIT :Restarting.")
36 @lib.hook(needchan
=False, glevel
=lib
.MANAGER
)
37 @lib.help("<mod>", "loads a module")
39 def modload(bot
, user
, chan
, realtarget
, *args
):
40 okay
= ctlmod
.load(bot
.parent
, args
[0])
42 bot
.msg(user
, "Loaded %s" % (args
[0]))
44 bot
.msg(user
, "Error loading %s: %r" % (args
[0], okay
))
46 @lib.hook(needchan
=False, glevel
=lib
.MANAGER
)
47 @lib.help("<mod> [FORCE]", "unloads a module", "will refuse to unload a module which is depended on by others", "unless you specify FORCE.")
49 def modunload(bot
, user
, chan
, realtarget
, *args
):
50 if len(ctlmod
.dependents
[args
[0]]) > 0:
51 if len(args
) == 1 or args
[1].lower() != "force":
52 bot
.msg(user
, "That module has dependents! Say MODUNLOAD %s FORCE to unload it and any dependents." % (args
[0]))
54 okay
= ctlmod
.unload(bot
.parent
, args
[0])
56 bot
.msg(user
, "Unloaded %s" % (args
[0]))
58 bot
.msg(user
, "Error unloading %s: %r" % (args
[0], okay
))
60 @lib.hook(needchan
=False, glevel
=lib
.MANAGER
)
61 @lib.help("<mod>", "reloads a module")
63 def modreload(bot
, user
, chan
, realtarget
, *args
):
64 okay
= ctlmod
.reloadmod(bot
.parent
, args
[0])
66 bot
.msg(user
, "Reloaded %s" % (args
[0]))
68 bot
.msg(user
, "Error occurred: %r" % (okay
))
70 @lib.hook(needchan
=False, glevel
=lib
.STAFF
)
71 @lib.help(None, "list loaded modules")
73 def modlist(bot
, user
, chan
, realtarget
, *args
):
75 for modname
, mod
in mods
.iteritems():
76 bot
.msg(user
, "- %s (%s) [%s]" % ((modname
, mod
.__file
__, ', '.join(ctlmod
.dependents
[modname
]))))
77 bot
.msg(user
, "Done.")
79 def _whois(user
, chan
, showglevel
=True, showclevel
=True):
80 if not user
.isauthed():
83 fillers
= {'auth': user.auth}
86 if showglevel
and user
.glevel
>= 1:
87 fillers
['glevel'] = user
.glevel
88 fmt
+= " (global access: %(glevel)s)"
89 elif user
.glevel
>= 1:
94 if showclevel
and chan
is not None:
95 if chan
.levelof(user
.auth
) >= 1:
96 fillers
['clevel'] = chan
.levelof(user
.auth
)
97 fmt
+= " (channel access: %(clevel)s)"
99 fmt
+= " (not a channel user)"
102 @lib.hook(needchan
=False)
103 @lib.help("<user>", "shows who someone is")
105 def whois(bot
, user
, chan
, realtarget
, *args
):
106 target
= bot
.parent
.user(args
[0], create
=False)
108 bot
.msg(user
, "I don't know %s." % (args
[0]))
110 bot
.msg(user
, "%s is %s" % (args
[0], _whois(target
, chan
, (user
.glevel
>= 1), (chan
is not None and chan
.levelof(user
.auth
) >= 1))))
112 @lib.hook(needchan
=False)
113 @lib.help(None, "shows who you are")
114 def whoami(bot
, user
, chan
, realtarget
, *args
):
115 bot
.msg(user
, "You are %s" % (_whois(user
, chan
)))
117 @lib.hook(needchan
=False)
118 @lib.help(None, "tries to read your auth and access level again")
119 def auth(bot
, user
, chan
, realtarget
, *args
):
120 bot
.msg(user
, "Okay, give me a second.")
121 bot
.conn
.send("WHO %s n%%ant,2" % (user
))
123 @lib.hook(needchan
=False, glevel
=1)
124 @lib.help(None, "displays length of each msgqueue")
125 def qstat(bot
, user
, chan
, realtarget
, *args
):
126 bot
.fastmsg(user
, "Regular: %d -- Slow: %d" % (len(bot
.msgqueue
), len(bot
.slowmsgqueue
)))
128 @lib.hook(needchan
=False, glevel
=lib
.ADMIN
)
129 @lib.help("[regular|slow]", "clears both or a specific msgqueue")
130 def qclear(bot
, user
, chan
, realtarget
, *args
):
132 bot
.msgqueue
= deque()
133 bot
.slowmsgqueue
= deque()
134 bot
.fastmsg(user
, "Cleared both msgqueues.")
136 if args
[0] == 'regular':
137 bot
.msgqueue
= deque()
138 elif args
[0] == 'slow':
139 bot
.slowmsgqueue
= deque()
141 bot
.fastmsg(user
, "Syntax: QCLEAR [regular|slow]")
142 return #short-circuit
143 bot
.fastmsg(user
, "Cleared that msgqueue.")