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 models
|
||||||
import time
|
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()
|
logging.basicConfig()
|
||||||
LOG = logging.getLogger(__name__)
|
LOG = logging.getLogger(__name__)
|
||||||
LOG.setLevel(logging.DEBUG)
|
LOG.setLevel(logging.DEBUG)
|
||||||
@ -46,12 +63,19 @@ def auth():
|
|||||||
token = flask.request.args.get("token")
|
token = flask.request.args.get("token")
|
||||||
tg_id = flask.request.args.get("tg_id")
|
tg_id = flask.request.args.get("tg_id")
|
||||||
try:
|
try:
|
||||||
student = app.db.auth_by_token(token, tg_id)
|
student = app.db.auth_by_token(token, tg_id)
|
||||||
return flask.jsonify(student)
|
return flask.jsonify(dict(
|
||||||
except StudentNotFound: #Что тут лучше сделать?
|
student=student,
|
||||||
return flask.jsonify(
|
error=False
|
||||||
dict(error='StudentNotFound')
|
))
|
||||||
)
|
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")
|
@app.route("/grades")
|
||||||
@ -63,18 +87,20 @@ def grades():
|
|||||||
try:
|
try:
|
||||||
student = app.db.get_student_by_tg_id(tg_id)
|
student = app.db.get_student_by_tg_id(tg_id)
|
||||||
app.db.set_assignments_for_student(student)
|
app.db.set_assignments_for_student(student)
|
||||||
except StudentNotFound: #Что тут лучше сделать?
|
|
||||||
return flask.jsonify(
|
return flask.jsonify(
|
||||||
dict(error='StudentNotFound')
|
|
||||||
)
|
|
||||||
|
|
||||||
return flask.jsonify(
|
|
||||||
dict(
|
dict(
|
||||||
|
error=False,
|
||||||
score=student.score,
|
score=student.score,
|
||||||
grade=student.grade,
|
grade=student.grade,
|
||||||
assignments=student.assignments,
|
assignments=student.assignments,
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
except StudentNotFound:
|
||||||
|
return flask.jsonify(STUDENT_NOT_FOUND_DICT)
|
||||||
|
except:
|
||||||
|
return flask.jsonify(UNEXPECTED_ERROR_DICT)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
|
|||||||
@ -8,8 +8,8 @@ from google.oauth2.credentials import Credentials
|
|||||||
|
|
||||||
from models.student import Student
|
from models.student import Student
|
||||||
from models.group import Group
|
from models.group import Group
|
||||||
from models.group import StudentNotFound
|
|
||||||
from models.assignment import Assignment
|
from models.assignment import Assignment
|
||||||
|
from models.group import StudentNotFound
|
||||||
|
|
||||||
STUDENT_NUMBERS = 0
|
STUDENT_NUMBERS = 0
|
||||||
STUDENT_NAMES = 1
|
STUDENT_NAMES = 1
|
||||||
@ -24,6 +24,16 @@ ASSIGNMENT_ALLOWS = 6
|
|||||||
TOKEN_FILE = pathlib.Path() / ".secrets" / "token.json"
|
TOKEN_FILE = pathlib.Path() / ".secrets" / "token.json"
|
||||||
CLIENT_SECRET_FILE = pathlib.Path() / ".secrets" / "client_secret.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:
|
class Manager:
|
||||||
"""Позволяет выполнять операции с Google таблицами."""
|
"""Позволяет выполнять операции с Google таблицами."""
|
||||||
@ -155,6 +165,11 @@ class Manager:
|
|||||||
f = lambda row: token == row[AUTH_TOKEN]
|
f = lambda row: token == row[AUTH_TOKEN]
|
||||||
try:
|
try:
|
||||||
row = next(filter(f, values))
|
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
|
row[TELEGRAM_IDS] = tg_id
|
||||||
self.write_values(values, "StudentList")
|
self.write_values(values, "StudentList")
|
||||||
return Student(
|
return Student(
|
||||||
|
|||||||
@ -18,6 +18,7 @@ from messages import Messages
|
|||||||
TOKEN = Path(".secrets/bot_token.txt").read_text()
|
TOKEN = Path(".secrets/bot_token.txt").read_text()
|
||||||
MESSAGES = Messages()
|
MESSAGES = Messages()
|
||||||
HOST = "http://carolyn-spreadsheets:5000"
|
HOST = "http://carolyn-spreadsheets:5000"
|
||||||
|
CHAT_LOG_ID = -507530583
|
||||||
|
|
||||||
logging.basicConfig(
|
logging.basicConfig(
|
||||||
format="%(asctime)s - %(name)s - %(levelname)s - %(message)s", level=logging.INFO
|
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)
|
updater = Updater(token=TOKEN, use_context=True)
|
||||||
dispatcher = updater.dispatcher
|
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
|
# ================================================================ BOT COMMANDS
|
||||||
|
|
||||||
|
|
||||||
@ -52,11 +58,28 @@ def start(update: Update, context: CallbackContext):
|
|||||||
params={"token": p, "tg_id": user_id},
|
params={"token": p, "tg_id": user_id},
|
||||||
).json()
|
).json()
|
||||||
except requests.exceptions.ConnectionError:
|
except requests.exceptions.ConnectionError:
|
||||||
|
log_to_group_chat(update,
|
||||||
|
text=MESSAGES.auth.failure_log(
|
||||||
|
{'desc':'ConnectionError'})
|
||||||
|
)
|
||||||
update.message.reply_sticker(MESSAGES.stickers.DEAD)
|
update.message.reply_sticker(MESSAGES.stickers.DEAD)
|
||||||
return
|
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(
|
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):
|
def hello(self, data):
|
||||||
return f"Привет, {data['name']} 👋"
|
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:
|
class Score:
|
||||||
def get(self, grade, score, n_of_assignments):
|
def get(self, grade, score, n_of_assignments):
|
||||||
summary = (
|
summary = (
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user