public async Task FactoryUserAsync([Summary("id użytkownika")] ulong id, [Summary("czy usunąć karty?")] bool cards = false) { using (var db = new Database.UserContext(Config)) { var fakeu = await db.GetUserOrCreateAsync(1); var user = await db.GetUserOrCreateAsync(id); if (!cards) { foreach (var card in user.GameDeck.Cards) { card.InCage = false; card.TagList.Clear(); card.LastIdOwner = id; fakeu.GameDeck.Cards.Add(card); } user.GameDeck.Cards.Clear(); } db.Users.Remove(user); await db.SaveChangesAsync(); QueryCacheManager.ExpireTag(new string[] { "users", $"user-{id}" }); } await ReplyAsync("", embed : $"Użytkownik o id: `{id}` został wymazany.".ToEmbedMessage(EMType.Success).Build()); }
public async Task TransferCardAsync([Summary("WID")] ulong wid, [Summary("użytkownik")] SocketGuildUser user) { using (var db = new Database.UserContext(Config)) { var thisCard = db.Cards.FirstOrDefault(x => x.Id == wid); if (thisCard == null) { await ReplyAsync("", embed : $"Karta o WID: `{wid}` nie istnieje.".ToEmbedMessage(EMType.Bot).Build()); return; } var oldOwnerId = thisCard.GameDeckId; var targetUser = await db.GetUserOrCreateAsync(user.Id); var fromUser = await db.GetUserOrCreateAsync(oldOwnerId); thisCard.Active = false; thisCard.InCage = false; thisCard.Tags = null; fromUser.GameDeck.Cards.Remove(thisCard); targetUser.GameDeck.Cards.Add(thisCard); await db.SaveChangesAsync(); QueryCacheManager.ExpireTag(new string[] { $"user-{Context.User.Id}", "users", $"user-{oldOwnerId}" }); await ReplyAsync("", embed : $"Karta {thisCard.GetString(false, false, true)} została przeniesiona.".ToEmbedMessage(EMType.Success).Build()); } }
private async Task UserLeftAsync(SocketGuildUser user) { if (user.IsBot || user.IsWebhook) { return; } if (!_config.Get().BlacklistedGuilds.Any(x => x == user.Guild.Id)) { using (var db = new Database.GuildConfigContext(_config)) { var config = await db.GetCachedGuildFullConfigAsync(user.Guild.Id); if (config?.GoodbyeMessage == null) { return; } if (config.GoodbyeMessage == "off") { return; } await SendMessageAsync(ReplaceTags(user, config.GoodbyeMessage), user.Guild.GetTextChannel(config.GreetingChannel)); } } var thisUser = _client.Guilds.FirstOrDefault(x => x.Id == user.Id); if (thisUser != null) { return; } var moveTask = new Task(() => { using (var db = new Database.UserContext(_config)) { var duser = db.GetUserOrCreateAsync(user.Id).Result; var fakeu = db.GetUserOrCreateAsync(1).Result; foreach (var card in duser.GameDeck.Cards) { card.InCage = false; card.TagList.Clear(); card.LastIdOwner = user.Id; fakeu.GameDeck.Cards.Add(card); } duser.GameDeck.Cards.Clear(); db.Users.Remove(duser); db.SaveChanges(); QueryCacheManager.ExpireTag(new string[] { "users" }); } }); await _executor.TryAdd(new Executable("delete user", moveTask), TimeSpan.FromSeconds(1)); }
public async Task GiveUserScAsync([Summary("użytkownik")] SocketGuildUser user, [Summary("liczba SC(min. 1000)")] uint value) { if (value < 1000) { await ReplyAsync("", embed : "Nie można podarować mniej jak 1000 SC.".ToEmbedMessage(EMType.Error).Build()); return; } if (user.Id == Context.User.Id) { await ReplyAsync("", embed : "Coś tutaj nie gra.".ToEmbedMessage(EMType.Error).Build()); return; } using (var db = new Database.UserContext(Config)) { if (!db.Users.Any(x => x.Id == user.Id)) { await ReplyAsync("", embed : "Ta osoba nie ma profilu bota.".ToEmbedMessage(EMType.Error).Build()); return; } var targetUser = await db.GetUserOrCreateAsync(user.Id); var thisUser = await db.GetUserOrCreateAsync(Context.User.Id); if (thisUser.ScCnt < value) { await ReplyAsync("", embed : $"{Context.User.Mention} nie masz wystarczającej ilości SC.".ToEmbedMessage(EMType.Error).Build()); return; } thisUser.ScCnt -= value; var newScCnt = (value * 60) / 100; targetUser.ScCnt += newScCnt; await db.SaveChangesAsync(); QueryCacheManager.ExpireTag(new string[] { $"user-{thisUser.Id}", "users", $"user-{targetUser.Id}" }); await ReplyAsync("", embed : $"{Context.User.Mention} podarował {user.Mention} {newScCnt} SC".ToEmbedMessage(EMType.Success).Build()); } }
public async Task ModifyPointsTCDiscordAsync(ulong id, [FromBody, Required] long value) { using (var db = new Database.UserContext(_config)) { var user = db.Users.FirstOrDefault(x => x.Id == id); if (user == null) { await "User not found!".ToResponse(404).ExecuteResultAsync(ControllerContext); return; } var exe = new Executable($"api-tc u{id}", new Task(() => { using (var dbs = new Database.UserContext(_config)) { user = dbs.GetUserOrCreateAsync(id).Result; user.TcCnt += value; dbs.SaveChanges(); QueryCacheManager.ExpireTag(new string[] { $"user-{user.Id}", "users" }); } })); await _executor.TryAdd(exe, TimeSpan.FromSeconds(1)); await "TC added!".ToResponse(200).ExecuteResultAsync(ControllerContext); } }
public async Task ToggleCardStatusAsync(ulong wid) { var currUser = ControllerContext.HttpContext.User; if (currUser.HasClaim(x => x.Type == "DiscordId")) { if (ulong.TryParse(currUser.Claims.First(x => x.Type == "DiscordId").Value, out var discordId)) { using (var db = new Database.UserContext(_config)) { var botUserCh = await db.GetCachedFullUserAsync(discordId); if (botUserCh == null) { await "User not found!".ToResponse(404).ExecuteResultAsync(ControllerContext); return; } var thisCardCh = botUserCh.GameDeck.Cards.FirstOrDefault(x => x.Id == wid); if (thisCardCh == null) { await "Card not found!".ToResponse(404).ExecuteResultAsync(ControllerContext); return; } if (thisCardCh.InCage) { await "Card is in cage!".ToResponse(403).ExecuteResultAsync(ControllerContext); return; } if (!thisCardCh.Active && botUserCh.GameDeck.Cards.Where(x => x.Active).Count() >= 3) { await "Limit of active cards triggered!".ToResponse(403).ExecuteResultAsync(ControllerContext); return; } } var exe = new Executable($"api-deck u{discordId}", new Task(() => { using (var db = new Database.UserContext(_config)) { var botUser = db.GetUserOrCreateAsync(discordId).Result; var thisCard = botUser.GameDeck.Cards.FirstOrDefault(x => x.Id == wid); thisCard.Active = !thisCard.Active; db.SaveChanges(); QueryCacheManager.ExpireTag(new string[] { $"user-{botUser.Id}", "users" }); } })); await _executor.TryAdd(exe, TimeSpan.FromSeconds(1)); await "Card status toggled".ToResponse(200).ExecuteResultAsync(ControllerContext); return; } } await "The appropriate claim was not found".ToResponse(403).ExecuteResultAsync(ControllerContext); }
public async Task AddGlobalEmotesAsync() { var user = Context.User as SocketGuildUser; if (user == null) { return; } using (var db = new Database.UserContext(Config)) { var botuser = await db.GetUserOrCreateAsync(user.Id); if (botuser.TcCnt < 4000) { await ReplyAsync("", embed : $"{user.Mention} nie posiadasz wystarczającej liczby TC!".ToEmbedMessage(EMType.Error).Build()); return; } using (var cdb = new Database.GuildConfigContext(Config)) { var gConfig = await cdb.GetCachedGuildFullConfigAsync(Context.Guild.Id); var gRole = Context.Guild.GetRole(gConfig.GlobalEmotesRole); if (gRole == null) { await ReplyAsync("", embed : "Serwer nie ma ustawionej roli globalnych emotek.".ToEmbedMessage(EMType.Bot).Build()); return; } var global = botuser.TimeStatuses.FirstOrDefault(x => x.Type == Database.Models.StatusType.Globals && x.Guild == Context.Guild.Id); if (global == null) { global = new Database.Models.TimeStatus { Type = StatusType.Globals, Guild = Context.Guild.Id, EndsAt = DateTime.Now, }; botuser.TimeStatuses.Add(global); } if (!user.Roles.Contains(gRole)) { await user.AddRoleAsync(gRole); } global.EndsAt = global.EndsAt.AddMonths(1); botuser.TcCnt -= 4000; } await db.SaveChangesAsync(); QueryCacheManager.ExpireTag(new string[] { $"user-{botuser.Id}", "users" }); await ReplyAsync("", embed : $"{user.Mention} wykupił miesiąc globalnych emotek!".ToEmbedMessage(EMType.Success).Build()); } }
public async Task ChangeBackgroundAsync([Summary("bezpośredni adres do obrazka (450 x 150)")] string imgUrl) { using (var db = new Database.UserContext(Config)) { var botuser = await db.GetUserOrCreateAsync(Context.User.Id); if (botuser.ScCnt < 5000) { await ReplyAsync("", embed : $"{Context.User.Mention} nie posiadasz wystarczającej liczby SC!".ToEmbedMessage(EMType.Error).Build()); return; } if (await _profile.SaveProfileImageAsync(imgUrl, $"./GOut/Saved/BG{botuser.Id}.png", 450, 150, true)) { botuser.BackgroundProfileUri = $"./GOut/Saved/BG{botuser.Id}.png"; } else { await ReplyAsync("", embed : "Nie wykryto obrazka! Upewnij się, że podałeś poprawny adres!".ToEmbedMessage(EMType.Error).Build()); return; } botuser.ScCnt -= 5000; await db.SaveChangesAsync(); QueryCacheManager.ExpireTag(new string[] { $"user-{botuser.Id}", "users" }); await ReplyAsync("", embed : $"Zmieniono tło profilu użytkownika: {Context.User.Mention}!".ToEmbedMessage(EMType.Success).Build()); } }
public async Task RestoreCardsAsync([Summary("użytkownik")] SocketGuildUser user) { using (var db = new Database.UserContext(Config)) { var bUser = await db.GetUserOrCreateAsync(user.Id); var thisCards = db.Cards.Include(x => x.TagList).Where(x => (x.LastIdOwner == user.Id || (x.FirstIdOwner == user.Id && x.LastIdOwner == 0)) && x.GameDeckId == 1).ToList(); if (thisCards.Count < 1) { await ReplyAsync("", embed : "Nie odnaleziono kart!".ToEmbedMessage(EMType.Bot).Build()); return; } string reply = $"Karta {thisCards.First().GetString(false, false, true)} została przeniesiona."; if (thisCards.Count > 1) { reply = $"Przeniesiono {thisCards.Count} kart."; } foreach (var thisCard in thisCards) { thisCard.Active = false; thisCard.InCage = false; thisCard.TagList.Clear(); thisCard.GameDeckId = user.Id; } await db.SaveChangesAsync(); QueryCacheManager.ExpireTag(new string[] { $"user-{Context.User.Id}", "users" }); await ReplyAsync("", embed : reply.ToEmbedMessage(EMType.Success).Build()); } }
private Executable GetSafariExe(EmbedBuilder embed, IUserMessage msg, Card newCard, SafariImage pokeImage, ICharacterInfo character, ITextChannel trashChannel, IUser winner) { return(new Executable("safari", new Task(() => { using (var db = new Database.UserContext(_config)) { var botUser = db.GetUserOrCreateAsync(winner.Id).Result; newCard.FirstIdOwner = winner.Id; newCard.Affection += botUser.GameDeck.AffectionFromKarma(); botUser.GameDeck.RemoveCharacterFromWishList(newCard.Character); botUser.GameDeck.Cards.Add(newCard); db.SaveChanges(); QueryCacheManager.ExpireTag(new string[] { $"user-{botUser.Id}", "users" }); using (var dba = new Database.AnalyticsContext(_config)) { dba.UsersData.Add(new Database.Models.Analytics.UserAnalytics { Value = 1, UserId = winner.Id, MeasureDate = DateTime.Now, GuildId = trashChannel?.Guild?.Id ?? 0, Type = Database.Models.Analytics.UserAnalyticsEventType.Card }); dba.SaveChanges(); } } _ = Task.Run(async() => { try { embed.ImageUrl = await _waifu.GetSafariViewAsync(pokeImage, newCard, trashChannel); embed.Description = $"{winner.Mention} zdobył na polowaniu i wsadził do klatki:\n" + $"{newCard.GetString(false, false, true)}\n({newCard.Title})"; await msg.ModifyAsync(x => x.Embed = embed.Build()); var privEmb = new EmbedBuilder() { Color = EMType.Info.Color(), Description = $"Na [polowaniu]({msg.GetJumpUrl()}) zdobyłeś: {newCard.GetString(false, false, true)}" }; var priv = await winner.GetOrCreateDMChannelAsync(); if (priv != null) { await priv.SendMessageAsync("", false, privEmb.Build()); } } catch (Exception ex) { _logger.Log($"In Safari: {ex}"); } }); }))); }
public async Task GiveDailyScAsync() { using (var db = new Database.UserContext(Config)) { var botuser = await db.GetUserOrCreateAsync(Context.User.Id); var daily = botuser.TimeStatuses.FirstOrDefault(x => x.Type == Database.Models.StatusType.Daily); if (daily == null) { daily = new Database.Models.TimeStatus { Type = Database.Models.StatusType.Daily, EndsAt = DateTime.MinValue }; botuser.TimeStatuses.Add(daily); } if (daily.IsActive()) { var timeTo = (int)daily.RemainingMinutes(); await ReplyAsync("", embed : $"{Context.User.Mention} następne drobne możesz otrzymać dopiero za {timeTo / 60}h {timeTo % 60}m!".ToEmbedMessage(EMType.Error).Build()); return; } daily.EndsAt = DateTime.Now.AddHours(20); botuser.ScCnt += 100; await db.SaveChangesAsync(); QueryCacheManager.ExpireTag(new string[] { $"user-{botuser.Id}" }); await ReplyAsync("", embed : $"{Context.User.Mention} łap drobne na waciki!".ToEmbedMessage(EMType.Success).Build()); } }
public async Task PlayOnSlotMachineAsync([Summary("typ(info - wyświetla informacje)")] string type = "game") { if (type != "game") { await ReplyAsync("", false, $"{_fun.GetSlotMachineGameInfo()}".ToEmbedMessage(EMType.Info).Build()); return; } using (var db = new Database.UserContext(Config)) { var botuser = await db.GetUserOrCreateAsync(Context.User.Id); var machine = new SlotMachine(botuser); var toPay = machine.ToPay(); if (botuser.ScCnt < toPay) { await ReplyAsync("", embed : $"{Context.User.Mention} brakuje Ci SC, aby za tyle zagrać.".ToEmbedMessage(EMType.Error).Build()); return; } var win = machine.Play(new SlotEqualRandom()); botuser.ScCnt += win - toPay; await db.SaveChangesAsync(); QueryCacheManager.ExpireTag(new string[] { $"user-{botuser.Id}", "users" }); await ReplyAsync("", embed : $"{_fun.GetSlotMachineResult(machine.Draw(), Context.User, botuser, win)}".ToEmbedMessage(EMType.Bot).Build()); } }
public async Task GiveHourlyScAsync() { using (var db = new Database.UserContext(Config)) { var botuser = await db.GetUserOrCreateAsync(Context.User.Id); var hourly = botuser.TimeStatuses.FirstOrDefault(x => x.Type == Database.Models.StatusType.Hourly); if (hourly == null) { hourly = new Database.Models.TimeStatus { Type = Database.Models.StatusType.Hourly, EndsAt = DateTime.MinValue }; botuser.TimeStatuses.Add(hourly); } if (hourly.IsActive()) { var timeTo = (int)hourly.RemainingSeconds(); await ReplyAsync("", embed : $"{Context.User.Mention} następne zaskórniaki możesz otrzymać dopiero za {timeTo / 60}m {timeTo % 60}s!".ToEmbedMessage(EMType.Error).Build()); return; } hourly.EndsAt = DateTime.Now.AddHours(1); botuser.ScCnt += 5; await db.SaveChangesAsync(); QueryCacheManager.ExpireTag(new string[] { $"user-{botuser.Id}", "users" }); await ReplyAsync("", embed : $"{Context.User.Mention} łap piątaka!".ToEmbedMessage(EMType.Success).Build()); } }
public async Task SlotMachineSettingsAsync([Summary("typ nastaw(info - wyświetla informacje)")] SlotMachineSetting setting = SlotMachineSetting.Info, [Summary("wartość nastawy")] string value = "info") { if (setting == SlotMachineSetting.Info) { await ReplyAsync("", false, $"{_fun.GetSlotMachineInfo()}".ToEmbedMessage(EMType.Info).Build()); return; } using (var db = new Database.UserContext(Config)) { var botuser = await db.GetUserOrCreateAsync(Context.User.Id); if (!botuser.ApplySlotMachineSetting(setting, value)) { await ReplyAsync("", embed : $"Podano niewłaściwą wartość parametru!".ToEmbedMessage(EMType.Error).Build()); return; } await db.SaveChangesAsync(); QueryCacheManager.ExpireTag(new string[] { $"user-{botuser.Id}", "users" }); } await ReplyAsync("", embed : $"{Context.User.Mention} zmienił nastawy automatu.".ToEmbedMessage(EMType.Success).Build()); }
private void SpawnUserPacket(SocketUser user) { var exe = new Executable($"packet u{user.Id}", new Task(() => { using (var db = new Database.UserContext(_config)) { var botUser = db.GetUserOrCreateAsync(user.Id).Result; if (botUser.IsBlacklisted) { return; } botUser.GameDeck.BoosterPacks.Add(new BoosterPack { CardCnt = 2, MinRarity = Rarity.E, IsCardFromPackTradable = true, Name = "Pakiet kart za aktywność", CardSourceFromPack = CardSource.Activity }); db.SaveChanges(); } })); _executor.TryAdd(exe, TimeSpan.FromSeconds(1)); }
public IExecutable GetExecutableGMwK(FightHistory history, List <PlayerInfo> players) { return(new Executable("GMwK", new Task(() => { using (var db = new Database.UserContext(_config)) { bool isWinner = history.Winner != null; foreach (var p in players) { var u = db.GetUserOrCreateAsync(p.User.Id).Result; var stat = new CardPvPStats { Type = FightType.BattleRoyale, Result = isWinner ? FightResult.Lose : FightResult.Draw }; if (isWinner) { if (u.Id == history.Winner.User.Id) { stat.Result = FightResult.Win; } } u.GameDeck.PvPStats.Add(stat); } db.SaveChanges(); } }))); }
public async Task GenerateItemAsync([Summary("użytkownik")] SocketGuildUser user, [Summary("przedmiot")] ItemType itemType, [Summary("liczba przedmiotów")] uint count = 1, [Summary("jakość przedmiotu")] Quality quality = Quality.Broken) { var item = itemType.ToItem(count, quality); using (var db = new Database.UserContext(Config)) { var botuser = await db.GetUserOrCreateAsync(user.Id); var thisItem = botuser.GameDeck.Items.FirstOrDefault(x => x.Type == item.Type && x.Quality == item.Quality); if (thisItem == null) { thisItem = item; botuser.GameDeck.Items.Add(thisItem); } else { thisItem.Count += count; } await db.SaveChangesAsync(); QueryCacheManager.ExpireTag(new string[] { $"user-{botuser.Id}", "users" }); string cnt = (count > 1) ? $" x{count}" : ""; await ReplyAsync("", embed : $"{user.Mention} otrzymał _{item.Name}_{cnt}.".ToEmbedMessage(EMType.Success).Build()); } }
public async Task ConnectAsync([Summary("adres do profilu")] string url) { switch (_shinden.ParseUrlToShindenId(url, out var shindenId)) { case Services.UrlParsingError.InvalidUrl: await ReplyAsync("", embed : "Wygląda na to, że podałeś niepoprawny link.".ToEmbedMessage(EMType.Error).Build()); return; case Services.UrlParsingError.InvalidUrlForum: await ReplyAsync("", embed : "Wygląda na to, że podałeś link do forum zamiast strony.".ToEmbedMessage(EMType.Error).Build()); return; default: case Services.UrlParsingError.None: break; } var response = await _shclient.User.GetAsync(shindenId); if (response.IsSuccessStatusCode()) { var user = response.Body; var userNameInDiscord = (Context.User as SocketGuildUser).Nickname ?? Context.User.Username; if (!user.Name.Equals(userNameInDiscord)) { await ReplyAsync("", embed : "Wykryto próbę podszycia się. Nieładnie!".ToEmbedMessage(EMType.Error).Build()); return; } using (var db = new Database.UserContext(Config)) { if (db.Users.Any(x => x.Shinden == shindenId)) { await ReplyAsync("", embed : "Wygląda na to, że ktoś już połączył się z tym kontem.".ToEmbedMessage(EMType.Error).Build()); return; } var botuser = await db.GetUserOrCreateAsync(Context.User.Id); botuser.Shinden = shindenId; await db.SaveChangesAsync(); QueryCacheManager.ExpireTag(new string[] { $"user-{botuser.Id}" }); } await ReplyAsync("", embed : "Konta zostały połączone.".ToEmbedMessage(EMType.Success).Build()); return; } await ReplyAsync("", embed : $"Brak połączenia z Shindenem! ({response.Code})".ToEmbedMessage(EMType.Error).Build()); }
public async Task GiveUserAPacksAsync(ulong id, [FromBody] List <Models.CardBoosterPack> boosterPacks) { if (boosterPacks?.Count < 1) { await "Model is Invalid".ToResponse(500).ExecuteResultAsync(ControllerContext); return; } var packs = new List <BoosterPack>(); foreach (var pack in boosterPacks) { var rPack = pack.ToRealPack(); if (rPack != null) { packs.Add(rPack); } } if (packs.Count < 1) { await "Data is Invalid".ToResponse(500).ExecuteResultAsync(ControllerContext); return; } using (var db = new Database.UserContext(_config)) { var user = await db.GetCachedFullUserAsync(id); if (user == null) { await "User not found!".ToResponse(404).ExecuteResultAsync(ControllerContext); return; } var exe = new Executable($"api-packet u{id}", new Task(() => { using (var dbs = new Database.UserContext(_config)) { var botUser = dbs.GetUserOrCreateAsync(id).Result; foreach (var pack in packs) { botUser.GameDeck.BoosterPacks.Add(pack); } dbs.SaveChanges(); QueryCacheManager.ExpireTag(new string[] { $"user-{botUser.Id}", "users" }); } })); await _executor.TryAdd(exe, TimeSpan.FromSeconds(1)); await "Boosterpack added!".ToResponse(200).ExecuteResultAsync(ControllerContext); } }
public async Task FactoryUserAsync([Summary("id użytkownika")] ulong id, [Summary("wartość tc")] long value) { using (var db = new Database.UserContext(Config)) { var user = await db.GetUserOrCreateAsync(id); foreach (var card in user.GameDeck.Cards.OrderByDescending(x => x.CreationDate).ToList()) { value -= 50; user.GameDeck.Cards.Remove(card); if (value <= 0) { break; } } if (value > 0) { var kct = value / 50; if (user.GameDeck.Karma > 0) { user.GameDeck.Karma -= kct; if (user.GameDeck.Karma < 0) { user.GameDeck.Karma = 0; } } else { user.GameDeck.Karma += kct; if (user.GameDeck.Karma > 0) { user.GameDeck.Karma = 0; } } user.GameDeck.CTCnt -= kct; if (user.GameDeck.CTCnt < 0) { user.GameDeck.CTCnt = 0; kct = 0; } if (kct > 0) { user.GameDeck.Items.Clear(); } } await db.SaveChangesAsync(); QueryCacheManager.ExpireTag(new string[] { "users", $"user-{id}" }); } await ReplyAsync("", embed : $"Użytkownik o id: `{id}` został zrównany.".ToEmbedMessage(EMType.Success).Build()); }
public async Task <bool> OnAccept(SessionContext context) { var players = new List <PlayerInfo> { P1, P2 }; var fight = _waifu.MakeFightAsync(players); string deathLog = _waifu.GetDeathLog(fight, players); bool isWinner = fight.Winner != null; string winString = isWinner ? $"Zwycięża {fight.Winner.User.Mention}!": "Remis!"; if (await Message.Channel.GetMessageAsync(Message.Id) is IUserMessage msg) { await msg.ModifyAsync(x => x.Embed = $"{DuelName}{deathLog.TrimToLength(1400)}{winString}".ToEmbedMessage(EMType.Error).Build()); } using (var db = new Database.UserContext(_config)) { var user1 = await db.GetUserOrCreateAsync(P1.User.Id); var user2 = await db.GetUserOrCreateAsync(P2.User.Id); user1.GameDeck.PvPStats.Add(new CardPvPStats { Type = FightType.Versus, Result = isWinner ? (fight.Winner.User.Id == user1.Id ? FightResult.Win : FightResult.Lose) : FightResult.Draw }); user2.GameDeck.PvPStats.Add(new CardPvPStats { Type = FightType.Versus, Result = isWinner ? (fight.Winner.User.Id == user2.Id ? FightResult.Win : FightResult.Lose) : FightResult.Draw }); await db.SaveChangesAsync(); QueryCacheManager.ExpireTag(new string[] { $"user-{user1.Id}", $"user-{user2.Id}", "users" }); } Dispose(); return(true); }
public async Task FactoryUserAsync([Summary("id użytkownika")] ulong id) { using (var db = new Database.UserContext(Config)) { var user = await db.GetUserOrCreateAsync(id); db.Users.Remove(user); await db.SaveChangesAsync(); QueryCacheManager.ExpireTag(new string[] { "users" }); } await ReplyAsync("", embed : $"Użytkownik o id: `{id}` został wymazany.".ToEmbedMessage(EMType.Success).Build()); }
public async Task TossCoinAsync([Summary("strona monety(orzeł/reszka)")] Services.CoinSide side, [Summary("ilość SC (maks. stawka 10000)")] int amount) { if (amount <= 0 || amount > 10000) { await ReplyAsync("", embed : $"{Context.User.Mention} możesz rzucić za maksymalnie 10000 SC!".ToEmbedMessage(EMType.Error).Build()); return; } using (var db = new Database.UserContext(Config)) { var botuser = await db.GetUserOrCreateAsync(Context.User.Id); if (botuser.ScCnt < amount) { await ReplyAsync("", embed : $"{Context.User.Mention} nie posiadasz wystarczającej liczby SC!".ToEmbedMessage(EMType.Error).Build()); return; } botuser.ScCnt -= amount; var thrown = _fun.RandomizeSide(); var embed = $"{Context.User.Mention} pudło! Obecnie posiadasz {botuser.ScCnt} SC.".ToEmbedMessage(EMType.Error); botuser.Stats.Tail += (thrown == CoinSide.Tail) ? 1 : 0; botuser.Stats.Head += (thrown == CoinSide.Head) ? 1 : 0; if (thrown == side) { ++botuser.Stats.Hit; botuser.ScCnt += amount * 2; botuser.Stats.IncomeInSc += amount; embed = $"{Context.User.Mention} trafiony zatopiony! Obecnie posiadasz {botuser.ScCnt} SC.".ToEmbedMessage(EMType.Success); } else { ++botuser.Stats.Misd; botuser.Stats.ScLost += amount; botuser.Stats.IncomeInSc -= amount; } await db.SaveChangesAsync(); QueryCacheManager.ExpireTag(new string[] { $"user-{botuser.Id}", "users" }); await ReplyAsync("", embed : embed.Build()); await Context.Channel.SendFileAsync($"./Pictures/coin{(int)thrown}.png"); } }
public async Task TransferCardAsync([Summary("użytkownik")] SocketGuildUser user) { using (var db = new Database.UserContext(Config)) { var targetUser = await db.GetUserOrCreateAsync(user.Id); targetUser.IsBlacklisted = !targetUser.IsBlacklisted; await db.SaveChangesAsync(); QueryCacheManager.ExpireTag(new string[] { $"user-{Context.User.Id}", "users" }); await ReplyAsync("", embed : $"{user.Mention} - blacklist: {targetUser.IsBlacklisted}".ToEmbedMessage(EMType.Success).Build()); } }
public async Task ChangeUserExpAsync([Summary("użytkownik")] SocketGuildUser user, [Summary("liczba punktów doświadczenia")] long amount) { using (var db = new Database.UserContext(Config)) { var botuser = await db.GetUserOrCreateAsync(user.Id); botuser.ExpCnt += amount; await db.SaveChangesAsync(); QueryCacheManager.ExpireTag(new string[] { $"user-{botuser.Id}", "users" }); await ReplyAsync("", embed : $"{user.Mention} ma teraz {botuser.ExpCnt} punktów doświadczenia.".ToEmbedMessage(EMType.Success).Build()); } }
public async Task ChangeUserLevelAsync([Summary("użytkownik")] SocketGuildUser user, [Summary("poziom")] long level) { using (var db = new Database.UserContext(Config)) { var bUser = await db.GetUserOrCreateAsync(user.Id); bUser.Level = level; bUser.ExpCnt = Services.ExperienceManager.CalculateExpForLevel(level); await db.SaveChangesAsync(); QueryCacheManager.ExpireTag(new string[] { $"user-{Context.User.Id}", "users" }); await ReplyAsync("", embed : $"{user.Mention} ustawiono {level} poziom.".ToEmbedMessage(EMType.Success).Build()); } }
public async Task ToggleWaifuViewInProfileAsync() { using (var db = new Database.UserContext(Config)) { var botuser = await db.GetUserOrCreateAsync(Context.User.Id); botuser.ShowWaifuInProfile = !botuser.ShowWaifuInProfile; string result = botuser.ShowWaifuInProfile ? "załączony" : "wyłączony"; await db.SaveChangesAsync(); QueryCacheManager.ExpireTag(new string[] { $"user-{botuser.Id}", "users" }); await ReplyAsync("", embed : $"Podgląd waifu w profilu {Context.User.Mention} został {result}.".ToEmbedMessage(EMType.Success).Build()); } }
public async Task GiveUserAPackAsync([FromBody] Models.CardBoosterPack boosterPack) { if (boosterPack == null) { await "Model is Invalid".ToResponse(500).ExecuteResultAsync(ControllerContext); return; } var pack = boosterPack.ToRealPack(); if (pack == null) { await "Data is Invalid".ToResponse(500).ExecuteResultAsync(ControllerContext); return; } var currUser = ControllerContext.HttpContext.User; if (currUser.HasClaim(x => x.Type == "DiscordId")) { if (ulong.TryParse(currUser.Claims.First(x => x.Type == "DiscordId").Value, out var discordId)) { var exe = new Executable($"api-packet u{discordId}", new Task(() => { using (var db = new Database.UserContext(_config)) { var botUser = db.GetUserOrCreateAsync(discordId).Result; botUser.GameDeck.BoosterPacks.Add(pack); db.SaveChanges(); QueryCacheManager.ExpireTag(new string[] { $"user-{botUser.Id}", "users" }); } })); await _executor.TryAdd(exe, TimeSpan.FromSeconds(1)); await "Booster pack added!".ToResponse(200).ExecuteResultAsync(ControllerContext); return; } } await "The appropriate claim was not found".ToResponse(403).ExecuteResultAsync(ControllerContext); }
private Executable GetSafariExe(EmbedBuilder embed, IUserMessage msg, Card newCard, SafariImage pokeImage, ICharacterInfo character, ITextChannel trashChannel, IUser winner) { return(new Executable("safari", new Task(() => { using (var db = new Database.UserContext(_config)) { var botUser = db.GetUserOrCreateAsync(winner.Id).Result; botUser.GameDeck.Cards.Add(newCard); db.SaveChanges(); QueryCacheManager.ExpireTag(new string[] { $"user-{botUser.Id}", "users" }); } _ = Task.Run(async() => { try { embed.ImageUrl = await _waifu.GetSafariViewAsync(pokeImage, character, newCard, trashChannel); embed.Description = $"{winner.Mention} zdobył na polowaniu i wsadził do klatki:\n" + $"{newCard.GetString(false, false, true)}\n({newCard.Title})"; await msg.ModifyAsync(x => x.Embed = embed.Build()); var privEmb = new EmbedBuilder() { Color = EMType.Info.Color(), Description = $"Na [polowaniu]({msg.GetJumpUrl()}) zdobyłeś: {newCard.GetString(false, false, true)}" }; var priv = await winner.GetOrCreateDMChannelAsync(); if (priv != null) { await priv.SendMessageAsync("", false, privEmb.Build()); } } catch (Exception ex) { _logger.Log($"In Safari: {ex}"); } }); }))); }
private void SpawnUserPacket(SocketUser user) { var exe = new Executable($"packet u{user.Id}", new Task(() => { using (var db = new Database.UserContext(_config)) { var botUser = db.GetUserOrCreateAsync(user.Id).Result; if (botUser.IsBlacklisted) { return; } botUser.GameDeck.BoosterPacks.Add(new BoosterPack { CardCnt = 2, MinRarity = Rarity.E, IsCardFromPackTradable = true, Name = "Pakiet kart za aktywność", CardSourceFromPack = CardSource.Activity }); db.SaveChanges(); } })); _executor.TryAdd(exe, TimeSpan.FromSeconds(1)); var gUser = user as SocketGuildUser; using (var db = new Database.AnalyticsContext(_config)) { db.UsersData.Add(new Database.Models.Analytics.UserAnalytics { Value = 1, UserId = user.Id, MeasureDate = DateTime.Now, GuildId = gUser?.Guild?.Id ?? 0, Type = Database.Models.Analytics.UserAnalyticsEventType.Pack }); db.SaveChanges(); } }