- Added voice message handling capabilities, including saving and deleting audio messages via callback queries. - Refactored audio record management in the database to remove unnecessary fields and streamline operations. - Introduced new keyboard options for voice interactions in the bot. - Updated `.gitignore` to include voice user files for better project organization. - Removed obsolete voice bot handler files to simplify the codebase.
61 lines
2.8 KiB
Python
61 lines
2.8 KiB
Python
from aiogram import Bot, Dispatcher
|
||
from aiogram.client.default import DefaultBotProperties
|
||
from aiogram.fsm.storage.memory import MemoryStorage
|
||
from aiogram.fsm.strategy import FSMStrategy
|
||
import logging
|
||
|
||
from helper_bot.handlers.admin import admin_router
|
||
from helper_bot.handlers.callback import callback_router
|
||
from helper_bot.handlers.group import group_router
|
||
from helper_bot.handlers.private import private_router
|
||
from helper_bot.handlers.voice import VoiceHandlers
|
||
from helper_bot.middlewares.dependencies_middleware import DependenciesMiddleware
|
||
from helper_bot.middlewares.blacklist_middleware import BlacklistMiddleware
|
||
from helper_bot.middlewares.metrics_middleware import MetricsMiddleware, ErrorMetricsMiddleware
|
||
from helper_bot.server_prometheus import start_metrics_server, stop_metrics_server
|
||
|
||
|
||
async def start_bot(bdf):
|
||
token = bdf.settings['Telegram']['bot_token']
|
||
bot = Bot(token=token, default=DefaultBotProperties(
|
||
parse_mode='HTML',
|
||
link_preview_is_disabled=bdf.settings['Telegram']['preview_link']
|
||
), timeout=30.0)
|
||
dp = Dispatcher(storage=MemoryStorage(), fsm_strategy=FSMStrategy.GLOBAL_USER)
|
||
|
||
# ✅ Оптимизированная регистрация middleware
|
||
dp.update.outer_middleware(DependenciesMiddleware())
|
||
dp.update.outer_middleware(MetricsMiddleware())
|
||
dp.update.outer_middleware(BlacklistMiddleware())
|
||
|
||
# Создаем экземпляр VoiceHandlers
|
||
voice_handlers = VoiceHandlers(bdf, bdf.settings)
|
||
voice_router = voice_handlers.router
|
||
|
||
# Добавляем middleware напрямую к роутерам для тестирования
|
||
admin_router.message.middleware(MetricsMiddleware())
|
||
private_router.message.middleware(MetricsMiddleware())
|
||
callback_router.callback_query.middleware(MetricsMiddleware())
|
||
group_router.message.middleware(MetricsMiddleware())
|
||
voice_router.message.middleware(MetricsMiddleware())
|
||
dp.include_routers(admin_router, private_router, callback_router, group_router, voice_router)
|
||
await bot.delete_webhook(drop_pending_updates=True)
|
||
|
||
# Запускаем HTTP сервер для метрик параллельно с ботом
|
||
metrics_host = bdf.settings.get('Metrics', {}).get('host', '0.0.0.0')
|
||
metrics_port = bdf.settings.get('Metrics', {}).get('port', 8080)
|
||
|
||
try:
|
||
# Запускаем метрики сервер
|
||
await start_metrics_server(metrics_host, metrics_port)
|
||
|
||
# Запускаем бота
|
||
await dp.start_polling(bot, skip_updates=True)
|
||
|
||
except Exception as e:
|
||
logging.error(f"Error in bot startup: {e}")
|
||
raise
|
||
finally:
|
||
# Останавливаем метрики сервер при завершении
|
||
await stop_metrics_server()
|