там написано "попробуйте явно указать аргументы типа".У меня проблема с AddModulesAsync, попробуйте сделать бот - PullRequest
0 голосов
/ 28 января 2019

Я пытался создать новый Discord Bot с пакетами Discord.NET, и я думаю, что это сделано.Ожидаются только коды команд.Теперь я не мог понять, что это говорит и как я могу покончить с этим.

Я попытался изменить «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

1 Ответ

0 голосов
/ 30 января 2019

Спасибо @stuartd за ответ.Я скучаю по этому.AdModulesAsync () нужен еще один аргумент.Я написал там _services, и он отлично работает, и благодаря @Kaynn за сокрытие моего токена, я раскрыл это в своем первом посте с вопросом.Новый код выглядит так: await _commands.AddModulesAsync(Assembly.GetEntryAssembly(), _services);

...