def reverse_image_search(
        self, bot: Bot, update: Update, media_file: str, message: Promise = None
    ):
        """Send a reverse image search link for the image sent to us

        Args:
            bot (:obj:`telegram.bot.Bot`): Telegram Api Bot Object.
            update (:obj:`telegram.update.Update`): Telegram Api Update Object
            media_file (:obj:`str`): Path to file to search for
            message (:obj:`telegram.message.Message`, optional): An message object to update. Instead of sending a new
        """

        image_extension = os.path.splitext(media_file)[1]
        image_name = "irs-" + str(uuid4())[:8]

        (
            iqdb_search,
            google_search,
            tineye_search,
            bing_search,
            yandex_search,
            saucenao_search,
            trace_search,
        ) = (
            IQDBReverseImageSearchEngine(),
            GoogleReverseImageSearchEngine(),
            TinEyeReverseImageSearchEngine(),
            BingReverseImageSearchEngine(),
            YandexReverseImageSearchEngine(),
            SauceNaoReverseImageSearchEngine(),
            TraceReverseImageSearchEngine(),
        )

        image_url = iqdb_search.upload_image(
            media_file, image_name + image_extension, remove_after=3600
        )

        if os.path.isfile(image_url):
            reply = "This bot is not configured for this functionality, contact an admin for more information /support."
            message = message.result()
            if message:
                message.edit_text(reply, reply_to_message_id=update.message.message_id)
            else:
                update.message.reply_text(
                    reply, reply_to_message_id=update.message.message_id
                )
            return

        button_list = [
            [InlineKeyboardButton(text="Go To Image", url=image_url)],
            [
                iqdb_search.button(image_url),
                saucenao_search.button(image_url),
            ],
            [
                google_search.button(image_url),
                yandex_search.button(image_url),
            ],
            [
                bing_search.button(image_url),
                trace_search.button(image_url),
            ],
            [
                tineye_search.button(image_url),
            ],
        ]

        reply = (
            "Tap on the search engine of your choice. For an even better experience with more search providers and"
            " in telegram search results use @reverse_image_search_bot."
        )
        reply_markup = InlineKeyboardMarkup(button_list)

        message = message.result()
        if message:
            bot.edit_message_text(
                chat_id=update.message.chat_id,
                message_id=message.message_id,
                text=reply,
                reply_markup=reply_markup,
            )
        else:
            update.message.reply_text(text=reply, reply_markup=reply_markup)
Example #2
0
    def reverse_image_search(self,
                             bot: Bot,
                             update: Update,
                             media_file: str,
                             message: Promise = None):
        """Send a reverse image search link for the image sent to us

        Args:
            bot (:obj:`telegram.bot.Bot`): Telegram Api Bot Object.
            update (:obj:`telegram.update.Update`): Telegram Api Update Object
            media_file (:obj:`str`): Path to file to search for
            message (:obj:`telegram.message.Message`, optional): An message object to update. Instead of sending a new
        """

        image_extension = os.path.splitext(media_file)[1]
        image_name = 'irs-' + str(uuid4())[:8]

        iqdb_search, google_search, tineye_search, bing_search, yandex_search = (
            IQDBReverseImageSearchEngine(), GoogleReverseImageSearchEngine(),
            TinEyeReverseImageSearchEngine(), BingReverseImageSearchEngine(),
            YandexReverseImageSearchEngine())

        image_url = iqdb_search.upload_image(media_file,
                                             image_name + image_extension,
                                             remove_after=3600)

        if os.path.isfile(image_url):
            reply = 'This bot is not configured for this functionality, contact an admin for more information /support.'
            message = message.result()
            if message:
                message.edit_text(
                    reply, reply_to_message_id=update.message.message_id)
            else:
                update.message.reply_text(
                    reply, reply_to_message_id=update.message.message_id)
            return

        iqdb_url, google_url, tineye_url, bing_url, yandex_url = (
            iqdb_search.get_search_link_by_url(image_url),
            google_search.get_search_link_by_url(image_url),
            tineye_search.get_search_link_by_url(image_url),
            bing_search.get_search_link_by_url(image_url),
            yandex_search.get_search_link_by_url(image_url))

        button_list = [[
            InlineKeyboardButton(text='Go To Image', url=image_url)
        ],
                       [
                           InlineKeyboardButton(text='IQDB', url=iqdb_url),
                           InlineKeyboardButton(text='GOOGLE', url=google_url),
                       ],
                       [
                           InlineKeyboardButton(text='YANDEX', url=yandex_url),
                           InlineKeyboardButton(text='BING', url=bing_url),
                       ],
                       [
                           InlineKeyboardButton(text='TINEYE', url=tineye_url),
                       ]]

        reply = 'Tap on the search engine of your choice.'
        reply_markup = InlineKeyboardMarkup(button_list)

        message = message.result()
        if message:
            bot.edit_message_text(chat_id=update.message.chat_id,
                                  message_id=message.message_id,
                                  text=reply,
                                  reply_markup=reply_markup)
        else:
            update.message.reply_text(text=reply, reply_markup=reply_markup)