C# Discord.Net机器人报错:无法将void赋值给隐式类型变量
解决Discord.Net中"It is not possible to assign void to an implicitly typed variable."错误
错误原因
报错代码行var verificationResponse = await interaction.RespondWithModalAsync(verificationMb.Build());的问题在于:
RespondWithModalAsync()方法的返回类型是Task(无返回值的异步方法),它仅负责向用户发送模态框,不会返回用户填写的表单内容。因此你无法将它的返回值赋值给变量,这就是编译器报错的直接原因。
正确处理逻辑
模态框的用户输入需要通过监听模态框提交事件来获取,而非在发送模态框时直接获取。修改步骤如下:
- 修正发送模态框的代码,去掉无用的变量赋值:
else if (buttonInteraction.Data.CustomId == "Верификация") { var userWhoClicked = buttonInteraction.User; var verificationMb = new ModalBuilder() .WithTitle("Верификация") .WithCustomId("verification_menu") .AddTextInput("Ваш ник?", "verification_additional", TextInputStyle.Paragraph, "NeSHIZ..."); // 仅发送模态框,不赋值 await interaction.RespondWithModalAsync(verificationMb.Build()); }
- 添加专门处理模态框提交的方法:
private async Task HandleModalSubmit(SocketModal interaction) { // 匹配我们创建的验证模态框ID if (interaction.Data.CustomId == "verification_menu") { // 获取用户填写的输入内容 var verificationInput = interaction.Data.Components .First(component => component.CustomId == "verification_additional") .Value; var submittingUser = interaction.User; // 保存到数据库 SaveVerificationToDatabase(submittingUser.Username, verificationInput); // 给用户发送提交成功的反馈 await interaction.RespondAsync("Верификация信息已保存!", ephemeral: true); } }
- 在机器人初始化时,注册模态框提交事件的监听:
// 假设_client是你的DiscordSocketClient实例 _client.ModalSubmitted += HandleModalSubmit;
核心逻辑说明
Discord的交互流程中,发送模态框和用户提交模态框是两个独立的事件:
- 点击按钮触发
SocketMessageComponent交互,我们在这个阶段发送模态框。 - 用户填写并提交模态框时,会触发
SocketModal交互,我们需要单独监听这个事件来获取用户输入并处理后续逻辑。
内容的提问来源于stack exchange,提问作者EthanGrand
相关产品推荐
相关产品推荐

