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