This repository has been archived on 2023-08-30. You can view files and clone it, but cannot push or open issues or pull requests.
l9_stud_bot/bot.py

106 lines
3.6 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

from database.l9 import L9_DB
from database.tg import TG_DB
from utils.config import *
import telegram
from tg.keyboards import Keyboard
import logging
from logging.handlers import TimedRotatingFileHandler as TRFL
logger = logging.getLogger('bot')
def initLogger():
if not os.path.isdir(f'logs/bot'):
os.makedirs(f'logs/bot')
f_handler = TRFL(f'./logs/bot/log', when='midnight', encoding="utf-8")
f_format = logging.Formatter(
'%(asctime)s - %(levelname)s - %(message)s',
datefmt='%d-%b-%y %H:%M:%S',
)
f_handler.setFormatter(f_format)
f_handler.setLevel(logging.INFO)
logger.addHandler(f_handler)
c_handler = logging.StreamHandler()
c_format = logging.Formatter('%(levelname)s : %(message)s')
c_handler.setFormatter(c_format)
logger.addHandler(c_handler)
logger.setLevel(logging.DEBUG)
class Bot:
def __init__(self, token: str, db: L9_DB, tg_db: TG_DB, limit=150):
self.l9lk = db
self.tg_db = tg_db
self.tg = telegram.Bot(token)
self.limit = limit
self.udpate_id = None
self.isWork = True
def start(self, query: telegram.Message):
"""Обработка нового пользователя"""
# Проверка лимита пользователей и обработка лишних
count = self.l9lk.countUsers()
tgId = query.from_user.id
if count >= self.limit:
self.tg.sendMessage(
tgId,
(
'Бот работает в тестовом режиме, поэтому количество пользователей временно ограничено.\n'
'К сожалению, в данный момент лимит превышен, поэтому доступ для вас закрыт 😢'
'Попробуйте зайти на следующей неделе, когда лимит будет повышен'
),
)
else:
self.tg_db.changeTag(tgId, 'add')
self.tg.sendMessage(
tgId,
(
'Привет! Я твой новый помощник, который подскажет тебе, какая сейчас пара, '
'и будет напоминать о занятиях, чтобы ты ничего не упустил 🤗\n'
'Давай знакомиться! Введи свой номер группы (например, 2305 или 2305-240502D)'
),
)
def checkMessages(self):
"""Проверка и обработка входящих сообщений"""
updates = self.tg.get_updates(offset=self.udpate_id, timeout=5)
for update in updates:
self.udpate_id = update.update_id + 1
if update.message:
query = update.message
tag, l9Id, log = self.tg_db.getTag(query)
logger.info(log)
tgId = query.from_user.id
if tag == 'not_started':
self.start(query)
else:
self.tg.sendMessage(
tgId,
"Ой!",
reply_markup=Keyboard.menu(),
)
if __name__ == "__main__":
initLogger()
logger.info("Start bot")
config = loadJSON("config")
l9lk = L9_DB(**config['sql'])
tg_db = TG_DB(l9lk)
bot = Bot(config['tg']['token'], l9lk, tg_db, config['tg']['limit'])
logger.info("Bot ready!")
while bot.isWork:
msgs = bot.checkMessages()