Переодически в боте всплывает такая капча, 1) Задачи всегда со смайликами еды 2) Все используемые эмодзи в этой капче: 3) Ответ надо выбрать из 6 вариантов
matBast0s , так а как сделать чтобы он потом понял на какой кнопке находится арбуз и нажимал на нее, тк когда капча вылазит, там всегда разные фрукты
там, где "": ["яблок", "яблоко"], в "" вставь внутри эмодзи соответствующее, пример: "<ЭМОДЗИ_ЯБЛОКА>": ["яблок", "яблоко"], тут почему то эмодзи нельзя вставить, я вставляю, но при публикации комента все эмодзи очищаются import asyncio from telethon import TelegramClient, events from telethon.tl.types import ReplyInlineMarkup # Словарь эмодзи еды -> названия (русский) FOOD_EMOJI_MAP = { "": ["яблок", "яблоко"], "": ["клубник", "клубника"], "": ["виноград"], "": ["арбуз"], "": ["****"], "": ["персик"], "": ["вишн", "черешн"], "": ["лимон"], "": ["мандарин", "апельсин"], "": ["ананас"], "": ["манго"], "": ["банан"], "": ["груш"], "": ["дын"], "": ["голубик", "черник"], "": ["томат", "помидор"], "": ["кокос"], "": ["авокадо"], } def find_target_emoji(caption: str) -> str | None: """Находит нужный эмодзи по тексту капчи.""" caption_lower = caption.lower() for emoji, keywords in FOOD_EMOJI_MAP.items(): if any(kw in caption_lower for kw in keywords): return emoji return None def solve_captcha(message) -> int | None: """ Возвращает индекс кнопки для нажатия. Кнопки идут в 2 ряда по 3. """ text = message.text or message.message or "" target_emoji = find_target_emoji(text) if not target_emoji: return None markup = message.reply_markup if not isinstance(markup, ReplyInlineMarkup): return None idx = 0 for row in markup.rows: for button in row.buttons: btn_text = button.text.strip() if target_emoji in btn_text: return idx idx += 1 return None async def handle_captcha(event): msg = event.message button_index = solve_captcha(msg) if button_index is not None: print(f"Капча найдена! Нажимаю кнопку #{button_index}") await asyncio.sleep(1.5) # Небольшая задержка — выглядит естественнее await msg.click(button_index) else: print("Не удалось распознать капчу:", msg.text) async def main(): client = TelegramClient("session", API_ID, API_HASH) await client.start(phone=PHONE) BOT_USERNAME = "@your_bot" # username бота @client.on(events.NewMessage(from_users=BOT_USERNAME)) async def on_message(event): msg = event.message text = (msg.text or "").lower() # Проверяем что это капча if "капч" in text or "активировать" in text or "нажми" in text: await handle_captcha(event) print("Слушаю сообщения...") await client.run_until_disconnected() API_ID = 123456 # my.telegram.org API_HASH = "your_hash" PHONE = "+79001234567" asyncio.run(main()) Python import asyncio from telethon import TelegramClient, events from telethon.tl.types import ReplyInlineMarkup # Словарь эмодзи еды -> названия (русский) FOOD_EMOJI_MAP = { "": ["яблок", "яблоко"], "": ["клубник", "клубника"], "": ["виноград"], "": ["арбуз"], "": ["****"], "": ["персик"], "": ["вишн", "черешн"], "": ["лимон"], "": ["мандарин", "апельсин"], "": ["ананас"], "": ["манго"], "": ["банан"], "": ["груш"], "": ["дын"], "": ["голубик", "черник"], "": ["томат", "помидор"], "": ["кокос"], "": ["авокадо"], } def find_target_emoji(caption: str) -> str | None: """Находит нужный эмодзи по тексту капчи.""" caption_lower = caption.lower() for emoji, keywords in FOOD_EMOJI_MAP.items(): if any(kw in caption_lower for kw in keywords): return emoji return None def solve_captcha(message) -> int | None: """ Возвращает индекс кнопки для нажатия. Кнопки идут в 2 ряда по 3. """ text = message.text or message.message or "" target_emoji = find_target_emoji(text) if not target_emoji: return None markup = message.reply_markup if not isinstance(markup, ReplyInlineMarkup): return None idx = 0 for row in markup.rows: for button in row.buttons: btn_text = button.text.strip() if target_emoji in btn_text: return idx idx += 1 return None async def handle_captcha(event): msg = event.message button_index = solve_captcha(msg) if button_index is not None: print(f"Капча найдена! Нажимаю кнопку #{button_index}") await asyncio.sleep(1.5) # Небольшая задержка — выглядит естественнее await msg.click(button_index) else: print("Не удалось распознать капчу:", msg.text) async def main(): client = TelegramClient("session", API_ID, API_HASH) await client.start(phone=PHONE) BOT_USERNAME = "@your_bot" # username бота @client.on(events.NewMessage(from_users=BOT_USERNAME)) async def on_message(event): msg = event.message text = (msg.text or "").lower() # Проверяем что это капча if "капч" in text or "активировать" in text or "нажми" in text: await handle_captcha(event) print("Слушаю сообщения...") await client.run_until_disconnected() API_ID = 123456 # my.telegram.org API_HASH = "your_hash" PHONE = "+79001234567" asyncio.run(main()) Ключевые моменты message.reply_markup — содержит все кнопки инлайн-клавиатуры msg.click(index) — нажимает кнопку по порядковому индексу (0–5) Задержка asyncio.sleep(1.5) снижает риск блокировки за слишком быстрый ответ Словарь FOOD_EMOJI_MAP можно расширять под другие эмодзи капчи