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

如何将下方函数的user_id值传递给上方的BackButton类?

解决Discord.py中传递user_id到View类的方法

步骤1:修改BackButton类,添加初始化方法接收user_id

给BackButton类添加初始化方法,将user_id保存为实例属性,让类内的按钮回调可以直接访问:

class BackButton(discord.ui.View):
    def __init__(self, user_id):
        super().__init__()  # 必须调用父类初始化方法,保证View功能正常
        self.user_id = user_id  # 把传入的user_id存为实例属性

    @discord.ui.button(label='Назад', style=discord.ButtonStyle.primary)
    async def clan_back(self, button, interaction):
        if self.user_id == interaction.user.id:  # 使用实例属性做判断
            await interaction.response.edit_message(content='Вы вернулись назад')

步骤2:调整test_command的逻辑顺序,先获取user_id再创建View实例

原代码里user_id是在发送消息后才赋值的,需要调整顺序,先拿到用户ID再传入View实例:

@client.slash_command(name='test', description='Тест')
async def test_command(ctx):
    user_id = ctx.author.id  # 先获取当前命令发起者的ID
    await ctx.respond('Тест', view=BackButton(user_id))  # 创建View时传入user_id

核心说明

  • 调用父类discord.ui.View的__init__是必须的,否则View的按钮绑定等功能会失效。
  • 用实例属性传递数据是Discord.py中View类共享外部数据的标准方式,能避免多用户交互时的ID混淆问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 08:25:45