mirror of
https://github.com/Faridik/Carolyn.git
synced 2026-07-08 05:11:52 +00:00
Добавил /variant и дедлайны к заданиям
This commit is contained in:
parent
2d975df4b1
commit
f74b970c2b
@ -96,6 +96,13 @@ def fingerprint():
|
||||
)
|
||||
)
|
||||
|
||||
@app.route("/student")
|
||||
@availability
|
||||
def student():
|
||||
"""Возвращает оценки по id пользователя из телеграма."""
|
||||
tg_id = flask.request.args.get("tg_id")
|
||||
student = app.db.get_student_by_tg_id(tg_id)
|
||||
return flask.jsonify(dict(student=student))
|
||||
|
||||
@app.route("/students")
|
||||
@availability
|
||||
|
||||
@ -29,6 +29,8 @@ ASSIGNMENT_RANGES = 5
|
||||
ASSIGNMENT_ALLOWS = 6
|
||||
ASSIGNMENT_HOW_TO_DISPLAY = 7
|
||||
ASSIGNMENT_NOTES_RANGES = 8
|
||||
ASSIGNMENT_DEADLINE = 9
|
||||
|
||||
TOKEN_FILE = pathlib.Path() / ".secrets" / "token.json"
|
||||
CLIENT_SECRET_FILE = pathlib.Path() / ".secrets" / "client_secret.json"
|
||||
NON_CACHED_RANGES = ("StudentList",)
|
||||
@ -254,10 +256,8 @@ class Manager:
|
||||
assignment_value = list(map(toFloat, assignment_values[student.number - 1]))
|
||||
notes_range, n_row = row[ASSIGNMENT_NOTES_RANGES].split(",")
|
||||
note = self.get_values(notes_range)[student.number - 1][int(n_row)]
|
||||
if note == "-":
|
||||
note = "Замечаний по работе нет."
|
||||
else:
|
||||
note = f"Замечания:\n {note}"
|
||||
note = "Замечаний по работе нет." if note == "-" \
|
||||
else f"Замечания:\n{note}"
|
||||
student.add_assignment(
|
||||
Assignment(
|
||||
name=row[ASSIGNMENT_NAMES],
|
||||
@ -267,6 +267,7 @@ class Manager:
|
||||
allow_to_display=bool(int(row[ASSIGNMENT_ALLOWS])),
|
||||
how_to_display=row[ASSIGNMENT_HOW_TO_DISPLAY],
|
||||
notes=note,
|
||||
deadline=row[ASSIGNMENT_DEADLINE],
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
@ -12,8 +12,9 @@ class Assignment(dict):
|
||||
weight: float = 1,
|
||||
subject: str = None,
|
||||
allow_to_display: bool = False,
|
||||
how_to_display: str = "z,1,1",
|
||||
how_to_display: str = "z,10,1",
|
||||
notes: str = "Замечаний по работе нет.",
|
||||
deadline: str = "-",
|
||||
):
|
||||
self.name = name
|
||||
self.subject = subject
|
||||
@ -22,6 +23,7 @@ class Assignment(dict):
|
||||
self.allow_to_display = allow_to_display
|
||||
self.how_to_display = how_to_display
|
||||
self.notes = notes
|
||||
self.deadline = deadline
|
||||
self.uuid = uuid.uuid3(uuid.NAMESPACE_DNS, f"{name}{subject}")
|
||||
dict.__init__(
|
||||
self,
|
||||
@ -33,6 +35,7 @@ class Assignment(dict):
|
||||
allow_to_display=self.allow_to_display,
|
||||
how_to_display=self.how_to_display,
|
||||
notes=self.notes,
|
||||
deadline=self.deadline,
|
||||
uuid=self.uuid,
|
||||
)
|
||||
|
||||
|
||||
@ -173,6 +173,7 @@ def grades_view(update: Update, context: CallbackContext):
|
||||
assignment["points"],
|
||||
assignment["how_to_display"],
|
||||
assignment["notes"],
|
||||
assignment["deadline"],
|
||||
),
|
||||
parse_mode=ParseMode.HTML,
|
||||
reply_markup=reply_markup,
|
||||
@ -249,7 +250,7 @@ def cancel(update: Update, context: CallbackContext):
|
||||
|
||||
|
||||
def sub(update: Update, context: CallbackContext):
|
||||
"""Стартовое сообщение (к команде /start)"""
|
||||
"""Подписка на обновление оценок"""
|
||||
|
||||
user_id = update.message.from_user.id
|
||||
username = update.message.from_user.username
|
||||
@ -279,7 +280,7 @@ def sub(update: Update, context: CallbackContext):
|
||||
|
||||
|
||||
def unsub(update: Update, context: CallbackContext):
|
||||
"""Стартовое сообщение (к команде /start)"""
|
||||
"""Отписка от обновления оценок"""
|
||||
|
||||
user_id = update.message.from_user.id
|
||||
username = update.message.from_user.username
|
||||
@ -309,6 +310,34 @@ def unsub(update: Update, context: CallbackContext):
|
||||
|
||||
msg.edit_text(text=MESSAGES.Unsub.UNSUBBED)
|
||||
|
||||
def variant(update: Update, context: CallbackContext):
|
||||
"""Проверка своего варианта внутри группы"""
|
||||
|
||||
user_id = update.message.from_user.id
|
||||
username = update.message.from_user.username
|
||||
|
||||
# Длинная операция, сообщим о запущенном процессе.
|
||||
msg = update.message.reply_text(text=MESSAGES.Variant.START)
|
||||
|
||||
try:
|
||||
req = requests.get(
|
||||
f"{HOST}/student",
|
||||
params={"tg_id": user_id},
|
||||
)
|
||||
data = req.json()
|
||||
except requests.exceptions.RequestException:
|
||||
LOG.exception("@{user_id} вызвал: Ошибка подключения к сервису Spreadsheets.")
|
||||
update.message.reply_sticker(MESSAGES.Stickers.DEAD)
|
||||
return
|
||||
|
||||
if req.status_code != 200:
|
||||
LOG.error(f"Ошибка выяснения варианта, у пользователя @{username} {data}")
|
||||
err = data.get("error", "")
|
||||
update.message.reply_text(text=MESSAGES.Variant.failure(err))
|
||||
update.message.reply_sticker(MESSAGES.Stickers.bad())
|
||||
return
|
||||
|
||||
msg.edit_text(text=MESSAGES.Variant.get(data["student"]["number"]))
|
||||
|
||||
# ======================================================================= SCHED
|
||||
|
||||
@ -388,12 +417,14 @@ def main() -> None:
|
||||
|
||||
sub_handler = CommandHandler("sub", sub)
|
||||
unsub_handler = CommandHandler("unsub", unsub)
|
||||
variant_handler = CommandHandler("variant", variant)
|
||||
|
||||
dispatcher.add_handler(start_handler)
|
||||
dispatcher.add_handler(grades_handler)
|
||||
dispatcher.add_handler(broadcast_handler)
|
||||
dispatcher.add_handler(sub_handler)
|
||||
dispatcher.add_handler(unsub_handler)
|
||||
dispatcher.add_handler(variant_handler)
|
||||
|
||||
# Начало работы бота
|
||||
updater.start_polling()
|
||||
|
||||
@ -29,7 +29,8 @@ class Messages:
|
||||
TIMEOUT = "🕛 Время запроса вышло"
|
||||
|
||||
@staticmethod
|
||||
def get(name: str, assignment: list, how_to_display: str, notes: str):
|
||||
def get(name: str, assignment: list, how_to_display: str,
|
||||
notes: str, deadline: str):
|
||||
is_float, n_cols, n_rows = how_to_display.split(",")
|
||||
n_cols, n_rows = int(n_cols), int(n_rows)
|
||||
summary = f"<b>{name}</b>:\n"
|
||||
@ -48,7 +49,9 @@ class Messages:
|
||||
+ "\n"
|
||||
)
|
||||
summary += f"Σ: {to_str(sum(assignment))}\n"
|
||||
summary += f"\n{notes}"
|
||||
if deadline != "-":
|
||||
summary += f"\n🕚 Дедлайн: {deadline}\n"
|
||||
summary += f"\n📝 {notes}"
|
||||
return summary
|
||||
|
||||
@staticmethod
|
||||
@ -78,12 +81,27 @@ class Messages:
|
||||
@staticmethod
|
||||
def failure(err: str):
|
||||
cases = {
|
||||
"StudentNotFound": "⛔ Для отпидски от уведомлений нужно зарегистрироваться."
|
||||
"StudentNotFound": "⛔ Для отписки от уведомлений нужно зарегистрироваться."
|
||||
+ "Команда /start поможет с регистрацией",
|
||||
"StudentAlreadyUnsubbed": "💁♀️ Подписка на уведомления не была оформлена или уже отменена",
|
||||
}
|
||||
return cases.get(err, "😟 Возникли неполадки")
|
||||
|
||||
class Variant:
|
||||
START = "👀 Узнаю вариант..."
|
||||
|
||||
@staticmethod
|
||||
def get(number: int):
|
||||
return f"🔢 Твой вариант: {number}"
|
||||
|
||||
@staticmethod
|
||||
def failure(err: str):
|
||||
cases = {
|
||||
"StudentNotFound": "⛔ Чтобы узнать свой вариант, нужно зарегистрироваться."
|
||||
+ "Команда /start поможет с регистрацией",
|
||||
}
|
||||
return cases.get(err, "😟 Возникли неполадки")
|
||||
|
||||
class Spreadsheets:
|
||||
pass
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user