@FLAB_B

Телеграм бот. Как исправить ошибку Updater.__init__() missing 1 required positional argument: 'update_queue'?

Написал телеграм бота через Chat-GPT, при запуске кода выходит ошибка
6424163a397ad924097038.png

Сам код бота:
from warnings import filterwarnings
from telegram.warnings import PTBUserWarning

filterwarnings(action="ignore", message=r".*CallbackQueryHandler", category=PTBUserWarning)

# Исправленный код без ошибки
import telegram
from telegram import InlineKeyboardButton, InlineKeyboardMarkup
from telegram.ext import Updater, CommandHandler, CallbackQueryHandler, MessageHandler
# Изменил импорт Filters на MessageFilter, так как Filters больше не поддерживается
from telegram.ext.filters import MessageFilter
import requests
# Добавил импорт bs4
from bs4 import BeautifulSoup
import time
import threading
# Исправленный код без ошибки
# Токен бота
TOKEN = '6279852230:AAHje-Kvg7UHbiMN5JjVeDks-5KdBtJFw'
# Список фриланс бирж для поиска заказов
websites = ['https://www.upwork.com', 'https://www.freelancer.com', 'https://www.fiverr.com']
# Список пользователей
users = []
# Класс для хранения информации о каждом заказе
class Order:
    def __init__(self, title, url, description, website):
        self.title = title
        self.url = url
        self.description = description
        self.website = website
# Класс для хранения информации о каждом пользователе
class User:
    def __init__(self, chat_id, keywords, orders):
        self.chat_id = chat_id
        self.keywords = keywords
        self.orders = orders
# Функция для получения заказов с биржи в соответствии с ключевыми словами
def get_orders(keywords, website):
    orders = []
    for kw in keywords:
        url = f"{website}/projects/?q={kw}"
        response = requests.get(url)
        soup = BeautifulSoup(response.content, "html.parser")
        projects = soup.find_all("div", {"class": "project-view"})
        for project in projects:
            title = project.find("div", {"class": "title"}).text.strip()
            url = f"{website}{project.find('a')['href']}"
            description = project.find("div", {"class": "description"}).text.strip()
            order = Order(title, url, description, website)
            orders.append(order)
    return orders
# Функция для отправки заказов пользователю в личные сообщения
def send_orders(bot, update, user):
    for order in user.orders:
        response = f"{order.title}\n{order.description}\n{order.url}"
        bot.send_message(chat_id=update.message.chat_id, text=response)
        time.sleep(0.5)
# Функция для обработки команды /start
def start(bot, update):
    chat_id = update.message.chat_id
    user = User(chat_id, [], [])
    users.append(user)
    response = "Привет! Я могу помочь тебе найти заказы на фриланс биржах. Чтобы добавить ключевые слова, нажми на кнопку 'Добавить ключевые слова'. Чтобы остановить поиск заказов, нажми на кнопку 'Остановить поиск заказов'."
    bot.send_message(chat_id=chat_id, text=response, reply_markup=start_keyboard())
# Функция для обработки команды /add_keywords
def add_keywords(bot, update):
    chat_id = update.message.chat_id
    user = get_user(chat_id)
    response = "Введите ключевые слова через запятую:"
    bot.send_message(chat_id=chat_id, text=response)
    return "ADD_KEYWORDS"
# Функция для обработки ввода ключевых слов от пользователя
def handle_keywords(bot, update):
    chat_id = update.message.chat_id
    user = get_user(chat_id)
    keywords = update.message.text.split(",")
    user.keywords.extend([kw.strip() for kw in keywords])
    response = "Ключевые слова добавлены."
    bot.send_message(chat_id=chat_id, text=response, reply_markup=start_keyboard())
    return -1
# Функция для обработки команды /remove_keywords
def remove_keywords(bot, update):
    chat_id = update.message.chat_id
    user = get_user(chat_id)
    user.keywords = []
    response = "Ключевые слова удалены."
    bot.send_message(chat_id=chat_id, text=response, reply_markup=start_keyboard())
# Функция для обработки команды /stop_search
def stop_search(bot, update):
    chat_id = update.message.chat_id
    user = get_user(chat_id)
    user.orders = []
    response = "Поиск заказов остановлен."
    bot.send_message(chat_id=chat_id, text=response, reply_markup=start_keyboard())
# Функция для обработки запроса на отправку заказов пользователю
def get_user_orders(bot, update):
    chat_id = update.message.chat_id
    user = get_user(chat_id)
    if user.orders:
        send_orders(bot, update, user)
    else:
        response = "Заказов нет."
        bot.send_message(chat_id=chat_id, text=response, reply_markup=start_keyboard())
# Функция для получения пользователя по chat_id
def get_user(chat_id):
    for user in users:
        if user.chat_id == chat_id:
            return user
    return None
# Функция для создания клавиатуры с кнопками
def start_keyboard():
    keyboard = [[InlineKeyboardButton("Добавить ключевые слова", callback_data=";add_keywords")],
                [InlineKeyboardButton("Удалить ключевые слова", callback_data="remove_keywords")],
                [InlineKeyboardButton("Получить заказы", callback_data="get_orders")],
                [InlineKeyboardButton("Остановить поиск заказов", callback_data="stop_search")]]
    return InlineKeyboardMarkup(keyboard)
# добавил отступы и исправил расположение return
# Функция для обработки нажатия на кнопки
def button_handler(bot, update):
    query = update.callback_query
    chat_id = query.message.chat_id
    user = get_user(chat_id)
    command = query.data
    if command == "add_keywords":
        bot.send_message(chat_id=chat_id, text="Введите ключевые слова через запятую:")
        return"ADD_KEYWORDS"
    elif command == "remove_keywords":
        user.keywords = []
        response ="Ключевые слова удалены."
        bot.edit_message_text(chat_id=chat_id, message_id=query.message.message_id, text=response, reply_markup=start_keyboard())
    elif command == "get_orders":
        orders = []
        for website in websites:
            orders.extend(get_orders(user.keywords, website))
        user.orders = orders
        send_orders(bot, update, user)
    elif command == "stop_search":
        user.orders = []
        response = "Поиск заказов остановлен"
        bot.edit_message_text(chat_id=chat_id, message_id=query.message.message_id, text=response, reply_markup=start_keyboard())
# Функция для запуска бота
# Исправленный код без ошибки
def main():
    import telegram
    bot_token = '6279852230:AAHje-Kvg7UHbiMN5JeDks-5K3dBtJFrw'
    updater = telegram.ext.Updater(bot_token)
    dp = updater.dispatcher
    dp.add_handler(CommandHandler("start", start))
    dp.add_handler(CommandHandler("add_keywords", add_keywords))
    dp.add_handler(MessageHandler(Filters.text, handle_keywords))
    dp.add_handler(CommandHandler("remove_keywords", remove_keywords))
    dp.add_handler(CommandHandler("stop_search", stop_search))
    dp.add_handler(CommandHandler("get_orders", get_user_orders))
    dp.add_handler(CallbackQueryHandler(button_handler))
    updater.start_polling()
    updater.idle()
if __name__ == "__main__":
    main()

Я не сильно силен в Пайтон и начал пока изучать основы.
Пожалуйста помогите с этой ошибкой.
Сам chat GPT не дает ответа для исправления этой ошибки, я обновлял библиотеки, но это не помогло.
Если заходить через пайчарм, то ошибки начинаются с самого начала, я не знаю насколько это нормально.
  • Вопрос задан
  • 4443 просмотра
Пригласить эксперта
Ответы на вопрос 3
JustKappaMan
@JustKappaMan
Frontend, backend, desktop. Всего понемногу.
Я не сильно силен в Пайтон и начал пока изучать основы.

Написал телеграм бота через Chat-GPT.

Нет слов, одни эмоции. Так и начни с основ, а не лезь в написание Телеграм ботов, если даже не знаешь что такое аргумент. Chat-GPT - ужасный инструмент, если ты ничего не смыслишь в программировании. Часто генерирует полный бред. По личному опыту: сносно генерирует лишь docstrings, и то приходится половину текста править. Берись за официальную документацию Питона и лекции на канале МФТИ, а не за Chat-GPT.
Ответ написан
@veselcraft
Оратор выше, который вам абсолютно никак не помог и порекомендовав глянуть туториалы, совершенно не прав, потому что дело даже не в том, что вы пишете код через ChatGPT, а просто в слишком новой версии библиотеки python-telegram-bot, о которой чат-бот ещё ничего не знает.

Думаю, что вам этот ответ уже не нужен, но если не хотите особо заморачиваться, просто сделайте даунгрейд либы:

pip install python-telegram-bot==13.13

Но лучше всего самостоятельно разобраться в новой версии библиотеки и переписать всё ваше сокровище под неё. Понимаю, новичку трудно, но зная азы программирования вскоре сможете выучить любой другой язык :)
Ответ написан
Комментировать
@KlucH
По существу не подскажу, но ради всего святого, убери токен, если хочешь показать кому-то свой код
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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