Files
PrimoAranaraBot/bot/utils/interesting_facts.py
2025-09-08 16:56:34 +07:00

55 lines
2.2 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
from random import choice
from typing import Dict, List, Optional
from configs.config import Lists
__all__ = ("interesting_fact", "get_best_response",)
def interesting_fact(mode: str = "факт", lists: Optional[list[str]] = None) -> str:
"""
Возвращает случайный факт, анекдот или цитату, в зависимости от режима.
:param mode: строка, определяющая тип контента ("факт", "анекдот", "цитата").
:param lists: необязательный список строк, из которого можно выбирать вручную.
:return: случайный элемент из соответствующего списка.
"""
if lists is not None:
return choice(lists)
mode = mode.casefold()
if mode == "анекдот":
source: list[str] = Lists.jokes
elif mode == "цитата":
source: list[str] = Lists.quotes
else:
source: list[str] = Lists.facts
return choice(source)
def get_best_response(
user_text: str,
responses: Dict[str, Dict[str, List[str]]],
random_phrases: List[str],
) -> str:
"""
Подбирает наиболее подходящий ответ на сообщение пользователя.
Сначала ищет ключевые слова и их синонимы, если совпадений нет — выдаёт случайную фразу.
:param user_text: текст сообщения пользователя
:param responses: словарь с ключевыми словами и ответами
:param random_phrases: список случайных фраз, если совпадений нет
:return: строка с ответом
"""
normalized_text: str = user_text.casefold()
# Перебор ключевых слов в словаре
for _, data in responses.items():
for keyword in data["keywords"]:
if keyword in normalized_text:
return choice(data["answers"])
# Если совпадений нет — выдаём случайную фразу
return choice(random_phrases)