Ejemplo n.º 1
0
        public TriviaQuestion GetRandomQuestion(HashSet <TriviaQuestion> exclude, bool isPokemon)
        {
            if (Pool.Length == 0)
            {
                return(null);
            }

            if (isPokemon)
            {
                var num = _rng.Next(1, maxPokemonId + 1);
                return(new TriviaQuestion("Who's That Pokémon?",
                                          Map[num].ToTitleCase(),
                                          "Pokemon",
                                          $@"http://evilMortybot.me/images/pokemon/shadows/{num}.png",
                                          $@"http://evilMortybot.me/images/pokemon/real/{num}.png"));
            }
            TriviaQuestion randomQuestion;

            while (exclude.Contains(randomQuestion = Pool[_rng.Next(0, Pool.Length)]))
            {
                ;
            }

            return(randomQuestion);
        }
Ejemplo n.º 2
0
            public async Task Place(PlaceType placeType, uint width = 0, uint height = 0)
            {
                var url = "";

                switch (placeType)
                {
                case PlaceType.Cage:
                    url = "http://www.placecage.com";
                    break;

                case PlaceType.Steven:
                    url = "http://www.stevensegallery.com";
                    break;

                case PlaceType.Beard:
                    url = "http://placebeard.it";
                    break;

                case PlaceType.Fill:
                    url = "http://www.fillmurray.com";
                    break;

                case PlaceType.Bear:
                    url = "https://www.placebear.com";
                    break;

                case PlaceType.Kitten:
                    url = "http://placekitten.com";
                    break;

                case PlaceType.Bacon:
                    url = "http://baconmockup.com";
                    break;

                case PlaceType.Xoart:
                    url = "http://xoart.link";
                    break;
                }
                var rng = new EvilMortyRandom();

                if (width <= 0 || width > 1000)
                {
                    width = (uint)rng.Next(250, 850);
                }

                if (height <= 0 || height > 1000)
                {
                    height = (uint)rng.Next(250, 850);
                }

                url += $"/{width}/{height}";

                await Context.Channel.SendMessageAsync(url).ConfigureAwait(false);
            }
Ejemplo n.º 3
0
        private void InitializeStartingLetters()
        {
            var wordCount = _rng.Next(3, 6);

            var lettersArr = new char[wordCount];

            for (int i = 0; i < wordCount; i++)
            {
                var randChar = (char)_rng.Next(65, 91);
                lettersArr[i] = randChar == 'X' ? (char)_rng.Next(65, 88) : randChar;
            }
            StartingLetters = lettersArr.ToImmutableArray();
        }
Ejemplo n.º 4
0
        public string GetRandomCurrencyImage()
        {
            var rng = new EvilMortyRandom();
            var cur = _images.ImageUrls.Currency;

            return(cur[rng.Next(0, cur.Length)]);
        }
Ejemplo n.º 5
0
        public Task <Quote> SearchQuoteKeywordTextAsync(ulong guildId, string keyword, string text)
        {
            var rngk = new EvilMortyRandom();

            return(_set.Where(q => q.Text.ContainsNoCase(text, StringComparison.OrdinalIgnoreCase) &&
                              q.GuildId == guildId && q.Keyword == keyword)
                   .OrderBy(q => rngk.Next())
                   .FirstOrDefaultAsync());
        }
Ejemplo n.º 6
0
            private async Task InternalRoll(int num, bool ordered)
            {
                if (num < 1 || num > 30)
                {
                    await ReplyErrorLocalized("dice_invalid_number", 1, 30).ConfigureAwait(false);

                    return;
                }

                var rng = new EvilMortyRandom();

                var dice   = new List <Image <Rgba32> >(num);
                var values = new List <int>(num);

                for (var i = 0; i < num; i++)
                {
                    var randomNumber = rng.Next(1, 7);
                    var toInsert     = dice.Count;
                    if (ordered)
                    {
                        if (randomNumber == 6 || dice.Count == 0)
                        {
                            toInsert = 0;
                        }
                        else if (randomNumber != 1)
                        {
                            for (var j = 0; j < dice.Count; j++)
                            {
                                if (values[j] < randomNumber)
                                {
                                    toInsert = j;
                                    break;
                                }
                            }
                        }
                    }
                    else
                    {
                        toInsert = dice.Count;
                    }
                    dice.Insert(toInsert, GetDice(randomNumber));
                    values.Insert(toInsert, randomNumber);
                }

                var bitmap = dice.Merge();
                var ms     = new MemoryStream();

                bitmap.SaveAsPng(ms);
                ms.Position = 0;
                await Context.Channel.SendFileAsync(ms, "dice.png",
                                                    Context.User.Mention + " " +
                                                    GetText("dice_rolled_num", Format.Bold(values.Count.ToString())) +
                                                    " " + GetText("total_average",
                                                                  Format.Bold(values.Sum().ToString()),
                                                                  Format.Bold((values.Sum() / (1.0f * values.Count)).ToString("N2")))).ConfigureAwait(false);
            }
Ejemplo n.º 7
0
            public async Task Flip(int count = 1)
            {
                if (count == 1)
                {
                    var coins = _images.ImageUrls.Coins;
                    if (rng.Next(0, 2) == 1)
                    {
                        await Context.Channel.EmbedAsync(new EmbedBuilder()
                                                         .WithOkColor()
                                                         .WithImageUrl(coins.Heads[rng.Next(0, coins.Heads.Length)])
                                                         .WithDescription(Context.User.Mention + " " + GetText("flipped", Format.Bold(GetText("heads")))));
                    }
                    else
                    {
                        await Context.Channel.EmbedAsync(new EmbedBuilder()
                                                         .WithOkColor()
                                                         .WithImageUrl(coins.Tails[rng.Next(0, coins.Tails.Length)])
                                                         .WithDescription(Context.User.Mention + " " + GetText("flipped", Format.Bold(GetText("tails")))));
                    }
                    return;
                }
                if (count > 10 || count < 1)
                {
                    await ReplyErrorLocalized("flip_invalid", 10).ConfigureAwait(false);

                    return;
                }
                var imgs = new Image <Rgba32> [count];

                for (var i = 0; i < count; i++)
                {
                    using (var heads = _images.Heads[rng.Next(0, _images.Heads.Length)].ToStream())
                        using (var tails = _images.Tails[rng.Next(0, _images.Tails.Length)].ToStream())
                        {
                            if (rng.Next(0, 10) < 5)
                            {
                                imgs[i] = Image.Load(heads);
                            }
                            else
                            {
                                imgs[i] = Image.Load(tails);
                            }
                        }
                }
                await Context.Channel.SendFileAsync(imgs.Merge().ToStream(), $"{count} coins.png").ConfigureAwait(false);
            }
Ejemplo n.º 8
0
        public HangmanObject GetTerm(string type)
        {
            type = type?.Trim().ToLowerInvariant();
            var rng = new EvilMortyRandom();

            if (type == "random")
            {
                var keys = Data.Keys.ToArray();

                type = Data.Keys.ToArray()[rng.Next(0, Data.Keys.Count())];
            }
            if (!Data.TryGetValue(type, out var termTypes) || termTypes.Length == 0)
            {
                throw new TermNotFoundException();
            }

            var obj = termTypes[rng.Next(0, termTypes.Length)];

            obj.Word = obj.Word.Trim().ToLowerInvariant();
            return(obj);
        }
Ejemplo n.º 9
0
        public async Task <bool> GetTreat(ulong userId)
        {
            if (_rng.Next(0, 10) != 0)
            {
                await _cs.AddAsync(userId, "Halloween 2017 Treat", 10)
                .ConfigureAwait(false);

                return(true);
            }

            return(false);
        }
Ejemplo n.º 10
0
        private async Task Start()
        {
            CurrentPhase = Phase.Running;
            if (_users.Count <= 1)
            {
                foreach (var user in _users)
                {
                    if (user.Bet > 0)
                    {
                        await _currency.AddAsync(user.UserId, "Race refund", user.Bet).ConfigureAwait(false);
                    }
                }

                var _sf = OnStartingFailed?.Invoke(this);
                CurrentPhase = Phase.Ended;
                return;
            }

            var _  = OnStarted?.Invoke(this);
            var _t = Task.Run(async() =>
            {
                var rng = new EvilMortyRandom();
                while (!_users.All(x => x.Progress >= 60))
                {
                    foreach (var user in _users)
                    {
                        user.Progress += rng.Next(1, 11);
                        if (user.Progress >= 60)
                        {
                            user.Progress = 60;
                        }
                    }

                    var finished = _users.Where(x => x.Progress >= 60 && !FinishedUsers.Contains(x))
                                   .Shuffle();

                    FinishedUsers.AddRange(finished);

                    var _ignore = OnStateUpdate?.Invoke(this);
                    await Task.Delay(2500).ConfigureAwait(false);
                }

                if (FinishedUsers[0].Bet > 0)
                {
                    await _currency.AddAsync(FinishedUsers[0].UserId, "Won a Race", FinishedUsers[0].Bet * (_users.Count - 1))
                    .ConfigureAwait(false);
                }

                var _ended = OnEnded?.Invoke(this);
            });
        }
Ejemplo n.º 11
0
        public ReplacementBuilder WithRngRegex()
        {
            var rng = new EvilMortyRandom();

            _regex.TryAdd(rngRegex, (match) =>
            {
                int.TryParse(match.Groups["from"].ToString(), out var from);
                int.TryParse(match.Groups["to"].ToString(), out var to);

                if (from == 0 && to == 0)
                {
                    return(rng.Next(0, 11).ToString());
                }

                if (from >= to)
                {
                    return(string.Empty);
                }

                return(rng.Next(from, to + 1).ToString());
            });
            return(this);
        }
Ejemplo n.º 12
0
        public async Task Choose([Remainder] string list = null)
        {
            if (string.IsNullOrWhiteSpace(list))
            {
                return;
            }
            var listArr = list.Split(';');

            if (listArr.Length < 2)
            {
                return;
            }
            var rng = new EvilMortyRandom();
            await Context.Channel.SendConfirmAsync("🤔", listArr[rng.Next(0, listArr.Length)]).ConfigureAwait(false);
        }
Ejemplo n.º 13
0
            private async Task InternallDndRoll(string arg, bool ordered)
            {
                Match match;

                if ((match = fudgeRegex.Match(arg)).Length != 0 &&
                    int.TryParse(match.Groups["n1"].ToString(), out int n1) &&
                    n1 > 0 && n1 < 500)
                {
                    var rng = new EvilMortyRandom();

                    var rolls = new List <char>();

                    for (int i = 0; i < n1; i++)
                    {
                        rolls.Add(_fateRolls[rng.Next(0, _fateRolls.Length)]);
                    }
                    var embed = new EmbedBuilder().WithOkColor().WithDescription(Context.User.Mention + " " + GetText("dice_rolled_num", Format.Bold(n1.ToString())))
                                .AddField(efb => efb.WithName(Format.Bold("Result"))
                                          .WithValue(string.Join(" ", rolls.Select(c => Format.Code($"[{c}]")))));
                    await Context.Channel.EmbedAsync(embed).ConfigureAwait(false);
                }
                else if ((match = dndRegex.Match(arg)).Length != 0)
                {
                    var rng = new EvilMortyRandom();
                    if (int.TryParse(match.Groups["n1"].ToString(), out n1) &&
                        int.TryParse(match.Groups["n2"].ToString(), out int n2) &&
                        n1 <= 50 && n2 <= 100000 && n1 > 0 && n2 > 0)
                    {
                        int.TryParse(match.Groups["add"].Value, out int add);
                        int.TryParse(match.Groups["sub"].Value, out int sub);

                        var arr = new int[n1];
                        for (int i = 0; i < n1; i++)
                        {
                            arr[i] = rng.Next(1, n2 + 1);
                        }

                        var sum   = arr.Sum();
                        var embed = new EmbedBuilder().WithOkColor().WithDescription(Context.User.Mention + " " + GetText("dice_rolled_num", n1) + $"`1 - {n2}`")
                                    .AddField(efb => efb.WithName(Format.Bold("Rolls"))
                                              .WithValue(string.Join(" ", (ordered ? arr.OrderBy(x => x).AsEnumerable() : arr).Select(x => Format.Code(x.ToString())))))
                                    .AddField(efb => efb.WithName(Format.Bold("Sum"))
                                              .WithValue(sum + " + " + add + " - " + sub + " = " + (sum + add - sub)));
                        await Context.Channel.EmbedAsync(embed).ConfigureAwait(false);
                    }
                }
            }
Ejemplo n.º 14
0
            public async Task Roll()
            {
                var rng = new EvilMortyRandom();
                var gen = rng.Next(1, 101);

                var num1        = gen / 10;
                var num2        = gen % 10;
                var imageStream = await Task.Run(() =>
                {
                    var ms = new MemoryStream();
                    new[] { GetDice(num1), GetDice(num2) }.Merge().SaveAsPng(ms);
                    ms.Position = 0;
                    return(ms);
                }).ConfigureAwait(false);

                await Context.Channel.SendFileAsync(imageStream,
                                                    "dice.png",
                                                    Context.User.Mention + " " + GetText("dice_rolled", Format.Code(gen.ToString()))).ConfigureAwait(false);
            }
Ejemplo n.º 15
0
        public User GetWinner()
        {
            var rng = new EvilMortyRandom();

            if (GameType == Type.Mixed)
            {
                var num = rng.NextLong(0L, Users.Sum(x => x.Amount));
                var sum = 0L;
                foreach (var u in Users)
                {
                    sum += u.Amount;
                    if (sum > num)
                    {
                        return(u);
                    }
                }
                _log.Error("Woah. Report this.\nRoll: {0}\nAmounts: {1}", num, string.Join(",", Users.Select(x => x.Amount)));
            }

            var usrs = _users.ToArray();

            return(usrs[rng.Next(0, usrs.Length)]);
        }
Ejemplo n.º 16
0
        public async Task WhosPlaying([Remainder] string game)
        {
            game = game?.Trim().ToUpperInvariant();
            if (string.IsNullOrWhiteSpace(game))
            {
                return;
            }

            var socketGuild = Context.Guild as SocketGuild;

            if (socketGuild == null)
            {
                _log.Warn("Can't cast guild to socket guild.");
                return;
            }
            var rng = new EvilMortyRandom();
            var arr = await Task.Run(() => socketGuild.Users
                                     .Where(u => u.Activity?.Name?.ToUpperInvariant() == game)
                                     .Select(u => u.Username)
                                     .OrderBy(x => rng.Next())
                                     .Take(60)
                                     .ToArray()).ConfigureAwait(false);

            int i = 0;

            if (arr.Length == 0)
            {
                await ReplyErrorLocalized("nobody_playing_game").ConfigureAwait(false);
            }
            else
            {
                await Context.Channel.SendConfirmAsync("```css\n" + string.Join("\n", arr.GroupBy(item => (i++) / 2)
                                                                                .Select(ig => string.Concat(ig.Select(el => $"• {el,-27}")))) + "\n```")
                .ConfigureAwait(false);
            }
        }
Ejemplo n.º 17
0
        public async Task <ImageCacherObject> GetImage(string tag, bool forceExplicit, DapiSearchType type,
                                                       HashSet <string> blacklistedTags = null)
        {
            tag = tag?.ToLowerInvariant();

            blacklistedTags = blacklistedTags ?? new HashSet <string>();

            if (type == DapiSearchType.E621)
            {
                tag = tag?.Replace("yuri", "female/female");
            }

            var _lock = GetLock(type);
            await _lock.WaitAsync();

            try
            {
                ImageCacherObject[] imgs;
                if (!string.IsNullOrWhiteSpace(tag))
                {
                    imgs = _cache.Where(x => x.Tags.IsSupersetOf(tag.Split('+')) && x.SearchType == type && (!forceExplicit || x.Rating == "e")).ToArray();
                }
                else
                {
                    tag  = null;
                    imgs = _cache.Where(x => x.SearchType == type).ToArray();
                }
                ImageCacherObject img;
                if (imgs.Length == 0)
                {
                    img = null;
                }
                else
                {
                    img = imgs[_rng.Next(imgs.Length)];
                }

                if (img != null)
                {
                    _cache.Remove(img);
                    return(img);
                }
                else
                {
                    var images = await DownloadImages(tag, forceExplicit, type).ConfigureAwait(false);

                    images = images
                             .Where(x => x.Tags.All(t => !blacklistedTags.Contains(t)))
                             .ToArray();
                    if (images.Length == 0)
                    {
                        return(null);
                    }
                    var toReturn = images[_rng.Next(images.Length)];
#if !GLOBAL_NADEKO
                    foreach (var dledImg in images)
                    {
                        if (dledImg != toReturn)
                        {
                            _cache.Add(dledImg);
                        }
                    }
#endif
                    return(toReturn);
                }
            }
            finally
            {
                _lock.Release();
            }
        }
Ejemplo n.º 18
0
        public Task <Quote> GetRandomQuoteByKeywordAsync(ulong guildId, string keyword)
        {
            var rng = new EvilMortyRandom();

            return(_set.Where(q => q.GuildId == guildId && q.Keyword == keyword).OrderBy(q => rng.Next())
                   .FirstOrDefaultAsync());
        }
Ejemplo n.º 19
0
            public async Task WaifuInfo([Remainder] IGuildUser target = null)
            {
                if (target == null)
                {
                    target = (IGuildUser)Context.User;
                }
                WaifuInfo         w;
                IList <WaifuInfo> claims;
                int divorces;

                using (var uow = _db.UnitOfWork)
                {
                    w        = uow.Waifus.ByWaifuUserId(target.Id);
                    claims   = uow.Waifus.ByClaimerUserId(target.Id);
                    divorces = uow._context.WaifuUpdates.Count(x => x.Old != null &&
                                                               x.Old.UserId == target.Id &&
                                                               x.UpdateType == WaifuUpdateType.Claimed &&
                                                               x.New == null);
                    if (w == null)
                    {
                        uow.Waifus.Add(w = new WaifuInfo()
                        {
                            Affinity = null,
                            Claimer  = null,
                            Price    = 1,
                            Waifu    = uow.DiscordUsers.GetOrCreate(target),
                        });
                    }

                    w.Waifu.Username      = target.Username;
                    w.Waifu.Discriminator = target.Discriminator;
                    await uow.CompleteAsync().ConfigureAwait(false);
                }

                var claimInfo = GetClaimTitle(target.Id);
                var affInfo   = GetAffinityTitle(target.Id);

                var rng = new EvilMortyRandom();

                var nobody   = GetText("nobody");
                var i        = 0;
                var itemsStr = !w.Items.Any()
                    ? "-"
                    : string.Join("\n", w.Items
                                  .OrderBy(x => x.Price)
                                  .GroupBy(x => x.ItemEmoji)
                                  .Select(x => $"{x.Key} x{x.Count(),-3}")
                                  .GroupBy(x => i++ / 2)
                                  .Select(x => string.Join(" ", x)));


                var embed = new EmbedBuilder()
                            .WithOkColor()
                            .WithTitle("Waifu " + w.Waifu + " - \"the " + claimInfo.Title + "\"")
                            .AddField(efb => efb.WithName(GetText("price")).WithValue(w.Price.ToString()).WithIsInline(true))
                            .AddField(efb => efb.WithName(GetText("claimed_by")).WithValue(w.Claimer?.ToString() ?? nobody).WithIsInline(true))
                            .AddField(efb => efb.WithName(GetText("likes")).WithValue(w.Affinity?.ToString() ?? nobody).WithIsInline(true))
                            .AddField(efb => efb.WithName(GetText("changes_of_heart")).WithValue($"{affInfo.Count} - \"the {affInfo.Title}\"").WithIsInline(true))
                            .AddField(efb => efb.WithName(GetText("divorces")).WithValue(divorces.ToString()).WithIsInline(true))
                            .AddField(efb => efb.WithName(GetText("gifts")).WithValue(itemsStr).WithIsInline(false))
                            .AddField(efb => efb.WithName($"Waifus ({claims.Count})").WithValue(claims.Count == 0 ? nobody : string.Join("\n", claims.OrderBy(x => rng.Next()).Take(30).Select(x => x.Waifu))).WithIsInline(false));

                await Context.Channel.EmbedAsync(embed).ConfigureAwait(false);
            }
Ejemplo n.º 20
0
        private GirlRating GetGirl(ulong uid)
        {
            var rng = new EvilMortyRandom();

            var roll = rng.Next(1, 1001);

            if ((uid == 185968432783687681 ||
                 uid == 265642040950390784) && roll >= 900)
            {
                roll = 1000;
            }


            double hot;
            double crazy;
            string advice;

            if (roll < 500)
            {
                hot    = NextDouble(0, 5);
                crazy  = NextDouble(4, 10);
                advice =
                    "This is your NO-GO ZONE. We do not hang around, and date, and marry women who are at least, in our mind, a 5. " +
                    "So, this is your no-go zone. You don't go here. You just rule this out. Life is better this way, that's the way it is.";
            }
            else if (roll < 750)
            {
                hot    = NextDouble(5, 8);
                crazy  = NextDouble(4, .6 * hot + 4);
                advice = "Above a 5, and to about an 8, and below the crazy line - this is your FUN ZONE. You can " +
                         "hang around here, and meet these girls and spend time with them. Keep in mind, while you're " +
                         "in the fun zone, you want to move OUT of the fun zone to a more permanent location. " +
                         "These girls are most of the time not crazy.";
            }
            else if (roll < 900)
            {
                hot    = NextDouble(5, 10);
                crazy  = NextDouble(.61 * hot + 4, 10);
                advice = "Above the crazy line - it's the DANGER ZONE. This is redheads, strippers, anyone named Tiffany, " +
                         "hairdressers... This is where your car gets keyed, you get bunny in the pot, your tires get slashed, " +
                         "and you wind up in jail.";
            }
            else if (roll < 951)
            {
                hot    = NextDouble(8, 10);
                crazy  = NextDouble(7, .6 * hot + 4);
                advice = "Below the crazy line, above an 8 hot, but still about 7 crazy. This is your DATE ZONE. " +
                         "You can stay in the date zone indefinitely. These are the girls you introduce to your friends and your family. " +
                         "They're good looking, and they're reasonably not crazy most of the time. You can stay here indefinitely.";
            }
            else if (roll < 990)
            {
                hot    = NextDouble(8, 10);
                crazy  = NextDouble(5, 7);
                advice = "Above an 8 hot, and between about 7 and a 5 crazy - this is WIFE ZONE. If you meet this girl, you should consider long-term " +
                         "relationship. Rare.";
            }
            else if (roll < 999)
            {
                hot    = NextDouble(8, 10);
                crazy  = NextDouble(2, 3.99d);
                advice = "You've met a girl she's above 8 hot, and not crazy at all (below 4)... totally cool?" +
                         " You should be careful. That's a dude. You're talking to a tranny!";
            }
            else
            {
                hot    = NextDouble(8, 10);
                crazy  = NextDouble(4, 5);
                advice = "Below 5 crazy, and above 8 hot, this is the UNICORN ZONE, these things don't exist." +
                         "If you find a unicorn, please capture it safely, keep it alive, we'd like to study it, " +
                         "and maybe look at how to replicate that.";
            }

            return(new GirlRating(_images, crazy, hot, roll, advice));
        }
Ejemplo n.º 21
0
 public WheelOfFortune()
 {
     this.Result = _rng.Next(0, 8);
 }
Ejemplo n.º 22
0
        private Task PotentialFlowerGeneration(IUserMessage imsg)
        {
            var msg = imsg as SocketUserMessage;

            if (msg == null || msg.Author.IsBot)
            {
                return(Task.CompletedTask);
            }

            var channel = imsg.Channel as ITextChannel;

            if (channel == null)
            {
                return(Task.CompletedTask);
            }

            if (!GenerationChannels.Contains(channel.Id))
            {
                return(Task.CompletedTask);
            }

            var _ = Task.Run(async() =>
            {
                try
                {
                    var lastGeneration = LastGenerations.GetOrAdd(channel.Id, DateTime.MinValue);
                    var rng            = new EvilMortyRandom();

                    if (DateTime.UtcNow - TimeSpan.FromSeconds(_bc.BotConfig.CurrencyGenerationCooldown) < lastGeneration) //recently generated in this channel, don't generate again
                    {
                        return;
                    }

                    var num = rng.Next(1, 101) + _bc.BotConfig.CurrencyGenerationChance * 100;
                    if (num > 100 && LastGenerations.TryUpdate(channel.Id, DateTime.UtcNow, lastGeneration))
                    {
                        var dropAmount    = _bc.BotConfig.CurrencyDropAmount;
                        var dropAmountMax = _bc.BotConfig.CurrencyDropAmountMax;

                        if (dropAmountMax != null && dropAmountMax > dropAmount)
                        {
                            dropAmount = new EvilMortyRandom().Next(dropAmount, dropAmountMax.Value + 1);
                        }

                        if (dropAmount > 0)
                        {
                            var msgs   = new IUserMessage[dropAmount];
                            var prefix = _cmdHandler.GetPrefix(channel.Guild.Id);
                            var toSend = dropAmount == 1
                                ? GetText(channel, "curgen_sn", _bc.BotConfig.CurrencySign)
                                         + " " + GetText(channel, "pick_sn", prefix)
                                : GetText(channel, "curgen_pl", dropAmount, _bc.BotConfig.CurrencySign)
                                         + " " + GetText(channel, "pick_pl", prefix);
                            var file = GetRandomCurrencyImage();

                            var sent = await channel.EmbedAsync(new EmbedBuilder()
                                                                .WithOkColor()
                                                                .WithDescription(toSend)
                                                                .WithImageUrl(file));

                            msgs[0] = sent;

                            PlantedFlowers.AddOrUpdate(channel.Id, msgs.ToList(), (id, old) => { old.AddRange(msgs); return(old); });
                        }
                    }
                }
                catch (Exception ex)
                {
                    LogManager.GetCurrentClassLogger().Warn(ex);
                }
            });

            return(Task.CompletedTask);
        }