def refresh_user(self): logger.debug('%s: refresh user.' % self._bare_jid) self.user = db.get_user_from_jid(self._bare_jid) self.blocked_ids = list() if self.user['blocked_ids']: for blocked_id in self.user['blocked_ids'].split(','): try: blocked_id = int(blocked_id) except ValueError: pass else: self.blocked_ids.append(blocked_id) self.list_ids = list() if self.user['list_ids']: for list_id in self.user['list_ids'].split(','): try: list_id = int(list_id) except ValueError: pass else: self.list_ids.append(list_id) self.track_words = [x.lower() for x in self.user['track_words'].split(',')] if self.user['track_words'] else [] self.user_at_screen_name = '@%s' % self.user['screen_name'] self.api = twitter.Api(consumer_key=config.OAUTH_CONSUMER_KEY, consumer_secret=config.OAUTH_CONSUMER_SECRET, access_token_key=self.user['access_key'], access_token_secret=self.user['access_secret'])
def add_online_user(self, bare_jid): self.start_worker(bare_jid) self.start_stream(bare_jid) queue = self.worker_threads[bare_jid].job_queue user = db.get_user_from_jid(bare_jid) self._sched.add_interval_job(functools.partial(cron.cron_timeline, user=user, queue=queue), seconds=cron.CRON_INTERVAL) self._sched.add_interval_job(functools.partial(cron.cron_block, user=user, xmpp=self), seconds=cron.CRON_BLOCKED_IDS_INTERVAL) self._sched.add_interval_job(functools.partial(cron.cron_list, user=user, xmpp=self), seconds=cron.CRON_LIST_IDS_INTERVAL)
def process(self, msg): self._jid = str(msg['from']) self._bare_jid = self._xmpp.getjidbare(self._jid).lower() self._user = db.get_user_from_jid(self._bare_jid) self._job = {"jid": self._jid} self._queue = None if self._user: self._util = util.Util(self._user) t = self._xmpp.worker_threads.get(self._bare_jid) if t: self._queue = t.job_queue self._api = twitter.Api(consumer_key=config.OAUTH_CONSUMER_KEY, consumer_secret=config.OAUTH_CONSUMER_SECRET, access_token_key=self._user.get('access_key'), access_token_secret=self._user.get('access_secret')) try: self.parse_command(msg['body']) except Exception, e: self._job["title"] = str(e)
def cron_list(user, xmpp): if user['list_user'] and user['list_name']: api = twitter.Api(consumer_key=config.OAUTH_CONSUMER_KEY, consumer_secret=config.OAUTH_CONSUMER_SECRET, access_token_key=user['access_key'], access_token_secret=user['access_secret']) thread = xmpp.stream_threads.get(user['jid']) cursor = -1 list_ids = set() while cursor: try: result = api.get_list_members(user['list_user'], user['list_name'], cursor=cursor) except twitter.NotFoundError: break for x in result['users']: list_ids.add(x['id_str']) cursor = result['next_cursor'] user = db.get_user_from_jid(user['jid']) if (list_ids and user['list_ids'] is None) or (list_ids ^ set((user['list_ids'] or '').split(','))): db.update_user(id=user['id'], list_ids=','.join(list_ids)) thread.user_changed()
def running(self, item): if isinstance(item, mythread.ThreadStop): raise item bare_jid = self._xmpp.getjidbare(item["jid"]).lower() user = db.get_user_from_jid(bare_jid) if self._xmpp.get_presence(bare_jid) or not item.get("not_always") or (user and user['always']): data = item.get("data") title = item.get("title") if data is None: if title is not None: self._xmpp.send_message(item["jid"], item["title"]) else: _util = util.Util(user) _util.no_duplicate = item.get("no_duplicate") result = _util.parse_data(data) if result or (not result and title and not item.get("not_command")): if title: msg = u'%s\n%s' % (item["title"], '\n'.join(result) if isinstance(result, list) else result) self._xmpp.send_message(item["jid"], msg) else: for m in result: self._xmpp.send_message(item["jid"], m)
def check_user_changed(self): if self.is_user_changed(): self._user_changed = threading.Event() self.user = db.get_user_from_jid(self._bare_jid)