Nextcord/Discord.py机器人重启后按钮失效问题求助
解决Nextcord机器人重启后按钮失效的问题
问题原因
使用timeout=None的持久化视图时,未在机器人启动阶段注册该视图。机器人重启后,无法关联之前发送的按钮与对应回调逻辑,导致按钮点击无响应。
解决方案
在机器人就绪事件中注册TicketButton视图,确保重启后Nextcord能识别并处理该视图的交互请求。
修改后的完整代码:
class TicketButton(nextcord.ui.View): def __init__(self): super().__init__(timeout=None) @nextcord.ui.button(label="Заявка", style=nextcord.ButtonStyle.blurple) async def zayavka(self, button: nextcord.ui.Button, interaction: nextcord.Interaction): await interaction.response.send_modal(EmbedModal()) @bot.command() async def createticket(ctx): em = nextcord.Embed(color=nextcord.Color.blue()) em.add_field(name="**Подача заявки👮**", value="Нажмите на кнопку ниже для открытия поля заполнения заявки", inline=False) em.add_field(name="", value="*Подать заявку снова будет невозможно!*", inline=False) await ctx.send(embed=em, view=TicketButton()) # 机器人就绪时注册持久化视图 @bot.event async def on_ready(): print(f"已登录为 {bot.user}") bot.add_view(TicketButton())
关键说明
bot.add_view(TicketButton())会将视图注册为持久化监听,即使机器人重启,也能匹配到之前发送的按钮交互事件。- 需确保
EmbedModal类已正确定义并可正常运行,否则按钮点击后仍会出现异常。
内容的提问来源于stack exchange,提问作者ItsFartunaRu
相关产品推荐
相关产品推荐

