mirror of
https://github.com/Faridik/Carolyn.git
synced 2026-07-08 05:11:52 +00:00
99 lines
2.8 KiB
Python
99 lines
2.8 KiB
Python
import logging
|
|
import requests
|
|
from pathlib import Path
|
|
|
|
|
|
from telegram import ReplyKeyboardMarkup, ReplyKeyboardRemove, Update
|
|
from telegram.ext import (
|
|
Updater,
|
|
CommandHandler,
|
|
MessageHandler,
|
|
Filters,
|
|
ConversationHandler,
|
|
CallbackContext,
|
|
)
|
|
|
|
from messages import Messages
|
|
|
|
TOKEN = Path(".secrets/bot_token.txt").read_text()
|
|
MESSAGES = Messages()
|
|
HOST = "http://carolyn-spreadsheets:5000"
|
|
|
|
logging.basicConfig(
|
|
format="%(asctime)s - %(name)s - %(levelname)s - %(message)s", level=logging.INFO
|
|
)
|
|
LOG = logging.getLogger(__name__)
|
|
|
|
LOG.debug("Token is %s", TOKEN)
|
|
updater = Updater(token=TOKEN, use_context=True)
|
|
dispatcher = updater.dispatcher
|
|
|
|
# ================================================================ BOT COMMANDS
|
|
|
|
|
|
def start(update: Update, context: CallbackContext):
|
|
"""Стартовое сообщение (к команде /start)"""
|
|
|
|
user_id = update.message.from_user.id
|
|
|
|
p = context.args[0] if len(context.args) > 0 else None
|
|
|
|
if p is None:
|
|
update.message.reply_markdown_v2(text=MESSAGES.auth.NO_AUTH)
|
|
return
|
|
|
|
update.message.reply_text(text=MESSAGES.auth.START)
|
|
|
|
LOG.info(f"Authenticanting {user_id}")
|
|
|
|
try:
|
|
data = requests.get(
|
|
f"{HOST}/auth",
|
|
params={"token": p, "tg_id": user_id},
|
|
).json()
|
|
except requests.exceptions.ConnectionError:
|
|
update.message.reply_sticker(MESSAGES.stickers.DEAD)
|
|
return
|
|
|
|
context.bot.send_message(
|
|
text=MESSAGES.auth.hello(data),
|
|
)
|
|
|
|
|
|
def grades(update: Update, context: CallbackContext):
|
|
"""Команда: Получить оценки студента."""
|
|
|
|
user_id = update.message.from_user.id
|
|
try:
|
|
data = requests.get(f"{HOST}/grades", params={"tg_id": user_id}).json()
|
|
score = data["score"]
|
|
grade = data["grade"]
|
|
n_of_assignments = len(data["assignments"])
|
|
|
|
score_message = MESSAGES.score.get(grade, score, n_of_assignments)
|
|
update.message.reply_html(score_message)
|
|
update.message.reply_sticker(MESSAGES.stickers.bad())
|
|
except:
|
|
LOG.exception("Failed to get grades.")
|
|
update.message.reply_sticker(MESSAGES.stickers.DEAD)
|
|
|
|
|
|
def echo(update: Update, context: CallbackContext):
|
|
"""Ответ на не командное сообщение (отвечает тем же сообщением)"""
|
|
context.bot.send_message(chat_id=update.effective_chat.id, text=update.message.text)
|
|
|
|
|
|
# ==================================================================== HANDLERS
|
|
|
|
start_handler = CommandHandler("start", start)
|
|
grades_handler = CommandHandler("grades", grades)
|
|
|
|
echo_handler = MessageHandler(Filters.text & (~Filters.command), echo)
|
|
|
|
dispatcher.add_handler(start_handler)
|
|
dispatcher.add_handler(grades_handler)
|
|
dispatcher.add_handler(echo_handler)
|
|
|
|
# Начало работы бота
|
|
updater.start_polling()
|