Написал телеграм бота через Chat-GPT, при запуске кода выходит ошибка
Сам код бота:
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 не дает ответа для исправления этой ошибки, я обновлял библиотеки, но это не помогло.
Если заходить через пайчарм, то ошибки начинаются с самого начала, я не знаю насколько это нормально.