def _handle_event(self, conn, event): if 'internal' in event and event['internal']: return conf = conn.manager.config if event['type'] == "command": commands = glob("%s/commands/%s" % (conf.get('root'), event['command'])) else: commands = glob("%s/hooks/%s/*" % (conf.get('root'), event['type'])) if not commands: return vars = os.environ.copy() for key, val in conf.items(): vars["HB_%s" % key.upper()] = str(val) if conn.network.id: vars['HB_NETWORK'] = conn.network.id vars['HB_NICK'] = conn.nickname vars['HB_XML'] = ElementTree.tostring(conn.manager.config) text = "" for key, val in event.iteritems(): if key == 'text': text = val else: vars['HBEV_%s' % key.upper()] = str(val) if 'PERL5LIB' in vars: vars['PERL5LIB'] = "%s:%s" % (conf.get('perl'), vars['PERL5LIB']) else: vars['PERL5LIB'] = conf.get('perl') if 'PYTHONPATH' in vars: vars['PYTHONPATH'] = ("%s:%s" % (conf.get('python'), vars['PYTHONPATH'])) else: vars['PYTHONPATH'] = conf.get('python') deferreds = [] for cmd in commands: if os.access(cmd, os.X_OK): log.debug("Running %s" % cmd) deferred = defer.Deferred() deferreds.append(deferred) proto = HBProcessProtocol(conn, event, deferred) reactor.spawnProcess(proto, cmd, [cmd], vars) if len(deferreds) == 1: return deferreds[0] elif len(deferreds) > 1: return defer.DeferredList(deferreds, consumeErrors=True)
def _handle_event(self, conn, event): if 'internal' in event and event['internal']: return conf = conn.manager.config if event['type'] == "command": commands = glob("%s/commands/%s" % (conf.get('root'), event['command'])) else: commands = glob("%s/hooks/%s/*" % (conf.get('root'), event['type'])) if not commands: return vars = os.environ.copy() for key, val in conf.items(): vars["HB_%s" % key.upper()] = str(val) if conn.network.id: vars['HB_NETWORK'] = conn.network.id vars['HB_NICK'] = conn.nickname vars['HB_XML'] = ElementTree.tostring(conn.manager.config) text = "" for key, val in event.iteritems(): if key == 'text': text = val else: vars['HBEV_%s' % key.upper()] = str(val) if 'PERL5LIB' in vars: vars['PERL5LIB'] = "%s:%s" % (conf.get('perl'), vars['PERL5LIB']) else: vars['PERL5LIB'] = conf.get('perl') if 'PYTHONPATH' in vars: vars['PYTHONPATH'] = ("%s:%s" % (conf.get('python'), vars['PYTHONPATH'])) else: vars['PYTHONPATH'] = conf.get('python') deferreds = [] for cmd in commands: if os.access(cmd, os.X_OK): log.debug("Running %s" % cmd) deferred = defer.Deferred() deferreds.append(deferred) proto = HBProcessProtocol(conn, event, deferred) reactor.spawnProcess(proto, cmd, [cmd], vars) if len(deferreds) == 1: return deferreds[0] elif len(deferreds) > 1: return defer.DeferredList(deferreds, consumeErrors=True)
def signedOn(self): log.info("Signed On!") self.factory.clientConnected(self) for automsg in self.factory.config.findall('automsg'): to = automsg.get('to', None) msg = automsg.get('msg', None) if to and msg: self.msg(to, msg) else: log.error("Invalid automsg: %s" % ElementTree.tostring(automsg)) for autojoin in self.factory.config.findall('autojoin'): chan = autojoin.get('chan', None) password = autojoin.get('password', None) if chan: self.join(chan, password) else: log.error("Invalid autojoin: %s" % ElementTree.tostring(autojoin))
def signedOn(self): log.info("Signed On!") self.factory.clientConnected(self) for automsg in self.factory.config.findall('automsg'): to = automsg.get('to', None) msg = automsg.get('msg', None) if to and msg: self.msg(to, msg) else: log.error("Invalid automsg: %s" % ElementTree.tostring(automsg)) for autojoin in self.factory.config.findall('autojoin'): chan = autojoin.get('chan', None) password = autojoin.get('password', None) if chan: self.join(chan, password) else: log.error("Invalid autojoin: %s" % ElementTree.tostring(autojoin))
def check(self, event): """Check if a command can be run by a user. Returns a tuple: (True/False, message) """ if self._conf is None: acl = None elif event['private']: acl = self.check_private(event['command'], event['sent_by']) else: acl = self.check_public(event['command'], event['sent_by'], event['sent_to']) if acl is None: log.debug("No acl") return (True, "") else: log.debug("Using acl: %s" % ElementTree.tostring(acl).strip()) action = acl.get("action", "") if action == "" or action not in ("allow", "deny"): log.error('Invalid acl action="%s", allowing.' % action) return (action != "deny", acl.get("msg", ""))
def check(self, event): """Check if a command can be run by a user. Returns a tuple: (True/False, message) """ if self._conf is None: acl = None elif event['private']: acl = self.check_private(event['command'], event['sent_by']) else: acl = self.check_public(event['command'], event['sent_by'], event['sent_to']) if acl is None: log.debug("No acl") return (True, "") else: log.debug("Using acl: %s" % ElementTree.tostring(acl).strip()) action = acl.get("action", "") if action == "" or action not in ("allow", "deny"): log.error('Invalid acl action="%s", allowing.' % action) return (action != "deny", acl.get("msg", ""))
def start(_): config = ElementTree.tostring(self.buildConfig()) self.manager = core.HBotManager(xml=config) return self.tester.notify('join', self.nickname)