You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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(无返回值的异步方法),它仅负责向用户发送模态框,不会返回用户填写的表单内容。因此你无法将它的返回值赋值给变量,这就是编译器报错的直接原因。

正确处理逻辑

模态框的用户输入需要通过监听模态框提交事件来获取,而非在发送模态框时直接获取。修改步骤如下:

  1. 修正发送模态框的代码,去掉无用的变量赋值:
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());
}
  1. 添加专门处理模态框提交的方法:
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);
    }
}
  1. 在机器人初始化时,注册模态框提交事件的监听:
// 假设_client是你的DiscordSocketClient实例
_client.ModalSubmitted += HandleModalSubmit;

核心逻辑说明

Discord的交互流程中,发送模态框和用户提交模态框是两个独立的事件:

  1. 点击按钮触发SocketMessageComponent交互,我们在这个阶段发送模态框。
  2. 用户填写并提交模态框时,会触发SocketModal交互,我们需要单独监听这个事件来获取用户输入并处理后续逻辑。

内容的提问来源于stack exchange,提问作者EthanGrand

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 03:48:18