我试图用 Discord.NET 包制作一个新的 Discord 机器人,我认为它已经完成了。只有命令代码在等待。现在我不知道这句话是什么,我怎样才能结束它。
我试图将"AddModulesAsync"更改为"AddModuleAsync",但它仍然给出错误。
namespace AsunaBot
{
class Program
{
static void Main(string[] args) => new Program().RunBotAsync().GetAwaiter().GetResult();
private DiscordSocketClient _client;
private CommandService _commands;
private IServiceProvider _services;
public async Task RunBotAsync()
{
_client = new DiscordSocketClient();
_commands = new CommandService();
_services = new ServiceCollection()
.AddSingleton(_client)
.AddSingleton(_commands)
.BuildServiceProvider();
string botToken = "TOKEN_HERE";
_client.Log += Log;
await RegisterCommandsAsync();
await _client.LoginAsync(TokenType.Bot, botToken);
await _client.StartAsync();
await Task.Delay(-1);
}
private Task Log(LogMessage arg)
{
Console.WriteLine(arg);
return Task.CompletedTask;
}
public async Task RegisterCommandsAsync()
{
_client.MessageReceived += HandleCommandAsync;
await _commands.AddModulesAsync(Assembly.GetEntryAssembly());
}
private async Task HandleCommandAsync(SocketMessage arg)
{
var message = arg as SocketUserMessage;
if (message is null || message.Author.IsBot) return;
int argPos = 0;
if (message.HasStringPrefix("tnt!", ref argPos) || message.HasMentionPrefix(_client.CurrentUser, ref argPos))
{
var context = new SocketCommandContext(_client, message);
var result = await _commands.ExecuteAsync(context, argPos, _services);
if (!result.IsSuccess)
Console.WriteLine(result.ErrorReason);
}
}
}
}
如果它有效,我可以运行我的机器人来给出一些命令,Discord
感谢@stuartd的回复。我错过了。AdModulesAsync() 还需要一个参数。我在那里写了_services,它运行良好,感谢@Kaynn隐藏我的令牌,我在第一个问题帖子中透露了这一点。新代码如下所示: await _commands.AddModulesAsync(Assembly.GetEntryAssembly(), _services);