예제 #1
0
        public Task HandleCommandAsync(SocketMessage s)
        {
            return(Task.Run(async() =>
            {
                _statistics.MessagesRecieved++;
                var msg = s as SocketUserMessage;
                if (msg == null)
                {
                    return;
                }

                var context = new DEAContext(_client, msg, _serviceProvider);
                if (context.Guild == null)
                {
                    return;
                }

                if (context.User.IsBot)
                {
                    return;
                }

                await context.InitializeAsync();

                int argPos = 0;

                if (msg.HasStringPrefix(context.DbGuild.Prefix, ref argPos) ||
                    msg.HasMentionPrefix(_client.CurrentUser, ref argPos))
                {
                    var perms = (context.Guild.CurrentUser as IGuildUser).GetPermissions(context.Channel as SocketTextChannel);

                    if (!perms.SendMessages || !perms.EmbedLinks)
                    {
                        try
                        {
                            var channel = await context.User.CreateDMChannelAsync();

                            await channel.SendAsync($"DEA cannot execute any commands without the permission to send embedded messages.");
                        }
                        catch { }
                        return;
                    }

                    Logger.Log(LogSeverity.Debug, $"Guild: {context.Guild}, User: {context.User}", msg.Content);

                    var result = await _commandService.ExecuteAsync(context, argPos, _serviceProvider);
                    if (!result.IsSuccess)
                    {
                        await _errorHandler.HandleCommandFailureAsync(context, result, argPos);
                    }
                    else
                    {
                        _statistics.CommandsRun++;
                    }
                }
                else if (msg.Content.Length >= Config.MIN_CHAR_LENGTH)
                {
                    await _userRepo.ApplyCash(context.GUser, context.DbUser, context.DbGuild);
                }
            }));
        }