如何在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
相关产品推荐
相关产品推荐

