From 1efda23c3dbae1dce801ec8fcd924f9b50b0166c Mon Sep 17 00:00:00 2001 From: Kwoth Date: Sat, 11 Feb 2023 22:07:29 +0100 Subject: [PATCH 1/2] Some reorganization, still completely broken --- src/NadekoBot/Bot.cs | 30 ++----------------- .../Common/Medusa/IMedusaLoaderService.cs | 3 +- .../Common/Medusa/MedusaLoaderService.cs | 2 +- src/NadekoBot/Modules/Medusae/Medusa.cs | 7 +++-- .../Searches/_Common/Config/SearchesConfig.cs | 2 +- src/NadekoBot/Services/CommandHandler.cs | 3 ++ .../ServiceCollectionExtensions.cs | 29 ++++++++++++++++++ 7 files changed, 42 insertions(+), 34 deletions(-) diff --git a/src/NadekoBot/Bot.cs b/src/NadekoBot/Bot.cs index 4e1d07a15..499216b4a 100644 --- a/src/NadekoBot/Bot.cs +++ b/src/NadekoBot/Bot.cs @@ -132,37 +132,10 @@ public sealed class Bot kernel.Bind().To().InSingletonScope(); } - kernel.Bind(scan => - { - var classes = 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() -#if GLOBAL_NADEKO - && !c.HasAttribute() -#endif - ); - classes - .BindAllInterfaces() - .Configure(c => c.InSingletonScope()); - - classes.BindToSelf() - .Configure(c => c.InSingletonScope()); - }); + kernel.AddLifetimeServices(); kernel.Bind().ToConstant(kernel).InSingletonScope(); - var services = kernel.GetServices(typeof(INService)); - foreach (var s in services) - { - Console.WriteLine(s.GetType().FullName); - } - //initialize Services Services = kernel; Services.GetRequiredService().Initialize(); @@ -348,6 +321,7 @@ public sealed class Bot { try { + Console.WriteLine(toExec.GetType().FullName); await toExec.OnReadyAsync(); } catch (Exception ex) diff --git a/src/NadekoBot/Common/Medusa/IMedusaLoaderService.cs b/src/NadekoBot/Common/Medusa/IMedusaLoaderService.cs index 9b60c418b..06812a8e1 100644 --- a/src/NadekoBot/Common/Medusa/IMedusaLoaderService.cs +++ b/src/NadekoBot/Common/Medusa/IMedusaLoaderService.cs @@ -17,7 +17,8 @@ public sealed record MedusaStats(string Name, string? Description, IReadOnlyCollection Sneks); -public sealed record SnekStats(string Name, +public sealed record SnekStats(string Name, + string? Prefix, IReadOnlyCollection Commands); public sealed record SnekCommandStats(string Name); \ No newline at end of file diff --git a/src/NadekoBot/Common/Medusa/MedusaLoaderService.cs b/src/NadekoBot/Common/Medusa/MedusaLoaderService.cs index 2e25622ad..8f6c30f2f 100644 --- a/src/NadekoBot/Common/Medusa/MedusaLoaderService.cs +++ b/src/NadekoBot/Common/Medusa/MedusaLoaderService.cs @@ -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)); diff --git a/src/NadekoBot/Modules/Medusae/Medusa.cs b/src/NadekoBot/Modules/Medusae/Medusa.cs index 3d28c028a..13ba3d2f1 100644 --- a/src/NadekoBot/Modules/Medusae/Medusa.cs +++ b/src/NadekoBot/Modules/Medusae/Medusa.cs @@ -150,9 +150,10 @@ public partial class Medusa : NadekoModule 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() diff --git a/src/NadekoBot/Modules/Searches/_Common/Config/SearchesConfig.cs b/src/NadekoBot/Modules/Searches/_Common/Config/SearchesConfig.cs index a9b7165ff..b584276b3 100644 --- a/src/NadekoBot/Modules/Searches/_Common/Config/SearchesConfig.cs +++ b/src/NadekoBot/Modules/Searches/_Common/Config/SearchesConfig.cs @@ -36,7 +36,7 @@ public partial class SearchesConfig : ICloneable - `invidious` - recommended advanced, uses invidious api. Requires at least one invidious instance specified in the `invidiousInstances` property """)] - public YoutubeSearcher YtProvider { get; set; } = YoutubeSearcher.Ytdl; + public YoutubeSearcher YtProvider { get; set; } = YoutubeSearcher.Ytdlp; [Comment(""" Set the searx instance urls in case you want to use 'searx' for either img or web search. diff --git a/src/NadekoBot/Services/CommandHandler.cs b/src/NadekoBot/Services/CommandHandler.cs index f7ac2a3d0..02efb0914 100644 --- a/src/NadekoBot/Services/CommandHandler.cs +++ b/src/NadekoBot/Services/CommandHandler.cs @@ -55,10 +55,13 @@ public class CommandHandler : INService, IReadyExecutor _prefixes = bot.AllGuildConfigs.Where(x => x.Prefix is not null) .ToDictionary(x => x.GuildId, x => x.Prefix) .ToConcurrent(); + + Console.WriteLine("Command handler created"); } 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()) diff --git a/src/NadekoBot/_Extensions/ServiceCollectionExtensions.cs b/src/NadekoBot/_Extensions/ServiceCollectionExtensions.cs index 034911e71..3b3a00377 100644 --- a/src/NadekoBot/_Extensions/ServiceCollectionExtensions.cs +++ b/src/NadekoBot/_Extensions/ServiceCollectionExtensions.cs @@ -8,6 +8,8 @@ using Ninject.Extensions.Conventions; using StackExchange.Redis; using System.Net; using System.Reflection; +using NadekoBot.Common.ModuleBehaviors; +using Ninject.Infrastructure.Language; namespace NadekoBot.Extensions; @@ -125,4 +127,31 @@ public static class ServiceCollectionExtensions return kernel; } + + 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() +#if GLOBAL_NADEKO + && !c.HasAttribute() +#endif + ); + + /* + classes.BindToSelf() + .Configure(c => c.InSingletonScope()); + */ + }); + + return kernel; + } } \ No newline at end of file From 3ab44605974e0b7e11fbbf25e6d9a2ccad4673b4 Mon Sep 17 00:00:00 2001 From: Hokuto Chen Date: Mon, 20 Feb 2023 16:53:38 +0000 Subject: [PATCH 2/2] Updated Docs --- docs/guides/linux-guide.md | 13 ++++--------- docs/guides/windows-guide.md | 28 +++++++++++----------------- 2 files changed, 15 insertions(+), 26 deletions(-) diff --git a/docs/guides/linux-guide.md b/docs/guides/linux-guide.md index 8df045db8..551dca16d 100644 --- a/docs/guides/linux-guide.md +++ b/docs/guides/linux-guide.md @@ -13,19 +13,14 @@ w# Setting up NadekoBot on Linux #### Operating System Compatibility -It is recommended that you use **Ubuntu 20.04**, as there have been nearly no problems with it. Also, **32-bit systems are incompatible**. - - -### Ubuntu 22.04 is ruled as incompatible so double check which ubuntu version you are using. - ##### Compatible operating systems: -- Ubuntu: 16.04, 18.04, 20.04, 21.04, 21.10 -- Mint: 19, 20 +- Ubuntu: 18.04, 20.04, 22.04, 22.10 +- Mint: 19, 20, 21 - Debian: 10, 11 - CentOS: 7 -- openSUSE -- Fedora: 33, 34, 35 +- openSUSE 15 +- ~~Fedora: 33, 34, 35~~ (Fedora is Pending Support) ## Linux From Source diff --git a/docs/guides/windows-guide.md b/docs/guides/windows-guide.md index 7392a1602..00cf52222 100644 --- a/docs/guides/windows-guide.md +++ b/docs/guides/windows-guide.md @@ -10,11 +10,9 @@ *Note: If you want to make changes to Nadeko's source code, please follow the [From Source](#windows-from-source) guide instead.* -*If you have Windows 7 or a 32-bit system, please refer to the [From Source](#windows-from-source)) guide.* - #### Prerequisites -- Windows 8 or later (64-bit) +- Windows 10 or later (64-bit) - [Create a Discord Bot application and invite the bot to your server](../creds-guide.md) **Optional** @@ -31,10 +29,8 @@ ![Create a new bot](https://i.imgur.com/JxtRk9e.png "Create a new bot") - Click on **`DOWNLOAD`** at the lower right ![Bot Setup](https://i.imgur.com/HqAl36p.png "Bot Setup") -- Click on **`Install`** next to **`Redis`**. -- **(Note: Redis is optional unless you are are using the bot on 2000+ servers)** -- Note: If Redis fails to install, install Redis manually here: [Redis Installer](https://github.com/MicrosoftArchive/redis/releases/tag/win-3.0.504) Download and run the **`.msi`** file. -- If you will use the music module, click on **`Install`** next to **`FFMPEG`** and **`Youtube-DL`**. +- **Note: Redis is optional. install Redis manually here: [Redis] Download and run the **`.msi`** file.** +- If you will use the music module, click on **`Install`** next to **`FFMPEG`** and **`Youtube-DLP`**. - If any dependencies fail to install, you can temporarily disable your Windows Defender/AV until you install them. If you don't want to, then read [the last section of this guide](#Manual-Prerequisite-Installation). - When installation is finished, click on **`CREDS`** to the left of **`RUN`** at the lower right. - Follow the guide on how to [Set up the creds.yml](../../creds-guide) file. @@ -60,9 +56,9 @@ You can still install them manually: -- [Redis Installer](https://github.com/MicrosoftArchive/redis/releases/tag/win-3.0.504) - Download and run the **`.msi`** file +- [Redis] (OPTIONAL) - Download and run the **`.msi`** file - [ffmpeg-32bit] | [ffmpeg-64bit] - Download the **appropriate version** for your system (32 bit if you're running a 32 bit OS, or 64 if you're running a 64bit OS). Unzip it, and move `ffmpeg.exe` to a path that's in your PATH environment variable. If you don't know what that is, then just move the `ffmpeg.exe` file to NadekoBot/system -- [youtube-dl] - Click to download the file. Then put `youtube-dl.exe` in a path that's in your PATH environment variable. If you don't know what that is, then just move the `youtube-dl.exe` file to NadekoBot/system +- [youtube-dlp] - Click to download the `yt-dlp.exe` file then put `yt-dlp.exe` in a path that's in your PATH environment variable. If you don't know what that is, then just move the `yt-dlp.exe` file to NadekoBot/system ## **⚠ IF YOU ARE FOLLOWING THE GUIDE ABOVE, IGNORE THIS SECTION ⚠** @@ -71,15 +67,15 @@ You can still install them manually: ##### Prerequisites **Install these before proceeding or your bot will not work!** -- [.net 6](https://dotnet.microsoft.com/download/dotnet/6.0) - needed to compile and run the bot +- [.net 7](https://dotnet.microsoft.com/en-us/download) - needed to compile and run the bot - [git](https://git-scm.com/downloads) - needed to clone the repository (you can also download the zip manually and extract it, but this guide assumes you're using git) -- [redis](https://github.com/MicrosoftArchive/redis/releases/download/win-3.0.504/Redis-x64-3.0.504.msi) - to cache things needed by some features and persist through restarts +- [Redis] (OPTIONAL)- to cache things needed by some features and persist through restarts ##### Installation Instructions Open PowerShell (press windows button on your keyboard and type powershell, it should show up; alternatively, right click the start menu and select Windows PowerShell), and navigate to the location where you want to install the bot (for example `cd ~/Desktop/`) -1. `git clone https://gitlab.com/kwoth/nadekobot -b v4 --depth 1` +1. `git clone https://gitlab.com/kwoth/nadekobot -b v5 --depth 1` 2. `cd nadekobot` 3. `dotnet publish -c Release -o output/ src/NadekoBot/` 4. `cd output` @@ -119,16 +115,14 @@ Open PowerShell as described above and run the following commands: 🎉 Enjoy #### Music prerequisites -In order to use music commands, you need ffmpeg and youtube-dl installed. +In order to use music commands, you need ffmpeg and yt-dlp installed. - [ffmpeg-32bit] | [ffmpeg-64bit] - Download the **appropriate version** for your system (32 bit if you're running a 32 bit OS, or 64 if you're running a 64bit OS). Unzip it, and move `ffmpeg.exe` to a path that's in your PATH environment variable. If you don't know what that is, just move the `ffmpeg.exe` file to `NadekoBot/output`. -- [youtube-dl] - Click to download the file, then move `youtube-dl.exe` to a path that's in your PATH environment variable. If you don't know what that is, just move the `youtube-dl.exe` file to `NadekoBot/system`. +- [youtube-dlp] - Click to download the `yt-dlp.exe` file, then move `yt-dlp.exe` to a path that's in your PATH environment variable. If you don't know what that is, just move the `yt-dlp.exe` file to `NadekoBot/system`. [Updater]: https://dl.nadeko.bot/ -[Notepad++]: https://notepad-plus-plus.org/ -[.net]: https://dotnet.microsoft.com/download/dotnet/5.0 [Redis]: https://github.com/MicrosoftArchive/redis/releases/download/win-3.0.504/Redis-x64-3.0.504.msi [Visual C++ 2010 (x86)]: https://download.microsoft.com/download/1/6/5/165255E7-1014-4D0A-B094-B6A430A6BFFC/vcredist_x86.exe [Visual C++ 2017 (x64)]: https://aka.ms/vs/15/release/vc_redist.x64.exe [ffmpeg-32bit]: https://cdn.nadeko.bot/dl/ffmpeg-32.zip [ffmpeg-64bit]: https://cdn.nadeko.bot/dl/ffmpeg-64.zip -[youtube-dl]: https://yt-dl.org/downloads/latest/youtube-dl.exe +[youtube-dlp]: https://github.com/yt-dlp/yt-dlp/releases