public async Task Settype([Remainder] string typeTargeted = null) { IGuildUser user = (IGuildUser)Context.User; var targetType = StringToPokemonType(typeTargeted); if (targetType == null) { await Context.Channel.EmbedAsync(_service.PokemonTypes.Aggregate(new EmbedBuilder().WithDescription("List of the available types:"), (eb, pt) => eb.AddField(efb => efb.WithName(pt.Name) .WithValue(pt.Icon) .WithIsInline(true))) .WithColor(NadekoBot.OkColor)).ConfigureAwait(false); return; } if (targetType == GetPokeType(user.Id)) { await ReplyErrorLocalized("already_that_type", targetType).ConfigureAwait(false); return; } //Payment~ var amount = 1; if (amount > 0) { if (!await _cs.RemoveAsync(user, $"{user} change type to {typeTargeted}", amount, true).ConfigureAwait(false)) { await ReplyErrorLocalized("no_currency", _bc.BotConfig.CurrencySign).ConfigureAwait(false); return; } } //Actually changing the type here using (var uow = _db.UnitOfWork) { var pokeUsers = uow.PokeGame.GetAll().ToArray(); var setTypes = pokeUsers.ToDictionary(x => x.UserId, y => y.type); var pt = new UserPokeTypes { UserId = user.Id, type = targetType.Name, }; if (!setTypes.ContainsKey(user.Id)) { //create user in db uow.PokeGame.Add(pt); } else { //update user in db var pokeUserCmd = pokeUsers.FirstOrDefault(p => p.UserId == user.Id); pokeUserCmd.type = targetType.Name; uow.PokeGame.Update(pokeUserCmd); } await uow.CompleteAsync(); } //Now for the response await ReplyConfirmLocalized("settype_success", targetType, _bc.BotConfig.CurrencySign).ConfigureAwait(false); }
public async Task Settype(IUserMessage umsg, [Remainder] string typeTargeted = null) { var channel = (ITextChannel)umsg.Channel; IGuildUser user = (IGuildUser)umsg.Author; var targetType = StringToPokemonType(typeTargeted); if (targetType == null) { await channel.EmbedAsync(PokemonTypes.Aggregate(new EmbedBuilder().WithDescription("List of the available types:"), (eb, pt) => eb.AddField(efb => efb.WithName(pt.Name).WithValue(pt.Icon).WithIsInline(true))).WithColor(NadekoBot.OkColor).Build()).ConfigureAwait(false); return; } if (targetType == GetPokeType(user.Id)) { await channel.SendMessageAsync($"Your type is already {targetType.Name.ToLowerInvariant()}{targetType.Icon}").ConfigureAwait(false); return; } //Payment~ var amount = 1; if (amount > 0) { if (!await CurrencyHandler.RemoveCurrencyAsync(user, $"{user.Mention} change type to {typeTargeted}", amount, true).ConfigureAwait(false)) { try { await channel.SendMessageAsync($"{user.Mention} You don't have enough {CurrencyName}s.").ConfigureAwait(false); } catch { } return; } } //Actually changing the type here Dictionary <ulong, string> setTypes; using (var uow = DbHandler.UnitOfWork()) { var pokeUsers = uow.PokeGame.GetAll(); setTypes = pokeUsers.ToDictionary(x => x.UserId, y => y.type); var pt = new UserPokeTypes { UserId = user.Id, type = targetType.Name, }; if (!setTypes.ContainsKey(user.Id)) { //create user in db uow.PokeGame.Add(pt); } else { //update user in db var pokeUserCmd = pokeUsers.Where(p => p.UserId == user.Id).FirstOrDefault(); pokeUserCmd.type = targetType.Name; uow.PokeGame.Update(pokeUserCmd); } await uow.CompleteAsync(); } //Now for the response await channel.SendMessageAsync($"Set type of {user.Mention} to {typeTargeted}{targetType.Icon} for a {CurrencySign}").ConfigureAwait(false); }