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

如何让Discord.py中的按钮仅对执行命令的用户可用

如何让Discord.py中的按钮仅对执行命令的用户可用

嘿,我完全懂你现在的糟心情况——别人乱点bot的按钮搞破坏确实超烦!别慌,咱们只需要给你的View加个身份校验的逻辑就能解决这个问题,具体步骤如下:

  • 第一步:修改View的初始化方法,保存发起命令的用户
    我们要在创建Menu这个View的时候,把发起命令的用户信息存下来,这样后面才能校验点击按钮的人是不是本人。修改后的Menu类初始化代码是这样的:

    class Menu(discord.ui.View):
        def __init__(self, author: discord.User):
            super().__init__()
            self.value = None
            self.author = author  # 把发起命令的用户存到View的属性里
    
  • 第二步:在按钮回调里加身份校验逻辑
    每次有人点击按钮时,先检查当前点击的用户是不是我们之前保存的那个命令发起者,如果不是就直接拒绝操作,并且给点击的人发个仅他能看到的提示。修改你的按钮回调函数:

    @discord.ui.button(label="Yes, i am sure", style=discord.ButtonStyle.green)
    async def yesimsure(self, interaction: discord.Interaction, button: discord.ui.Button):
        # 先做身份校验,不是命令发起者直接返回
        if interaction.user != self.author:
            await interaction.response.send_message("只有发起这个命令的人才能点击按钮哦!", ephemeral=True)
            return
        
        # 下面是你原来的转盘逻辑,保持不变就行
        if random.randint(1, 10) == 1:
            embed = discord.Embed(
                title="Roulette Result - You Lost!",
                description="You got timed out for 5 minutes.",
                color=discord.Color.red()
            )
            # 这里补充你原来的超时逻辑
            await interaction.user.timeout_for(minutes=5)
            await interaction.response.send_message(embed=embed)
        else:
            # 这里可以补充赢了的提示逻辑
            embed = discord.Embed(
                title="Roulette Result - You Won!",
                description="运气爆棚,安全下车!",
                color=discord.Color.green()
            )
            await interaction.response.send_message(embed=embed)
    
  • 第三步:在命令函数里传入发起者信息
    最后,在你触发这个View的命令函数里,要把命令的作者(也就是ctx.author)传给Menu的构造函数:

    @bot.command()
    async def roulette(ctx):
        # 创建View实例时传入命令发起者
        view = Menu(author=ctx.author)
        # 发送带按钮的消息
        await ctx.send("敢不敢来玩俄罗斯转盘?点击下方按钮确认参与!", view=view)
    

这样改完之后,只有发起命令的用户点击按钮才会触发后续逻辑,其他人点击只会收到专属提示,再也不用担心被滥用啦!

备注:内容来源于stack exchange,提问作者jiko

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.16 11:58:01