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); }); }
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); }); }
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); }); }
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); }); }
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); }
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 { } }
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); }
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); }