This commit is contained in:
Kwoth
2023-03-10 01:14:30 +01:00
8 changed files with 48 additions and 52 deletions

View File

@@ -7,9 +7,6 @@ using NadekoBot.Db;
using NadekoBot.Modules.Utility;
using NadekoBot.Services.Database.Models;
using Ninject;
using Ninject.Extensions.Conventions;
using Ninject.Extensions.Conventions.Syntax;
using Ninject.Infrastructure.Language;
using Ninject.Planning;
using System.Collections.Immutable;
using System.Diagnostics;
@@ -140,24 +137,7 @@ public sealed class Bot
kernel.Bind<ICoordinator, IReadyExecutor>().To<RemoteGrpcCoordinator>().InSingletonScope();
}
kernel.Bind(scan =>
{
scan.FromThisAssembly()
.SelectAllClasses()
.Where(c => (c.IsAssignableTo(typeof(INService))
|| c.IsAssignableTo(typeof(IExecOnMessage))
|| c.IsAssignableTo(typeof(IInputTransformer))
|| c.IsAssignableTo(typeof(IExecPreCommand))
|| c.IsAssignableTo(typeof(IExecPostCommand))
|| c.IsAssignableTo(typeof(IExecNoCommand)))
&& !c.HasAttribute<DontAddToIocContainerAttribute>()
#if GLOBAL_NADEK
&& !c.HasAttribute<NoPublicBotAttribute>()
#endif
)
.BindToSelfWithInterfaces()
.Configure(c => c.InSingletonScope());
});
kernel.AddLifetimeServices();
kernel.Bind<IServiceProvider>().ToConstant(kernel).InSingletonScope();
@@ -339,6 +319,7 @@ public sealed class Bot
{
try
{
Console.WriteLine(toExec.GetType().FullName);
await toExec.OnReadyAsync();
}
catch (Exception ex)

View File

@@ -17,7 +17,8 @@ public sealed record MedusaStats(string Name,
string? Description,
IReadOnlyCollection<SnekStats> Sneks);
public sealed record SnekStats(string Name,
public sealed record SnekStats(string Name,
string? Prefix,
IReadOnlyCollection<SnekCommandStats> Commands);
public sealed record SnekCommandStats(string Name);

View File

@@ -79,7 +79,7 @@ public sealed class MedusaLoaderService : IMedusaLoaderService, IReadyExecutor,
commands.Add(new SnekCommandStats(command.Aliases.First()));
}
sneks.Add(new SnekStats(snekInfos.Name, commands));
sneks.Add(new SnekStats(snekInfos.Name, snekInfos.Instance.Prefix, commands));
}
toReturn.Add(new MedusaStats(name, resolvedData.Strings.GetDescription(culture), sneks));

View File

@@ -150,9 +150,10 @@ public partial class Medusa : NadekoModule<IMedusaLoaderService>
var cmdCount = found.Sneks.Sum(x => x.Commands.Count);
var cmdNames = found.Sneks
.SelectMany(x => x.Commands)
.Select(x => Format.Code(x.Name))
.Join(" | ");
.SelectMany(x => Format.Code(string.IsNullOrWhiteSpace(x.Prefix)
? x.Name
: $"{x.Prefix} {x.Name}"))
.Join("\n");
var eb = _eb.Create(ctx)
.WithOkColor()

View File

@@ -60,6 +60,7 @@ public class CommandHandler : INService, IReadyExecutor
public async Task OnReadyAsync()
{
Log.Information("Command handler runnning on ready");
// clear users on short cooldown every GLOBAL_COMMANDS_COOLDOWN miliseconds
using var timer = new PeriodicTimer(TimeSpan.FromMilliseconds(GLOBAL_COMMANDS_COOLDOWN));
while (await timer.WaitForNextTickAsync())

View File

@@ -9,6 +9,8 @@ using Ninject.Extensions.Conventions.Syntax;
using StackExchange.Redis;
using System.Net;
using System.Reflection;
using NadekoBot.Common.ModuleBehaviors;
using Ninject.Infrastructure.Language;
namespace NadekoBot.Extensions;
@@ -125,4 +127,25 @@ public static class ServiceCollectionExtensions
public static IConfigureSyntax BindToSelfWithInterfaces(this IJoinExcludeIncludeBindSyntax matcher)
=> matcher.BindSelection((type, types) => types.Append(type));
public static IKernel AddLifetimeServices(this IKernel kernel)
{
Assembly.GetExecutingAssembly()
.ExportedTypes
.Where(x => x.IsPublic && x.IsClass && !x.IsAbstract)
.Where(c => (c.IsAssignableTo(typeof(INService))
|| c.IsAssignableTo(typeof(IExecOnMessage))
|| c.IsAssignableTo(typeof(IInputTransformer))
|| c.IsAssignableTo(typeof(IExecPreCommand))
|| c.IsAssignableTo(typeof(IExecPostCommand))
|| c.IsAssignableTo(typeof(IExecNoCommand)))
&& !c.HasAttribute<DontAddToIocContainerAttribute>()
#if GLOBAL_NADEKO
&& !c.HasAttribute<NoPublicBotAttribute>()
#endif
);
return kernel;
}
}