1 | from logger import Logger |
||
2 | from event import Event |
||
3 | class Module: |
||
4 | def __init__(self, events=None, printer_handle=None, bot=None, say=None): |
||
5 | self.events = events |
||
6 | self.printer = printer_handle |
||
7 | self.bot = bot |
||
8 | self.interests = [] |
||
9 | |||
10 | self.cmd = None |
||
11 | self.help = None |
||
12 | |||
13 | mod = Event("__.module__") |
||
14 | mod.define(msg_definition="^\.module ") |
||
15 | mod.subscribe(self) |
||
16 | |||
17 | self.bot.register_event(mod, self) |
||
18 | |||
19 | #for event in events: |
||
20 | # if event._type in self.interests: |
||
21 | # event.subscribe(self) |
||
22 | |||
23 | def handle(self, event): |
||
24 | #if not self.bot.conf.getOwner(self.bot.network) == event.user: |
||
25 | if not self.bot.brain._isAdmin(event.user): |
||
26 | return |
||
27 | |||
28 | if event.msg.startswith(".module load"): |
||
29 | self.bot.logger.write(Logger.INFO, " loading " + event.msg.split()[2] + "...", self.bot.NICK) |
||
30 | retval = self.load(event.msg.split()[2]) |
||
31 | if retval == 0: |
||
32 | self.bot.logger.write(Logger.INFO, " loaded " + event.msg.split()[2]) |
||
33 | self.bot.brain.notice(event.channel, "loaded " + event.msg.split()[2]) |
||
34 | View Code Duplication | elif retval == 2: |
|
0 ignored issues
–
show
Duplication
introduced
by
![]() |
|||
35 | self.bot.logger.write(Logger.INFO, " load failed; " + event.msg.split()[2] + " is already loaded") |
||
36 | self.bot.brain.notice(event.channel, "load failed; " + event.msg.split()[2] + " is already loaded") |
||
37 | else: |
||
38 | self.bot.logger.write(Logger.WARNING, " failed to load " + event.msg.split()[2], self.bot.NICK) |
||
39 | self.bot.brain.notice(event.channel, "failed to load " + event.msg.split()[2]) |
||
40 | |||
41 | if event.msg == ".module eventslist": |
||
42 | for m in self.bot.events_list: |
||
43 | print m._type |
||
44 | |||
45 | if event.msg.startswith(".module list"): |
||
46 | # the set prevents a module with multiple events being printed more than once |
||
47 | modules_set = set() |
||
48 | for m in self.bot.events_list: |
||
49 | for s in m.subscribers: |
||
50 | modules_set.add(s.__class__.__name__) |
||
51 | |||
52 | print modules_set |
||
53 | return |
||
54 | |||
55 | if event.msg.startswith(".module unload"): |
||
56 | for m in self.bot.events_list: |
||
57 | for s in m.subscribers: |
||
58 | if event.msg.split()[2].lower() == s.__class__.__name__.lower(): |
||
59 | self.printer("NOTICE " + event.channel + " :unloaded " + event.msg.split()[2] + '\n') |
||
60 | # the events themselves hold onto the subscribing modules, so just remove that one. |
||
61 | m.subscribers.remove(s) |
||
62 | return |
||
63 | |||
64 | if event.msg.startswith(".module reload"): # perform both unloading and reloading |
||
65 | # first unload |
||
66 | for m in self.bot.events_list: |
||
67 | for s in m.subscribers: |
||
68 | try: |
||
69 | if event.msg.split()[2].lower() == s.__class__.__name__.lower(): |
||
70 | #self.printer("NOTICE " + event.channel + " :unloaded " + event.msg.split()[2] + '\n') |
||
71 | # the events themselves hold onto the subscribing modules, so just remove that one. |
||
72 | m.subscribers.remove(s) |
||
73 | except IndexError: |
||
74 | return |
||
75 | # then load |
||
76 | #self.bot.logger.write(Logger.INFO, " loading " + event.msg.split()[2] + "...") |
||
77 | retval = self.load(event.msg.split()[2]) |
||
78 | View Code Duplication | if retval == 0: |
|
0 ignored issues
–
show
|
|||
79 | self.bot.logger.write(Logger.INFO, " reloaded " + event.msg.split()[2], self.bot.NICK) |
||
80 | self.bot.brain.notice(event.channel, "reloaded " + event.msg.split()[2]) |
||
81 | else: |
||
82 | self.bot.logger.write(Logger.WARNING, " failed to reload " + event.msg.split()[2], self.bot.NICK) |
||
83 | self.bot.brain.notice(event.channel, "failed to reload " + event.msg.split()[2]) |
||
84 | |||
85 | |||
86 | def load(self, modulename): |
||
87 | # this may seem redundant, but modules may become unloaded in between calls. |
||
88 | modules_set = set() |
||
89 | for m in self.bot.events_list: |
||
90 | for s in m.subscribers: |
||
91 | modules_set.add(s.__class__.__name__.lower()) |
||
92 | |||
93 | if modulename in modules_set: |
||
94 | return 2 |
||
95 | |||
96 | return self.bot.load_modules(specific=modulename) |
||
97 |