public async Task DoGetRecruitmentStatsAsync() { if (await _permManager.IsAllowedAsync(PermissionType.ManageRecruitment, Context.User)) { await _recruitmentService.UpdateRecruitmentStatsAsync(); var builder = new EmbedBuilder(); builder.WithTitle($"Recruitment statistics:"); builder.WithDescription($"-- DataSource DB : Last updated just now --{Environment.NewLine}" + $"Sent (API): {_recruitmentService.ApiSent}{Environment.NewLine}" + $"Pending (API): {_recruitmentService.ApiPending}{Environment.NewLine}" + $"Failed (API): {_recruitmentService.ApiFailed}{Environment.NewLine}" + $"Skipped (API) : {_recruitmentService.ApiSkipped}{Environment.NewLine}" + $"Reserved (Manual): {_recruitmentService.ManualReserved}{Environment.NewLine}{Environment.NewLine}" + $"-- DataSource Dump : Last updated {DateTime.UtcNow.Subtract(DumpDataService.LastDumpUpdateTimeUtc).ToString("h'h 'm'm 's's'")} ago --{Environment.NewLine}" + $"Recruited (API): {_recruitmentService.ApiRecruited} ({_recruitmentService.ApiRatio.ToString(_locale)}%){Environment.NewLine}" + $"Recruited (Manual): {_recruitmentService.ManualRecruited} ({_recruitmentService.ManualRatio.ToString(_locale)}%){Environment.NewLine}" + $"{Environment.NewLine}" + $"Recruits which CTE'd or left the region are excluded."); builder.WithFooter(DiscordBotService.FooterString); await ReplyAsync(embed : builder.Build()); } else { await ReplyAsync(AppSettings._permissionDeniedResponse); } }