用户执行命令后,如何删除 discord.py 中的消息?

Posted

技术标签:

【中文标题】用户执行命令后,如何删除 discord.py 中的消息?【英文标题】:How can I delete a message in discord.py after a command was executed by an user? 【发布时间】:2021-02-08 02:15:01 【问题描述】:

我正在尝试编写一个函数,使用用户发送的命令删除消息。

例如:

用户发送命令 /delmes Bot 向命令发送响应 Bot 删除用户发送的消息

到目前为止,我能找到的所有东西(这对我都有帮助)就是这个 Stack Overflow 线程:discord.py delete author message after executing command

但是当我使用代码时,如解决方案中所述,我只收到 AttributeError: 'Bot' object has no attribute 'delete_message'

discord.py API 参考 (https://discordpy.readthedocs.io/en/latest/migrating.html#models-are-stateful / https://discordpy.readthedocs.io/en/latest/api.html?highlight=delete%20message#message) 仅显示某些代码已随较新版本发生更改。 可以这么说 client.delete_message 将更改为 Message.delete(),如果我解释正确的话!

将代码更改为我认为必须的代码后,我收到了:NameError: name 'Message' is not defined

这是我最后时刻的代码。 (我对 discord.py 比较陌生,只在学校使用过 Python)

import discord
from discord.ext import commands
import random
import json

client = commands.Bot(command_prefix = '/', case_insensitive=True)

@client.command(pass_context=True)
async def delcommes(ctx):
    await ctx.send("This is the response to the users command!")
    await Message.delete(ctx.message, delay=3)

【问题讨论】:

【参考方案1】:

我不能很好地理解你的问题,但据我了解,当命令执行时,机器人发送消息后,你想删除命令消息,在这种情况下它是/delmes。你可以使用await ctx.message.delete()

@client.command(pass_context=True)
async def delcommes(ctx):
    await ctx.send("This is the response to the users command!")
    await ctx.message.delete()

【讨论】:

好的,谢谢!我现在看到了我的问题!我曾经尝试过 ctx.message.delete() 但括号内仍然有 ctx.message,就像在旧版本的 discord.py 和我上面链接的问题中指出的那样!

以上是关于用户执行命令后,如何删除 discord.py 中的消息?的主要内容,如果未能解决你的问题,请参考以下文章

在 Discord.py 中添加/删除角色使用控制台输入重写

discord.py 如何检查用户是不是在服务器上?

Discord.py - 检查用户是不是具有执行命令的特定角色

如何获取在 discord.py 中引发错误的命令名称?

如何制作不狙击跨服务器的狙击命令(discord.py)

如何检查用户是不是提供了参数 discord.py