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