Discord.py Cogs中扩展View类无法传递变量的问题
Discord.py 自定义View传参后send失效问题解决
问题情况
原本Embed和View可以正常发送,但通过view = StartMatch(player_1, player_2)传递变量后,await ctx.send(view=view, embed=embed)失效——变量能正常打印,但无任何报错,消息也无法发送。
问题代码
embed.add_field(name="Player 1", value=new_game['player_1']['name'], inline=True) embed.add_field(name="Player 2", value=new_game['player_2']['name'], inline=True) await ctx.send(view=view, embed=embed) class StartMatch(View): def __init__(self, player_1, player_2): self.player_1 = player_1 self.player_2 = player_2 print(f'This is player 1 {self.player_1}, player 2 {self.player_2}')
问题原因
自定义View类继承自discord.py的View时,重写__init__方法却未调用父类的构造函数super().__init__(),导致View内部核心初始化逻辑(如组件管理、超时配置等)未执行。虽然实例化时变量能正常打印,但该View实例不符合Discord.py的运行要求,无法被send方法正确处理,最终表现为消息发送失效。
修复代码
class StartMatch(View): def __init__(self, player_1, player_2): super().__init__() # 必须调用父类构造函数完成初始化 self.player_1 = player_1 self.player_2 = player_2 print(f'This is player 1 {self.player_1}, player 2 {self.player_2}')
说明
在Python继承体系中,子类重写__init__方法时,必须显式调用父类的__init__来完成父类部分的初始化工作。Discord.py的View类依赖自身初始化逻辑维护组件状态,缺失这一步会导致View功能完全失效,即使没有抛出异常,也无法正常工作。
内容的提问来源于stack exchange,提问作者Nyaaaaaaaa
相关产品推荐
相关产品推荐

