def call_command(self, command, *args): if command in ('NOTICE', 'PRIVMSG'): self.apply_permissions(args[0]) if command == 'PRIVMSG': self.process_privmsg(args[0]) hooks = self.hooks.find('command', command.upper()) Hooks.call(hooks, *args)
def call_event(self, event, *args): hooks = self.hooks.find('event', event) Hooks.call(hooks, *args) if event == 'line': line = args[0] msg = Message(line, self) self.call_command(msg.cmd, msg)
def call_command(self, command, *args): hooks = self.hooks.find('command', command.upper()) Hooks.call(hooks, *args) if command == 'PRIVMSG': msg = args[0] trigger = self.detect_trigger(msg) if trigger: self.call_trigger(trigger, msg)
def do_tick(self, timestamp): hooks = self.hooks.find('timestamp', 0, timestamp) Hooks.call(hooks, timestamp) for hook in hooks: _, desc, _, _, data = hook seconds = data.get('seconds', None) if seconds: with self.hooks.modify(hook): desc[0] += seconds else: self.hooks.uninstall(hook)
def call_trigger(self, trigger, *args): msg = args[0] for depth in range(self.max_trigger, 0, -1): parts = tuple(trigger.split(None, depth)) desc = (depth,) + parts[:depth] hooks = self.hooks.find('trigger', desc) if not hooks: continue targstr = parts[depth] if len(parts) > depth else '' targs = (' '.join(parts[:depth]),) + tuple(targstr.split()) Hooks.call(hooks, msg, targs, targstr)
def do_url(self, msg, url): match = domain_re.match(url) if not match: return domain = match.group(1) hooks = self.hooks.find('url', domain) hooks.extend(self.hooks.find('url', domain.replace('.', ' '))) if Hooks.call(hooks, msg, domain, url): return hooks = self.hooks.find('url', 'any') Hooks.call(hooks, msg, domain, url)
def call_trigger(self, trigger, *args): authorized = True msg = args[0] for depth in range(self.max_trigger, 0, -1): parts = tuple(trigger.split(None, depth)) desc = (depth,) + parts[:depth] hooks = self.hooks.find('trigger', desc) if not hooks: continue for i, hook in enumerate(hooks): plugin = hook[3].im_self._name level = hook[3]._level if level > max(msg.permissions.get('ANY', 0), msg.permissions.get(plugin, 0)): del hooks[i] authorized = False if not hooks: continue targstr = parts[depth] if len(parts) > depth else u'' targs = (' '.join(parts[:depth]),) + tuple(targstr.split()) if Hooks.call(hooks, msg, targs, targstr): break if not authorized: msg.reply("You don't have permission to use that trigger")