Discord.Net Slash命令返回组件时显示“应用未响应”问题求助
解决Discord机器人Slash命令“应用未响应”问题
问题根源是Discord要求Slash命令必须在3秒内完成初始交互确认,如果代码发送菜单时存在调度延迟或耗时操作,就会触发超时提示。以下是具体修复方案:
修改FAQ命令代码
将原有的直接ReplyAsync改为先调用DeferAsync立即确认交互,再替换初始消息为带选择菜单的内容:
<SlashCommand("faq", "View frequently asked questions")> Public Async Function FAQ() As Task Dim FAQMenu As New SelectMenuBuilder Dim FAQSelect As New ComponentBuilder With FAQMenu .WithPlaceholder("What's your question?") .WithCustomId("faq_menu") .WithMinValues(1) .WithMaxValues(1) .AddOption("Question #1?", "faq1") .AddOption("Question #2?", "faq2") .AddOption("Question #3?", "faq3") .AddOption("Question #4?", "faq4") End With FAQSelect.WithSelectMenu(FAQMenu) ' 1. 立即发送延迟响应,告知Discord已收到命令,避免超时 Await DeferAsync(ephemeral:=False) ' 2. 替换初始延迟消息为带选择菜单的内容 Await ModifyOriginalResponseAsync(Sub(msg) msg.Content = "Select one of the following Frequently Asked Questions:" msg.Components = FAQSelect.Build End Sub) End Function
方案说明
DeferAsync会立刻向Discord返回交互确认,彻底规避3秒超时限制,不会再出现“应用未响应”提示。ModifyOriginalResponseAsync会替换Discord默认的“机器人正在思考”临时提示,直接展示目标菜单内容,保持用户体验连贯。
额外验证
你的HandleMenu方法逻辑正常,用户选择选项时Selection.RespondAsync能正确处理组件交互,无需修改。
内容的提问来源于stack exchange,提问作者G_Hosa_Phat
相关产品推荐
相关产品推荐

