Exemple #1
0
class Bot(object):
    def __init__(self, active_plugins):

        self.twi = Twi(
            settings.TWITTER_APP_KEY,
            settings.TWITTER_APP_SECRET,
            settings.TWITTER_OAUTH_TOKEN,
            settings.TWITTER_OAUTH_TOKEN_SECRET,
            settings.SLACK_CHANNEL,
            settings.SEARCH_TERM,
        )

        self.rss = Rss(
            settings.FEEDS,
            settings.SLACK_CHANNEL,
        )

        self.flickr = Flickr(
            settings.FLICKR_TAGS,
            settings.SLACK_CHANNEL,
        )

        self.client = SlackClient(settings.SLACK_API_TOKEN,
                                  bot_icon=settings.SLACK_BOT_ICON,
                                  bot_emoji=settings.SLACK_BOT_EMOJI)

        self.selected_chanel = self.client.find_channel_by_name(
            settings.SLACK_CHANNEL)

        self.active_plugins = active_plugins

    def run(self):
        self.client.rtm_connect()
        _thread.start_new_thread(self.keepactive, tuple())
        self.loop()

    def keepactive(self):
        while True:
            time.sleep(30 * 60)
            self.client.ping()

    def loop(self):
        while True:
            events = self.client.rtm_read()
            # for event in events:
            #     if event.get('type') != 'message':
            #         continue

            if self.active_plugins['twitter']:
                tweets = self.twi.get_next_tweets()
                for tweet in tweets:
                    self.client.send_message(
                        self.selected_chanel,
                        tweet['text'],
                        tweet['attachments'],
                    )

            if self.active_plugins['rss']:
                entries = self.rss.get_next_entries()
                for entry in entries:
                    self.client.send_message(
                        self.selected_chanel,
                        entry['text'],
                        entry['attachments'],
                    )

            if self.active_plugins['flickr']:
                photos = self.flickr.get_next_photos()
                for photo in photos:
                    self.client.send_message(
                        self.selected_chanel,
                        photo['text'],
                        photo['attachments'],
                    )

            time.sleep(10)