- fixed remote coordinator being initialized when local one is supposed to be used

- Fixed services loading multiple times
- cleaned up service adding with scrutor
- INService moved from some interfaces to concrete implementation
This commit is contained in:
Kwoth
2021-07-02 17:11:07 +02:00
parent 9f34f8f00f
commit 873eaa290e
14 changed files with 23 additions and 41 deletions

View File

@@ -20,7 +20,6 @@ using Discord.Net;
using NadekoBot.Common.ModuleBehaviors;
using NadekoBot.Common.Configs;
using NadekoBot.Db;
using NadekoBot.Modules.Gambling.Services;
using Serilog;
namespace NadekoBot
@@ -108,17 +107,15 @@ namespace NadekoBot
.AddRedis(_creds.RedisOptions) // redis
.AddSingleton(Client) // discord socket client
.AddSingleton(_commandService)
.AddSingleton(this) // pepega
.AddSingleton(this)
.AddSingleton<IDataCache, RedisCache>()
.AddSingleton<ISeria, JsonSeria>()
.AddSingleton<IPubSub, RedisPubSub>()
.AddSingleton<IConfigSeria, YamlSeria>()
.AddBotStringsServices()
.AddConfigServices()
.AddConfigMigrators() // todo remove config migrators
.AddConfigMigrators()
.AddMemoryCache()
.AddSingleton<IShopService, ShopService>()
.AddSingleton<IBehaviourExecutor, BehaviorExecutor>()
// music
.AddMusic()
;
@@ -142,31 +139,18 @@ namespace NadekoBot
// todo no public bot attribute
svcs.Scan(scan => scan
.FromAssemblyOf<IReadyExecutor>()
.AddClasses(classes => classes.AssignableTo<IReadyExecutor>())
.AsSelf()
.AsImplementedInterfaces()
.WithSingletonLifetime()
// behaviours
.AddClasses(classes => classes.AssignableToAny(
// services
typeof(INService),
// behaviours
typeof(IEarlyBehavior),
typeof(ILateBlocker),
typeof(IInputTransformer),
typeof(ILateExecutor)))
.AsSelf()
.AsImplementedInterfaces()
.WithSingletonLifetime()
// services
.AddClasses(classes => classes.AssignableTo<INService>())
.AsImplementedInterfaces()
.AsSelf()
.AsSelfWithInterfaces()
.WithSingletonLifetime()
);
// svcs.AddSingleton<IReadyExecutor>(x => x.GetService<SelfService>());
// svcs.AddSingleton<IReadyExecutor>(x => x.GetService<CustomReactionsService>());
// svcs.AddSingleton<IReadyExecutor>(x => x.GetService<RepeaterService>());
//initialize Services
Services = svcs.BuildServiceProvider();
@@ -320,15 +304,14 @@ namespace NadekoBot
sw.Stop();
Log.Information("Shard {ShardId} connected in {Elapsed:F2}s", Client.ShardId, sw.Elapsed.TotalSeconds);
var stats = Services.GetService<IStatsService>();
var stats = Services.GetRequiredService<IStatsService>();
stats.Initialize();
var commandHandler = Services.GetService<CommandHandler>();
var CommandService = Services.GetService<CommandService>();
var commandHandler = Services.GetRequiredService<CommandHandler>();
// start handling messages received in commandhandler
await commandHandler.StartHandling().ConfigureAwait(false);
_ = await CommandService.AddModulesAsync(this.GetType().GetTypeInfo().Assembly, Services)
_ = await _commandService.AddModulesAsync(this.GetType().GetTypeInfo().Assembly, Services)
.ConfigureAwait(false);
HandleStatusChanges();

View File

@@ -1,4 +1,5 @@
using Discord;
using System;
using Discord;
using Discord.Commands;
using Discord.WebSocket;
using Microsoft.EntityFrameworkCore;

View File

@@ -18,7 +18,7 @@ using Serilog;
namespace NadekoBot.Modules.Administration.Services
{
public sealed class SelfService : ILateExecutor, IReadyExecutor
public sealed class SelfService : ILateExecutor, IReadyExecutor, INService
{
private readonly ConnectionMultiplexer _redis;
private readonly CommandHandler _cmdHandler;
@@ -54,7 +54,6 @@ namespace NadekoBot.Modules.Administration.Services
_httpFactory = factory;
_bss = bss;
Log.Information("Self service created");
var sub = _redis.GetSubscriber();
if (_client.ShardId == 0)
{

View File

@@ -77,7 +77,6 @@ namespace NadekoBot.Modules.CustomReactions.Services
_pubSub = pubSub;
_rng = new NadekoRandom();
Log.Information("Custom reaction service created");
_pubSub.Sub(_crsReloadedKey, OnCrsShouldReload);
pubSub.Sub(_gcrAddedKey, OnGcrAdded);
pubSub.Sub(_gcrDeletedkey, OnGcrDeleted);

View File

@@ -11,7 +11,7 @@ using NadekoBot.Modules.Administration;
namespace NadekoBot.Modules.Gambling.Services
{
public class ShopService : IShopService
public class ShopService : IShopService, INService
{
private readonly DbService _db;

View File

@@ -20,7 +20,7 @@ using Serilog;
namespace NadekoBot.Modules.Utility.Services
{
public sealed class RepeaterService : IReadyExecutor
public sealed class RepeaterService : IReadyExecutor, INService
{
public const int MAX_REPEATERS = 5;

View File

@@ -4,7 +4,7 @@ using System.Threading.Tasks;
namespace NadekoBot.Services
{
public interface ICurrencyService : INService
public interface ICurrencyService
{
Task AddAsync(ulong userId, string reason, long amount, bool gamble = false);
Task AddAsync(IUser user, string reason, long amount, bool sendMessage = false, bool gamble = false);

View File

@@ -4,7 +4,7 @@ using Discord;
namespace NadekoBot.Services
{
public interface ILocalization : INService
public interface ILocalization
{
CultureInfo DefaultCultureInfo { get; }
ConcurrentDictionary<ulong, CultureInfo> GuildCultureInfos { get; }

View File

@@ -2,7 +2,7 @@
namespace NadekoBot.Services
{
public interface IStatsService : INService
public interface IStatsService
{
string Author { get; }
long CommandsRan { get; }

View File

@@ -11,7 +11,7 @@ using Microsoft.Extensions.DependencyInjection;
namespace NadekoBot.Services
{
public sealed class BehaviorExecutor : IBehaviourExecutor
public sealed class BehaviorExecutor : IBehaviourExecutor, INService
{
private readonly IServiceProvider _services;
private IEnumerable<ILateExecutor> _lateExecutors;

View File

@@ -12,7 +12,7 @@ using NadekoBot.Modules.Gambling.Services;
namespace NadekoBot.Services
{
public class CurrencyService : ICurrencyService
public class CurrencyService : ICurrencyService, INService
{
private readonly DbService _db;
private readonly GamblingConfigService _gss;

View File

@@ -18,7 +18,7 @@ using Serilog;
namespace NadekoBot.Services
{
public class GoogleApiService : IGoogleApiService
public class GoogleApiService : IGoogleApiService, INService
{
private const string SearchEngineId = "018084019232060951019:hs5piey28-e";

View File

@@ -11,7 +11,7 @@ using NadekoBot.Modules.Administration;
namespace NadekoBot.Services
{
public class Localization : ILocalization
public class Localization : ILocalization, INService
{
private readonly BotConfigService _bss;
private readonly DbService _db;

View File

@@ -12,7 +12,7 @@ using Serilog;
namespace NadekoBot.Services
{
public class StatsService : IStatsService
public class StatsService : IStatsService, INService
{
private readonly DiscordSocketClient _client;
private readonly IBotCredentials _creds;