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

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

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

  1. import discord
  2. from tools.config import TOKEN
  3. bot = discord.Bot()
  4. @bot.event
  5. async def on_ready():
  6. print(f"{bot.user} is ready and online!")
  7. @bot.slash_command(name="chat", description="Тут можно добавить описание")
  8. async def chat(ctx, msg):
  9. bot_msg = await ctx.respond(f'some message with tagging {ctx.author.mention}')
  10. await bot_msg.delete(delay=5)
  11. bot.run(TOKEN)

字符串
我得到了错误:

  1. await bot_msg.delete(delay=5)
  2. 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。
不和谐。客户端方法:

  1. import discord
  2. from discord import app_commands
  3. client = discord.Client(intents=discord.Intents.default)
  4. tree = app_commands.CommandTree(client)
  5. @tree.command(name="mycommand", description="command description")
  6. async def mycommand_callback(interaction: discord.Interaction):
  7. await interaction.response.send_message(content="Hello World")

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

  1. import discord
  2. from discord.ext import commands
  3. bot = commands.Bot(command_prefix="/", intents=discord.Intents.default())
  4. tree = bot.tree # Or use bot.tree directly
  5. # 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对象然后删除它来删除。

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


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

展开查看全部

相关问题