Добавил пересылку ошибок в бота

This commit is contained in:
faridik 2021-08-07 12:49:40 +03:00
parent d538cea809
commit 9e85748a82
4 changed files with 93 additions and 13 deletions

View File

@ -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__":

View File

@ -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(

View File

@ -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']),
)

View File

@ -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 = (