PostLoggingSetup

This commit is contained in:
Spielepapagei 2023-11-14 19:07:17 +01:00
parent d140e50cbc
commit b503e6edeb
5 changed files with 117 additions and 13 deletions

View file

@ -96,9 +96,11 @@ public class ConfigV1
[JsonProperty("LoggingId")] [JsonProperty("LoggingId")]
[Description("This must be a PostChannel Recomended use: /setup")] [Description("This must be a PostChannel Recomended use: /setup")]
public long LoggingId { get; set; } public long PostChannelId { get; set; }
[JsonProperty("ThreadChannels")]
[Description("This is reqired for Logging Don't Touch")]
public List<long>? PostIds { get; set; }
} }
public class WebHookData public class WebHookData

View file

@ -12,25 +12,23 @@ public class CommandControllerModule : BaseModule
private async Task OnSlashCommandExecuted(SocketSlashCommand command) private async Task OnSlashCommandExecuted(SocketSlashCommand command)
{ {
if(!ConfigService.Get().Discord.Bot.Enable == false) return; if(!ConfigService.Get().Discord.Bot.Enable == false) return;
if(command.User.IsBot) return;
var dsc = Scope.ServiceProvider.GetRequiredService<DiscordBotService>();
//Global Commands //Global Commands
switch (command.CommandName) switch (command.CommandName)
{ {
case "help": case "help": await dsc.HelpCommand.Handler(command); break;
break;
} }
//Guild Commands that can only be executed on the main Guild (Support Server) //Guild Commands that can only be executed on the main Guild (Support Server)
if(command.GuildId != (ulong)DiscordConfig.GuildId) return; if(command.GuildId != (ulong)DiscordConfig.GuildId) return;
switch (command.CommandName) switch (command.CommandName)
{ {
case "help": case "setup": await dsc.SetupCommand.Handler(command); break;
break;
} }
} }
public override Task Init() public override Task Init()
{ throw new NotImplementedException(); } { throw new NotImplementedException(); }
} }

View file

@ -0,0 +1,93 @@
using Discord;
using Discord.Commands;
using Discord.WebSocket;
namespace Moonlight.App.Services.Discord.Bot.Commands;
public class SetupCommand : BaseModule
{
public SetupCommand(DiscordSocketClient client, ConfigService configService, IServiceScope scope) : base(client, configService, scope)
{ }
[RequireUserPermission(GuildPermission.Administrator)]
public async Task Handler(SocketSlashCommand command)
{
var dsc = Scope.ServiceProvider.GetRequiredService<DiscordBotService>();
var guild = Client.GetGuild((ulong)DiscordConfig.GuildId);
var user = guild.GetUser(command.User.Id);
// Permission check
if (user is { GuildPermissions.Administrator: false } || guild.CurrentUser.GuildPermissions is { ManageChannels: false })
{
await command.RespondAsync(ephemeral: true, embed: dsc.EmbedBuilderModule.ErrorEmbed("Insufficient permissions", "You must have Administrator \n The Bot must have `Channel Edit` Permissions", command.User).Build());
return;
}
// Already setup
if (guild.GetChannel((ulong)DiscordConfig.PostChannelId) != null)
{
await command.RespondAsync(ephemeral: true, embed: dsc.EmbedBuilderModule.ErrorEmbed("Already setup", "Setup canceled!", command.User).Build());
return;
}
// Automatic setup
if (command.Data.Options.FirstOrDefault() != null && (bool)command.Data.Options.FirstOrDefault())
{
await command.RespondAsync(ephemeral: true, embed: dsc.EmbedBuilderModule.WarningEmbed("Automatic Setup", "This is the fast setup.\n Please wait...", command.User).Build());
var postChannel = await guild.CreateForumChannelAsync("NotifyChannel", x =>
{
x.DefaultLayout = ForumLayout.List;
x.Flags = ChannelFlags.Pinned;
x.PermissionOverwrites = new List<Overwrite>
{
new(guild.EveryoneRole.Id, PermissionTarget.Role, new OverwritePermissions(viewChannel: PermValue.Deny)),
new(guild.CurrentUser.Id, PermissionTarget.User, new OverwritePermissions(viewChannel: PermValue.Allow))
};
});
var posts = new List<long>();
foreach (DiscordLogging x in Enum.GetValues(typeof(DiscordLogging)))
{
var post = await postChannel.CreatePostAsync( $"{x}", ThreadArchiveDuration.OneWeek,
embed: dsc.EmbedBuilderModule.InfoEmbed($"{x}", "# Don't Remove the Channel \n Logging for ...", Client.CurrentUser).Build());
posts.Add((long)post.Id);
}
//Save to Config
ConfigService.Get().Discord.Bot.PostChannelId = (long)postChannel.Id;
ConfigService.Get().Discord.Bot.PostIds = posts;
ConfigService.Save();
return;
}
await command.RespondAsync(ephemeral: true, embed: dsc.EmbedBuilderModule.SuccessEmbed("Manuel Setup", "This is the custom setup.", command.User).Build());
}
public override async Task Init()
{
var command = new SlashCommandBuilder()
{
Name = "setup",
Description = "Setup the bot and Channels",
DefaultMemberPermissions = GuildPermission.ViewAuditLog,
Options = new List<SlashCommandOptionBuilder>(new List<SlashCommandOptionBuilder>
{
new()
{
Name = "fast",
Description = "Fast Setup channel will be automatically created",
Type = ApplicationCommandOptionType.Boolean,
IsRequired = false
}
})
};
await Client.GetGuild((ulong)DiscordConfig.GuildId).CreateApplicationCommandAsync(command.Build());
}
}

View file

@ -23,9 +23,10 @@ public class DiscordBotService
private readonly DiscordSocketClient Client; private readonly DiscordSocketClient Client;
// References // References
public CommandControllerModule CommandControllerModule { get; private set; }
public EmbedBuilderModule EmbedBuilderModule { get; private set; } public EmbedBuilderModule EmbedBuilderModule { get; private set; }
public CommandControllerModule CommandControllerModule { get; private set; }
public HelpCommand HelpCommand { get; private set; } public HelpCommand HelpCommand { get; private set; }
public SetupCommand SetupCommand { get; private set; }
public DiscordBotService(IServiceScopeFactory serviceScopeFactory, ConfigService configService) public DiscordBotService(IServiceScopeFactory serviceScopeFactory, ConfigService configService)
@ -34,7 +35,7 @@ public class DiscordBotService
ConfigService = configService; ConfigService = configService;
Client = new DiscordSocketClient( new DiscordSocketConfig Client = new DiscordSocketClient( new DiscordSocketConfig
{ {
GatewayIntents = GatewayIntents.All GatewayIntents = GatewayIntents.Guilds
}); });
Task.Run(MainAsync); Task.Run(MainAsync);
@ -54,6 +55,7 @@ public class DiscordBotService
//Commands //Commands
CommandControllerModule = new CommandControllerModule(Client, ConfigService, ServiceScope); CommandControllerModule = new CommandControllerModule(Client, ConfigService, ServiceScope);
HelpCommand = new HelpCommand(Client, ConfigService, ServiceScope); HelpCommand = new HelpCommand(Client, ConfigService, ServiceScope);
SetupCommand = new SetupCommand(Client, ConfigService, ServiceScope);
//Module //Module
@ -73,7 +75,7 @@ public class DiscordBotService
Logger.Info($"Invite link: https://discord.com/api/oauth2/authorize?client_id={Client.CurrentUser.Id}&permissions=1099511696391&scope=bot%20applications.commands"); Logger.Info($"Invite link: https://discord.com/api/oauth2/authorize?client_id={Client.CurrentUser.Id}&permissions=1099511696391&scope=bot%20applications.commands");
Logger.Info($"Login as {Client.CurrentUser.Username}#{Client.CurrentUser.DiscriminatorValue}"); Logger.Info($"Login as {Client.CurrentUser.Username}#{Client.CurrentUser.DiscriminatorValue}");
CreateCommands(); Init();
} }
@ -94,7 +96,7 @@ public class DiscordBotService
} }
#region InitLogic #region InitLogic
public async void CreateCommands() public async void Init()
{ {
Stopwatch stopwatch = new Stopwatch(); Stopwatch stopwatch = new Stopwatch();
stopwatch.Start(); stopwatch.Start();

View file

@ -0,0 +1,9 @@
namespace Moonlight.App.Services.Discord;
public enum DiscordLogging
{
VeryImportant,
System,
Services,
Ticket
}