diff --git a/CHANGELOG.md b/CHANGELOG.md index 613a33528..1a13c2f75 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,12 @@ Experimental changelog. Mostly based on [keepachangelog](https://keepachangelog.com/en/1.0.0/) except date format. a-c-f-r-o +## Unreleased + +### Added + +- `.filterlist` / `.fl` command which lists link and invite filtering channels and status + ## [4.3.9] - 12.10.2022 ### Added diff --git a/src/NadekoBot/Modules/Permissions/Filter/FilterCommands.cs b/src/NadekoBot/Modules/Permissions/Filter/FilterCommands.cs index 5da4503a6..82dedd24e 100644 --- a/src/NadekoBot/Modules/Permissions/Filter/FilterCommands.cs +++ b/src/NadekoBot/Modules/Permissions/Filter/FilterCommands.cs @@ -25,6 +25,47 @@ public partial class Permissions await ReplyConfirmLocalizedAsync(strs.fw_cleared); } + [Cmd] + [RequireContext(ContextType.Guild)] + public async Task FilterList() + { + var embed = _eb.Create(ctx) + .WithOkColor() + .WithTitle("Server filter settings"); + + var config = await _service.GetFilterSettings(ctx.Guild.Id); + + string GetEnabledEmoji(bool value) + => value ? "\\🟢" : "\\🔴"; + + async Task GetChannelListAsync(IReadOnlyCollection channels) + { + var toReturn = (await channels + .Select(async cid => + { + var ch = await ctx.Guild.GetChannelAsync(cid); + return ch is null + ? $"{cid} *missing*" + : $"<#{cid}>"; + }) + .WhenAll()) + .Join('\n'); + + if (string.IsNullOrWhiteSpace(toReturn)) + return GetText(strs.no_channel_found); + + return toReturn; + } + + embed.AddField($"{GetEnabledEmoji(config.FilterLinksEnabled)} Filter Links", + await GetChannelListAsync(config.FilterLinksChannels)); + + embed.AddField($"{GetEnabledEmoji(config.FilterInvitesEnabled)} Filter Invites", + await GetChannelListAsync(config.FilterInvitesChannels)); + + await ctx.Channel.EmbedAsync(embed); + } + [Cmd] [RequireContext(ContextType.Guild)] public async Task SrvrFilterInv() diff --git a/src/NadekoBot/Modules/Permissions/Filter/FilterService.cs b/src/NadekoBot/Modules/Permissions/Filter/FilterService.cs index 3f29f43b7..a17fd32fc 100644 --- a/src/NadekoBot/Modules/Permissions/Filter/FilterService.cs +++ b/src/NadekoBot/Modules/Permissions/Filter/FilterService.cs @@ -1,4 +1,5 @@ #nullable disable +using AngleSharp.Dom; using Microsoft.EntityFrameworkCore; using NadekoBot.Common.ModuleBehaviors; using NadekoBot.Db; @@ -222,4 +223,20 @@ public sealed class FilterService : IExecOnMessage return false; } + + public async Task GetFilterSettings(ulong guildId) + { + await using var uow = _db.GetDbContext(); + var gc = uow.GuildConfigsForId(guildId, set => set + .Include(x => x.FilterInvitesChannelIds) + .Include(x => x.FilterLinksChannelIds)); + + return new() + { + FilterInvitesChannels = gc.FilterInvitesChannelIds.Map(x => x.ChannelId), + FilterLinksChannels = gc.FilterLinksChannelIds.Map(x => x.ChannelId), + FilterInvitesEnabled = gc.FilterInvites, + FilterLinksEnabled = gc.FilterLinks, + }; + } } \ No newline at end of file diff --git a/src/NadekoBot/Modules/Permissions/Filter/ServerFilterSettings.cs b/src/NadekoBot/Modules/Permissions/Filter/ServerFilterSettings.cs new file mode 100644 index 000000000..535dbcced --- /dev/null +++ b/src/NadekoBot/Modules/Permissions/Filter/ServerFilterSettings.cs @@ -0,0 +1,10 @@ +#nullable disable +namespace NadekoBot.Modules.Permissions.Services; + +public readonly struct ServerFilterSettings +{ + public bool FilterInvitesEnabled { get; init; } + public bool FilterLinksEnabled { get; init; } + public IReadOnlyCollection FilterInvitesChannels { get; init; } + public IReadOnlyCollection FilterLinksChannels { get; init; } +} \ No newline at end of file diff --git a/src/NadekoBot/data/aliases.yml b/src/NadekoBot/data/aliases.yml index 1abf65e0e..18e913248 100644 --- a/src/NadekoBot/data/aliases.yml +++ b/src/NadekoBot/data/aliases.yml @@ -246,6 +246,9 @@ roles: channeltopic: - channeltopic - ct +filterlist: + - filterlist + - fl chnlfilterinv: - chnlfilterinv - cfi diff --git a/src/NadekoBot/data/strings/commands/commands.en-US.yml b/src/NadekoBot/data/strings/commands/commands.en-US.yml index 3286ce3ca..c036cde7b 100644 --- a/src/NadekoBot/data/strings/commands/commands.en-US.yml +++ b/src/NadekoBot/data/strings/commands/commands.en-US.yml @@ -236,6 +236,10 @@ fwclear: desc: "Deletes all filtered words on this server." args: - "" +filterlist: + desc: "Lists invite and link filter channels and status." + args: + - "" aliasesclear: desc: "Deletes all aliases on this server." args: