Exemple #1
0
    def cmd_reload(self, user, target, params):
        if not self.bot.is_admin(user):
            return False

        self.log('Will reload all modules')

        mem_before = meminfo.memory()

        memory, names, failed, total = {}, [], 0, 0
        for channel in self.bot.channels:
            memory[channel] = []
            for module in self.bot.channels[channel]['modules'][:]:
                if module.name == self.name:
                    continue
                memory[channel].append(module.name)
                if not names.count(module.name):
                    names.append(module.name)
                module._shutdown()
                self.bot.channels[channel]['modules'].remove(module)

        for name in names:
            self.log('Reloading module %s' % name)
            m = __import__('%s' % name, globals(), locals(), ['*'])
            total += 1
            try:
                reload(m)
            except:
                traceback.print_exc()
                failed += 1

        onload = self.bot.config['onload']
        for channel in onload['channels']:
            for module in onload['channels'][channel]['modules']:
                if module == self.name:
                    continue
                total += 1
                try:
                    c = classloader._get_class('modules.%s.Module' % module)
                    m = c(self.bot, channel)
                    self.bot.channels[channel]['modules'].append(m)
                except:
                    traceback.print_exc()
                    failed += 1

        mem_after = meminfo.memory()

        if mem_after > mem_before:
            mem_msg = 'Memory increased by %d bytes.' % \
                (mem_after - mem_before)
        elif mem_after < mem_before:
            mem_msg = 'Memory decreased by %d bytes.' % \
                (mem_before - mem_after)
        else:
            mem_msg = 'Memory didn\'t change.'

        self.log('Reloading modules finished. %s' % mem_msg)
        self.chanmsg('Reload done. %s' % mem_msg)
Exemple #2
0
    def cmd_load(self, user, channel, params):
        if not self.bot.is_admin(user):
            return False

        nick = user.split('!', 1)[0]
        name = params.strip()

        modules = [x.name for x in self.bot.channels[channel]['modules']]
        if modules.count(name):
            self.chanmsg('Module %s already running' % name)
            return False

        try:
            c = classloader._get_class('modules.%s.Module' % name)
        except:
            self.chanmsg('Module %s not found' % name)
            return False

        m = c(self.bot, channel)
        self.bot.channels[channel]['modules'].append(m)
        self.bot.config['onload']['channels'][channel]['modules'].append(name)
        self.bot.save()
        self.chanmsg('Module %s has been loaded' % name)
        return True