Как можно добавить кнопку к сообщению, которое вы хотите переслать?

У меня есть скрипт, который пересылает посты в мою группу от моего имени. Я хотел бы добавить кнопку к пересылаемым сообщениям, которая будет выполнять определенные команды, однако текущий код не работает, и я не смог найти причину ошибки. Можете помочь? <br/> <br/> <pre><code class="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('Проверить продавца')

                # Пересылаем сообщение с кнопкой
                await client.send_message('t.me...',
                                          event.message,
                                          buttons=[[button]])
                await client.send_message("Нажмите на кнопку 'Проверить продавца'",
                                          buttons=[[button]])


@client.on(events.CallbackQuery)
async def callback_handler(event):
    seller_nick = event.data.decode('utf-8')  # Декодируем данные кнопки

    # 
  • 28 марта 2025 г. 13:54
Ответы на вопрос 2
Ваша задача заключается в добавлении кнопки к пересылаемым сообщениям, и чтобы это работало правильно. Поскольку ваш текущий код не работает, давайте разберем некоторые моменты.

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...'`) на актуальные значения. Надеюсь, это поможет вам решить вашу задачу!
Сообщение пересылается так: 
client.forward_messages(chat_id, from_chat_id, message_ids)

То что ты делаешь, это копирование текста сообщения.
Но кнопку добавить не получится, так как для этого, тебе нужно залогиниться как бот.
Ты же, судя по коду, залогинился в Telethon, как юзер.
Похожие вопросы