-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathplugin.py
82 lines (64 loc) · 2.21 KB
/
plugin.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
'''
XMPP Bot
Copyright (C) 2011 Eagull.net
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
'''
from handler import Handler
from libChat import Member
import types
class Authorizer(object):
def __init__(self, category):
self._category = category
def __call__(self, fn):
cat = self._category
def replace(caller, user, category, role):
if category != cat:
return False
return fn(caller, user, role)
replace._authorizer = True
return replace
class Plugin(Handler):
def __init__(self):
Handler.__init__(self)
self._bot = None
self._name = self.__class__.__name__
def getDependencies(self):
return tuple()
def setDependency(self, name, dep):
pass
def onLoad(self, bot):
self._bot = bot
self._bot.registerHandler(self)
self._registerInternals()
def onUnload(self):
self._bot.unregisterHandler(self)
self._unregisterInternals()
def onError(self, handler, err, room=None):
message = "Error in handler %s of plugin %s: %s" % (handler, self._name, str(err).strip())
print message.encode('utf-8')
if room is not None:
room.sendMessage(message)
return True
def _registerInternals(self):
for key in dir(self):
func = getattr(self, key)
if hasattr(func, '_command') and 'trigger' in func._command:
self._bot.getDispatcher().registerCommandHandler(func, plugin=self._name)
elif hasattr(func, '_authorizer'):
Member.addRoleHandler(func)
def _unregisterInternals(self):
for key in dir(self):
func = getattr(self, key)
if hasattr(func, '_command') and 'trigger' in func._command:
self._bot.getDispatcher().unregisterCommandHandler(func)
elif hasattr(func, '_authorizer'):
Member.removeRoleHandler(func)