public async Task Plant(int amount = 1)
            {
                if (amount < 1)
                {
                    return;
                }

                var removed = await _cs.RemoveAsync((IGuildUser)Context.User, $"Planted a {_bc.BotConfig.CurrencyName}", amount, false).ConfigureAwait(false);

                if (!removed)
                {
                    await ReplyErrorLocalized("not_enough", _bc.BotConfig.CurrencySign).ConfigureAwait(false);

                    return;
                }

                IUserMessage msg = null;

                try
                {
                    var imgData = _service.GetRandomCurrencyImage();

                    var msgToSend = GetText("planted",
                                            Format.Bold(Context.User.ToString()),
                                            amount + _bc.BotConfig.CurrencySign,
                                            Prefix);

                    if (amount > 1)
                    {
                        msgToSend += " " + GetText("pick_pl", Prefix);
                    }
                    else
                    {
                        msgToSend += " " + GetText("pick_sn", Prefix);
                    }

                    using (var toSend = imgData.ToStream())
                    {
                        msg = await Context.Channel.SendFileAsync(toSend, "plant.gif", msgToSend, options : new RequestOptions()
                        {
                            RetryMode = RetryMode.AlwaysRetry
                        }).ConfigureAwait(false);
                    }
                }
                catch (Exception ex)
                {
                    _log.Warn(ex);
                }

                var msgs = new IUserMessage[amount];

                msgs[0] = msg;

                _service.PlantedFlowers.AddOrUpdate(Context.Channel.Id, msgs.ToList(), (id, old) =>
                {
                    old.AddRange(msgs);
                    return(old);
                });
            }
示例#2
0
            public async Task Plant(int amount = 1)
            {
                if (amount < 1)
                {
                    return;
                }

                var removed = await _cs.RemoveAsync((IGuildUser)Context.User, $"Planted a {Bc.BotConfig.CurrencyName}", amount, false).ConfigureAwait(false);

                if (!removed)
                {
                    await ReplyErrorLocalized("not_enough", Bc.BotConfig.CurrencySign).ConfigureAwait(false);

                    return;
                }

                IUserMessage msg = null;

                try
                {
                    var imgUrl = _service.GetRandomCurrencyImage();

                    var msgToSend = GetText("planted",
                                            Format.Bold(Context.User.ToString()),
                                            amount + Bc.BotConfig.CurrencySign,
                                            Prefix);

                    if (amount > 1)
                    {
                        msgToSend += " " + GetText("pick_pl", Prefix);
                    }
                    else
                    {
                        msgToSend += " " + GetText("pick_sn", Prefix);
                    }

                    msg = await Context.Channel.EmbedAsync(new EmbedBuilder()
                                                           .WithOkColor()
                                                           .WithDescription(msgToSend)
                                                           .WithImageUrl(imgUrl.ToString())).ConfigureAwait(false);
                }
                catch (Exception ex)
                {
                    _log.Warn(ex);
                }

                var msgs = new IUserMessage[amount];

                msgs[0] = msg;

                _service.PlantedFlowers.AddOrUpdate(Context.Channel.Id, msgs.ToList(), (id, old) =>
                {
                    old.AddRange(msgs);
                    return(old);
                });
            }
示例#3
0
            public async Task Plant(int amount = 1)
            {
                if (amount < 1)
                {
                    return;
                }

                var removed = await CurrencyHandler.RemoveCurrencyAsync((IGuildUser)Context.User, $"Planted a {NadekoBot.BotConfig.CurrencyName}", amount, false).ConfigureAwait(false);

                if (!removed)
                {
                    await ReplyErrorLocalized("not_enough", NadekoBot.BotConfig.CurrencySign).ConfigureAwait(false);

                    return;
                }

                var imgData = GetRandomCurrencyImage();

                //todo upload all currency images to transfer.sh and use that one as cdn
                //and then

                var msgToSend = GetText("planted",
                                        Format.Bold(Context.User.ToString()),
                                        amount + NadekoBot.BotConfig.CurrencySign,
                                        Prefix);

                if (amount > 1)
                {
                    msgToSend += " " + GetText("pick_pl", Prefix);
                }
                else
                {
                    msgToSend += " " + GetText("pick_sn", Prefix);
                }

                IUserMessage msg;

                using (var toSend = imgData.Value.ToStream())
                {
                    msg = await Context.Channel.SendFileAsync(toSend, imgData.Key, msgToSend).ConfigureAwait(false);
                }

                var msgs = new IUserMessage[amount];

                msgs[0] = msg;

                plantedFlowers.AddOrUpdate(Context.Channel.Id, msgs.ToList(), (id, old) =>
                {
                    old.AddRange(msgs);
                    return(old);
                });
            }
示例#4
0
            public async Task Plant(int amount = 1)
            {
                if (amount < 1)
                {
                    return;
                }

                var removed = await _cs.RemoveAsync((IGuildUser)Context.User, $"Planted a {_bc.BotConfig.CurrencyName}", amount, false).ConfigureAwait(false);

                if (!removed)
                {
                    await ReplyErrorLocalized("not_enough", _bc.BotConfig.CurrencySign).ConfigureAwait(false);

                    return;
                }

                var imgData = _games.GetRandomCurrencyImage();

                var msgToSend = GetText("planted",
                                        Format.Bold(Context.User.ToString()),
                                        amount + _bc.BotConfig.CurrencySign,
                                        Prefix);

                if (amount > 1)
                {
                    msgToSend += " " + GetText("pick_pl", Prefix);
                }
                else
                {
                    msgToSend += " " + GetText("pick_sn", Prefix);
                }

                IUserMessage msg;

                using (var toSend = imgData.Data.ToStream())
                {
                    msg = await Context.Channel.SendFileAsync(toSend, imgData.Name, msgToSend).ConfigureAwait(false);
                }

                var msgs = new IUserMessage[amount];

                msgs[0] = msg;

                _games.PlantedFlowers.AddOrUpdate(Context.Channel.Id, msgs.ToList(), (id, old) =>
                {
                    old.AddRange(msgs);
                    return(old);
                });
            }
示例#5
0
            public async Task Plant(int amount = 1)
            {
                if (amount < 1)
                {
                    return;
                }

                var removed = await CurrencyHandler.RemoveCurrencyAsync((IGuildUser)Context.User, $"Planted a {NadekoBot.BotConfig.CurrencyName}", amount, false).ConfigureAwait(false);

                if (!removed)
                {
                    await Context.Channel.SendErrorAsync($"You don't have any {NadekoBot.BotConfig.CurrencyPluralName}.").ConfigureAwait(false);

                    return;
                }

                var          file = GetRandomCurrencyImagePath();
                IUserMessage msg;
                var          vowelFirst = new[] { 'a', 'e', 'i', 'o', 'u' }.Contains(NadekoBot.BotConfig.CurrencyName[0]);

                var msgToSend = $"Oh how Nice! **{Context.User.Username}** planted {(amount == 1 ? (vowelFirst ? "an" : "a") : amount.ToString())} {(amount > 1 ? NadekoBot.BotConfig.CurrencyPluralName : NadekoBot.BotConfig.CurrencyName)}. Pick it using {NadekoBot.ModulePrefixes[typeof(Games).Name]}pick";

                if (file == null)
                {
                    msg = await Context.Channel.SendConfirmAsync(NadekoBot.BotConfig.CurrencySign).ConfigureAwait(false);
                }
                else
                {
                    msg = await Context.Channel.SendFileAsync(File.Open(file, FileMode.OpenOrCreate), new FileInfo(file).Name, msgToSend).ConfigureAwait(false);
                }

                var msgs = new IUserMessage[amount];

                msgs[0] = msg;

                plantedFlowers.AddOrUpdate(Context.Channel.Id, msgs.ToList(), (id, old) =>
                {
                    old.AddRange(msgs);
                    return(old);
                });
            }
            public async Task Plant(int amount = 1)
            {
                if (amount < 1)
                {
                    return;
                }

                var removed = await CurrencyHandler.RemoveCurrencyAsync((IGuildUser)Context.User, $"Planted a {NadekoBot.BotConfig.CurrencyName}", amount, false).ConfigureAwait(false);

                if (!removed)
                {
                    await Context.Channel.SendErrorAsync($"You don't have enough {NadekoBot.BotConfig.CurrencyPluralName}.").ConfigureAwait(false);

                    return;
                }

                var imgData = GetRandomCurrencyImage();
                var vowelFirst = new[] { 'a', 'e', 'i', 'o', 'u' }.Contains(NadekoBot.BotConfig.CurrencyName[0]);

                var msgToSend = $"Oh how Nice! **{Context.User.Username}** planted {(amount == 1 ? (vowelFirst ? "an" : "a") : amount.ToString())} {(amount > 1 ? NadekoBot.BotConfig.CurrencyPluralName : NadekoBot.BotConfig.CurrencyName)}. Pick it using {Prefix}pick";

                IUserMessage msg;

                using (var toSend = imgData.Value.ToStream())
                {
                    msg = await Context.Channel.SendFileAsync(toSend, imgData.Key, msgToSend).ConfigureAwait(false);
                }

                var msgs = new IUserMessage[amount];

                msgs[0] = msg;

                plantedFlowers.AddOrUpdate(Context.Channel.Id, msgs.ToList(), (id, old) =>
                {
                    old.AddRange(msgs);
                    return(old);
                });
            }
        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 NadekoRandom();

                    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 NadekoRandom().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();
                            using (var fileStream = file.Data.ToStream())
                            {
                                var sent = await channel.SendFileAsync(
                                    fileStream,
                                    file.Name,
                                    toSend).ConfigureAwait(false);

                                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);
        }
示例#8
0
            private static async Task PotentialFlowerGeneration(SocketMessage imsg)
            {
                try
                {
                    var msg = imsg as SocketUserMessage;
                    if (msg == null || msg.IsAuthor() || msg.Author.IsBot)
                    {
                        return;
                    }

                    var channel = imsg.Channel as ITextChannel;
                    if (channel == null)
                    {
                        return;
                    }

                    if (!generationChannels.Contains(channel.Id))
                    {
                        return;
                    }

                    var lastGeneration = lastGenerations.GetOrAdd(channel.Id, DateTime.MinValue);
                    var rng            = new NadekoRandom();

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

                    var num = rng.Next(1, 101) + NadekoBot.BotConfig.CurrencyGenerationChance * 100;

                    if (num > 100)
                    {
                        lastGenerations.AddOrUpdate(channel.Id, DateTime.Now, (id, old) => DateTime.Now);

                        var dropAmount = NadekoBot.BotConfig.CurrencyDropAmount;

                        if (dropAmount > 0)
                        {
                            var msgs = new IUserMessage[dropAmount];

                            string firstPart;
                            if (dropAmount == 1)
                            {
                                firstPart = $"A random { NadekoBot.BotConfig.CurrencyName } appeared!";
                            }
                            else
                            {
                                firstPart = $"{dropAmount} random { NadekoBot.BotConfig.CurrencyPluralName } appeared!";
                            }
                            var file = GetRandomCurrencyImagePath();
                            var sent = await channel.SendFileAsync(
                                File.Open(file, FileMode.OpenOrCreate),
                                new FileInfo(file).Name,
                                $"❗ {firstPart} Pick it up by typing `{NadekoBot.ModulePrefixes[typeof(Games).Name]}pick`")
                                       .ConfigureAwait(false);

                            msgs[0] = sent;

                            plantedFlowers.AddOrUpdate(channel.Id, msgs.ToList(), (id, old) => { old.AddRange(msgs); return(old); });
                        }
                    }
                }
                catch { }
            }
示例#9
0
            private static Task PotentialFlowerGeneration(SocketMessage imsg)
            {
                var msg = imsg as SocketUserMessage;

                if (msg == null || msg.IsAuthor() || 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 NadekoRandom();

                        //todo i'm stupid :rofl: wtg kwoth. real async programming :100: :ok_hand: :100: :100: :thumbsup:
                        if (DateTime.Now - TimeSpan.FromSeconds(NadekoBot.BotConfig.CurrencyGenerationCooldown) < lastGeneration) //recently generated in this channel, don't generate again
                        {
                            return;
                        }

                        var num = rng.Next(1, 101) + NadekoBot.BotConfig.CurrencyGenerationChance * 100;

                        if (num > 100)
                        {
                            lastGenerations.AddOrUpdate(channel.Id, DateTime.Now, (id, old) => DateTime.Now);

                            var dropAmount = NadekoBot.BotConfig.CurrencyDropAmount;

                            if (dropAmount > 0)
                            {
                                var msgs = new IUserMessage[dropAmount];

                                string firstPart;
                                if (dropAmount == 1)
                                {
                                    firstPart = $"A random { NadekoBot.BotConfig.CurrencyName } appeared!";
                                }
                                else
                                {
                                    firstPart = $"{dropAmount} random { NadekoBot.BotConfig.CurrencyPluralName } appeared!";
                                }
                                var file = GetRandomCurrencyImage();
                                using (var fileStream = file.Value.ToStream())
                                {
                                    var sent = await channel.SendFileAsync(
                                        fileStream,
                                        file.Key,
                                        $"❗ {firstPart} Pick it up by typing `{NadekoBot.ModulePrefixes[typeof(Games).Name]}pick`")
                                               .ConfigureAwait(false);

                                    msgs[0] = sent;
                                }

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

                return(Task.CompletedTask);
            }
示例#10
0
            private static Task PotentialFlowerGeneration(SocketMessage imsg)
            {
                var msg = imsg as SocketUserMessage;

                if (msg == null || msg.IsAuthor() || 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 NadekoRandom();

                        //todo i'm stupid :rofl: wtg kwoth. real async programming :100: :ok_hand: :100: :100: :thumbsup:
                        if (DateTime.Now - TimeSpan.FromSeconds(NadekoBot.BotConfig.CurrencyGenerationCooldown) < lastGeneration) //recently generated in this channel, don't generate again
                        {
                            return;
                        }

                        var num = rng.Next(1, 101) + NadekoBot.BotConfig.CurrencyGenerationChance * 100;

                        if (num > 100)
                        {
                            lastGenerations.AddOrUpdate(channel.Id, DateTime.Now, (id, old) => DateTime.Now);

                            var dropAmount = NadekoBot.BotConfig.CurrencyDropAmount;

                            if (dropAmount > 0)
                            {
                                var msgs   = new IUserMessage[dropAmount];
                                var prefix = NadekoBot.ModulePrefixes[typeof(Games).Name];
                                var toSend = dropAmount == 1
                                    ? GetLocalText(channel, "curgen_sn", NadekoBot.BotConfig.CurrencySign)
                                             + GetLocalText(channel, "pick_sn", prefix)
                                    : GetLocalText(channel, "curgen_pl", dropAmount, NadekoBot.BotConfig.CurrencySign)
                                             + GetLocalText(channel, "pick_pl", prefix);
                                var file = GetRandomCurrencyImage();
                                using (var fileStream = file.Value.ToStream())
                                {
                                    var sent = await channel.SendFileAsync(
                                        fileStream,
                                        file.Key,
                                        toSend).ConfigureAwait(false);

                                    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);
            }
        private Task PotentialFlowerGeneration(SocketMessage imsg)
        {
            if (!(imsg is SocketUserMessage msg) || msg.Author.IsBot)
            {
                return(Task.CompletedTask);
            }

            if (!(imsg.Channel is ITextChannel channel))
            {
                return(Task.CompletedTask);
            }

            using var uow = _db.UnitOfWork;

            if (!uow.GuildConfigs.For(channel.GuildId, set => set.Include(x => x.GenerateCurrencyChannelIds)).GenerateCurrencyChannelIds.Any(gcc => gcc.ChannelId == channel.Id))
            {
                return(Task.CompletedTask);
            }

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

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

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

                        if (dropAmountMax != null && dropAmountMax > dropAmount)
                        {
                            dropAmount = new NadekoRandom().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", _bcp.BotConfig.CurrencySign)} {GetText(channel, "pick_sn", prefix)}"
                                                                : $"{GetText(channel, "curgen_pl", dropAmount, _bcp.BotConfig.CurrencySign)} {GetText(channel, "pick_pl", prefix)}";
                            var(Name, Data) = GetRandomCurrencyImage();
                            using (var fileStream = Data.ToStream()) {
                                var sent = await channel.SendFileAsync(fileStream, Name, toSend).ConfigureAwait(false);
                                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);
        }