Exemple #1
0
        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);
        }
Exemple #2
0
        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);
        }