| 1 |
8440155 |
mahdim10 |
1y ago |
import logging |
| 2 |
8440155 |
mahdim10 |
1y ago |
|
| 3 |
8440155 |
mahdim10 |
1y ago |
from aiogram import Bot |
| 4 |
8440155 |
mahdim10 |
1y ago |
from aiogram.client.default import DefaultBotProperties |
| 5 |
8440155 |
mahdim10 |
1y ago |
from aiogram.client.session.aiohttp import AiohttpSession |
| 6 |
8440155 |
mahdim10 |
1y ago |
from aiogram.enums import ParseMode |
| 7 |
8440155 |
mahdim10 |
1y ago |
from aiogram.exceptions import TelegramAPIError |
| 8 |
8440155 |
mahdim10 |
1y ago |
|
| 9 |
8440155 |
mahdim10 |
1y ago |
from app.config import TELEGRAM_PROXY_URL |
| 10 |
8440155 |
mahdim10 |
1y ago |
from app.config.env import ( |
| 11 |
8440155 |
mahdim10 |
1y ago |
TELEGRAM_API_TOKEN, |
| 12 |
8440155 |
mahdim10 |
1y ago |
TELEGRAM_ADMIN_ID, |
| 13 |
8440155 |
mahdim10 |
1y ago |
TELEGRAM_LOGGER_CHANNEL_ID, |
| 14 |
8440155 |
mahdim10 |
1y ago |
) |
| 15 |
8440155 |
mahdim10 |
1y ago |
from app.models.notification import Notification |
| 16 |
8440155 |
mahdim10 |
1y ago |
from app.notification.helper import create_text |
| 17 |
8440155 |
mahdim10 |
1y ago |
|
| 18 |
8440155 |
mahdim10 |
1y ago |
logger = logging.getLogger(__name__) |
| 19 |
8440155 |
mahdim10 |
1y ago |
|
| 20 |
8440155 |
mahdim10 |
1y ago |
|
| 21 |
8440155 |
mahdim10 |
1y ago |
class BotManager: |
| 22 |
8440155 |
mahdim10 |
1y ago |
_instance = None |
| 23 |
8440155 |
mahdim10 |
1y ago |
|
| 24 |
8440155 |
mahdim10 |
1y ago |
@classmethod |
| 25 |
8440155 |
mahdim10 |
1y ago |
async def get_instance(cls): |
| 26 |
8440155 |
mahdim10 |
1y ago |
if cls._instance is None and TELEGRAM_API_TOKEN: |
| 27 |
8440155 |
mahdim10 |
1y ago |
if TELEGRAM_PROXY_URL: |
| 28 |
8440155 |
mahdim10 |
1y ago |
session = AiohttpSession(proxy=TELEGRAM_PROXY_URL) |
| 29 |
8440155 |
mahdim10 |
1y ago |
else: |
| 30 |
8440155 |
mahdim10 |
1y ago |
session = None |
| 31 |
8440155 |
mahdim10 |
1y ago |
|
| 32 |
8440155 |
mahdim10 |
1y ago |
cls._instance = Bot( |
| 33 |
8440155 |
mahdim10 |
1y ago |
token=TELEGRAM_API_TOKEN, |
| 34 |
8440155 |
mahdim10 |
1y ago |
default=DefaultBotProperties(parse_mode=ParseMode.HTML), |
| 35 |
8440155 |
mahdim10 |
1y ago |
session=session, |
| 36 |
8440155 |
mahdim10 |
1y ago |
) |
| 37 |
8440155 |
mahdim10 |
1y ago |
try: |
| 38 |
8440155 |
mahdim10 |
1y ago |
await cls._instance.get_me() |
| 39 |
8440155 |
mahdim10 |
1y ago |
except: |
| 40 |
8440155 |
mahdim10 |
1y ago |
logger.error("Telegram API token is not valid.") |
| 41 |
8440155 |
mahdim10 |
1y ago |
return cls._instance |
| 42 |
8440155 |
mahdim10 |
1y ago |
|
| 43 |
8440155 |
mahdim10 |
1y ago |
|
| 44 |
8440155 |
mahdim10 |
1y ago |
async def send_message( |
| 45 |
8440155 |
mahdim10 |
1y ago |
message: str, |
| 46 |
8440155 |
mahdim10 |
1y ago |
parse_mode=ParseMode.HTML, |
| 47 |
8440155 |
mahdim10 |
1y ago |
): |
| 48 |
8440155 |
mahdim10 |
1y ago |
if not (bot := await BotManager.get_instance()): |
| 49 |
8440155 |
mahdim10 |
1y ago |
return |
| 50 |
8440155 |
mahdim10 |
1y ago |
|
| 51 |
8440155 |
mahdim10 |
1y ago |
for recipient_id in (TELEGRAM_ADMIN_ID or []) + [ |
| 52 |
8440155 |
mahdim10 |
1y ago |
TELEGRAM_LOGGER_CHANNEL_ID |
| 53 |
8440155 |
mahdim10 |
1y ago |
]: |
| 54 |
8440155 |
mahdim10 |
1y ago |
if not recipient_id: |
| 55 |
8440155 |
mahdim10 |
1y ago |
continue |
| 56 |
8440155 |
mahdim10 |
1y ago |
try: |
| 57 |
8440155 |
mahdim10 |
1y ago |
await bot.send_message( |
| 58 |
8440155 |
mahdim10 |
1y ago |
recipient_id, |
| 59 |
8440155 |
mahdim10 |
1y ago |
message, |
| 60 |
8440155 |
mahdim10 |
1y ago |
parse_mode=parse_mode, |
| 61 |
8440155 |
mahdim10 |
1y ago |
) |
| 62 |
8440155 |
mahdim10 |
1y ago |
except TelegramAPIError as e: |
| 63 |
8440155 |
mahdim10 |
1y ago |
logger.error(e) |
| 64 |
8440155 |
mahdim10 |
1y ago |
|
| 65 |
8440155 |
mahdim10 |
1y ago |
|
| 66 |
8440155 |
mahdim10 |
1y ago |
async def send_notification(notif: Notification): |
| 67 |
8440155 |
mahdim10 |
1y ago |
text = create_text(notif) |
| 68 |
8440155 |
mahdim10 |
1y ago |
await send_message(text) |