public async Task ListDungeons() { var account = EntityConverter.ConvertUser(Context.User); var defaultDungeons = EnemiesDatabase.DefaultDungeons.Where(d => !d.Requirement.IsLocked(account)); var availableDefaultDungeons = defaultDungeons.Where(d => d.Requirement.Applies(account)).Select(s => s.Name).ToArray(); var unavailableDefaultDungeons = defaultDungeons.Where(d => !d.Requirement.Applies(account)).Select(s => s.Name).ToArray(); var unlockedDungeons = account.Dungeons.Where(EnemiesDatabase.HasDungeon).Select(EnemiesDatabase.GetDungeon).Where(d => !d.Requirement.IsLocked(account)); var availablePermUnlocks = availableDefaultDungeons .Concat(unlockedDungeons.Where(d => !d.IsOneTimeOnly && d.Requirement.FulfilledRequirements(account)) .Select(s => s.Name) .ToArray()); var unavailablePermUnlocks = unavailableDefaultDungeons .Concat(unlockedDungeons.Where(d => !d.IsOneTimeOnly && !d.Requirement.FulfilledRequirements(account)) .Select(s => s.Name) .ToArray()); var availableOneTimeUnlocks = unlockedDungeons.Where(d => d.IsOneTimeOnly && d.Requirement.FulfilledRequirements(account)).Select(s => s.Name).ToArray(); var unavailableOneTimeUnlocks = unlockedDungeons.Where(d => d.IsOneTimeOnly && !d.Requirement.FulfilledRequirements(account)).Select(s => s.Name).ToArray(); var embed = new EmbedBuilder(); embed.WithTitle("Dungeons"); if (availablePermUnlocks.Any()) { embed.AddField("<:mapopen:606236181503410176> Places Discovered", $"Available: {string.Join(", ", availablePermUnlocks)} \nUnavailable: {string.Join(", ", unavailablePermUnlocks)}"); } if (availableOneTimeUnlocks.Length + unavailableOneTimeUnlocks.Length > 0) { embed.AddField("<:cave:607402486562684944> Dungeon Keys", $"Available: {string.Join(", ", availableOneTimeUnlocks)} \nUnavailable: {string.Join(", ", unavailableOneTimeUnlocks)}"); } await Context.Channel.SendMessageAsync("", false, embed.Build()); }
public async Task Status([Remainder] SocketUser user = null) { user ??= Context.User; var account = EntityConverter.ConvertUser(user); var factory = new PlayerFighterFactory(); var p = factory.CreatePlayerFighter(account); var author = new EmbedAuthorBuilder(); author.WithName($"{(user is SocketGuildUser sguser ? sguser.DisplayName() : user.Username)}"); author.WithIconUrl(user.GetAvatarUrl()); var embed = new EmbedBuilder() .WithColor(Colors.Get(account.Element.ToString())) .WithAuthor(author) .WithTitle($"Level {account.LevelNumber} {account.GsClass} {string.Join("", account.TrophyCase.Trophies.Select(t => t.Icon))} (Rank {UserAccounts.GetRank(account) + 1})") .AddField("Current Equip", account.Inv.GearToString(AdeptClassSeriesManager.GetClassSeries(account).Archtype), true) .AddField("Psynergy", p.GetMoves(false), true) .AddField("Djinn", account.DjinnPocket.GetDjinns().GetDisplay(DjinnDetail.None), true) .AddField("Stats", p.Stats.ToString(), true) .AddField("Elemental Stats", p.ElStats.ToString(), true) .AddField("Unlocked Classes", account.BonusClasses.Count == 0 ? "none" : string.Join(", ", account.BonusClasses)) .AddField("XP", $"{account.Xp} - next in {account.XPneeded}{(account.NewGames >= 1 ? $"\n({account.TotalXp} total | {account.NewGames} resets)" : "")}", true) .AddField("Colosso wins | Dungeon Wins", $"{account.ServerStats.ColossoWins} | {account.ServerStats.DungeonsCompleted}", true) .AddField("Endless Streaks", $"Solo: {account.ServerStats.EndlessStreak.Solo} | Duo: {account.ServerStats.EndlessStreak.Duo} \nTrio: {account.ServerStats.EndlessStreak.Trio} | Quad: {account.ServerStats.EndlessStreak.Quad}", true); if (user is SocketGuildUser socketGuildUser) { var footer = new EmbedFooterBuilder(); footer.WithText("Joined this Server on " + socketGuildUser.JoinedAt.Value.Date.ToString("dd-MM-yyyy")); footer.WithIconUrl(Sprites.GetImageFromName("Iodem")); embed.WithFooter(footer); } await Context.Channel.SendMessageAsync("", false, embed.Build()); }
private async Task SetupIodemTask() { await Context.Guild.DownloadUsersAsync(); foreach (var gm in Context.Guild.Users) { var user = EntityConverter.ConvertUser(gm); Console.WriteLine($"{user.Name} registered"); var elRole = gm.Roles.FirstOrDefault(r => r.Name.Contains("Adepts")); if (elRole != null && user.Element == Element.none) { var chosenElement = new[] { Element.Venus, Element.Mars, Element.Jupiter, Element.Mercury } .First(e => elRole.Name.Contains(e.ToString())); user.Element = chosenElement; var tags = new[] { "VenusAdept", "MarsAdept", "JupiterAdept", "MercuryAdept" }; user.Tags.RemoveAll(s => tags.Contains(s)); user.Tags.Add(tags[(int)chosenElement]); Console.WriteLine($"Updated Element for {user.Name}."); } } await Task.CompletedTask; }
public async Task Codes(SocketUser target = null) { target ??= Context.User; var user = EntityConverter.ConvertUser(target); var embed = new EmbedBuilder(); embed.WithColor(Colors.Get("Iodem")); embed.WithAuthor(target); if (user.arePublicCodes || target.Equals(Context.User)) { embed.WithDescription($"PoGo: {user.PoGoCode} \n" + $"Switch: {user.SwitchCode} \n" + $"3DS: {user.N3DSCode}"); } else { embed.WithDescription(Utilities.GetAlert("CODE_IS_PRIVATE")); } await Context.Channel.SendMessageAsync("", false, embed.Build()); }
public async Task Repair([Remainder] string item) { var account = EntityConverter.ConvertUser(Context.User); var inv = account.Inv; var embed = new EmbedBuilder(); embed.WithColor(Colors.Get("Iodem")); if (ColossoPvE.UserInBattle(EntityConverter.ConvertUser(Context.User))) { return; } if (inv.Repair(item)) { UserAccountProvider.StoreUser(account); embed.WithDescription($"Item repaired successfully"); } else { embed.WithDescription($":x: No such item to repair, or not enough funds."); } await Context.Channel.SendMessageAsync("", false, embed.Build()); }
private async Task ReleaseDjinnHidden(string DjinnName) { var acc = EntityConverter.ConvertUser(Context.User); var userDjinn = acc.DjinnPocket; var chosenDjinn = userDjinn.GetDjinn(DjinnName); if (chosenDjinn == null) { return; } await ReplyAsync(embed : new EmbedBuilder() .WithDescription($"Are you sure that you want to release your djinni {chosenDjinn.Emote} {chosenDjinn.Name}?") .Build()); var response = await Context.Channel.AwaitMessage(m => m.Author == Context.User); if (response.Content.Equals("Yes", StringComparison.CurrentCultureIgnoreCase)) { userDjinn.Djinn.Remove(chosenDjinn); UserAccountProvider.StoreUser(acc); _ = ReplyAsync(embed: new EmbedBuilder().WithDescription($"You set {chosenDjinn.Emote} {chosenDjinn.Name} free, who swiftly rushes off to find another master.").Build()); } }
public async Task RandomQuote([Remainder] string name = "") { if (Quotes.GetQuotesCount() == 0) { await ReplyAsync("I don't recall any quotes."); return; } var embed = new EmbedBuilder(); embed.WithColor(Colors.Get("Iodem")); var q = Quotes.QuoteList.Random(); if (!name.IsNullOrEmpty()) { q = Quotes.QuoteList.Where(q => q.Name.Equals(name, StringComparison.OrdinalIgnoreCase)).Random(); if (q.Name.IsNullOrEmpty()) { embed.WithDescription("I don't remember anything this person said."); await ReplyAsync(embed: embed.Build()); return; } } q.Name = Utilities.ToCaps(q.Name); embed.WithAuthor(q.Name); embed.WithThumbnailUrl(Sprites.GetImageFromName(q.Name)); embed.WithDescription(q.Quote); if (q.Quote.Contains(@"#^@%!")) { var userAccount = EntityConverter.ConvertUser(Context.User); await GoldenSunCommands.AwardClassSeries("Curse Mage Series", Context.User, Context.Channel); } await ReplyAsync("", false, embed.Build()); }
public async Task SetCode(string type, [Remainder] string code) { var embed = new EmbedBuilder(); type = type.ToLower(); embed.WithColor(Colors.Get("Iodem")); embed.WithThumbnailUrl(Sprites.GetImageFromName("Iodem")); var account = EntityConverter.ConvertUser(Context.User); code = code.RemoveBadChars(); switch (type) { case "3ds": case "n3ds": account.N3DSCode = code; embed.WithDescription(Utilities.GetFormattedAlert("FC_ADDED_SUCCESS", "3DS")); break; case "switch": case "sw": account.SwitchCode = code; embed.WithDescription(Utilities.GetFormattedAlert("FC_ADDED_SUCCESS", "Switch")); break; case "pogo": account.PoGoCode = code; embed.WithDescription(Utilities.GetFormattedAlert("FC_ADDED_SUCCESS", "Pokemon Go")); break; default: embed.WithDescription(Utilities.GetAlert("FC_CODE_UNKNOWN")); break; } UserAccountProvider.StoreUser(account); await Context.Channel.SendMessageAsync("", false, embed.Build()); }
public async Task SetCode(string type, [Remainder] string code) { var embed = new EmbedBuilder(); type = type.ToLower(); embed.WithColor(Colors.Get("Iodem")); embed.WithThumbnailUrl(Sprites.GetImageFromName("Iodem")); var account = EntityConverter.ConvertUser(Context.User); code = code.RemoveBadChars(); switch (type) { case "3ds": case "n3ds": account.N3DsCode = code; embed.WithDescription("I have added your Nintendo 3DS Friend code."); break; case "switch": case "sw": account.SwitchCode = code; embed.WithDescription("I have added your Switch Friend code."); break; case "pogo": account.PoGoCode = code; embed.WithDescription("I have added your Pokemon Go Friend code."); break; default: embed.WithDescription("Not a valid code."); break; } UserAccountProvider.StoreUser(account); await Context.Channel.SendMessageAsync("", false, embed.Build()); }
protected override async Task AddPlayer(SocketReaction reaction) { if (PlayerMessages.Values.Any(s => (s.Id == reaction.UserId))) { return; } SocketGuildUser player = (SocketGuildUser)reaction.User.Value; var playerAvatar = EntityConverter.ConvertUser(player); if (playerAvatar.LevelNumber < 50 && !playerAvatar.Tags.Contains("ColossoCompleted")) { return; } var p = Factory.CreatePlayerFighter(playerAvatar); if (playerAvatar.Inv.GetGear(AdeptClassSeriesManager.GetClassSeries(playerAvatar).Archtype).Any(i => i.Name == "Lure Cap")) { LureCaps++; SetNextEnemy(); } await AddPlayer(p); }
internal static async Task AwardClassSeries(string series, SocketUser user, IMessageChannel channel) { var avatar = EntityConverter.ConvertUser(user); await AwardClassSeries(series, avatar, channel); }
public async Task LoadoutTask(LoadoutAction action = LoadoutAction.Show, [Remainder] string loadoutName = "") { if (!(Context.User is SocketGuildUser sgu)) { return; } var user = EntityConverter.ConvertUser(sgu); switch (action) { case LoadoutAction.Show: var embed = new EmbedBuilder(); if (user.Loadouts.loadouts.Count > 0) { foreach (var item in user.Loadouts.loadouts) { var items = item.Gear.Count > 0 ? string.Join("", item.Gear.Select(i => user.Inv.GetItem(i)?.Icon ?? "-")) : "no gear"; var djinn = item.Djinn.Count > 0 ? string.Join("", item.Djinn.Select(d => user.DjinnPocket.GetDjinn(d)?.Emote ?? "-")) : "no Djinn"; embed.AddField(item.LoadoutName, $"{ElementIcons[item.Element]} {item.ClassSeries}\n" + $"{items}\n" + $"{djinn}" , inline: true); } } else { embed.WithDescription("No loadouts saved."); } _ = ReplyAsync(embed: embed.Build()); break; case LoadoutAction.Save: if (loadoutName.IsNullOrEmpty()) { return; } user.Loadouts.RemoveLoadout(loadoutName); if (user.Loadouts.loadouts.Count >= 6) { _ = ReplyAsync("Loadout limit of 6 reached."); return; } var newLoadout = Loadout.GetLoadout(user); newLoadout.LoadoutName = loadoutName; user.Loadouts.SaveLoadout(newLoadout); UserAccountProvider.StoreUser(user); _ = LoadoutTask(LoadoutAction.Show); break; case LoadoutAction.Load: var loadedLoadout = user.Loadouts.GetLoadout(loadoutName); if (loadedLoadout != null) { await GiveElementRole(sgu, loadedLoadout.Element); await ChangeElement(user, loadedLoadout.Element); loadedLoadout.ApplyLoadout(user); UserAccountProvider.StoreUser(user); _ = Status(); } break; case LoadoutAction.Remove: if (loadoutName.IsNullOrEmpty()) { return; } user.Loadouts.RemoveLoadout(loadoutName); UserAccountProvider.StoreUser(user); _ = LoadoutTask(LoadoutAction.Show); break; } await Task.CompletedTask; }
private async Task OpenChestAsync(SocketCommandContext Context, ChestQuality cq) { var user = EntityConverter.ConvertUser(Context.User); var inv = user.Inv; if (inv.IsFull) { var emb = new EmbedBuilder(); emb.WithDescription(":x: Inventory capacity reached!"); emb.WithColor(Colors.Get("Error")); await Context.Channel.SendMessageAsync("", false, emb.Build()); return; } if (!inv.OpenChest(cq)) { var emb = new EmbedBuilder(); if (cq == ChestQuality.Daily) { emb.WithDescription($":x: No {cq} Chests remaining! Next Daily Chest in: {DateTime.Today.AddDays(1).Subtract(DateTime.Now):hh\\h\\ mm\\m}"); } else { emb.WithDescription($":x: No {cq} Chests remaining!"); } emb.WithColor(Colors.Get("Error")); await Context.Channel.SendMessageAsync("", false, emb.Build()); return; } var itemName = ""; var dailyRewards = new[] { 0, 0, 1, 1, 2 }; if (cq == ChestQuality.Daily) { var value = user.LevelNumber; itemName = ItemDatabase.GetRandomItem((ItemRarity)(dailyRewards[inv.DailiesInARow % dailyRewards.Length] + Math.Min(2, value / 33))); } else { var rarity = ItemDatabase.ChestValues[cq].GenerateReward(); itemName = ItemDatabase.GetRandomItem(rarity); } var item = ItemDatabase.GetItem(itemName); inv.Add(item.Name); UserAccountProvider.StoreUser(user); var embed = new EmbedBuilder(); embed.WithDescription($"Opening {cq} Chest {Inventory.ChestIcons[cq]}..."); embed.WithColor(Colors.Get("Iodem")); var msg = await Context.Channel.SendMessageAsync("", false, embed.Build()); embed = new EmbedBuilder(); embed.WithColor(item.Color); if (cq == ChestQuality.Daily) { embed.WithFooter($"Current Reward: {inv.DailiesInARow % dailyRewards.Length + 1}/{dailyRewards.Length} | Overall Streak: {inv.DailiesInARow + 1}"); } embed.WithDescription($"{Inventory.ChestIcons[cq]} You found a {item.Name} {item.IconDisplay}"); await Task.Delay((int)cq * 700); _ = msg.ModifyAsync(m => m.Embed = embed.Build()); var message = await Context.Channel.AwaitMessage(m => m.Author == Context.User); if (message != null && message.Content.Equals("Sell", StringComparison.OrdinalIgnoreCase)) { _ = SellItem(item.Name); } }
public async Task Showdown(RankEnum type = RankEnum.Solo, EndlessMode mode = EndlessMode.Default) { var topAccounts = UserAccounts.GetTop(type, mode); if (type == RankEnum.Solo) topAccounts = topAccounts.OrderByDescending(d => (d.ServerStats.GetStreak(mode) + d.ServerStatsTotal.GetStreak(mode)).Solo).ToList(); else topAccounts = topAccounts.Where(p => (p.ServerStats.GetStreak(mode) + p.ServerStatsTotal.GetStreak(mode)).GetEntry(type).Item1 > 0) .GroupBy(p => (p.ServerStats.GetStreak(mode) + p.ServerStatsTotal.GetStreak(mode)).GetEntry(type).Item2) .Select(group => group.First()) .OrderByDescending(d => (d.ServerStats.GetStreak(mode) + d.ServerStatsTotal.GetStreak(mode)).GetEntry(type).Item1) .ToList(); var embed = new EmbedBuilder(); embed.WithColor(Colors.Get("Iodem")); string[] emotes = { "🥇", "🥈", "🥉", "", "" }; var builder = new StringBuilder(); for (var i = 0; i < Math.Min(topAccounts.Count, 5); i++) { var curAccount = topAccounts.ElementAt(i); var streak = mode == EndlessMode.Default ? curAccount.ServerStats.EndlessStreak + curAccount.ServerStatsTotal.EndlessStreak : curAccount.ServerStats.LegacyStreak + curAccount.ServerStatsTotal.LegacyStreak; switch (type) { case RankEnum.Solo: builder.Append($"`{i + 1}` {emotes[i]} {curAccount.Name,-15} - `{streak.Solo}`\n"); break; case RankEnum.Duo: builder.Append($"`{i + 1}` {emotes[i]} {streak.DuoNames} - `{streak.Duo}`\n"); break; case RankEnum.Trio: builder.Append($"`{i + 1}` {emotes[i]} {streak.TrioNames} - `{streak.Trio}`\n"); break; case RankEnum.Quad: builder.Append($"`{i + 1}` {emotes[i]} {streak.QuadNames} - `{streak.Quad}`\n"); break; } } //Console.WriteLine(rank); var account = EntityConverter.ConvertUser(Context.User); var rank = UserAccounts.GetRank(account, type, mode); if (rank >= 5) { builder.Append("... \n"); var streak = mode == EndlessMode.Default ? account.ServerStats.EndlessStreak + account.ServerStatsTotal.EndlessStreak : account.ServerStats.LegacyStreak + account.ServerStatsTotal.LegacyStreak; switch (type) { case RankEnum.Solo: builder.Append($"`{rank + 1}` {account.Name,-15} - `{streak.Solo}`"); break; case RankEnum.Duo: builder.Append($"{streak.DuoNames} - `{streak.Duo}`"); break; case RankEnum.Trio: builder.Append($"{streak.TrioNames} - `{streak.Trio}`"); break; case RankEnum.Quad: builder.Append($"{streak.QuadNames} - `{streak.Quad}`"); break; } } if (type == RankEnum.Solo && mode == EndlessMode.Legacy) embed.WithFooter("Honorary Mention: Smeecko - 81, by breaking the Time-Space Continuum"); embed.WithDescription(builder.ToString()); await Context.Channel.SendMessageAsync("", false, embed.Build()); }
internal static async void UserSentMessage(SocketGuildUser user, SocketTextChannel channel) { if (channel == null || BlackListedChannels.Contains(channel.Id) || user == null) { return; } if (channel.Id == GuildSettings.GetGuildSettings(channel.Guild).ColossoChannel?.Id) { return; } var userAccount = EntityConverter.ConvertUser(user); // if the user has a timeout, ignore them var sinceLastXp = DateTime.UtcNow - userAccount.LastXp; var oldLevel = userAccount.LevelNumber; if (sinceLastXp.TotalMinutes >= 3) { userAccount.LastXp = DateTime.UtcNow; userAccount.AddXp((uint)Global.RandomNumber(30, 50)); } if (DateTime.Now.Date != userAccount.ServerStats.LastDayActive.Date) { userAccount.ServerStats.UniqueDaysActive++; userAccount.ServerStats.LastDayActive = DateTime.Now.Date; } if (channel.Id == GuildSettings.GetGuildSettings(channel.Guild)?.ColossoChannel?.Id) { userAccount.ServerStats.MessagesInColossoTalks++; if (userAccount.ServerStats.MessagesInColossoTalks >= 50) { _ = GoldenSunCommands.AwardClassSeries("Swordsman Series", user, channel); } } var newLevel = userAccount.LevelNumber; if (oldLevel != newLevel) { LevelUp(userAccount, user, channel); } if (channel.Id != userAccount.ServerStats.MostRecentChannel) { userAccount.ServerStats.MostRecentChannel = channel.Id; userAccount.ServerStats.ChannelSwitches += 2; if (userAccount.ServerStats.ChannelSwitches >= 14) { _ = GoldenSunCommands.AwardClassSeries("Air Pilgrim Series", user, channel); } } else { if (userAccount.ServerStats.ChannelSwitches > 0) { userAccount.ServerStats.ChannelSwitches--; } } UserAccountProvider.StoreUser(userAccount); await Task.CompletedTask; }
public async Task Tags(SocketGuildUser user) { var avatar = EntityConverter.ConvertUser(user); await ReplyAsync(string.Join(", ", avatar.Tags)); }
public async Task GiveRole([Remainder] string RoleName = "") { var user = (SocketGuildUser)Context.User; var embed = new EmbedBuilder().WithColor(Colors.Get("Iodem")).WithThumbnailUrl(Sprites.GetImageFromName("Iodem")); Dictionary <string, ulong> roles = new Dictionary <string, ulong>(StringComparer.CurrentCultureIgnoreCase) { { "Gladiator", 511704880122036234 }, { "Colosso Adept", 644506247521107969 }, { "Fighter", 742060001031618590 } }; if (RoleName.Equals("Gladiator", StringComparison.CurrentCultureIgnoreCase) && EntityConverter.ConvertUser(Context.User).LevelNumber < 5) { _ = ReplyAsync("Please participate in the server more before you can announce your streams. We would like to be a community and not just be used as an advertising platform!"); return; } if (roles.TryGetValue(RoleName, out ulong roleId)) { var Role = Context.Guild.GetRole(roleId); if (user.Roles.Any(r => r.Id == roleId)) { embed.WithDescription($"{user.DisplayName()} is no longer a {Role.Name}!"); await user.RemoveRoleAsync(Role); } else { embed.WithDescription($"{user.DisplayName()} is a {Role.Name} now!"); await user.AddRoleAsync(Role); } } else { embed.WithDescription($"Select any of the following available roles:\n```\n{string.Join("\n", roles.Keys)}```"); } await Context.Channel.SendMessageAsync(embed : embed.Build()); }
public override async Task RunAsync() { var account = EntityConverter.ConvertUser(Context.User); await Context.ReplyWithMessageAsync(EphemeralRule, embed : GetLoadoutEmbed(account), components : GetLoadoutComponent(account)); }