private async Task TroubleReactionHandler(IUserMessage message, ISocketMessageChannel channel, SocketReaction reaction, IUser user)
        {
            var settlmentEmbed = message.Embeds.FirstOrDefault(embed => embed?.Description?.Contains(SettlementResources.Settlement) ?? false);

            if (settlmentEmbed == null)
            {
                return;
            }

            var settlement = new Settlement(Services, channel.Id).FromEmbed(settlmentEmbed);

            settlement.RevealTrouble();

            await message.ModifyAsync(msg => msg.Embed = settlement.GetEmbedBuilder().Build()).ConfigureAwait(false);

            await message.RemoveReactionAsync(reaction.Emote, message.Author).ConfigureAwait(false);

            await message.RemoveReactionAsync(reaction.Emote, user).ConfigureAwait(false);

            return;
        }
Exemple #2
0
        public static Settlement GenerateSettlement(ServiceProvider serviceProvider, SpaceRegion spaceRegion, string SettlementName = "")
        {
            var oracleService = serviceProvider.GetRequiredService <OracleService>();

            if (SettlementName == string.Empty)
            {
                SettlementName = oracleService.RandomRow("Settlement Name").Description;
            }

            var s = new Settlement(serviceProvider);

            s.Seed   = $"{SettlementName}{spaceRegion}".GetDeterministicHashCode();
            s.Region = spaceRegion;
            s.Name   = SettlementName;

            Random random = new Random(s.Seed);

            s.Authority = oracleService.RandomRow("Settlement Authority", GameName.Starforged, random).Description;

            s.FirstLooks = oracleService.OracleList.Single(o => o.Name == "Settlement First Look" && o.Game == GameName.Starforged)
                           .Oracles.Select(o => o.GetOracleResult(serviceProvider, GameName.Starforged, random)).ToList();
            s.FirstLooks.Shuffle(random);
            s.FirstLooksToReveal = random.Next(1, 4);

            s.InitialContact = oracleService.RandomRow("Settlement Initial Contact", GameName.Starforged, random).Description;

            s.Location = oracleService.RandomRow("Settlement Location", GameName.Starforged, random).Description;

            s.Population = oracleService.RandomRow($"Settlement Population {s.Region}", GameName.Starforged, random).Description;

            s.Projects = oracleService.OracleList.Single(o => o.Name == "Settlement Projects" && o.Game == GameName.Starforged)
                         .Oracles.Select(o => o.GetOracleResult(serviceProvider, GameName.Starforged, random)).ToList();
            s.Projects.Shuffle(random);

            var trouble = oracleService.RandomRow($"Settlement Trouble", GameName.Starforged, random) as StandardOracle;

            s.SettlementTrouble = trouble.GetOracleResult(serviceProvider, GameName.Starforged, random);

            return(s);
        }