Issues (12)

modules/module.py (2 issues)

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
This code seems to be duplicated in your project.
Loading history...
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
This code seems to be duplicated in your project.
Loading history...
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