Ваша задача заключается в добавлении кнопки к пересылаемым сообщениям, и чтобы это работало правильно. Поскольку ваш текущий код не работает, давайте разберем некоторые моменты.
1. **Использование `buttons`**: В методе `send_message()` для асинхронного клиента Telethon нужно использовать `buttons` в правильном формате. Вместо передачи кнопки как первой части параметра `send_message`, у вас есть опция указать их отдельно.
2. **Работа с `CallbackQuery`**: Вам нужно правильно обрабатывать действия, связанные с кнопками, и убедиться, что данные, которые вы хотите передать с кнопкой, корректны.
Вот переработанная версия вашего кода с учетом этих моментов:
```python
from telethon import TelegramClient, events, Button
import re
# Создаем клиент
client = TelegramClient('TestRSL', api_id, api_hash)
# Обработчик новых сообщений
@client.on(events.NewMessage(chats=('t.me/hinyatest3', ...)))
async def handler(event):
if event.message.message is not None:
if '100%' in event.message.message or re.search(r'(^|[^0-9])\s*?(%)', event.message.message) \
or re.search('бесплатно', event.message.message, re.IGNORECASE) \
or re.search(r'(^|[^0-9])0\s*?(руб|р|₽|рублей)', event.message.message, re.IGNORECASE):
# Извлечение ника продавца
seller_nick = re.search(r'@\w+', event.message.message)
if seller_nick:
seller_nick = seller_nick.group(0) # Получаем ник в формате @username
# Создаем кнопку для проверки продавца с данными
button = Button.inline('Проверить продавца', data=seller_nick)
# Пересылаем сообщение с кнопкой
await client.send_message('t.me...',
f"{event.message.message}\n\nНажмите на кнопку ниже:",
buttons=[[button]])
@client.on(events.CallbackQuery)
async def callback_handler(event):
seller_nick = event.data.decode('utf-8') # Декодируем данные кнопки
# Здесь вы можете реализовать действие для проверки продавца
await event.respond(f"Вы нажали на кнопку для проверки продавца: {seller_nick}")
# Запускаем клиента
client.start()
client.run_until_disconnected()
```
### Изменения, внесенные в код:
1. **Передача данных с кнопкой**: Теперь кнопка `Button.inline()` включает `data=seller_nick`, что позволит вам обрабатывать имя продавца в `CallbackQuery`.
2. **Отправка сообщения с кнопкой**: Вместо пересылки оригинального сообщения с кнопкой, создается новое сообщение с текстом и кнопкой.
3. **Исправлена обработка `CallbackQuery`**: Добавлен метод `event.respond()`, чтобы увидеть результат нажатия кнопки.
Не забудьте заменить `api_id`, `api_hash` и адрес канала (`'t.me...'`) на актуальные значения. Надеюсь, это поможет вам решить вашу задачу!