// ReSharper restore PrivateFieldCanBeConvertedToLocalVariable /// <summary> /// Initializes a new instance of the <see cref="AmbassadorClient"/> class. /// </summary> /// <param name="content">The content service.</param> public AmbassadorClient([NotNull] ContentService content) { this.Client = Type.GetType("Mono.Runtime") is null ? new DiscordSocketClient() : new DiscordSocketClient(new DiscordSocketConfig { WebSocketProvider = () => new WebSocketSharpProvider() }); this.Client.Log += OnDiscordLogEvent; this.Commands = new CommandService(); this.Commands.Log += OnDiscordLogEvent; this.DiscordIntegration = new DiscordService(); this.Content = content; this.Commands = new CommandService(); this.OwnedEntities = new OwnedEntityService(); this.Roleplays = new RoleplayService(this.Commands, this.OwnedEntities); this.Transformation = new TransformationService(this.Content); this.Characters = new CharacterService(this.Commands, this.OwnedEntities, this.Content, this.Transformation); this.Characters.DiscoverPronounProviders(); this.Feedback = new UserFeedbackService(); this.Dossiers = new DossierService(this.Content); this.Interactive = new InteractiveService(this.Client); this.Lua = new LuaService(this.Content); this.Kinks = new KinkService(this.Feedback); this.Permissions = new PermissionService(); this.Privacy = new PrivacyService(); this.Services = new ServiceCollection() .AddSingleton(this.Client) .AddSingleton(this.DiscordIntegration) .AddSingleton(this.Content) .AddSingleton(this.Commands) .AddSingleton(this.Roleplays) .AddSingleton(this.Characters) .AddSingleton(this.Feedback) .AddSingleton(this.Dossiers) .AddSingleton(this.Interactive) .AddSingleton(this.Transformation) .AddSingleton(this.Lua) .AddSingleton(this.Kinks) .AddSingleton(this.Permissions) .AddSingleton(this.Privacy) .AddDbContextPool <GlobalInfoContext>(builder => GlobalInfoContext.ConfigureOptions(builder)) .BuildServiceProvider(); this.Transformation = this.Transformation .WithDescriptionBuilder ( ActivatorUtilities.CreateInstance <TransformationDescriptionBuilder>(this.Services) ); this.Client.MessageReceived += OnMessageReceived; this.Client.MessageUpdated += OnMessageUpdated; }