mirror of
https://github.com/artemium428/428th-exchange-bot.git
synced 2026-09-15 16:56:20 +00:00
91 lines
3 KiB
Python
91 lines
3 KiB
Python
from __future__ import annotations
|
|
|
|
import logging
|
|
|
|
from aiogram import F, Router
|
|
from aiogram.enums import ChatType
|
|
from aiogram.filters import Command
|
|
from aiogram.types import Message, MessageReactionUpdated
|
|
|
|
from bot.services.relay import GENERAL_TOPIC_ID, RelayService, is_relayable_content
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
def build_manager_router(manager_group_id: int) -> Router:
|
|
router = Router(name="manager")
|
|
|
|
@router.message(
|
|
Command("del"),
|
|
F.chat.id == manager_group_id,
|
|
F.chat.type == ChatType.SUPERGROUP,
|
|
)
|
|
async def manager_del(message: Message, relay: RelayService) -> None:
|
|
"""Reply to a relayed message with /del to remove it on both sides."""
|
|
if relay.is_self(message.from_user.id if message.from_user else None):
|
|
return
|
|
topic_id = message.message_thread_id
|
|
if topic_id is None or topic_id == GENERAL_TOPIC_ID:
|
|
return
|
|
if message.reply_to_message is None:
|
|
return
|
|
try:
|
|
deleted = await relay.delete_paired_from_manager(message.bot, message)
|
|
except Exception:
|
|
logger.exception("Failed to delete paired message in topic %s", topic_id)
|
|
return
|
|
if deleted:
|
|
try:
|
|
await message.delete()
|
|
except Exception:
|
|
pass
|
|
|
|
@router.message(
|
|
F.chat.id == manager_group_id,
|
|
F.chat.type == ChatType.SUPERGROUP,
|
|
)
|
|
async def manager_message(message: Message, relay: RelayService) -> None:
|
|
if relay.is_self(message.from_user.id if message.from_user else None):
|
|
return
|
|
|
|
topic_id = message.message_thread_id
|
|
if topic_id is None or topic_id == GENERAL_TOPIC_ID:
|
|
return
|
|
if not is_relayable_content(message):
|
|
return
|
|
|
|
try:
|
|
await relay.relay_manager_to_client(message.bot, message)
|
|
except Exception:
|
|
logger.exception("Failed to relay manager message in topic %s", topic_id)
|
|
|
|
@router.edited_message(
|
|
F.chat.id == manager_group_id,
|
|
F.chat.type == ChatType.SUPERGROUP,
|
|
)
|
|
async def manager_edited(message: Message, relay: RelayService) -> None:
|
|
if relay.is_self(message.from_user.id if message.from_user else None):
|
|
return
|
|
|
|
topic_id = message.message_thread_id
|
|
if topic_id is None or topic_id == GENERAL_TOPIC_ID:
|
|
return
|
|
if not is_relayable_content(message):
|
|
return
|
|
|
|
try:
|
|
await relay.relay_manager_edit(message.bot, message)
|
|
except Exception:
|
|
logger.exception("Failed to relay manager edit in topic %s", topic_id)
|
|
|
|
@router.message_reaction(F.chat.id == manager_group_id)
|
|
async def manager_reaction(event: MessageReactionUpdated, relay: RelayService) -> None:
|
|
try:
|
|
await relay.relay_reaction(event.bot, event)
|
|
except Exception:
|
|
logger.exception(
|
|
"Failed to relay manager reaction on message %s",
|
|
event.message_id,
|
|
)
|
|
|
|
return router
|