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

开发Discord机器人遇CommandService.AddModuleAsync类型参数推断错误求助

解决Discord.NET中CommandService.AddModuleAsync类型参数推断错误

嘿,我明白你遇到的问题了——这个报错看起来有点绕,但其实是因为你用错了CommandService的方法重载。让我给你拆解一下:

问题原因

你调用的AddModuleAsync<T>是一个泛型方法,它需要你明确指定要添加的模块类的类型(也就是那个<T>的部分)。但你现在只传了程序集,编译器根本没法推断出你要加载哪个具体的模块类,所以就抛出了这个“无法推断类型参数”的错误。

而且更关键的是:如果你想加载整个程序集里的所有命令模块,你应该用的是非泛型的AddModulesAsync方法(注意是复数的Modules),而不是单个模块的AddModuleAsync<T>。

解决方案

根据你的需求,有两种修正方式:

1. 加载程序集中的所有命令模块(推荐,和教程逻辑一致)

把你的方法调用改成非泛型的AddModulesAsync,同时记得传入null作为IServiceProvider参数(如果你的项目还没用到依赖注入的话):

public CommandHandler(DiscordSocketClient client)
{
    _client = client;
    _service = new CommandService();
    // 改成AddModulesAsync,加载程序集里所有模块
    _service.AddModulesAsync(Assembly.GetEntryAssembly(), null);
}

2. 加载单个指定的命令模块

如果你只想加载某一个特定的模块类(比如你有个叫TestModule的模块),那就要显式指定泛型类型参数:

public CommandHandler(DiscordSocketClient client)
{
    _client = client;
    _service = new CommandService();
    // 显式指定模块类型TestModule,第二个参数传null
    _service.AddModuleAsync<TestModule>(null);
}

额外提醒

记得确保你的命令模块类是继承自ModuleBase<SocketCommandContext>的,不然即使加载了也不会生效哦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:10:15