Exemple #1
0
class EigoyurusanBot():
    def __init__(self, lock, logger):
        self.twitter = Twitter(logger)
        translate = Translate(logger)
        self.paper = Paper(logger, translate)
        self.lock = lock
        self.logger = logger

    def make_papers_text(self, titles: list, urls: list, *, prefix=''):
        if len("".join(titles)) == 0: prefix += "\n翻訳に失敗しました."

        length = len("\n".join([prefix] + [f'>{u}\n' for u in urls]))
        title_length = (280 - length) // 8
        trim = lambda title: title if len(
            title) <= title_length else title[:title_length - 2] + '..'
        text = "\n".join([prefix] +
                         [f'>{trim(t)}\n{u}' for u, t in zip(titles, urls)])
        return text

    def auto_follow(self):
        self.twitter.followback()

    def auto_tweet(self):
        '''
        Automatically tweets the content of papers
        searched for in random categories
        '''
        category, ret_list = self.paper.getOutputByRandom()
        urls, titles = zip(*ret_list)

        text = self.make_papers_text(titles, urls, prefix=f'#英許_{category[1]}')
        media_ids = self.twitter.upload_papers('./images/auto/eigoyurusan/')
        self.twitter.tweet(text, media_ids=media_ids)

    def reply(self):
        '''
        Get 200 replies to yourself in a tweet on
        the timeline and tweet an image of the
        resulting translation.
        '''
        timeline = self.twitter.get_mentions_custom()
        if len(timeline) == 0:
            self.logger.info("reply tweets doesn't exist.")
            return

        for status in reversed(timeline):
            self.twitter.try_create_favorite(status.id)
        for status in reversed(timeline):
            self.twitter.follow_if_not(status.author.id)
            screen_name = status.author.screen_name
            prefix = f"@{screen_name} "

            #inpが相手の返信内容
            keywords = status.text.replace('\n', ' ').split(" ")
            keywords = [k for k in keywords if "@" not in k]
            keywords = " ".join(keywords)
            keywords = "".join(
                [c for c in keywords if c not in emoji.UNICODE_EMOJI])
            self.logger.info(f"keywords {keywords} are sent by {screen_name}")

            #Keyword search Module
            ret_list, t_keyword = self.paper.getOutputByKeyword(
                screen_name, keywords)

            if len(ret_list) == 0:
                self.logger.info(f"no retlist, {t_keyword}")
                prefix += f'sorry no result for {t_keyword}'
                self.twitter.tweet(prefix, reply_to=status.id)
                continue

            urls, titles = zip(*ret_list)

            if t_keyword != keywords:
                prefix += f":{t_keyword}" if len(
                    t_keyword) < 40 else f":{t_keyword[:37]}..."
            text = self.make_papers_text(titles, urls, prefix=prefix)
            self.logger.info(text)
            media_ids = self.twitter.upload_papers(
                f'./images/reply/{screen_name}/')
            self.twitter.tweet(text, media_ids=media_ids, reply_to=status.id)