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); } })); }