Ошибки при старой версии python-telegram-bot до 13.0

Частая проблема в версиях любых фреймворков и библиотек касаются и python-telegram-bot. Начиная с 13.0 версии изменились некоторые команды. А если использовать 20.0 версию python-telegram-bot, то их становится еще больше.

А как видно из названия “чатджипити” выдает старый код и в новой версии библиотеки он часто не работает. Самый простой способ, это понизить версию библиотеки с помощью pip install:

pip install python-telegram-bot==12.0.0b1 --upgrade

Либо сначала удалить старую и установить нужную:

pip uninstall python-telegram-bot
pip install python-telegram-bot==12

Ошибка ‘use_context’

Если у вас возникла подобная ошибка:

    updater = Updater(bot=bot, use_context = True)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
TypeError: Updater.__init__() got an unexpected keyword argument 'use_context'
PS E:\xxxx\xxxx> & C:/Users/Big-users/AppData/Local/Programs/Python/Python311/python.exe e:/xxxx/xxxx/bot.py   
Traceback (most recent call last):

В этом случае можете просто удалить аргумент ‘use_context’

Было:

updater = Updater("YOUR TOKEN HERE",use_context=True)

Стало:

updater = Updater("YOUR TOKEN HERE")

Но как правило на этом не закончатся ошибки.

Ошибка ‘update_queue’

Если у вас возникла подобная ошибка:

Traceback (most recent call last):
  File "E:\xxxx\xxxx\bot.py", line 113, in <module>
    updater = Updater(bot=bot)
              ^^^^^^^^^^^^^^^^
TypeError: Updater.__init__() missing 1 required positional argument: 'update_queue'

Ошибка возникает из-за того, что в версии python-telegram-bot 13.0.0 и выше, конструктор класса Updater не принимает аргумент token. Вместо этого, токен должен быть передан в качестве аргумента при создании объекта telegram.Bot.

Для решения этой проблемы, вам нужно изменить код в файле gobot.py, чтобы передать токен при создании объекта telegram.Bot, а затем передать этот объект в качестве аргумента при создании объекта Updater.

Вот пример кода, который вы можете использовать:

import telegram
from telegram.ext import Updater, CommandHandler

# Здесь вы можете определить переменную, содержащую токен вашего бота
TOKEN = 'your_bot_token_here'

# Создаем объект telegram.Bot с использованием токена
bot = telegram.Bot(token=TOKEN)

# Создаем объект Updater, передавая ему объект bot в качестве аргумента
updater = Updater(bot=bot, use_context=True)

# Определяем обработчик команды /start
def start(update, context):
    context.bot.send_message(chat_id=update.effective_chat.id, text="Hello, World!")

# Регистрируем обработчик команды /start
updater.dispatcher.add_handler(CommandHandler('start', start))

# Запускаем бота
updater.start_polling()
updater.idle()

Обратите внимание, что в этом примере мы передаем объект context в функцию обработчика команды start, а затем используем его для отправки сообщения. Это связано с тем, что в версии python-telegram-bot 13.0.0 и выше, объект context используется вместо объекта telegram.ext.CallbackContext.

Проблема решена

Проблема решена следующим способом:

# удаляем установленую версию
pip uninstall python-telegram-bot

# ставим последнюю многопоточную версию python-telegram-bot
pip install python-telegram-bot==13.15 -U

В некоторых случаях поможет установка с другими параметрами:

python3 -m pip install python-telegram-bot==13.15 -U
# или
pip install python-telegram-bot==13.15

 

Список распространенных ошибок, которые могут возникнуть при работе с Python-telegram-bot:

  1. Ошибки синтаксиса Python: Это может быть связано с неправильным использованием синтаксиса Python, например, неправильным использованием скобок, операторов или неправильным форматированием строк.
  2. Ошибки конфигурации бота: Это может быть связано с неправильной настройкой бота, например, неправильным указанием токена бота или неправильной настройкой обработчиков сообщений.
  3. Ошибки обработки ошибок: Это может быть связано с неправильной обработкой ошибок, например, когда бот не обрабатывает исключения, которые могут возникнуть при выполнении определенных операций.
  4. Ошибки взаимодействия с Telegram API: Это может быть связано с проблемами взаимодействия с API Telegram, например, когда бот не может отправить сообщение или получить информацию о пользователе.
  5. Ошибки, связанные с работой в многопоточной среде: Это может быть связано с проблемами, возникающими при работе в многопоточной среде, например, когда бот не может правильно обрабатывать сообщения, полученные от разных пользователей одновременно.

 

Вывод

Основная разница между версиями 13.0 и 20.0 заключается в том, что версия 20.0 включает множество новых функций и улучшений, которые были отсутствуют в версии 13.0. Рассмотрим плюсы и минусы каждой версии.

Python-telegram-bot 13.0

Плюсы:

  1. Имеет достаточный набор функций для большинства задач, связанных с созданием телеграм-ботов.
  2. Устойчивая версия с множеством постоянных обновлений.
  3. Используется широким сообществом и обладает известной документацией.

Минусы:

  1. Некоторые функции в ней были устаревшими, а определенные улучшения и функции, которые были включены в более новые версии, отсутствуют.
  2. Необходимость использования множества дополнительных сторонних библиотек и плагинов для реализации некоторых функций.

Python-telegram-bot 20.0

Плюсы:

  1. Включает множество новых функций и усовершенствований, таких как более гибкая и более простая в использовании конфигурация бота.
  2. Многопоточность, которая избавляет разработчиков ботов от необходимости заботиться о многопоточности вручную.
  3. Встроенные функции контроля версий.

Минусы:

  1. Некоторые функции могут не работать так, как ожидалось, в случае если разработчик не обновит свой код к новым API.
  2. В процессе работы с новым фреймворком у разработчиков может возникнуть некоторая необходимость изучения новых функций, которые были добавлены в новые версии.

Таким образом, при выборе между версиями 13.0 и 20.0 нужно руководствоваться необходимостью реализации конкретной функции или набора функций. Если вам нужен базовый набор функций, то версия 13.0 подойдет. Если вы хотите использовать более новые функции и усовершенствования, то следует использовать версию 20.0.

Еще можно добавить, если вы новичок, то точно не стоит выбирать двадцатую версию библиотеки. В этом случае вы можете закопаться в ошибках на ровном месте.

А с какими ошибками вы встречались в данной библиотеке? Пишите в комментариях …