other regions

This commit is contained in:
Administrator 2022-10-25 17:42:13 +03:00
parent b879e5e19f
commit 3c5d7b502b
7 changed files with 63 additions and 20 deletions

View File

@ -9,7 +9,7 @@ from settings import MOSCOW_TIMEZONE
def fetch_schedule_for_user(user: User): def fetch_schedule_for_user(user: User):
today = now() today = now(user)
next_day = today + datetime.timedelta(days=7) next_day = today + datetime.timedelta(days=7)
schedule = ruz.get_schedule(user, today, next_day) schedule = ruz.get_schedule(user, today, next_day)
if schedule is None: if schedule is None:
@ -67,7 +67,7 @@ def process():
def delete_old(): def delete_old():
mongo.lessons_collection.delete_many({"end": {"$lte": now() - datetime.timedelta(days=1)}}) mongo.lessons_collection.delete_many({"end": {"$lte": datetime.datetime.now() - datetime.timedelta(days=1)}})
def fetch(): def fetch():

View File

@ -11,9 +11,8 @@ from helpers.ruz import ruz
def process(): def process():
time_now = now()
print(time_now)
for user in mongo.users_collection.find({"notify_minutes": {"$ne": None}, "hse_id": {"$ne": None}}): for user in mongo.users_collection.find({"notify_minutes": {"$ne": None}, "hse_id": {"$ne": None}}):
time_now = now(UserSchema().load(user))
for lesson in mongo.lessons_collection.find({ for lesson in mongo.lessons_collection.find({
"hse_user_id": user["hse_id"], "hse_user_id": user["hse_id"],
"begin": {"$lte": time_now + datetime.timedelta(minutes=user["notify_minutes"])}, "begin": {"$lte": time_now + datetime.timedelta(minutes=user["notify_minutes"])},

View File

@ -4,14 +4,21 @@ import zoneinfo
from helpers.models import User from helpers.models import User
def now(): campus_timdelta = {
today = datetime.datetime.now() + datetime.timedelta(hours=3) "Москва": 3,
"Санкт-Петербург": 3,
"Нижний Новгород": 3,
"Пермь": 5
}
def now(user: User):
today = datetime.datetime.now() + datetime.timedelta(hours=campus_timdelta[user.campus])
return today return today
def get_next_daily_notify_time(user: User, time_now: datetime.datetime | None = None) -> datetime.datetime: def get_next_daily_notify_time(user: User, time_now: datetime.datetime | None = None) -> datetime.datetime:
if time_now is None: if time_now is None:
time_now = now() time_now = now(user)
hours, minutes = map(int, user.daily_notify_time.split(":")) hours, minutes = map(int, user.daily_notify_time.split(":"))
next_time = datetime.datetime( next_time = datetime.datetime(
year=time_now.year, year=time_now.year,

View File

@ -7,7 +7,7 @@ from daemons.bot import bot
from daemons.fetch import fetch_schedule_for_user from daemons.fetch import fetch_schedule_for_user
from helpers import now, get_next_daily_notify_time from helpers import now, get_next_daily_notify_time
from helpers.keyboards import main_keyboard, notify_keyboard, yes_no_keyboard, again_keyboard, groups_keyboard, \ from helpers.keyboards import main_keyboard, notify_keyboard, yes_no_keyboard, again_keyboard, groups_keyboard, \
no_daily_notify, student_or_teacher_keyboard no_daily_notify, student_or_teacher_keyboard, campus_keyboard
from helpers.models import UserSchema, User from helpers.models import UserSchema, User
from helpers.mongo import mongo from helpers.mongo import mongo
from helpers.ruz import ruz from helpers.ruz import ruz
@ -36,10 +36,28 @@ class Answer(BaseAnswer):
def handle_state_new(self, message: Message, user: User): def handle_state_new(self, message: Message, user: User):
bot.send_message( bot.send_message(
message.chat.id, message.chat.id,
"Привет! Я буду помогать тебе выживать в вышке!\nДля начала сообщи мне, ты преподаватель или студент?", "Привет! Я буду помогать тебе выживать в вышке!\nИз какого ты кампуса?",
reply_markup=campus_keyboard()
)
self.set_state(user, "wait_for_campus")
def handle_state_wait_for_campus(self, message: Message, user: User):
if message.text not in ["Москва", "Санкт-Петербург", "Нижний Новгород", "Пермь"]:
bot.send_message(
user.chat_id,
"Ты прислал мне что-то непонятное, используй кнопки. Из какого ты кампуса?",
reply_markup=campus_keyboard()
)
return
bot.send_message(
user.chat_id,
"Принято! Ты преподаватель или студент?",
reply_markup=student_or_teacher_keyboard() reply_markup=student_or_teacher_keyboard()
) )
self.set_state(user, "wait_for_student_or_teacher") mongo.users_collection.update_one(
{"chat_id": user.chat_id},
{"$set": {"campus": message.text, "state": "wait_for_student_or_teacher"}}
)
def handle_state_wait_for_student_or_teacher(self, message: Message, user: User): def handle_state_wait_for_student_or_teacher(self, message: Message, user: User):
if message.text == "Студент": if message.text == "Студент":
@ -56,6 +74,14 @@ class Answer(BaseAnswer):
{"$set": {"is_teacher": True, "state": "wait_for_name"}} {"$set": {"is_teacher": True, "state": "wait_for_name"}}
) )
self.set_state(user, "wait_for_name") self.set_state(user, "wait_for_name")
elif message.text == "Начать заново":
bot.send_message(
message.chat.id,
"Привет! Я буду помогать тебе выживать в вышке!\nИз какого ты кампуса?",
reply_markup=campus_keyboard()
)
self.set_state(user, "wait_for_campus")
return
else: else:
bot.send_message(user.chat_id, "Ты отправил мне что-то неправильное, используй кнопки. Ты преподаватель или студент?", reply_markup=student_or_teacher_keyboard()) bot.send_message(user.chat_id, "Ты отправил мне что-то неправильное, используй кнопки. Ты преподаватель или студент?", reply_markup=student_or_teacher_keyboard())
@ -63,10 +89,10 @@ class Answer(BaseAnswer):
if message.text == "Начать заново": if message.text == "Начать заново":
bot.send_message( bot.send_message(
message.chat.id, message.chat.id,
"Привет! Я буду помогать тебе выживать в вышке!\nДля начала сообщи мне, ты преподаватель или студент?", "Привет! Я буду помогать тебе выживать в вышке!\nИз какого ты кампуса?",
reply_markup=student_or_teacher_keyboard() reply_markup=campus_keyboard()
) )
self.set_state(user, "wait_for_student_or_teacher") self.set_state(user, "wait_for_campus")
return return
user.name = message.text user.name = message.text
data = ruz.find_person(user) data = ruz.find_person(user)
@ -100,10 +126,10 @@ class Answer(BaseAnswer):
if message.text == "Начать заново": if message.text == "Начать заново":
bot.send_message( bot.send_message(
message.chat.id, message.chat.id,
"Привет! Я буду помогать тебе выживать в вышке!\nДля начала сообщи мне, ты преподаватель или студент?", "Привет! Я буду помогать тебе выживать в вышке!\nИз какого ты кампуса?",
reply_markup=student_or_teacher_keyboard() reply_markup=campus_keyboard()
) )
self.set_state(user, "wait_for_student_or_teacher") self.set_state(user, "wait_for_campus")
return return
group = message.text group = message.text
data = ruz.find_person(user) data = ruz.find_person(user)
@ -120,8 +146,8 @@ class Answer(BaseAnswer):
user.name = element['label'] user.name = element['label']
break break
if user.group is None: if user.group is None:
bot.send_message(user.chat_id, "Ты ввел что-то неправильно, попробуй еще раз сначала. Ты студент или преподаватель?", reply_markup=student_or_teacher_keyboard()) bot.send_message(user.chat_id, "Ты ввел что-то неправильно, попробуй еще раз сначала. Из какого ты кампуса?", reply_markup=campus_keyboard())
self.set_state(user, "wait_for_student_or_teacher") self.set_state(user, "wait_for_campus")
return return
mongo.users_collection.update_one({"chat_id": user.chat_id}, {"$set": { mongo.users_collection.update_one({"chat_id": user.chat_id}, {"$set": {
"hse_id": user.hse_id, "hse_id": user.hse_id,
@ -144,7 +170,7 @@ class Answer(BaseAnswer):
else: else:
bot.send_message( bot.send_message(
user.chat_id, user.chat_id,
ruz.schedule_builder(lessons), "Твои пары сегодня:\n" + ruz.schedule_builder(lessons),
reply_markup=main_keyboard() reply_markup=main_keyboard()
) )
self.set_state(user, "ready") self.set_state(user, "ready")

View File

@ -10,10 +10,20 @@ def main_keyboard():
return kb return kb
def campus_keyboard():
kb = telebot.types.ReplyKeyboardMarkup(True, False)
kb.row("Москва")
kb.row("Нижний Новгород")
kb.row("Пермь")
kb.row("Санкт-Петербург")
return kb
def student_or_teacher_keyboard(): def student_or_teacher_keyboard():
kb = telebot.types.ReplyKeyboardMarkup(True, False) kb = telebot.types.ReplyKeyboardMarkup(True, False)
kb.row("Преподаватель") kb.row("Преподаватель")
kb.row("Студент") kb.row("Студент")
kb.row("Начать заново")
return kb return kb

View File

@ -17,6 +17,7 @@ class User:
daily_notify_time: Optional[str] = None daily_notify_time: Optional[str] = None
next_daily_notify_time: Optional[datetime.datetime] = None next_daily_notify_time: Optional[datetime.datetime] = None
is_teacher: bool = False is_teacher: bool = False
campus: str = "Москва"
class Meta: class Meta:
unknown = EXCLUDE unknown = EXCLUDE

View File

@ -54,7 +54,7 @@ class Mongo:
return self["lessons"] return self["lessons"]
def get_today_lessons(self, user: User): def get_today_lessons(self, user: User):
today = now() today = now(user)
tomorrow = today + datetime.timedelta(days=1) tomorrow = today + datetime.timedelta(days=1)
tomorrow = datetime.datetime(year=tomorrow.year, month=tomorrow.month, day=tomorrow.day) tomorrow = datetime.datetime(year=tomorrow.year, month=tomorrow.month, day=tomorrow.day)
lessons = [] lessons = []