generated from FOSS/Bot-Template
92 lines
2.9 KiB
Python
92 lines
2.9 KiB
Python
# - *- coding: utf- 8 - *-
|
|
from aiogram import Bot, Router
|
|
from aiogram.exceptions import TelegramForbiddenError
|
|
from aiogram.types import ChatJoinRequest
|
|
|
|
from tgbot.database.db_pending import PendingRepository
|
|
from tgbot.database.db_settings import SettingsRepository
|
|
from tgbot.utils.const_functions import get_unix, smart_message
|
|
from tgbot.utils.misc.bot_logging import bot_logger
|
|
|
|
from tgbot.keyboards.inline_main import _build_msg_keyboard
|
|
|
|
router = Router(name=__name__)
|
|
|
|
|
|
@router.chat_join_request()
|
|
async def on_join_request(update: ChatJoinRequest, bot: Bot) -> None:
|
|
user_id = update.from_user.id
|
|
settings = await SettingsRepository().get()
|
|
|
|
if not settings.status_work:
|
|
return
|
|
|
|
if not settings.misc_message:
|
|
return
|
|
|
|
keyboard = _build_msg_keyboard(settings.misc_finl_text, settings.misc_finl_link)
|
|
|
|
try:
|
|
await smart_message(
|
|
bot=bot,
|
|
user_id=user_id,
|
|
text=settings.misc_message,
|
|
keyboard=keyboard,
|
|
photo=settings.misc_message_media,
|
|
)
|
|
|
|
except TelegramForbiddenError:
|
|
bot_logger.info("Пользователь %s заблокировал бота, пропускаем", user_id)
|
|
return
|
|
except Exception:
|
|
bot_logger.warning(
|
|
"Не удалось отправить сообщение пользователю %s", user_id, exc_info=True
|
|
)
|
|
return
|
|
|
|
if settings.remind_interval > 0:
|
|
await PendingRepository().add(user_id=user_id)
|
|
|
|
|
|
async def send_reminders(bot: Bot) -> None:
|
|
settings = await SettingsRepository().get()
|
|
|
|
if settings.remind_interval == 0 or not settings.misc_message:
|
|
return
|
|
|
|
interval_seconds = settings.remind_interval * 3600
|
|
now = get_unix()
|
|
pending_repo = PendingRepository()
|
|
pending_users = await pending_repo.get_all()
|
|
|
|
keyboard = _build_msg_keyboard(settings.misc_finl_text, settings.misc_finl_link)
|
|
|
|
for row in pending_users:
|
|
reference = row.last_remind_at if row.last_remind_at > 0 else row.joined_at
|
|
|
|
if now - reference < interval_seconds:
|
|
continue
|
|
|
|
try:
|
|
await smart_message(
|
|
bot=bot,
|
|
user_id=row.user_id,
|
|
text=settings.misc_message,
|
|
keyboard=keyboard,
|
|
photo=settings.misc_message_media,
|
|
)
|
|
await pending_repo.update_remind_at(user_id=row.user_id)
|
|
|
|
except TelegramForbiddenError:
|
|
await pending_repo.delete(user_id=row.user_id)
|
|
bot_logger.info(
|
|
"Пользователь %s заблокировал бота, удалён из очереди", row.user_id
|
|
)
|
|
|
|
except Exception:
|
|
bot_logger.warning(
|
|
"Не удалось отправить напоминание пользователю %s",
|
|
row.user_id,
|
|
exc_info=True,
|
|
)
|