Discord上下文菜单回调参数错误,如何实现发消息并删频道?
问题解决:Discord上下文菜单发送消息并删除频道
错误原因
你写的上下文菜单回调函数参数不符合Discord.py的要求:用户类型的上下文菜单回调仅需两个参数——第一个是discord.Interaction对象,第二个是目标discord.User(或discord.Member),额外添加的ctx参数无效,这就是报错的根源。
修正方案
移除多余的ctx参数,通过interaction对象获取频道信息,同时注意先回应交互避免超时,代码如下:
import asyncio import discord from discord import appcommands # 假设tree是已初始化的CommandTree实例 @tree.context_menu(guild=discord.Object(id=941748573937209344), name='tester') async def slash(interaction: discord.Interaction, user: discord.User): # 先延迟回应交互,防止Discord判定超时(ephemeral=True仅触发者可见) await interaction.response.defer(ephemeral=True) # 创建嵌入消息 title = "ID deleted." embed = discord.Embed(title=title, color=0xf1c40f) # 获取触发菜单的频道 channel = interaction.channel # 发送嵌入消息到频道 await channel.send(embed=embed) # 等待2秒后删除频道 await asyncio.sleep(2) await channel.delete()
关键说明
- Discord.py的
appcommands上下文菜单(包括slash命令)不再使用传统的ctx参数,所有上下文信息都通过Interaction对象获取,比如interaction.channel就是当前频道,interaction.user是触发命令的用户。 - 必须先调用
interaction.response相关方法回应交互,否则Discord会在3秒后判定交互超时,导致后续操作失败。这里用defer延迟回应,适配需要执行较长时间的操作。
内容的提问来源于stack exchange,提问作者yusuf kuşçu
相关产品推荐
相关产品推荐

