mirror of
				https://gitlab.com/Kwoth/nadekobot.git
				synced 2025-11-04 00:34:26 -05:00 
			
		
		
		
	Merge branch 'v5' of https://gitlab.com/Kwoth/nadekobot into v5
This commit is contained in:
		@@ -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)
 | 
			
		||||
 
 | 
			
		||||
@@ -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);
 | 
			
		||||
@@ -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));
 | 
			
		||||
 
 | 
			
		||||
@@ -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()
 | 
			
		||||
 
 | 
			
		||||
@@ -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())
 | 
			
		||||
 
 | 
			
		||||
@@ -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;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user