def __init__(self, chatbot, alias, config): self._config = {} self._chatbot = {} self._isAlive = True self._alias = None self._tunnel_regex = {} self._message_queue = Queue() self._last_message_sent = time.time() self.MIN_DELAY_BETWEEN_MESSAGES = 0.5 self._roster_changes_last_roster = None Logger.info(self, "%s %s initalizing..." % (alias, config['medium'])) self._alias = alias self._config = config self._chatbot = chatbot Thread(target=self.processMessageQueue, args=()).start() if self._config.has_key('tunnels'): for tunnel_id,patterns in self._config['tunnels'].iteritems(): regexs = [] for pattern in patterns: regexs.append(re.compile(pattern)) self._tunnel_regex[tunnel_id] = regexs
def on_privmsg(self, connection, event): body = string.join(event.arguments, " ") sendern = event.source.nick Logger.info(self._chat_medium, "Privmsg: %s said %s" % (sendern, body)) med = self._chat_medium message = Message(med._alias, med.getMediumName(), med.CHANNEL_TYPE_INDIVIDUAL, sendern, sendern, sendern, body) self._chat_medium.onIrcMessage(message)
def on_pubmsg(self, connection, event): body = string.join(event.arguments, " ") sendern = event.source.nick channel = event.target Logger.info(self._chat_medium, "Pubmsg: %s in %s said %s" % (sendern, channel, body)) med = self._chat_medium message = Message(med._alias, med.getMediumName(), med.CHANNEL_TYPE_GROUP, channel, sendern, sendern, body) self._chat_medium.onIrcMessage(message)
def sendMessage(self, message): super(JabberChatMedium, self).sendMessage(message) assert isinstance(message, babelpr.Message.Message) if(self._xmpp is None): return Logger.info(self, "%s sending %s message to '%s': %s" % (self._alias, message.channel_type, message.channel_id, message.body)) mtype = "chat" if message.channel_type == self.CHANNEL_TYPE_INDIVIDUAL else "groupchat" self._xmpp.send_message(message.channel_id, message.body, None, mtype)
def session_start(self, event): Logger.info(self._chat_medium, "Jabber Session Starting...") self.plugin['xep_0045'].rooms = {} self.send_presence() self.get_roster() if self._chat_medium._config.has_key('channels'): for channel in self._chat_medium._config['channels']: Logger.info(self._chat_medium, "Attempting to join '%s'" % channel) self.plugin['xep_0045'].joinMUC(channel, self._chat_medium.getOwnNick(), wait=True, pfrom=self.boundjid)
def onChangedStatus(self, event): try: # let them know we can do MUC jid = event.get_from() jid_str = "%s" % jid if jid not in self.plugin['xep_0045'].rooms and jid != self.boundjid and jid_str.find("private-chat-") == -1: if jid_str not in self.presence_history: send_it = True else: send_it = time.time() - self.presence_history[jid_str] > 60 if send_it: self.presence_history[jid_str] = time.time() Logger.info(self._chat_medium, "Sending presence to %s..." % jid) data = '<presence to="%s" from="%s"><status /><priority>24</priority><c xmlns="http://jabber.org/protocol/caps" node="http://mail.google.com/xmpp/client/caps" ext="pmuc-v1" ver="1.1" /></presence>' self.send_raw(data % (jid, self.boundjid)) except: pass event_str = "%s" % event if event_str.find('<nick') > 0: matches = self.nick_re.search(event_str) if matches is None: return group = matches.groupdict() from_parts = group['from'].split('/') rooms = self.plugin['xep_0045'].rooms if rooms.has_key(from_parts[0]): self.chatnick_to_nick[from_parts[1]] = group['nick'] user_parts = group['jid'].split('/') if len(user_parts) == 2: self.jid_to_nick[group['jid']] = group['nick']
def on_welcome(self, c, e): config = self._chat_medium._config Logger.info(self._chat_medium, "IRC Bot identifying with nickserv.") self.connection.privmsg("nickserv","identify %s" % config['password']) time.sleep(3) Logger.info(self._chat_medium, "Joining channels...") for channel in config['channels']: Logger.info(self._chat_medium, "Joining channel: %s" % channel) c.join(channel)
def start(self): Logger.info(self, "%s %s starting..." % (self._alias, self._config['medium']))
def setGroupChannel(self, channel): if channel != self._last_group_channel: Logger.info(self, "%s changing main group channel to '%s'" % (self._alias, channel)) self._last_group_channel = channel
def start(self): Logger.info(self._chat_medium, "IRC Bot starting processing loop.") irc.bot.SingleServerIRCBot.start(self) Logger.info(self._chat_medium, "Exiting my connection function.")
def on_disconnect(self, connection, event): Logger.info(self._chat_medium, "Warning: IRC Has disconnected.")