示例#1
0
        private Task OnMessageReceived(SocketMessage message)
        {
            if (message.Author.IsBot)
            {
                return(Task.CompletedTask);
            }

            if (!(message is SocketUserMessage userMessage))
            {
                return(Task.CompletedTask);
            }

            if (!(message.Channel is SocketGuildChannel guildChannel))
            {
                return(Task.CompletedTask);
            }

            _ = Task.Run(async() =>
            {
                var argPos = 0;

                var guildId = guildChannel.Guild.Id;
                var config  = await _guildConfigService.GetGuildConfiguration(guildId);
                if (config.ChannelId != default && config.ChannelId != guildChannel.Id.ToString())
                {
                    return;
                }

                if (!userMessage.HasStringPrefix(config.Prefix, ref argPos))
                {
                    return;
                }

                var context = new GuildConfigSocketCommandContext(_discordClient, userMessage, config);

                var result = await _commandService.ExecuteAsync(context, argPos, _serviceProvider, MultiMatchHandling.Best);

                if (!result.IsSuccess && (result.Error != CommandError.UnknownCommand || result.Error != CommandError.BadArgCount))
                {
                    _logger.LogError($"{result.Error}: {result.ErrorReason}");
                    await userMessage.AddReactionAsync(new Emoji("⚠"));
                }
            });
            return(Task.CompletedTask);
        }