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

如何在discord-py-interactions中限制仅特定用户显示上下文菜单交互?

实现仅针对特定用户触发上下文菜单交互的方法

discord-py-interactions 的 scopes 参数确实用于指定命令生效的服务器ID,无法直接通过它限制目标用户。要实现仅点击特定用户(比如机器人)才执行对应菜单命令,你可以通过以下两种方式处理:

方法一:在命令逻辑内直接校验目标用户

注册上下文菜单后,在命令函数开头先检查目标用户是否为你指定的对象(比如机器人自身ID),不符合条件则直接终止执行:

@user_context_menu(name="get_id", scopes=[1095478300228472982])
async def repeat(ctx: interactions.ContextMenuContext):
    # 替换为你需要限制的目标用户ID,比如机器人自身ID
    allowed_user_id = 123456789012345678
    member: interactions.Member = ctx.target
    
    if member.id != allowed_user_id:
        # 可选:发送仅用户可见的提示,或者直接静默不回复
        await ctx.send("此命令仅可对指定用户使用", ephemeral=True)
        return
    
    # 符合条件时执行原有逻辑
    await ctx.send(str(member.id))

方法二:使用自定义检查器复用限制逻辑

如果多个命令都需要相同的用户限制,可以自定义检查器,通过装饰器批量应用:

def allow_only_target_user(target_id):
    async def check(ctx: interactions.ContextMenuContext):
        return ctx.target.id == target_id
    return check

# 给命令应用检查器,指定允许的用户ID
@user_context_menu(name="get_id", scopes=[1095478300228472982])
@interactions.check(allow_only_target_user(123456789012345678))
async def repeat(ctx: interactions.ContextMenuContext):
    member: interactions.Member = ctx.target
    await ctx.send(str(member.id))

你还可以搭配错误处理器,为检查失败的情况返回统一提示,避免命令无响应。

注意:Discord 本身不支持上下文菜单仅对特定用户显示,上述方法是在命令触发后进行校验。如果希望菜单仅在点击指定用户时才出现,目前没有直接的API支持,只能通过触发后校验的方式实现功能限制。

内容的提问来源于stack exchange,提问作者Terrence Pledger

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 08:40:05