首页 > 解决方案 > 检查 TextChannel 的 id 并执行一些操作

问题描述

嘿大家我想删除特定文本频道中的所有消息我使用这种方法

@client.event
async def on_message(message):
    for guild in client.guilds:
        for channel in guild.text_channels:
            if channel.id == 818522056261369906:
                await message.delete()

它可以工作,但它会删除所有文本通道消息,而不仅仅是具有上述 id 的文本通道有什么问题

标签: python-3.xdiscorddiscord.py

解决方案


它可以工作,但它会删除所有文本通道消息,而不仅仅是具有上述 id 的文本通道有什么问题

在检查您的机器人中是否存在某个频道(即通过检查该频道是否存在于您的机器人所在的所有公会中)时,您将删除该消息。您没有检查消息的频道 ID 是否与提供的 ID 匹配。这就是为什么它只检查该特定频道是否存在并继续删除该消息,而不管他们是否在该特定频道中。

for channel in guild.text_channels:
    # you're checking if a certain channel in guild's
    # text_channel matches the ID or not
    if channel.id == 818522056261369906:
        await message.delete()

但是您应该检查您的消息的频道 ID 是否与 ID 匹配。你可以这样做message.channel.id == 818522056261369906。所以你的代码应该是这样的

    if message.channel.id == 818522056261369906:
        await message.delete()

推荐阅读