private async Task ModulesHelp() { ModuleInfo[] moduleInfos = Command.Modules.GroupBy(x => x.Name).Select(y => y.First()).ToArray(); EmbedBuilder[] builders = new EmbedBuilder[(moduleInfos.Length / modulesPerPage) + 1]; for (int j = 0; j < builders.Length; j++) { EmbedBuilder builder = builders[j] = new EmbedBuilder(); builder.Description = $"Do \"{Prefix}help [command]\" to get more information about a command"; builder.WithThumbnailUrl(Emotes.BelfastThink.Url); builder.WithColor(0xffae0d); } int i = 0; foreach (ModuleInfo module in moduleInfos) { string[] commandNames = module.Commands.Select(cmd => $"► **{cmd.Name}**: [{cmd.Summary ?? "None"}]").ToArray(); EmbedBuilder builder = builders[i / modulesPerPage]; if (commandNames.Length > 0) { builder.AddField($"{i+1}", $"" + $"__**{module.Name.Replace("Module", " ")} - {module.Summary ?? ""}**__\n" + $"{commandNames.NewLineSeperatedString()}"); } i++; } await PaginatedMessageService.SendPaginatedEmbedMessageAsync(Context.Channel, builders); }
public async Task LeaderboardAsync(bool isGlobal = false) { ServerEntry server = Db.GetServerEntry(0); IEnumerable <DatabaseUserEntry> users = server.Users; if (!isGlobal) { users = users.Where(user => Context.Guild.GetUserAsync(user.Id).Result != null); } IEnumerable <DatabaseUserEntry> sortedUser = users.OrderByDescending(user => user.Xp); int i = 1; string lbString = (await Task.WhenAll(sortedUser.Select(async(user) => $"► **[{i++}] {await Client.GetUserAsync(user.Id)}** - lvl {user.Level} ({user.Xp} xp)"))).NewLineSeperatedString(); if (string.IsNullOrEmpty(lbString)) { await ReplyAsync("> Empty leaderboard"); return; } string[] strings = lbString.NCharLimitToClosestDelimeter(512, "\n"); await PaginatedMessageService.SendPaginatedDataMessageAsync( Context.Channel, strings, (result, index, footer) => GetLeaderBoardPageEmbed(Context.Guild, result, isGlobal, footer) ); }
public async Task GetUserGacha([Summary("(optional) The user profile to get")] IUser target = null) { target = target ?? Context.Message.Author; if (target.IsBot) { return; } DatabaseUserEntry userData = Db.GetUserEntry(0, target.Id); if (userData.Cards.Count <= 0) { await Context.Channel.SendMessageAsync($"{Emotes.BelfastShock} You don't seem to have any cards.\nTry .gao to open cards."); return; } string characterString = userData.Cards.Count > 0 ? userData.Cards.Select(card => $"► **[{card.Name}](https://www.animecharactersdatabase.com/characters.php?id={card.Id})** [{card.Rarity}] x{card.Amount}").NewLineSeperatedString() : "**None**"; string[] strings = characterString.NCharLimitToClosestDelimeter(512, "\n"); await PaginatedMessageService.SendPaginatedDataMessageAsync( Context.Channel, strings, (result, index, footer) => GetUserGachaEmbed(target, result, footer) ); }
public async Task SearchMalAnimeAsync([Summary("Title to search")][Remainder] string name = "Azur Lane") { Logger.LogInfo($"Searching for {name} on myanimelist"); ulong[] ids = await MalClient.GetAnimeIdAsync(name); AnimeResult[] resultCache = new AnimeResult[ids.Length]; await PaginatedMessageService.SendPaginatedDataAsyncMessageAsync(Context.Channel, ids, async (ulong id, int index, EmbedFooterBuilder footer) => { if (resultCache[index].MalId != 0) { return(GetAnimeResultEmbed(resultCache[index], index, footer)); } else { AnimeResult result = resultCache[index] = await MalClient.GetDetailedAnimeResultsAsync(id); return(GetAnimeResultEmbed(result, index, footer)); } }); }
public async Task ReplyAndWaitAsync(IPaginatedMessage message) => await PaginatedMessageService.SendMessageAndWaitAsync(Context, message);