You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 15:45:33