first commit
This commit is contained in:
@@ -0,0 +1,85 @@
|
||||
# aiogram
|
||||
from aiogram import Bot, Dispatcher
|
||||
from aiogram.client.default import DefaultBotProperties
|
||||
from aiogram.client.session.aiohttp import AiohttpSession
|
||||
from aiogram.enums import ParseMode
|
||||
from aiogram.fsm.storage.redis import RedisStorage, DefaultKeyBuilder, StorageKey
|
||||
from aiogram.types import BotCommand
|
||||
|
||||
# cfg
|
||||
from decouple import config
|
||||
|
||||
# db
|
||||
from shared import ORM
|
||||
|
||||
# another
|
||||
import logging, pytz
|
||||
from urllib.parse import quote
|
||||
|
||||
|
||||
logging.basicConfig(
|
||||
level=logging.INFO, format="%(asctime)s - %(name)s - %(levelname)s - %(message)s"
|
||||
)
|
||||
logger = logging.getLogger(__name__)
|
||||
TELEGRAM_API_TIMEOUT = 120.0
|
||||
|
||||
|
||||
def build_telegram_proxy_url(proxy_value: str | None) -> str | None:
|
||||
if proxy_value is None:
|
||||
return None
|
||||
|
||||
proxy_value = proxy_value.strip()
|
||||
if not proxy_value:
|
||||
return None
|
||||
|
||||
parts = proxy_value.split(":")
|
||||
if len(parts) < 3:
|
||||
raise ValueError(
|
||||
"TELEGRAM_BOT_PROXY must be in format protocol(http/socks5):ip:port:user:pass"
|
||||
)
|
||||
|
||||
protocol, host, port, *auth_parts = parts
|
||||
if not protocol or not host or not port:
|
||||
raise ValueError(
|
||||
"TELEGRAM_BOT_PROXY must be in format protocol(http/socks5):ip:port:user:pass"
|
||||
)
|
||||
|
||||
username = auth_parts[0] if len(auth_parts) > 0 else ""
|
||||
password = ":".join(auth_parts[1:]) if len(auth_parts) > 1 else ""
|
||||
|
||||
if username or password:
|
||||
auth = f"{quote(username, safe='')}:{quote(password, safe='')}@"
|
||||
else:
|
||||
auth = ""
|
||||
|
||||
return f"{protocol}://{auth}{host}:{port}"
|
||||
|
||||
|
||||
telegram_proxy_url = build_telegram_proxy_url(
|
||||
config("TELEGRAM_BOT_PROXY", default="")
|
||||
)
|
||||
bot_session = (
|
||||
AiohttpSession(proxy=telegram_proxy_url, timeout=TELEGRAM_API_TIMEOUT)
|
||||
if telegram_proxy_url
|
||||
else AiohttpSession(timeout=TELEGRAM_API_TIMEOUT)
|
||||
)
|
||||
|
||||
if telegram_proxy_url:
|
||||
logger.info(
|
||||
"Telegram Bot API proxy enabled for host %s",
|
||||
telegram_proxy_url.rsplit("@", 1)[-1],
|
||||
)
|
||||
|
||||
redis_url = config("REDIS_URL")
|
||||
bot = Bot(
|
||||
token=config("TOKEN"),
|
||||
default=DefaultBotProperties(parse_mode=ParseMode.HTML),
|
||||
session=bot_session,
|
||||
)
|
||||
storage = RedisStorage.from_url(redis_url)
|
||||
storage.key_builder = DefaultKeyBuilder(with_bot_id=True)
|
||||
dp = Dispatcher(storage=storage)
|
||||
|
||||
start_command = [BotCommand(command="/start", description="🔄 Перезапустить бота")]
|
||||
tz = pytz.timezone(config("TIMEZONE"))
|
||||
orm = ORM()
|
||||
Reference in New Issue
Block a user