试图删除来自特定频道的所有消息会破坏整个机器人

trying to delete all messages from a spesific channel breaks the whole bot

我想让用户键入 !join 加入游戏,但删除其中的所有消息,以免游戏满员。但是当我这样做时,它会删除该频道中的所有消息,但会破坏机器人的所有其他部分。

我试过 await message.delete() 和 await message.channel.purge(limit=1).

@client.event
async def on_message(message):
    channel = client.get_channel(590978944904331274)
    if message.channel == channel:
        await message.channel.purge(limit=1)


client.run(token)

它可以工作,但会破坏机器人的其余部分。

@client.event
async def on_message(message):
    channel = client.get_channel(590978944904331274)
    if message.channel == channel:
        await message.delete()

或在您的 !join 命令中 如果您正在使用

async def join(ctx):
    #do your code
    await ctx.message.delete()

await ctx.message.delete()会在使用命令时删除用户message/command。

await message.delete() 将删除任何人的消息甚至对话。

遮阳篷是

来自文档:

Overriding the default provided on_message forbids any extra commands from running. To fix this, add a bot.process_commands(message) line at the end of your on_message. For example:

@bot.event
async def on_message(message):
    # do some extra stuff here

    await bot.process_commands(message)

默认on_message包含对这个协程的调用,但是当你用自己的on_message覆盖它时,你需要自己调用它。

@benjin 在 post 上对此发表了评论。谢谢