开发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
相关产品推荐
相关产品推荐

