Бот для рекомендаций фильмов на Python: предложения не зацикливаются, как ожидалосьPython

Программы на Python
Anonymous
Бот для рекомендаций фильмов на Python: предложения не зацикливаются, как ожидалось

Сообщение Anonymous »

Я разрабатываю бота для рекомендаций фильмов, используя библиотеку телеботов на Python и библиотеку IMDbPY для данных о фильмах. Бот предлагает фильмы на основе выбранных пользователем жанров и диапазонов дат.
Ожидаемое поведение
Когда пользователь отвечает «Нет» на предложение фильма, бот должен предложить другое предложение.
Фактическое поведение
Бот предлагает только одно предложение и не рекомендует другой фильм, если пользователь отвечает отрицательно.

Код: Выделить всё

import telebot
from telebot.types import InlineKeyboardMarkup, InlineKeyboardButton
import os
import json
import random
from imdb import Cinemagoer

# Initialize IMDb and bot
imdb = Cinemagoer()
TELEGRAM_API_TOKEN = os.getenv("TELEGRAM_API_TOKEN")
bot = telebot.TeleBot(TELEGRAM_API_TOKEN, parse_mode=None)

# Data structures
user_movie_state = {}

@bot.message_handler(commands=["recommend"])
def recommend_movie(message):
user_id = message.from_user.id
# ... [other code omitted for brevity]
send_movie_suggestion(message, user_id)

def send_movie_suggestion(message, user_id):
# ... [other code omitted for brevity]

while True:
current_movie = random.choice(recommended_movies)
movie_id = current_movie.movieID

if movie_id not in user_movie_state[user_id]["suggested_ids"]:
user_movie_state[user_id]["suggested_ids"].add(movie_id)
break

# Response to the user
# ... [other code omitted for brevity]
markup = InlineKeyboardMarkup()
markup.add(InlineKeyboardButton("Yes", callback_data=json.dumps({"action": "happy"})))
markup.add(InlineKeyboardButton("No", callback_data=json.dumps({"action": "not_happy"})))
bot.send_message(message.chat.id, "Are you happy with this suggestion?", reply_markup=markup)

@bot.message_handler(func=lambda message: message.text.lower() == "no")
def handle_no_response(message):
user_id = message.from_user.id
if user_id in user_movie_state:
send_movie_suggestion(message, user_id)

# Debugging outputs
print(f"[DEBUG] Recommended movies count: {len(recommendations_list)}")
print(f"[DEBUG] Selected movie ID: {movie_id}")
print(f"[DEBUG] Suggested movie ID added: {movie_id}")
Наблюдаемые результаты отладки
Рекомендуемое количество фильмов: 3
Выбранный идентификатор фильма: 9776008
Предлагаемый добавленный идентификатор фильма: 9776008
Предпринятые шаги по отладке
Добавлены операторы отладки для регистрации количества рекомендуемых фильмов и предлагаемых идентификаторов фильмов.
Проверено, что идентификаторы фильмов отслеживаются и правильно обновляются в user_movie_state.
Гарантировано что обработчик ответа на «Нет» снова вызывает функцию предложения.
Дополнительная информация
Ключевая переменная в функции handle_callback_query в настоящее время не используется и помечена flake8, но я не уверен, связано ли это с проблема с рекомендациями.
Будем очень признательны за любую помощь или идеи по решению этой проблемы!
Реализованные рекомендации по фильмам: я создал функцию, которая предлагает фильмы на основе выбранных пользователем жанров и даты. диапазоны.
Обработка отзывов пользователей: я добавил встроенные кнопки клавиатуры для обратной связи с пользователем («Да» или «Нет») по предложениям.
Вывод отладки: я включил отладочные операторы печати для отслеживания рекомендуемого количества фильмов и предлагаются идентификаторы фильмов.
Используется во время True Loop: я внедрил цикл, чтобы гарантировать, что уже предложенные фильмы не будут предлагаться снова.
Проверил предложенные_ids: я подтвердил, что предлагаемые идентификаторы правильно сохраняются, чтобы избежать дублирования.
Я ожидал, что
Я ожидал, что бот будет предлагать новый фильм каждый раз, когда пользователь отвечает «Нет» на предложение.
Я ожидал, что предложения будут циклически перебирать доступные фильмы, не повторяясь, пока все были показаны варианты.
В идеале я ожидал увидеть правильные результаты отладки, отражающие предложения фильмов и состояние рекомендаций.

Подробнее здесь: https://stackoverflow.com/questions/790 ... s-expected

Вернуться в «Python»