删除 Discord.py 中的用户消息

Deleting User Messages in Discord.py

有没有办法删除除机器人本身以外的任何人发送的消息,文档似乎表明这是可能的

Your own messages could be deleted without any proper permissions. However to delete other people’s messages, you need the proper permissions to do so.

但是我找不到在 on_message 事件触发器中定位消息的方法,我是漏掉了什么还是根本不可能?

是的,应该可以。

您需要 bot/user 帐户才能拥有 Manage Messages 权限。

@client.event
async def on_message(message):
    await message.delete()

所以,事件会发生类似

User sends message
Bot detects that the user has sent a message
Bot deletes the message that the user sent

希望从这里你应该能够看到用户消息是如何被删除的,只要确保bot/user帐户具有Manage Messages权限即可。

您可以使用 message.delete() 删除用户消息。

这是一个代码,如果用户向服务器发送一些诅咒词,那么机器人将清除(删除)消息。

@bot.event
async def on_message(message):
    """ some on_message command """
    if message.author.id == bot.user.id:
        return
    msg_content = message.content.lower()

    curseWord = ['curse1', 'curse2']
    
    # delete curse word if match with the list
    if any(word in msg_content for word in curseWord):
        await message.delete()

如果您使用的是 COG:

@commands.Cog.listener()
async def on_message(message):
    # rest same as above 

如果您尝试删除上次发送的消息,例如,如果用户正在调用命令,而您想要删除他们的消息,然后再发送该命令。 在你的命令顶部使用这个“await ctx.message.delete()”,它会找到最后发送的消息并将其删除。

这是您需要的代码:

@client.command()
async def delete():
    message = ctx.message.id
    await message.delete()

我想出了一个删除不和谐邀请的代码

@client.event
async def on_message(message):
    msg_cnt = message.content.lower()
    if "discord.gg" in msg_cnt:
        await message.delete()

因此,每次用户发送包含“discord.gg”的内容时,它都会将其删除

您可以随意更改“discord.gg”,除了“https”,这在某种程度上给我带来了问题