Aiogram 机器人无法在频道评论中回复

问题描述 投票:0回答:1

我编写了一个简单的 aiogram 聊天机器人代码,它可以将消息写入 mongodb 数据库:

@router.message(Command('memorize'), IsChat(['group', 'supergroup', 'chat', 'channel']), IsAdmin(admin_id))
async def memorize_handler(message: Message) -> None:
    reply = message.reply_to_message
    if not reply:
        await message.answer("⚙ Can't find user")
        return
    
    text = reply.text
    if reply.from_user.username:
        username = reply.from_user.username
    else:
        username = reply.from_user.full_name
    try:
        user_id = reply.from_user.id
        mention = reply.from_user.mention_html(reply.from_user.first_name)
        memory_id = str(uuid.uuid4())
        memorize(memory_id=memory_id, text=text, username=username, user_id=user_id)
        await message.answer(f'💾 Succesfully saved message from {mention}')
    except:
        await message.answer(f'❗ Couldnt save message from {mention}')

在此过滤代码:

class IsChat(BaseFilter):

    def __init__(self, chat_type: str | List[str]) -> None:
        self.chat_type = chat_type
    
    async def __call__(self, message: Message) -> bool:
        if isinstance(self.chat_type, str):
            return message.chat.type == self.chat_type
        return message.chat.type in self.chat_type

问题是,当您从频道聊天中调用机器人时 - 他由于某种原因不处理更新。 然而,机器人仍然可以在私人聊天、群组和超级群组中工作。

我已经尝试使用“频道”和“聊天”扩展 IsChat 过滤器,但没有成功

python bots telegram aiogram
1个回答
0
投票

我知道问题出在哪里了。 在每条消息上,我都有过滤器 IsAdmin 和 IsChat。

IsAdmin 代码:

class IsAdmin(BaseFilter):

    def __init__(self, user_ids: int | List[int]) -> None:
        self.user_ids = user_ids
    
    async def __call__(self, message: Message) -> bool:
        if isinstance(self.user_ids, int):
            return message.from_user.id == self.user_ids
        return message.from_user.id in self.user_ids

基本上,它会比较传递的管理员 ID 并检查它是否等于消息中的 ID。 我忘记了,我必须添加我的匿名用户 ID(实际上是频道聊天管理员的 ID)。

IsChat 在这种情况下需要“超级组”,因为频道聊天是超级组而不是常规组。 希望我对你有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.