Stabilize staff concurrency and premium emoji; enable verified Drone deployment
Some checks failed
continuous-integration/drone/push Build is failing
Some checks failed
continuous-integration/drone/push Build is failing
This commit is contained in:
38
src/middlewares/runtime.py
Normal file
38
src/middlewares/runtime.py
Normal file
@@ -0,0 +1,38 @@
|
||||
"""Keep sensitive dialogs private and report unexpected failures safely."""
|
||||
import logging
|
||||
|
||||
from aiogram import BaseMiddleware
|
||||
from aiogram.types import CallbackQuery, Message
|
||||
from aiogram.exceptions import TelegramBadRequest
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class PrivateDialogMiddleware(BaseMiddleware):
|
||||
async def __call__(self, handler, event, data):
|
||||
message = event if isinstance(event, Message) else getattr(event, "message", None)
|
||||
if message and message.chat.type != "private":
|
||||
if isinstance(event, CallbackQuery):
|
||||
await event.answer("Откройте личный диалог с ботом", show_alert=True)
|
||||
return
|
||||
return await handler(event, data)
|
||||
|
||||
|
||||
class ErrorMiddleware(BaseMiddleware):
|
||||
async def __call__(self, handler, event, data):
|
||||
try:
|
||||
return await handler(event, data)
|
||||
except TelegramBadRequest as error:
|
||||
if "message is not modified" in str(error):
|
||||
if isinstance(event, CallbackQuery):
|
||||
await event.answer()
|
||||
return
|
||||
logger.exception("Telegram rejected a bot response")
|
||||
except Exception:
|
||||
logger.exception("Update handler failed")
|
||||
message = event.message if isinstance(event, CallbackQuery) else event
|
||||
if message:
|
||||
try:
|
||||
await message.answer("Не удалось выполнить действие. Попробуйте ещё раз или отправьте /cancel.")
|
||||
except Exception:
|
||||
logger.warning("Failed to deliver error response")
|
||||
Reference in New Issue
Block a user