コード例 #1
0
ファイル: stream.py プロジェクト: ayanamist/TwiOtaku
    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'])
コード例 #2
0
ファイル: bot.py プロジェクト: ayanamist/TwiOtaku
 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)
コード例 #3
0
ファイル: command.py プロジェクト: ayanamist/TwiOtaku
 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)
コード例 #4
0
ファイル: cron.py プロジェクト: ayanamist/TwiOtaku
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()
コード例 #5
0
ファイル: worker.py プロジェクト: ayanamist/TwiOtaku
 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)
コード例 #6
0
ファイル: stream.py プロジェクト: ayanamist/TwiOtaku
 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)