python-3.x 无法删除机器人消息discord.py)

t3irkdon  于 2023-11-20  发布在  Python
关注(0)|答案(1)|浏览(117)

我在删除discord bot的消息时遇到问题。下面是复制我遇到的问题的代码:

import discord
from tools.config import TOKEN

bot = discord.Bot()

@bot.event
async def on_ready():
    print(f"{bot.user} is ready and online!")

@bot.slash_command(name="chat", description="Тут можно добавить описание")
async def chat(ctx, msg):
        bot_msg = await ctx.respond(f'some message with tagging {ctx.author.mention}')
        await bot_msg.delete(delay=5)   

bot.run(TOKEN)

字符串
我得到了错误:

await bot_msg.delete(delay=5)
AttributeError: 'Interaction' object has no attribute 'delete'


我使用的是py-cord==2.4.1,但我相信它和discord.py是一样的。

siv3szwd

siv3szwd1#

Pycorddiscord.py不相同。
discord.py是一个面向Discord的现代化、易于使用、功能丰富且支持异步的API Package 器。
Pycorddiscord.py的一个分支。

discord.py上的斜杠命令

有两种方法可以完成此操作,一种是使用discord中的客户端,另一种是使用discord.ext.commands中的Bot。
不和谐。客户端方法:

import discord
from discord import app_commands

client = discord.Client(intents=discord.Intents.default)
tree = app_commands.CommandTree(client)

@tree.command(name="mycommand", description="command description")
async def mycommand_callback(interaction: discord.Interaction):
    await interaction.response.send_message(content="Hello World")

字符串
同时,commands.Bot具有属性tree,这与app_commands.CommandTree基本相同。commands.Bot的主要优点是使用了cogs
下面是你如何初始化bot。

import discord
from discord.ext import commands

bot = commands.Bot(command_prefix="/", intents=discord.Intents.default())
tree = bot.tree #  Or use bot.tree directly

#  Same command as above


discord.py在一年前停止了discord.py的开发之后,现在又恢复了它的开发。在它宣布停止开发之后,像Pycord这样的分叉就开始出现了。至于使用哪一个,这取决于你。但是我个人建议你坚持使用discord.py的主库。
有关discord.py中斜杠命令的更多信息,请参阅discord.Interaction,discord.InteractionResponse。

删除bot的消息

在用discord.InteractionResponse(不返回消息对象)回复命令user之后,您可以使用delete_after属性删除它,也可以通过获取original_response对象然后删除它来删除。

@tree.command()
async def mycommand(interaction: discord.Interaction):
    await interaction.response.send_message(content=f"some message with tagging {interaction.user.mention}", delete_after=5.0)


@tree.command()
async def mycommand(interaction: discord.Interaction):
    await interaction.response.send_message(content=f"some message with tagging {interaction.user.mention}")
    original_response = await interaction.original_response()
    await asyncio.sleep(5.0)
    await original_response.delete()

相关问题