import logging from typing import Optional from daemons.bot import bot from helpers import now from helpers.mongo import mongo def try_parse(message: str) -> Optional[int]: letters = { "ноль": 0, "один": 1, "два": 2, "три": 3, "четыре": 4, "пять": 5, "шесть": 6, "семь": 7, "восемь": 8, "девять": 9 } final = 0 for word in message.split(): try: final = final * 10 + letters[word] except KeyError: return None return final class Processor: def __init__(self, data: dict): self.data = data if 'user' in data['session']: self.user_id = data['session']['user']['user_id'] else: self.user_id = None self.message = data['request']['original_utterance'].lower() def get_lesson_for_user(self, hse_id: int): user = mongo.users_collection.find_one({"hse_id": hse_id}) t = now(user) for lesson in mongo.lessons_collection.find({"hse_user_id": hse_id, "begin": {"$gte": t}}).sort([("begin", 1)]): return lesson return None def process(self) -> dict: logging.info("user %s is saying\"%s\"", self.user_id, self.message) if "что ты умеешь" in self.message or "помощь" in self.message: return { "text": "Я буду тебе подсказывать расписание занятий из РУЗа. Чтобы подключить меня к своему расписанию, зайди в бота, нажми на кнопку \"Подключение Алисы\" и назови мне код из сообщения по одной цифре." } if self.data['session']['new']: if self.user_id is None: return {"text": "Пингуй дальше"} else: user = mongo.users_collection.find_one({"yandex_id": self.user_id}) if user is None: return { "text": "Привет! Я буду тебе подсказывать расписание занятий из РУЗа. Чтобы подключить меня к своему расписанию, зайди в бота, нажми на кнопку \"Подключение Алисы\" и назови мне код из сообщения по одной цифре." } else: lesson = self.get_lesson_for_user(user['hse_id']) if lesson is None: return { "text": f"В ближайшее время у тебя нет пар", "end_session": True } return { "text": f'Твое ближайшее занятие в {lesson["begin"].strftime("%A %d %B %H:%M")}: {lesson["discipline"].replace("(рус)", "").replace("(анг)", "")}', "end_session": True } else: hse_id = try_parse(self.message) try: user = mongo.users_collection.find_one({"hse_id": hse_id}) except ValueError: return { "text": "Извини, не могу разобрать код, назови его еще раз" } if user is None: return { "text": "Извини, не могу разобрать код, назови его еще раз" } else: mongo.users_collection.update_one({"hse_id": int(hse_id)}, {"$set": {"yandex_id": self.user_id}}) bot.send_message(user['chat_id'], "Алиса успешно подключена!") lesson = self.get_lesson_for_user(user['hse_id']) if lesson is None: return { "text": f"Отлично, теперь я могу подсказывать тебе расписание. В ближайшее время у тебя нет пар", "end_session": True } return { "text": f'Отлично, теперь я могу подсказывать тебе расписание. Твое ближайшее занятие в {lesson["begin"].strftime("%A %d %B %H:%M")}: {lesson["discipline"].replace("(рус)", "").replace("(анг)", "")}', "end_session": True }