mirror of
https://github.com/Faridik/Carolyn.git
synced 2026-07-08 13:21:53 +00:00
Добавил пересылку ошибок в бота
This commit is contained in:
parent
d538cea809
commit
9e85748a82
@ -5,6 +5,23 @@ import logging
|
||||
import models
|
||||
import time
|
||||
|
||||
UNEXPECTED_ERROR_DICT = dict(
|
||||
error=True,
|
||||
desc='UnexpectedError'
|
||||
)
|
||||
STUDENT_NOT_FOUND_DICT = dict(
|
||||
error=True,
|
||||
desc='StudentNotFound'
|
||||
)
|
||||
STUDENT_ALREADY_AUTHED_DICT = dict(
|
||||
error = True,
|
||||
desc='StudentAlreadyAuthed'
|
||||
)
|
||||
ANOTHER_STUDENT_ALREADY_AUTHED_DICT = dict(
|
||||
error = True,
|
||||
desc='AnotherStudentAlreadyAuthed'
|
||||
)
|
||||
|
||||
logging.basicConfig()
|
||||
LOG = logging.getLogger(__name__)
|
||||
LOG.setLevel(logging.DEBUG)
|
||||
@ -47,11 +64,18 @@ def auth():
|
||||
tg_id = flask.request.args.get("tg_id")
|
||||
try:
|
||||
student = app.db.auth_by_token(token, tg_id)
|
||||
return flask.jsonify(student)
|
||||
except StudentNotFound: #Что тут лучше сделать?
|
||||
return flask.jsonify(
|
||||
dict(error='StudentNotFound')
|
||||
)
|
||||
return flask.jsonify(dict(
|
||||
student=student,
|
||||
error=False
|
||||
))
|
||||
except StudentAlreadyAuthed:
|
||||
return flask.jsonify(STUDENT_ALREADY_AUTHED_DICT)
|
||||
except AnotherStudentAlreadyAuthed:
|
||||
return flask.jsonify(ANOTHER_STUDENT_ALREADY_AUTHED_DICT)
|
||||
except StudentNotFound:
|
||||
return flask.jsonify(STUDENT_NOT_FOUND_DICT)
|
||||
except:
|
||||
return flask.jsonify(UNEXPECTED_ERROR_DICT)
|
||||
|
||||
|
||||
@app.route("/grades")
|
||||
@ -63,18 +87,20 @@ def grades():
|
||||
try:
|
||||
student = app.db.get_student_by_tg_id(tg_id)
|
||||
app.db.set_assignments_for_student(student)
|
||||
except StudentNotFound: #Что тут лучше сделать?
|
||||
return flask.jsonify(
|
||||
dict(error='StudentNotFound')
|
||||
)
|
||||
|
||||
return flask.jsonify(
|
||||
dict(
|
||||
error=False,
|
||||
score=student.score,
|
||||
grade=student.grade,
|
||||
assignments=student.assignments,
|
||||
)
|
||||
)
|
||||
except StudentNotFound:
|
||||
return flask.jsonify(STUDENT_NOT_FOUND_DICT)
|
||||
except:
|
||||
return flask.jsonify(UNEXPECTED_ERROR_DICT)
|
||||
|
||||
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
||||
@ -8,8 +8,8 @@ from google.oauth2.credentials import Credentials
|
||||
|
||||
from models.student import Student
|
||||
from models.group import Group
|
||||
from models.group import StudentNotFound
|
||||
from models.assignment import Assignment
|
||||
from models.group import StudentNotFound
|
||||
|
||||
STUDENT_NUMBERS = 0
|
||||
STUDENT_NAMES = 1
|
||||
@ -24,6 +24,16 @@ ASSIGNMENT_ALLOWS = 6
|
||||
TOKEN_FILE = pathlib.Path() / ".secrets" / "token.json"
|
||||
CLIENT_SECRET_FILE = pathlib.Path() / ".secrets" / "client_secret.json"
|
||||
|
||||
class StudentAlreadyAuthed(Exception):
|
||||
def __init__(self, message):
|
||||
self.message = message
|
||||
super().__init__(self.message)
|
||||
|
||||
class AnotherStudentAlreadyAuthed(Exception):
|
||||
def __init__(self, message):
|
||||
self.message = message
|
||||
super().__init__(self.message)
|
||||
|
||||
|
||||
class Manager:
|
||||
"""Позволяет выполнять операции с Google таблицами."""
|
||||
@ -155,6 +165,11 @@ class Manager:
|
||||
f = lambda row: token == row[AUTH_TOKEN]
|
||||
try:
|
||||
row = next(filter(f, values))
|
||||
if row[TELEGRAM_IDS] == tg_id:
|
||||
raise StudentAlreadyAuthed('Студент уже зарегистрировался')
|
||||
elif row[TELEGRAM_IDS]:
|
||||
raise AnotherStudentAlreadyAuthed(
|
||||
'Другой студент зарегистрировался по token')
|
||||
row[TELEGRAM_IDS] = tg_id
|
||||
self.write_values(values, "StudentList")
|
||||
return Student(
|
||||
|
||||
@ -18,6 +18,7 @@ from messages import Messages
|
||||
TOKEN = Path(".secrets/bot_token.txt").read_text()
|
||||
MESSAGES = Messages()
|
||||
HOST = "http://carolyn-spreadsheets:5000"
|
||||
CHAT_LOG_ID = -507530583
|
||||
|
||||
logging.basicConfig(
|
||||
format="%(asctime)s - %(name)s - %(levelname)s - %(message)s", level=logging.INFO
|
||||
@ -28,6 +29,11 @@ LOG.debug("Token is %s", TOKEN)
|
||||
updater = Updater(token=TOKEN, use_context=True)
|
||||
dispatcher = updater.dispatcher
|
||||
|
||||
|
||||
def log_to_group_chat(update: Update, text: str):
|
||||
update.message.bot.send_message(chat_id=CHAT_LOG_ID, text=text)
|
||||
|
||||
|
||||
# ================================================================ BOT COMMANDS
|
||||
|
||||
|
||||
@ -52,11 +58,28 @@ def start(update: Update, context: CallbackContext):
|
||||
params={"token": p, "tg_id": user_id},
|
||||
).json()
|
||||
except requests.exceptions.ConnectionError:
|
||||
log_to_group_chat(update,
|
||||
text=MESSAGES.auth.failure_log(
|
||||
{'desc':'ConnectionError'})
|
||||
)
|
||||
update.message.reply_sticker(MESSAGES.stickers.DEAD)
|
||||
return
|
||||
|
||||
if data['error']:
|
||||
log_to_group_chat(update,
|
||||
text=MESSAGES.auth.failure_log(data)
|
||||
)
|
||||
update.message.reply_text(
|
||||
text=MESSAGES.auth.failure(data)
|
||||
)
|
||||
update.message.reply_sticker(MESSAGES.stickers.DEAD)
|
||||
return
|
||||
|
||||
log_to_group_chat(update,
|
||||
text=MESSAGES.auth.success_log(data['student'])
|
||||
)
|
||||
update.message.reply_text(
|
||||
text=MESSAGES.auth.hello(data),
|
||||
text=MESSAGES.auth.hello(data['student']),
|
||||
)
|
||||
|
||||
|
||||
|
||||
@ -11,6 +11,22 @@ class Messages:
|
||||
def hello(self, data):
|
||||
return f"Привет, {data['name']} 👋"
|
||||
|
||||
def failure(self, data):
|
||||
if data['desc'] == 'StudentNotFound':
|
||||
return "⛔ Ссылка больше не работает"
|
||||
elif data['desc'] == 'StudentAlreadyAuthed':
|
||||
return "⛔ Регистрация по этой ссылке уже прошла"
|
||||
elif data['desc'] == 'AnotherStudentAlreadyAuthed':
|
||||
return "😨 Кто-то другой уже зерегистрировался по этой ссылке"
|
||||
else:
|
||||
return "😟 Возникли неполадки"
|
||||
|
||||
def success_log(self, data):
|
||||
return f"✅ AUTH: {data['name']} "
|
||||
|
||||
def failure_log(self, data):
|
||||
return f"🟥 AUTH: {data['desc']}"
|
||||
|
||||
class Score:
|
||||
def get(self, grade, score, n_of_assignments):
|
||||
summary = (
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user