alice
This commit is contained in:
parent
bc8361731c
commit
209a355e37
@ -1,6 +1,7 @@
|
|||||||
from flask import Flask
|
from flask import Flask, request
|
||||||
|
|
||||||
import settings
|
import settings
|
||||||
|
from helpers.alice import Processor
|
||||||
from helpers.mongo import mongo
|
from helpers.mongo import mongo
|
||||||
|
|
||||||
|
|
||||||
@ -30,4 +31,18 @@ def api():
|
|||||||
f"Пользователей из Санкт-Петербурга (регистрация): {mongo.users_collection.count_documents({'campus': 'Санкт-Петербург', 'hse_id': {'$ne': None}})}<br>"
|
f"Пользователей из Санкт-Петербурга (регистрация): {mongo.users_collection.count_documents({'campus': 'Санкт-Петербург', 'hse_id': {'$ne': None}})}<br>"
|
||||||
return text
|
return text
|
||||||
|
|
||||||
|
@app.route('/alice', methods=['POST'])
|
||||||
|
def alice():
|
||||||
|
req = request.json
|
||||||
|
processor = Processor(req)
|
||||||
|
response = {
|
||||||
|
"version": req['version'],
|
||||||
|
"session": req['session'],
|
||||||
|
"response": {
|
||||||
|
"end_session": False
|
||||||
|
}
|
||||||
|
}
|
||||||
|
response['response'].update(processor.process())
|
||||||
|
return response
|
||||||
|
|
||||||
app.run(host="0.0.0.0", port=1238, debug=settings.DEBUG)
|
app.run(host="0.0.0.0", port=1238, debug=settings.DEBUG)
|
||||||
|
59
helpers/alice.py
Normal file
59
helpers/alice.py
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
from daemons.bot import bot
|
||||||
|
from helpers.mongo import mongo
|
||||||
|
|
||||||
|
|
||||||
|
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, chat_id: int):
|
||||||
|
...
|
||||||
|
|
||||||
|
|
||||||
|
def process(self) -> dict:
|
||||||
|
user = None
|
||||||
|
if self.data['session']['new']:
|
||||||
|
if self.user_id is not None:
|
||||||
|
return {}
|
||||||
|
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['chat_id'])
|
||||||
|
if lesson is None:
|
||||||
|
return {
|
||||||
|
"text": f"В ближайшее время у тебя нет пар",
|
||||||
|
"end_session": True
|
||||||
|
}
|
||||||
|
return {
|
||||||
|
"text": f"Твое ближайшее занятие {lesson['begin']}: {lesson['discipline']}",
|
||||||
|
"end_session": True
|
||||||
|
}
|
||||||
|
else:
|
||||||
|
hse_id = self.message.replace(' ', '')
|
||||||
|
user = mongo.users_collection.find_one({"hse_id": int(hse_id)})
|
||||||
|
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['chat_id'])
|
||||||
|
if lesson is None:
|
||||||
|
return {
|
||||||
|
"text": f"Отлично, теперь я могу подсказывать тебе расписание. В ближайшее время у тебя нет пар",
|
||||||
|
"end_session": True
|
||||||
|
}
|
||||||
|
return {
|
||||||
|
"text": f"Отлично, теперь я могу подсказывать тебе расписание. Твое ближайшее занятие {lesson['begin']}: {lesson['discipline']}",
|
||||||
|
"end_session": True
|
||||||
|
}
|
@ -212,6 +212,11 @@ class Answer(BaseAnswer):
|
|||||||
bot.send_message(user.chat_id, "Ты уверен что хочешь сбросить все настройки и больше не получать уведомления?", reply_markup=yes_no_keyboard())
|
bot.send_message(user.chat_id, "Ты уверен что хочешь сбросить все настройки и больше не получать уведомления?", reply_markup=yes_no_keyboard())
|
||||||
self.set_state(user, "reset")
|
self.set_state(user, "reset")
|
||||||
return
|
return
|
||||||
|
elif message.text == "Подключение Алисы":
|
||||||
|
if user.yandex_id is None:
|
||||||
|
text = "Для того, чтобы подключить Яндекс.Алису, вызови навык \"Расписание вышки\" и назови этот код: " + str(user.hse_id)
|
||||||
|
else:
|
||||||
|
text = "Янедкс.Алиса уже подключена. Чтобы узнать ближайшую пару, вызови навык \"Расписание вышки\""
|
||||||
else:
|
else:
|
||||||
text = "Я не понимаю такой команды, используй кнопки."
|
text = "Я не понимаю такой команды, используй кнопки."
|
||||||
bot.send_message(
|
bot.send_message(
|
||||||
|
@ -7,6 +7,7 @@ def main_keyboard():
|
|||||||
kb.row("Расписание на неделю")
|
kb.row("Расписание на неделю")
|
||||||
kb.row("Напоминания о парах")
|
kb.row("Напоминания о парах")
|
||||||
kb.row("Ежедневные уведомления")
|
kb.row("Ежедневные уведомления")
|
||||||
|
kb.row("Подключение Алисы")
|
||||||
kb.row("Сброс настроек")
|
kb.row("Сброс настроек")
|
||||||
return kb
|
return kb
|
||||||
|
|
||||||
|
@ -20,6 +20,7 @@ class User:
|
|||||||
campus: str = "Москва"
|
campus: str = "Москва"
|
||||||
daily_notify_today: bool = True
|
daily_notify_today: bool = True
|
||||||
first_lesson_notify: Optional[float] = None
|
first_lesson_notify: Optional[float] = None
|
||||||
|
yandex_id: Optional[str] = None
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
unknown = EXCLUDE
|
unknown = EXCLUDE
|
||||||
|
Loading…
Reference in New Issue
Block a user