如何将下方函数的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
相关产品推荐
相关产品推荐

