#c# #discord.net
Вопрос:
Я пытаюсь сделать бота для раздора на Discord.net в первый раз.
Вот мой код.
class StartUp
{
public IConfigurationRoot Configuration { get; }
public StartUp(string[] args)
{
var builder = new ConfigurationBuilder()
.SetBasePath(AppContext.BaseDirectory)
.AddYamlFile("_config.yml");
Configuration = builder.Build();
}
public static async Task RunAsync(string[] args)
{
var startup = new StartUp(args);
await startup.RunAsync();
}
public async Task RunAsync()
{
var services = new ServiceCollection();
ConfigureServices(services);
var provider = services.BuildServiceProvider();
provider.GetRequiredService<CommandHandler>();
await provider.GetRequiredService<StartUpService>().StartAsync();
await Task.Delay(-1);
}
private void ConfigureServices(IServiceCollection services)
{
services.AddSingleton(new DiscordShardedClient(new DiscordSocketConfig
{
LogLevel = LogSeverity.Verbose,
MessageCacheSize = 1000
}))
.AddSingleton(new CommandService(new CommandServiceConfig
{
LogLevel = Discord.LogSeverity.Verbose,
DefaultRunMode = RunMode.Async,
CaseSensitiveCommands = false
}))
.AddSingleton<CommandHandler>()
.AddSingleton<StartUpService>()
.AddSingleton(Configuration);
}
}
}
проблема в строке provider.GetRequiredService<CommandHandler>();
Код манипулятора команд
class CommandHandler
{
public static IServiceProvider _provider;
public static DiscordSocketClient _discord;
public static CommandService commands;
public static IConfigurationRoot _config;
public CommandHandler(DiscordSocketClient discord, CommandService command, IConfigurationRoot conf, IServiceProvider provider)
{
_provider = provider;
_config = conf;
_discord = discord;
commands = command;
_discord.Ready = OnReady;
}
private Task OnReady()
{
Console.WriteLine($"been connected as user {_discord.CurrentUser.Username}#{_discord.CurrentUser.Discriminator}");
return Task.CompletedTask;
}
}
Вывод: «Не удалось разрешить службу для типа «Разногласия».Веб-сокет.DiscordSocketClient» при попытке активировать » блокировщик.Услуги.Командир».
Я понятия не имею, как это решить, спасибо сразу.
Ответ №1:
В CommandHandler
тебя впрыскивают DiscordSocketClient
, но в ConfigureServices
тебя регистрируют DiscordShardedClient
.
Вам либо нужно:
- Зарегистрируйте a
DiscordSocketClient
, или - Вколоть а
DiscordShardedClient
.
Если вы не уверены, какой из них использовать, здесь есть некоторая документация