@Akmal009

Не могу понять почему выводит ошибка use_context если я его уже прописал?

def main():
    updater = Updater(
        "Token"
    )   
    dp = updater.dispatcher
    dp.add_handler(CommandHandler("start", start))
    dp.add_handler(MessageHandler(filters.text & ~filters.command, answer_questions))
    dp.add_handler(MessageHandler(filters.regex(r"^(Одобрить|Отказать)$"), decision))
    dp.add_handler(MessageHandler(filters.all, handle_invalid_message))
    updater.start_polling()
    updater.idle()
if __name__ == '__main__':
    main()

при попытке запуска выводит ошибку
File "d:\CARTIER GANG BOT\main.py", line 108, in
main()
File "d:\CARTIER GANG BOT\main.py", line 97, in main
updater = Updater(
TypeError: Updater.__init__() missing 1 required positional argument: 'update_queue'
добавляю это
updater = Updater(
        "Token", update_queue=telegram.ext.Queue()
    )

После выводит ошибку
Traceback (most recent call last):
File "d:\CARTIER GANG BOT\main.py", line 108, in
main()
File "d:\CARTIER GANG BOT\main.py", line 98, in main
"Token", update_queue=telegram.ext.Queue()
AttributeError: module 'telegram.ext' has no attribute 'Queue'
Но после прописал use_context=True так как она мне нужна
updater = Updater(
        "Token", use_context=True
    )

после выводит ошибку
Traceback (most recent call last):
File "d:\CARTIER GANG BOT\main.py", line 108, in
main()
File "d:\CARTIER GANG BOT\main.py", line 97, in main
updater = Updater(
TypeError: Updater.__init__() got an unexpected keyword argument 'use_context'
Сможете помочь почему эти ошибки выходят?

В новой версии импортирование Filters не рабоает, если вместо F написать f то проблема не выходит
Traceback (most recent call last):
File "d:\CARTIER GANG BOT\main.py", line 2, in
from telegram.ext import Updater, CommandHandler, MessageHandler, Filters
ImportError: cannot import name 'Filters' from 'telegram.ext'
Может быть из за этого выводит ошибку, и сейчас я когда убрал use_context просит update_queue, с той же ошибкой
Traceback (most recent call last):
File "d:\CARTIER GANG BOT\main.py", line 108, in
main()
File "d:\CARTIER GANG BOT\main.py", line 97, in main
updater = Updater(
TypeError: Updater.__init__() missing 1 required positional argument: 'update_queue'

Или же связано с другой стороны кода, вот весь код
исходный код
import telegram
from telegram.ext import Updater, CommandHandler, MessageHandler, Filters
from telegram import ReplyKeyboardMarkup, ReplyKeyboardRemove 
# Обработчик команды /start
def start(update, context):
    reply_text = "Здарова, я как понял ты хочешь вступить в нашу семью CARTIER GANG?\n" \
                 "Отлично, но тут у нас принимаются по определенным критериям\n" \
                 "Ответь на вопросы, если ты нам подходишь мы примим тебя в нашу семью CARTIER GANG"
    reply_markup = ReplyKeyboardMarkup([["Согласен"]], one_time_keyboard=True)
    update.message.reply_text(reply_text, reply_markup=reply_markup)
# Обработчик ответа пользователя на вопросы
def answer_questions(update, context):
    message = update.message.text
    if message == "Согласен":
        context.user_data["username"] = None
        context.user_data["years_in_state"] = None
        context.user_data["lawfulness"] = None
        context.user_data["rp_terms"] = None
        context.user_data["age"] = None
        context.user_data["adequacy_help"] = None
        reply_text = "Для начала мне бы узнать твой ник в игре\nПример: Mahmud_Uzbekov"
        update.message.reply_text(reply_text)
    elif context.user_data["username"] is None:
        if "_" not in message:
            update.message.reply_text("Напиши свой ник через _")
        elif any(char.isdigit() for char in message):
            update.message.reply_text("В твоем нике не должна быть цифра")
        else:
            context.user_data["username"] = message
            update.message.reply_text(f"{message}\nАха, запомнил")
            reply_text = "Следующий вопрос, сколько лет проживаете в штате?\nОткрой инвентарь и посмотрите через паспорт"
            update.message.reply_text(reply_text)
    elif context.user_data["years_in_state"] is None:
        if not message.isdigit():
            update.message.reply_text("К сожалению ты нам не подходишь, так как ты в нашем штате недавно, и еще не ознакомлен с местностью")
        elif int(message) < 5:
            update.message.reply_text("К сожалению ты нам не подходишь, так как ты в нашем штате недавно, и еще не ознакомлен с местностью")
        else:
            context.user_data["years_in_state"] = message
            update.message.reply_text("То что нужно, продолжаем вопрос")
            reply_text = "Скажи ка мне свое законопослушность\nОткрой инвентарь и посмотрите через паспорт"
            update.message.reply_text(reply_text)
    elif context.user_data["lawfulness"] is None:
        if not message.isdigit():
            update.message.reply_text("К сожалению ты нам не подходишь, так как нам нужны законный члены семьи")
        elif int(message) < 50:
            update.message.reply_text("К сожалению ты нам не подходишь, так как нам нужны законный члены семьи")
        else:
            context.user_data["lawfulness"] = message
            update.message.reply_text("Молодец не нарушаешь")
            reply_text = "Теперь проверим твои знание на РП термины\n" \
                         "Что означает СК, ДМ, ТК - Напиши кратко и понятно"
            update.message.reply_text(reply_text)
    elif context.user_data["rp_terms"] is None:
        context.user_data["rp_terms"] = message
        update.message.reply_text("Хорошо, записал твой ответ")
        reply_text = "Скажи ка свой возраст в реальности"
        update.message.reply_text(reply_text)
    elif context.user_data["age"] is None:
        if not message.isdigit():
            update.message.reply_text("К сожалению ты мал для нашей семьи")
        elif int(message) < 14:
            update.message.reply_text("К сожалению ты мал для нашей семьи")
        else:
            context.user_data["age"] = message
            update.message.reply_text("Так-с записал")
            reply_text = "Как вы оцениваете свое адекватность и будете ли помогать развивать семью?"
            update.message.reply_text(reply_text)
    elif context.user_data["adequacy_help"] is None:
        context.user_data["adequacy_help"] = message
        update.message.reply_text("И это тоже записал")
        reply_text = "Теперь ожидайте одобрение от старшего в семье, мы сообщим вам если вас одобрят"
        update.message.reply_text(reply_text)
        # Отправка информации старшим пользователям
        user_info = f"1.Ник: {context.user_data['username']}\n" \
                    f"2.В штате: {context.user_data['years_in_state']}\n" \
                    f"3.Законопослушности: {context.user_data['lawfulness']}\n" \
                    f"4.Рп термин: {context.user_data['rp_terms']}\n" \
                    f"5.Возраст: {context.user_data['age']}\n" \
                    f"Адекват и помощь: {context.user_data['adequacy_help']}"
        context.bot.send_message(chat_id="@aziz_muhammadjonov", text=user_info)
        context.bot.send_message(chat_id="@Akmal2337", text=user_info)
        reply_markup = ReplyKeyboardMarkup([["Одобрить", "Отказать"]], one_time_keyboard=True)
        update.message.reply_text("Ожидайте одобрение...", reply_markup=reply_markup)
# Обработчик кнопок "Одобрить" и "Отказать"
def decision(update, context):
    message = update.message.text
    if message == "Одобрить":
        reply_text = "Вы были приняты в семью, ожидаем вас у нашего дома пока нету"
    else:
        reply_text = "К сожалению вы нам не подходите"
    update.message.reply_text(reply_text, reply_markup=ReplyKeyboardRemove())
# Обработчик некорректных сообщений
def handle_invalid_message(update, context):
    update.message.reply_text("Извините, я не понимаю ваш ответ.")
def main():
    updater = Updater(
        "Token"
    )   
    dp = updater.dispatcher
    dp.add_handler(CommandHandler("start", start))
    dp.add_handler(MessageHandler(Filters.text() & ~Filters.command, answer_questions))
    dp.add_handler(MessageHandler(Filters.regex(r"^(Одобрить|Отказать)$"), decision))
    dp.add_handler(MessageHandler(Filters.all, handle_invalid_message))
    updater.start_polling()
    updater.idle()
if __name__ == '__main__':
    main()
  • Вопрос задан
  • 781 просмотр
Пригласить эксперта
Ответы на вопрос 1
metalexs
@metalexs
Ошибки, которые вы получаете, могут быть связаны с тем, что ваша версия библиотеки python-telegram-bot устарела или, наоборот, слишком новая по отношению к коду, который вы используете.

В более новых версиях python-telegram-bot, параметр use_context является обязательным и уже не нуждается в явном указании, так как по умолчанию use_context=True. Следовательно, если вы используете более новую версию, вам не нужно передавать use_context=True при создании объекта Updater.

Касательно ошибки с update_queue, этот параметр больше не используется в конструкторе Updater в более новых версиях библиотеки. Опять же, если у вас новая версия, вам не нужно явно указывать update_queue.

Попробуйте следующее:

Удалите параметры use_context и update_queue:
updater = Updater("Token")

Если это не работает, проверьте версию библиотеки, которую вы используете:
pip show python-telegram-bot

Если версия ниже 12.0, обновите библиотеку:
pip install python-telegram-bot --upgrade

Также, убедитесь, что у вас правильно настроены обработчики, и они соответствуют версии библиотеки. Например, в новых версиях filters.text и filters.command должны быть вызваны как методы:
dp.add_handler(MessageHandler(Filters.text() & ~Filters.command, answer_questions))


Если после всех этих шагов у вас по-прежнему возникают проблемы, вам нужно будет проверить, соответствует ли ваш код версии библиотеки python-telegram-bot, которую вы используете, и возможно, обновить ваш код.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы