other regions
This commit is contained in:
parent
b879e5e19f
commit
3c5d7b502b
@ -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():
|
||||||
|
@ -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"])},
|
||||||
|
@ -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,
|
||||||
|
@ -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")
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
@ -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 = []
|
||||||
|
Loading…
Reference in New Issue
Block a user