Каковы ошибки в коде чат-бота и как их можно исправить?

Как настроить обработчики сообщений в чат-боте в Telegram, чтобы решить проблему с ошибкой при нажатии на кнопку? Вот мой код, который выдает ошибку при нажатии на кнопку в чат-боте:

```python
@bot.message_handler(commands=['start'])
def start(message):
    markup = types.ReplyKeyboardMarkup()
    btn1 = types.KeyboardButton('website')
    btn2 = types.KeyboardButton('delete photo')
    btn3 = types.KeyboardButton('edit text')
    markup.row(btn1)
    markup.row(btn2,btn3)
    bot.send_message(message.chat.id, 'Hello', reply_markup=markup)
    bot.register_message_handler(message, on_click)

def on_click(message):
    if message.text == 'website':
        bot.send_message(message.chat.id, 'website is open')
    elif message.text == 'Удалить фото':
        bot.send_message(message.chat.id, 'удаленно')
```

При этом, почему-то возникает ошибка, связанная с `bot.polling(none_stop=True, interval=0)`, но при этой строке все работает нормально. Что я делаю неправильно? Нужна помощь, пожалуйста!
  • 30 декабря 2023 г. 12:17
Ответы на вопрос 1
В коде чат-бота есть несколько ошибок. Вот исправленный код:

```python
# Импортируем необходимые модули
from telebot import TeleBot, types

# Создаем экземпляр бота
bot = TeleBot('токен_бота')

# Обработчик команды /start
@bot.message_handler(commands=['start'])
def start(message):
    markup = types.ReplyKeyboardMarkup()
    btn1 = types.KeyboardButton('website')
    btn2 = types.KeyboardButton('delete photo')
    btn3 = types.KeyboardButton('edit text')
    markup.row(btn1)
    markup.row(btn2, btn3)
    bot.send_message(message.chat.id, 'Hello', reply_markup=markup)

# Обработчик нажатия на кнопку
@bot.message_handler(func=lambda message: True)
def on_click(message):
    if message.text == 'website':
        bot.send_message(message.chat.id, 'website is open')
    elif message.text == 'delete photo':
        bot.send_message(message.chat.id, 'удалено')
    elif message.text == 'edit text':
        bot.send_message(message.chat.id, 'текст отредактирован')

# Запуск бота
bot.polling(none_stop=True)
```

Ошибки:

1. Ошибка в обработчике `on_click`: Ошибка заключается в том, что `bot.register_message_handler` излишне присутствует в коде. Вместо этого, вы должны использовать декоратор `@bot.message_handler(func=lambda message: True)`, чтобы указать, что обработчик должен вызываться для всех сообщений, а не только для команды `/start`.
2. Ошибка в обработчике команды `/start`: В коде вы передаете `message` параметр в `bot.register_message_handler`, но это ненужно. Его нужно убрать из кода.
3. Неправильное условие для проверки сообщения `delete photo`: В вашем коде условие `if message.text == 'Удалить фото'` должно быть `if message.text == 'delete photo'`, чтобы совпадать с текстом кнопки.

Что касается ошибки, возникающей при вызове `bot.polling(none_stop=True, interval=0)`, то она вызывается из-за того, что вы используете функцию `bot.polling` без параметра-события (например, `bot.polling(none_stop=True)`). В вашем коде это нормально, так как она используется для запуска вебхука, но если вы не планируете использовать вебхуки, вы можете просто удалить эту строку.
Похожие вопросы