diff --git a/StarsiegeBot/BotSettings.cs b/StarsiegeBot/BotSettings.cs index 51da3fd..bfff479 100644 --- a/StarsiegeBot/BotSettings.cs +++ b/StarsiegeBot/BotSettings.cs @@ -19,6 +19,7 @@ namespace StarsiegeBot { public static Dictionary GuildSettings; + public BotSettings() { Console.WriteLine("Bot Setting Commands Loaded"); @@ -89,6 +90,10 @@ namespace StarsiegeBot public DiscordChannel WelcomeChannel { get; set; } public bool useWelcomeMessage { get; set; } - public List hiddenRolesList { get; set; } + public List HiddenRolesList { get; set; } + public DiscordChannel WelcomeChannel { get; set; } + public bool UseWelcome { get; set; } + public string WelcomeMessage { get; set; } + } } diff --git a/StarsiegeBot/Commands.cs b/StarsiegeBot/Commands.cs index 35c512b..31ef778 100644 --- a/StarsiegeBot/Commands.cs +++ b/StarsiegeBot/Commands.cs @@ -1,4 +1,5 @@ -using System; +#pragma warning disable IDE0060 // Remove unused parameter +using System; using System.Threading.Tasks; using DSharpPlus.CommandsNext; using DSharpPlus.CommandsNext.Attributes; diff --git a/StarsiegeBot/EventTriggers.cs b/StarsiegeBot/EventTriggers.cs new file mode 100644 index 0000000..a23723b --- /dev/null +++ b/StarsiegeBot/EventTriggers.cs @@ -0,0 +1,441 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using DSharpPlus; +using DSharpPlus.CommandsNext; +using DSharpPlus.Entities; +using DSharpPlus.EventArgs; +using DSharpPlus.Interactivity; +using DSharpPlus.Interactivity.Enums; +using DSharpPlus.Interactivity.Extensions; +using DSharpPlus.VoiceNext; +using Microsoft.Extensions.Logging; +using Newtonsoft.Json; + +#pragma warning disable IDE0060 // Remove unused parameter +namespace StarsiegeBot +{ + class Triggers + { + public readonly EventId BotEventId; + public static DiscordMember notify; + protected string BotName { get; set; } + private readonly BotSettings Guilds = new BotSettings(); + + public Triggers(EventId botEventId) + { + BotEventId = botEventId; + } + + public Task CommandExecuted(CommandsNextExtension ext, CommandExecutionEventArgs e) + { + if (e.Context.Client.Guilds.Count > 75) + e.Context.Client.Logger.LogCritical(BotEventId, $"Client is in {e.Context.Client.Guilds.Count}"); + // let's log the name of the command and user + e.Context.Client.Logger.LogInformation(BotEventId, $"{e.Context.User.Username} successfully executed '{e.Command.QualifiedName}'"); + + // since this method is not async, let's return + // a completed task, so that no additional work + // is done + return Task.CompletedTask; + } + public Task MessageCreated(DiscordClient d, MessageCreateEventArgs e) + { + d.Logger.LogDebug(BotEventId, "MessageCreated."); + + // Ignore all bots. We don't care. + if (e.Author.IsBot) + { + return Task.CompletedTask; + } + + CommandsNextExtension cnext = d.GetCommandsNext(); + DiscordMessage msg = e.Message; + + // Check if message has valid prefix. + // json file loaded... + int cmdStart = msg.GetStringPrefixLength("!"); + + // if Guild is null, do nothing for now. + if (e.Guild is null) + { + + } + else + { + string gId = e.Guild.Id.ToString(); + List prefixes = BotSettings.GuildSettings["default"].Prefixes; + // Check to see if the guild has settings. + if (BotSettings.GuildSettings.ContainsKey(gId)) + { + // see if the guild wants global prefixes. + if (BotSettings.GuildSettings[gId].UseGlobalPrefix) + { + // add the Guild prefixes to the list of others. + prefixes = prefixes.Concat(BotSettings.GuildSettings[gId].Prefixes).ToList(); + } + else + { + // dont use defaults? reset list to just the guild prefixes. + prefixes = BotSettings.GuildSettings[gId].Prefixes; + } + } + + // check each prefix. break on the one that is evoked. + foreach (string item in prefixes) + { + cmdStart = msg.GetStringPrefixLength(item); + if (cmdStart != -1) break; + } + // we didn't find a command prefix... Break. + if (cmdStart == -1) return Task.CompletedTask; + + // Retrieve prefix. + var prefix = msg.Content.Substring(0, cmdStart); + var cmdString = msg.Content[cmdStart..]; + + // Retrieve full command string. + var command = cnext.FindCommand(cmdString, out var args); + if (command == null) return Task.CompletedTask; + + var ctx = cnext.CreateContext(msg, prefix, command, args); + Task.Run(async () => await cnext.ExecuteCommandAsync(ctx)); + } + + return Task.CompletedTask; + } + + public Task CommandErrored(CommandsNextExtension ext, CommandErrorEventArgs e) + { + // let's log the error details + + e.Context.Client.Logger.LogError(BotEventId, $"{e.Context.User.Username} tried executing '{e.Command?.QualifiedName ?? ""}' but it errored: {e.Exception.GetType()}: {e.Exception.Message ?? ""}", DateTime.Now); + return Task.CompletedTask; + } + + public Task InteractionCreated(DiscordClient d, InteractionCreateEventArgs e) + { + d.Logger.LogDebug(BotEventId, $"{e.Interaction.User.Username} started an interaction. {e.Interaction.Data.Name}"); + return Task.CompletedTask; + } + public Task ChannelCreated(DiscordClient d, ChannelCreateEventArgs e) + { + d.Logger.LogDebug(BotEventId, $"{e.Channel.Name} was created on {e.Guild.Name}. Type: {e.Channel.Type}"); + return Task.CompletedTask; + } + public Task ChannelDeleted(DiscordClient d, ChannelDeleteEventArgs e) + { + d.Logger.LogDebug(BotEventId, "ChannelDeleted."); + return Task.CompletedTask; + } + public Task ApplicationCommandCreated(DiscordClient d, ApplicationCommandEventArgs e) + { + d.Logger.LogDebug(BotEventId, "ApplicationCommandCreated."); + return Task.CompletedTask; + } + public Task ApplicationCommandDeleted(DiscordClient d, ApplicationCommandEventArgs e) + { + d.Logger.LogDebug(BotEventId, "ApplicationCommandDeleted."); + return Task.CompletedTask; + } + public Task ApplicationCommandUpdated(DiscordClient d, ApplicationCommandEventArgs e) + { + d.Logger.LogDebug(BotEventId, "ApplicationCommandUpdated."); + return Task.CompletedTask; + } + public Task ChannelPinsUpdated(DiscordClient d, ChannelPinsUpdateEventArgs e) + { + d.Logger.LogDebug(BotEventId, "ChannelPinsUpdated."); + return Task.CompletedTask; + } + public Task ChannelUpdated(DiscordClient d, ChannelUpdateEventArgs e) + { + d.Logger.LogDebug(BotEventId, "ChannelUpdated."); + return Task.CompletedTask; + } + public Task ClientErrored(DiscordClient d, ClientErrorEventArgs e) + { + // let's log the details of the error that just + // occured in our client + d.Logger.LogError(BotEventId, e.Exception, "Exception occured"); + + // since this method is not async, let's return + // a completed task, so that no additional work + // is done + return Task.CompletedTask; + } + public Task DmChannelDeleted(DiscordClient d, DmChannelDeleteEventArgs e) + { + d.Logger.LogDebug(BotEventId, "ClientErrored."); + return Task.CompletedTask; + } + public Task GuildAvailable(DiscordClient d, GuildCreateEventArgs e) + { + string gId = e.Guild.Id.ToString(); + // this guild doesnt have settings, make a skel set for them. + if (BotSettings.GuildSettings is null) + { + + } + else + { + if (!BotSettings.GuildSettings.ContainsKey(gId)) + { + Console.WriteLine("making config"); + GuildSettings item = new GuildSettings + { + UseAutoRoles = false, + UseGlobalPrefix = true, + UseLevelRoles = false, + UseLevels = false, + UseSelfRoles = false, + AllowRolesPurchase = false + }; + item.UseAutoRoles = false; + item.LevelRoles = new Dictionary>(); + item.Prefixes = new List(); + item.SelfRoles = new Dictionary>(); + // this line... is a test line. + BotSettings.GuildSettings.Add(gId, item); + } + } + + // let's log the name of the guild that was just + // sent to our client + d.Logger.LogInformation(BotEventId, $"Guild available: {e.Guild.Name}"); + + // since this method is not async, let's return + // a completed task, so that no additional work + // is done + return Task.CompletedTask; + } + public Task GuildBanAdded(DiscordClient d, GuildBanAddEventArgs e) + { + d.Logger.LogDebug(BotEventId, "GuildBanAdded."); + return Task.CompletedTask; + } + public Task GuildBanRemoved(DiscordClient d, GuildBanRemoveEventArgs e) + { + d.Logger.LogDebug(BotEventId, "GuildBanRemoved."); + return Task.CompletedTask; + } + public Task GuildCreated(DiscordClient d, GuildCreateEventArgs e) + { + d.Logger.LogDebug(BotEventId, "GuildCreated."); + return Task.CompletedTask; + } + public Task GuildDeleted(DiscordClient d, GuildDeleteEventArgs e) + { + d.Logger.LogDebug(BotEventId, "GuildDeleted."); + return Task.CompletedTask; + } + public Task GuildDownloadCompleted(DiscordClient d, GuildDownloadCompletedEventArgs e) + { + d.Logger.LogDebug(BotEventId, "GuildDownloadCompleted."); + notify = e.Guilds[376937422010974209].Members[139548200099905536]; + return Task.CompletedTask; + } + public Task GuildEmojisUpdated(DiscordClient d, GuildEmojisUpdateEventArgs e) + { + d.Logger.LogDebug(BotEventId, "GuildEmojisUpdated."); + return Task.CompletedTask; + } + public Task GuildIntegrationsUpdated(DiscordClient d, GuildIntegrationsUpdateEventArgs e) + { + d.Logger.LogDebug(BotEventId, "GuildIntegrationsUpdated."); + return Task.CompletedTask; + } + public Task GuildMemberAdded(DiscordClient d, GuildMemberAddEventArgs e) + { + d.Logger.LogDebug(BotEventId, $"GuildMemberAdded.{e.Guild.Name}"); + string gId = e.Guild.Id.ToString(); + if (BotSettings.GuildSettings[gId].UseWelcome) + { + if (BotSettings.GuildSettings[gId].WelcomeChannel is null) + { + + } + else + { + if (BotSettings.GuildSettings[gId].WelcomeMessage is null) + { } + else + { + BotSettings.GuildSettings[gId].WelcomeChannel.SendMessageAsync(BotSettings.GuildSettings[gId].WelcomeMessage); + } + } + } + + + return Task.CompletedTask; + } + public Task GuildMemberRemoved(DiscordClient d, GuildMemberRemoveEventArgs e) + { + d.Logger.LogDebug(BotEventId, "GuildMemberRemoved."); + return Task.CompletedTask; + } + public Task GuildMembersChunked(DiscordClient d, GuildMembersChunkEventArgs e) + { + d.Logger.LogDebug(BotEventId, "GuildMembersChunked."); + return Task.CompletedTask; + } + public Task GuildMemberUpdated(DiscordClient d, GuildMemberUpdateEventArgs e) + { + d.Logger.LogDebug(BotEventId, "GuildMemberUpdated."); + return Task.CompletedTask; + } + public Task GuildRoleCreated(DiscordClient d, GuildRoleCreateEventArgs e) + { + d.Logger.LogDebug(BotEventId, "GuildRoleCreated."); + return Task.CompletedTask; + } + public Task GuildRoleDeleted(DiscordClient d, GuildRoleDeleteEventArgs e) + { + d.Logger.LogDebug(BotEventId, "GuildRoleDeleted."); + return Task.CompletedTask; + } + public Task GuildRoleUpdated(DiscordClient d, GuildRoleUpdateEventArgs e) + { + d.Logger.LogDebug(BotEventId, "GuildRoleUpdated."); + return Task.CompletedTask; + } + public Task GuildUnavailable(DiscordClient d, GuildDeleteEventArgs e) + { + d.Logger.LogDebug(BotEventId, "GuildUnavailable."); + return Task.CompletedTask; + } + public Task GuildUpdated(DiscordClient d, GuildUpdateEventArgs e) + { + d.Logger.LogDebug(BotEventId, "GuildUpdated."); + return Task.CompletedTask; + } + public Task Heartbeated(DiscordClient d, HeartbeatEventArgs e) + { + d.Logger.LogDebug(BotEventId, "Heartbeated."); + return Task.CompletedTask; + } + public Task InviteCreated(DiscordClient d, InviteCreateEventArgs e) + { + d.Logger.LogDebug(BotEventId, "InviteCreated."); + return Task.CompletedTask; + } + public Task InviteDeleted(DiscordClient d, InviteDeleteEventArgs e) + { + d.Logger.LogDebug(BotEventId, "InviteDeleted."); + return Task.CompletedTask; + } + public Task MessageAcknowledged(DiscordClient d, MessageAcknowledgeEventArgs e) + { + d.Logger.LogDebug(BotEventId, "MessageAcknowledged."); + return Task.CompletedTask; + } + public Task MessageDeleted(DiscordClient d, MessageDeleteEventArgs e) + { + d.Logger.LogDebug(BotEventId, "MessageDeleted."); + return Task.CompletedTask; + } + public Task MessageReactionAdded(DiscordClient d, MessageReactionAddEventArgs e) + { + d.Logger.LogDebug(BotEventId, "MessageReactionAdded."); + return Task.CompletedTask; + } + public Task MessageReactionRemoved(DiscordClient d, MessageReactionRemoveEventArgs e) + { + d.Logger.LogDebug(BotEventId, "MessageReactionRemoved."); + return Task.CompletedTask; + } + public Task MessageReactionRemovedEmoji(DiscordClient d, MessageReactionRemoveEmojiEventArgs e) + { + d.Logger.LogDebug(BotEventId, "MessageReactionRemovedEmoji."); + return Task.CompletedTask; + } + public Task MessageReactionsCleared(DiscordClient d, MessageReactionsClearEventArgs e) + { + d.Logger.LogDebug(BotEventId, "MessageReactionsCleared."); + return Task.CompletedTask; + } + public Task MessagesBulkDeleted(DiscordClient d, MessageBulkDeleteEventArgs e) + { + d.Logger.LogDebug(BotEventId, "MessagesBulkDeleted."); + return Task.CompletedTask; + } + public Task MessageUpdated(DiscordClient d, MessageUpdateEventArgs e) + { + d.Logger.LogDebug(BotEventId, "MessageUpdated."); + return Task.CompletedTask; + } + public Task PresenceUpdated(DiscordClient d, PresenceUpdateEventArgs e) + { + d.Logger.LogDebug(BotEventId, "PresenceUpdated."); + return Task.CompletedTask; + } + public Task Ready(DiscordClient d, ReadyEventArgs e) + { + // let's log the fact that this event occured + d.Logger.LogInformation(BotEventId, $"Client is ready to process events. Client is in: {d.Guilds.Count} Guilds."); + + // since this method is not async, let's return + // a completed task, so that no additional work + // is done + return Task.CompletedTask; + } + public Task Resumed(DiscordClient d, ReadyEventArgs e) + { + d.Logger.LogDebug(BotEventId, "Resumed."); + return Task.CompletedTask; + } + public Task SocketClosed(DiscordClient d, SocketCloseEventArgs e) + { + d.Logger.LogDebug(BotEventId, "SocketClosed."); + return Task.CompletedTask; + } + public Task SocketErrored(DiscordClient d, SocketErrorEventArgs e) + { + d.Logger.LogDebug(BotEventId, "SocketErrored."); + return Task.CompletedTask; + } + public Task SocketOpened(DiscordClient d, SocketEventArgs e) + { + d.Logger.LogDebug(BotEventId, "SocketOpened."); + return Task.CompletedTask; + } + public Task TypingStarted(DiscordClient d, TypingStartEventArgs e) + { + d.Logger.LogDebug(BotEventId, "TypingStarted."); + return Task.CompletedTask; + } + public Task UnknownEvent(DiscordClient d, UnknownEventArgs e) + { + d.Logger.LogDebug(BotEventId, "UnknownEvent."); + return Task.CompletedTask; + } + public Task UserSettingsUpdated(DiscordClient d, UserSettingsUpdateEventArgs e) + { + d.Logger.LogDebug(BotEventId, "UserSettingsUpdated."); + return Task.CompletedTask; + } + public Task UserUpdated(DiscordClient d, UserUpdateEventArgs e) + { + d.Logger.LogDebug(BotEventId, "UserUpdated."); + return Task.CompletedTask; + } + public Task VoiceServerUpdated(DiscordClient d, VoiceServerUpdateEventArgs e) + { + d.Logger.LogDebug(BotEventId, "VoiceServerUpdated."); + return Task.CompletedTask; + } + public Task VoiceStateUpdated(DiscordClient d, VoiceStateUpdateEventArgs e) + { + d.Logger.LogDebug(BotEventId, "VoiceStateUpdated."); + return Task.CompletedTask; + } + public Task WebhooksUpdated(DiscordClient d, WebhooksUpdateEventArgs e) + { + d.Logger.LogDebug(BotEventId, "WebhooksUpdated."); + return Task.CompletedTask; + } + } +} diff --git a/StarsiegeBot/GroupManagement.cs b/StarsiegeBot/GroupManagement.cs index c89086c..f40e316 100644 --- a/StarsiegeBot/GroupManagement.cs +++ b/StarsiegeBot/GroupManagement.cs @@ -1,4 +1,5 @@ -using System; +#pragma warning disable IDE0060 // Remove unused parameter +using System; using System.Diagnostics; using System.IO; using System.Threading.Tasks; diff --git a/StarsiegeBot/GroupRoleManagement.cs b/StarsiegeBot/GroupRoleManagement.cs index 63b3ec3..4d60a19 100644 --- a/StarsiegeBot/GroupRoleManagement.cs +++ b/StarsiegeBot/GroupRoleManagement.cs @@ -1,4 +1,5 @@ -using System; +#pragma warning disable IDE0060 // Remove unused parameter +using System; using System.Diagnostics; using System.IO; using System.Threading.Tasks; diff --git a/StarsiegeBot/Program.cs b/StarsiegeBot/Program.cs index c33dede..401956d 100644 --- a/StarsiegeBot/Program.cs +++ b/StarsiegeBot/Program.cs @@ -19,8 +19,8 @@ namespace StarsiegeBot { class Program { - public static DiscordMember notify; - public readonly EventId BotEventId = new EventId(42, "Bot-Ex04"); + public readonly EventId BotEventId; + public static Triggers Events; public DiscordClient Client { get; set; } public CommandsNextExtension Commands { get; set; } @@ -65,6 +65,7 @@ namespace StarsiegeBot BotName = "ssp"; BotEventId = new EventId(276, BotName); + Events = new Triggers(BotEventId); } public async Task RunBotAsync() @@ -112,65 +113,6 @@ namespace StarsiegeBot // and hook them up this.Commands = this.Client.UseCommandsNext(ccfg); - // Hook all possible Event Handlers in the system. - this.Client.ChannelCreated += this.Event_ChannelCreated; - this.Client.ChannelDeleted += this.Event_ChannelDeleted; - this.Client.ChannelPinsUpdated += this.Event_ChannelPinsUpdated; - this.Client.ChannelUpdated += this.Event_ChannelUpdated; - this.Client.ClientErrored += this.Event_ClientErrored; - this.Client.DmChannelDeleted += this.Event_DmChannelDeleted; - this.Client.GuildAvailable += this.Event_GuildAvailable; - this.Client.GuildBanAdded += this.Event_GuildBanAdded; - this.Client.GuildBanRemoved += this.Event_GuildBanRemoved; - this.Client.GuildCreated += this.Event_GuildCreated; - this.Client.GuildDeleted += this.Event_GuildDeleted; - this.Client.GuildDownloadCompleted += this.Event_GuildDownloadCompleted; - this.Client.GuildEmojisUpdated += this.Event_GuildEmojisUpdated; - this.Client.GuildIntegrationsUpdated += this.Event_GuildIntegrationsUpdated; - this.Client.GuildMemberAdded += this.Event_GuildMemberAdded; - this.Client.GuildMemberRemoved += this.Event_GuildMemberRemoved; - this.Client.GuildMembersChunked += this.Event_GuildMembersChunked; - this.Client.GuildMemberUpdated += this.Event_GuildMemberUpdated; - this.Client.GuildRoleCreated += this.Event_GuildRoleCreated; - this.Client.GuildRoleDeleted += this.Event_GuildRoleDeleted; - this.Client.GuildRoleUpdated += this.Event_GuildRoleUpdated; - this.Client.GuildUnavailable += this.Event_GuildUnavailable; - this.Client.GuildUpdated += this.Event_GuildUpdated; - this.Client.Heartbeated += this.Event_Heartbeated; - this.Client.InviteCreated += this.Event_InviteCreated; - this.Client.InviteDeleted += this.Event_InviteDeleted; - this.Client.MessageAcknowledged += this.Event_MessageAcknowledged; - this.Client.MessageCreated += this.Event_MessageCreated; - this.Client.MessageDeleted += this.Event_MessageDeleted; - this.Client.MessageReactionAdded += this.Event_MessageReactionAdded; - this.Client.MessageReactionRemoved += this.Event_MessageReactionRemoved; - this.Client.MessageReactionRemovedEmoji += this.Event_MessageReactionRemovedEmoji; - this.Client.MessageReactionsCleared += this.Event_MessageReactionsCleared; - this.Client.MessagesBulkDeleted += this.Event_MessagesBulkDeleted; - this.Client.MessageUpdated += this.Event_MessageUpdated; - this.Client.PresenceUpdated += this.Event_PresenceUpdated; - this.Client.Ready += this.Event_Ready; - this.Client.Resumed += this.Event_Resumed; - this.Client.SocketClosed += this.Event_SocketClosed; - this.Client.SocketErrored += this.Event_SocketErrored; - this.Client.SocketOpened += this.Event_SocketOpened; - this.Client.TypingStarted += this.Event_TypingStarted; - this.Client.UnknownEvent += this.Event_UnknownEvent; - this.Client.UserSettingsUpdated += this.Event_UserSettingsUpdated; - this.Client.UserUpdated += this.Event_UserUpdated; - this.Client.VoiceServerUpdated += this.Event_VoiceServerUpdated; - this.Client.VoiceStateUpdated += this.Event_VoiceStateUpdated; - this.Client.WebhooksUpdated += this.Event_WebhooksUpdated; - - this.Client.ApplicationCommandCreated += this.Event_ApplicationCommandCreated; - this.Client.ApplicationCommandDeleted += this.Event_ApplicationCommandDeleted; - this.Client.ApplicationCommandUpdated += this.Event_ApplicationCommandUpdated; - - this.Client.InteractionCreated += this.Event_InteractionCreated; - - this.Commands.CommandExecuted += this.Event_CommandExecuted; - this.Commands.CommandErrored += this.Event_CommandErrored; - // up next, let's register our commands this.Commands.RegisterCommands(); // this.Commands.RegisterCommands(); @@ -180,20 +122,78 @@ namespace StarsiegeBot this.Commands.RegisterCommands(); // Main Folder. Test Items. this.Commands.RegisterCommands(); // Main Folder. Test Items. this.Commands.RegisterCommands(); // Main Folder. Test Items. + this.Commands.RegisterCommands(); // Main Folder. Test Items. // All these commands are in the STARSIEGE folder. //if (BotName.Contains("ssp")) //{ this.Commands.RegisterCommands(); - this.Commands.RegisterCommands(); + this.Commands.RegisterCommands(); this.Commands.RegisterCommands(); this.Commands.RegisterCommands(); //} - Task thisTimer = StartTimer(new CancellationToken()); + Task thisTimerf = StartTimer(new CancellationToken()); // let's enable voice this.Voice = this.Client.UseVoiceNext(); - + + // Hook all possible Event Handlers in the system. + this.Client.ChannelCreated += Events.ChannelCreated; + this.Client.ChannelDeleted += Events.ChannelDeleted; + this.Client.ChannelPinsUpdated += Events.ChannelPinsUpdated; + this.Client.ChannelUpdated += Events.ChannelUpdated; + this.Client.ClientErrored += Events.ClientErrored; + this.Client.DmChannelDeleted += Events.DmChannelDeleted; + this.Client.GuildAvailable += Events.GuildAvailable; + this.Client.GuildBanAdded += Events.GuildBanAdded; + this.Client.GuildBanRemoved += Events.GuildBanRemoved; + this.Client.GuildCreated += Events.GuildCreated; + this.Client.GuildDeleted += Events.GuildDeleted; + this.Client.GuildDownloadCompleted += Events.GuildDownloadCompleted; + this.Client.GuildEmojisUpdated += Events.GuildEmojisUpdated; + this.Client.GuildIntegrationsUpdated += Events.GuildIntegrationsUpdated; + this.Client.GuildMemberAdded += Events.GuildMemberAdded; + this.Client.GuildMemberRemoved += Events.GuildMemberRemoved; + this.Client.GuildMembersChunked += Events.GuildMembersChunked; + this.Client.GuildMemberUpdated += Events.GuildMemberUpdated; + this.Client.GuildRoleCreated += Events.GuildRoleCreated; + this.Client.GuildRoleDeleted += Events.GuildRoleDeleted; + this.Client.GuildRoleUpdated += Events.GuildRoleUpdated; + this.Client.GuildUnavailable += Events.GuildUnavailable; + this.Client.GuildUpdated += Events.GuildUpdated; + this.Client.Heartbeated += Events.Heartbeated; + this.Client.InviteCreated += Events.InviteCreated; + this.Client.InviteDeleted += Events.InviteDeleted; + this.Client.MessageAcknowledged += Events.MessageAcknowledged; + this.Client.MessageCreated += Events.MessageCreated; + this.Client.MessageDeleted += Events.MessageDeleted; + this.Client.MessageReactionAdded += Events.MessageReactionAdded; + this.Client.MessageReactionRemoved += Events.MessageReactionRemoved; + this.Client.MessageReactionRemovedEmoji += Events.MessageReactionRemovedEmoji; + this.Client.MessageReactionsCleared += Events.MessageReactionsCleared; + this.Client.MessagesBulkDeleted += Events.MessagesBulkDeleted; + this.Client.MessageUpdated += Events.MessageUpdated; + this.Client.PresenceUpdated += Events.PresenceUpdated; + this.Client.Ready += Events.Ready; + this.Client.Resumed += Events.Resumed; + this.Client.SocketClosed += Events.SocketClosed; + this.Client.SocketErrored += Events.SocketErrored; + this.Client.SocketOpened += Events.SocketOpened; + this.Client.TypingStarted += Events.TypingStarted; + this.Client.UnknownEvent += Events.UnknownEvent; + this.Client.UserSettingsUpdated += Events.UserSettingsUpdated; + this.Client.UserUpdated += Events.UserUpdated; + this.Client.VoiceServerUpdated += Events.VoiceServerUpdated; + this.Client.VoiceStateUpdated += Events.VoiceStateUpdated; + this.Client.WebhooksUpdated += Events.WebhooksUpdated; + this.Client.ApplicationCommandCreated += Events.ApplicationCommandCreated; + this.Client.ApplicationCommandDeleted += Events.ApplicationCommandDeleted; + this.Client.ApplicationCommandUpdated += Events.ApplicationCommandUpdated; + this.Client.InteractionCreated += Events.InteractionCreated; + this.Commands.CommandExecuted += Events.CommandExecuted; + this.Commands.CommandErrored += Events.CommandErrored; + + // finally, let's connect and log in await this.Client.ConnectAsync(); @@ -201,398 +201,6 @@ namespace StarsiegeBot await Task.Delay(-1); } - private Task Event_MessageCreated(DiscordClient d, MessageCreateEventArgs e) - { - d.Logger.LogDebug(BotEventId, "Event_MessageCreated."); - - // Ignore all bots. We don't care. - if (e.Author.IsBot) - { - return Task.CompletedTask; - } - - CommandsNextExtension cnext = d.GetCommandsNext(); - DiscordMessage msg = e.Message; - - // Check if message has valid prefix. - // json file loaded... - int cmdStart = msg.GetStringPrefixLength("!"); - - // if Guild is null, do nothing for now. - if (e.Guild is null) - { - - } - else - { - string gId = e.Guild.Id.ToString(); - List prefixes = BotSettings.GuildSettings["default"].Prefixes; - // Check to see if the guild has settings. - if (BotSettings.GuildSettings.ContainsKey(gId)) - { - // see if the guild wants global prefixes. - if (BotSettings.GuildSettings[gId].UseGlobalPrefix) - { - // add the Guild prefixes to the list of others. - prefixes = prefixes.Concat(BotSettings.GuildSettings[gId].Prefixes).ToList(); - } - else - { - // dont use defaults? reset list to just the guild prefixes. - prefixes = BotSettings.GuildSettings[gId].Prefixes; - } - } - - // check each prefix. break on the one that is evoked. - foreach (string item in prefixes) - { - cmdStart = msg.GetStringPrefixLength(item); - if (cmdStart != -1) break; - } - // we didn't find a command prefix... Break. - if (cmdStart == -1) return Task.CompletedTask; - - // Retrieve prefix. - var prefix = msg.Content.Substring(0, cmdStart); - var cmdString = msg.Content.Substring(cmdStart); - - // Retrieve full command string. - var command = cnext.FindCommand(cmdString, out var args); - if (command == null) return Task.CompletedTask; - - var ctx = cnext.CreateContext(msg, prefix, command, args); - Task.Run(async () => await cnext.ExecuteCommandAsync(ctx)); - } - - return Task.CompletedTask; - } - - private Task Event_CommandExecuted(CommandsNextExtension ext, CommandExecutionEventArgs e) - { - if (e.Context.Client.Guilds.Count > 75) - e.Context.Client.Logger.LogCritical(BotEventId, $"Client is in {e.Context.Client.Guilds.Count}"); - // let's log the name of the command and user - e.Context.Client.Logger.LogInformation(BotEventId, $"{e.Context.User.Username} successfully executed '{e.Command.QualifiedName}'"); - - // since this method is not async, let's return - // a completed task, so that no additional work - // is done - return Task.CompletedTask; - } - - private Task Event_CommandErrored(CommandsNextExtension ext, CommandErrorEventArgs e) - { - // let's log the error details - - e.Context.Client.Logger.LogError(BotEventId, $"{e.Context.User.Username} tried executing '{e.Command?.QualifiedName ?? ""}' but it errored: {e.Exception.GetType()}: {e.Exception.Message ?? ""}", DateTime.Now); - return Task.CompletedTask; - } - - private Task Event_InteractionCreated(DiscordClient d, InteractionCreateEventArgs e) - { - d.Logger.LogDebug(BotEventId, $"{e.Interaction.User.Username} started an interaction. {e.Interaction.Data.Name}"); - return Task.CompletedTask; - } - private Task Event_ChannelCreated(DiscordClient d, ChannelCreateEventArgs e) - { - d.Logger.LogDebug(BotEventId, $"{e.Channel.Name} was created on {e.Guild.Name}. Type: {e.Channel.Type}"); - return Task.CompletedTask; - } - private Task Event_ChannelDeleted(DiscordClient d, ChannelDeleteEventArgs e) - { - d.Logger.LogDebug(BotEventId, "Event_ChannelDeleted."); - return Task.CompletedTask; - } - private Task Event_ApplicationCommandCreated(DiscordClient d, ApplicationCommandEventArgs e) - { - d.Logger.LogDebug(BotEventId, "Event_ApplicationCommandCreated."); - return Task.CompletedTask; - } - private Task Event_ApplicationCommandDeleted(DiscordClient d, ApplicationCommandEventArgs e) - { - d.Logger.LogDebug(BotEventId, "Event_ApplicationCommandDeleted."); - return Task.CompletedTask; - } - private Task Event_ApplicationCommandUpdated(DiscordClient d, ApplicationCommandEventArgs e) - { - d.Logger.LogDebug(BotEventId, "Event_ApplicationCommandUpdated."); - return Task.CompletedTask; - } - private Task Event_ChannelPinsUpdated(DiscordClient d, ChannelPinsUpdateEventArgs e) - { - d.Logger.LogDebug(BotEventId, "Event_ChannelPinsUpdated."); - return Task.CompletedTask; - } - private Task Event_ChannelUpdated(DiscordClient d, ChannelUpdateEventArgs e) - { - d.Logger.LogDebug(BotEventId, "Event_ChannelUpdated."); - return Task.CompletedTask; - } - private Task Event_ClientErrored(DiscordClient d, ClientErrorEventArgs e) - { - // let's log the details of the error that just - // occured in our client - d.Logger.LogError(BotEventId, e.Exception, "Exception occured"); - - // since this method is not async, let's return - // a completed task, so that no additional work - // is done - return Task.CompletedTask; - } - private Task Event_DmChannelDeleted(DiscordClient d, DmChannelDeleteEventArgs e) - { - d.Logger.LogDebug(BotEventId, "Event_ClientErrored."); - return Task.CompletedTask; - } - private Task Event_GuildAvailable(DiscordClient d, GuildCreateEventArgs e) - { - string gId = e.Guild.Id.ToString(); - // this guild doesnt have settings, make a skel set for them. - if (BotSettings.GuildSettings is null) - { - - } - else - { - if (!BotSettings.GuildSettings.ContainsKey(gId)) - { - Console.WriteLine("making config"); - GuildSettings item = new GuildSettings(); - item.UseAutoRoles = false; - item.UseGlobalPrefix = true; - item.UseLevelRoles = false; - item.UseLevels = false; - item.UseSelfRoles = false; - item.AllowRolesPurchase = false; - item.UseAutoRoles = false; - item.LevelRoles = new Dictionary>(); - item.Prefixes = new List(); - item.SelfRoles = new Dictionary>(); - // this line... is a test line. - BotSettings.GuildSettings.Add(gId, item); - } - } - - // let's log the name of the guild that was just - // sent to our client - d.Logger.LogInformation(BotEventId, $"Guild available: {e.Guild.Name}"); - - // since this method is not async, let's return - // a completed task, so that no additional work - // is done - return Task.CompletedTask; - } - private Task Event_GuildBanAdded(DiscordClient d, GuildBanAddEventArgs e) - { - d.Logger.LogDebug(BotEventId, "Event_GuildBanAdded."); - return Task.CompletedTask; - } - private Task Event_GuildBanRemoved(DiscordClient d, GuildBanRemoveEventArgs e) - { - d.Logger.LogDebug(BotEventId, "Event_GuildBanRemoved."); - return Task.CompletedTask; - } - private Task Event_GuildCreated(DiscordClient d, GuildCreateEventArgs e) - { - d.Logger.LogDebug(BotEventId, "Event_GuildCreated."); - return Task.CompletedTask; - } - private Task Event_GuildDeleted(DiscordClient d, GuildDeleteEventArgs e) - { - d.Logger.LogDebug(BotEventId, "Event_GuildDeleted."); - return Task.CompletedTask; - } - private Task Event_GuildDownloadCompleted(DiscordClient d, GuildDownloadCompletedEventArgs e) - { - d.Logger.LogDebug(BotEventId, "Event_GuildDownloadCompleted."); - notify = e.Guilds[376937422010974209].Members[139548200099905536]; - return Task.CompletedTask; - } - private Task Event_GuildEmojisUpdated(DiscordClient d, GuildEmojisUpdateEventArgs e) - { - d.Logger.LogDebug(BotEventId, "Event_GuildEmojisUpdated."); - return Task.CompletedTask; - } - private Task Event_GuildIntegrationsUpdated(DiscordClient d, GuildIntegrationsUpdateEventArgs e) - { - d.Logger.LogDebug(BotEventId, "Event_GuildIntegrationsUpdated."); - return Task.CompletedTask; - } - private Task Event_GuildMemberAdded(DiscordClient d, GuildMemberAddEventArgs e) - { - d.Logger.LogDebug(BotEventId, "Event_GuildMemberAdded."); - - - - - return Task.CompletedTask; - } - private Task Event_GuildMemberRemoved(DiscordClient d, GuildMemberRemoveEventArgs e) - { - d.Logger.LogDebug(BotEventId, "Event_GuildMemberRemoved."); - return Task.CompletedTask; - } - private Task Event_GuildMembersChunked(DiscordClient d, GuildMembersChunkEventArgs e) - { - d.Logger.LogDebug(BotEventId, "Event_GuildMembersChunked."); - return Task.CompletedTask; - } - private Task Event_GuildMemberUpdated(DiscordClient d, GuildMemberUpdateEventArgs e) - { - d.Logger.LogDebug(BotEventId, "Event_GuildMemberUpdated."); - return Task.CompletedTask; - } - private Task Event_GuildRoleCreated(DiscordClient d, GuildRoleCreateEventArgs e) - { - d.Logger.LogDebug(BotEventId, "Event_GuildRoleCreated."); - return Task.CompletedTask; - } - private Task Event_GuildRoleDeleted(DiscordClient d, GuildRoleDeleteEventArgs e) - { - d.Logger.LogDebug(BotEventId, "Event_GuildRoleDeleted."); - return Task.CompletedTask; - } - private Task Event_GuildRoleUpdated(DiscordClient d, GuildRoleUpdateEventArgs e) - { - d.Logger.LogDebug(BotEventId, "Event_GuildRoleUpdated."); - return Task.CompletedTask; - } - private Task Event_GuildUnavailable(DiscordClient d, GuildDeleteEventArgs e) - { - d.Logger.LogDebug(BotEventId, "Event_GuildUnavailable."); - return Task.CompletedTask; - } - private Task Event_GuildUpdated(DiscordClient d, GuildUpdateEventArgs e) - { - d.Logger.LogDebug(BotEventId, "Event_GuildUpdated."); - return Task.CompletedTask; - } - private Task Event_Heartbeated(DiscordClient d, HeartbeatEventArgs e) - { - d.Logger.LogDebug(BotEventId, "Event_Heartbeated."); - return Task.CompletedTask; - } - private Task Event_InviteCreated(DiscordClient d, InviteCreateEventArgs e) - { - d.Logger.LogDebug(BotEventId, "Event_InviteCreated."); - return Task.CompletedTask; - } - private Task Event_InviteDeleted(DiscordClient d, InviteDeleteEventArgs e) - { - d.Logger.LogDebug(BotEventId, "Event_InviteDeleted."); - return Task.CompletedTask; - } - private Task Event_MessageAcknowledged(DiscordClient d, MessageAcknowledgeEventArgs e) - { - d.Logger.LogDebug(BotEventId, "Event_MessageAcknowledged."); - return Task.CompletedTask; - } - private Task Event_MessageDeleted(DiscordClient d, MessageDeleteEventArgs e) - { - d.Logger.LogDebug(BotEventId, "Event_MessageDeleted."); - return Task.CompletedTask; - } - private Task Event_MessageReactionAdded(DiscordClient d, MessageReactionAddEventArgs e) - { - d.Logger.LogDebug(BotEventId, "Event_MessageReactionAdded."); - return Task.CompletedTask; - } - private Task Event_MessageReactionRemoved(DiscordClient d, MessageReactionRemoveEventArgs e) - { - d.Logger.LogDebug(BotEventId, "Event_MessageReactionRemoved."); - return Task.CompletedTask; - } - private Task Event_MessageReactionRemovedEmoji(DiscordClient d, MessageReactionRemoveEmojiEventArgs e) - { - d.Logger.LogDebug(BotEventId, "Event_MessageReactionRemovedEmoji."); - return Task.CompletedTask; - } - private Task Event_MessageReactionsCleared(DiscordClient d, MessageReactionsClearEventArgs e) - { - d.Logger.LogDebug(BotEventId, "Event_MessageReactionsCleared."); - return Task.CompletedTask; - } - private Task Event_MessagesBulkDeleted(DiscordClient d, MessageBulkDeleteEventArgs e) - { - d.Logger.LogDebug(BotEventId, "Event_MessagesBulkDeleted."); - return Task.CompletedTask; - } - private Task Event_MessageUpdated(DiscordClient d, MessageUpdateEventArgs e) - { - d.Logger.LogDebug(BotEventId, "Event_MessageUpdated."); - return Task.CompletedTask; - } - private Task Event_PresenceUpdated(DiscordClient d, PresenceUpdateEventArgs e) - { - d.Logger.LogDebug(BotEventId, "Event_PresenceUpdated."); - return Task.CompletedTask; - } - private Task Event_Ready(DiscordClient d, ReadyEventArgs e) - { - // let's log the fact that this event occured - d.Logger.LogInformation(BotEventId, $"Client is ready to process events. Client is in: {d.Guilds.Count} Guilds."); - - // since this method is not async, let's return - // a completed task, so that no additional work - // is done - return Task.CompletedTask; - } - private Task Event_Resumed(DiscordClient d, ReadyEventArgs e) - { - d.Logger.LogDebug(BotEventId, "Event_Resumed."); - return Task.CompletedTask; - } - private Task Event_SocketClosed(DiscordClient d, SocketCloseEventArgs e) - { - d.Logger.LogDebug(BotEventId, "Event_SocketClosed."); - return Task.CompletedTask; - } - private Task Event_SocketErrored(DiscordClient d, SocketErrorEventArgs e) - { - d.Logger.LogDebug(BotEventId, "Event_SocketErrored."); - return Task.CompletedTask; - } - private Task Event_SocketOpened(DiscordClient d, SocketEventArgs e) - { - d.Logger.LogDebug(BotEventId, "Event_SocketOpened."); - return Task.CompletedTask; - } - private Task Event_TypingStarted(DiscordClient d, TypingStartEventArgs e) - { - d.Logger.LogDebug(BotEventId, "Event_TypingStarted."); - return Task.CompletedTask; - } - private Task Event_UnknownEvent(DiscordClient d, UnknownEventArgs e) - { - d.Logger.LogDebug(BotEventId, "Event_UnknownEvent."); - return Task.CompletedTask; - } - private Task Event_UserSettingsUpdated(DiscordClient d, UserSettingsUpdateEventArgs e) - { - d.Logger.LogDebug(BotEventId, "Event_UserSettingsUpdated."); - return Task.CompletedTask; - } - private Task Event_UserUpdated(DiscordClient d, UserUpdateEventArgs e) - { - d.Logger.LogDebug(BotEventId, "Event_UserUpdated."); - return Task.CompletedTask; - } - private Task Event_VoiceServerUpdated(DiscordClient d, VoiceServerUpdateEventArgs e) - { - d.Logger.LogDebug(BotEventId, "Event_VoiceServerUpdated."); - return Task.CompletedTask; - } - private Task Event_VoiceStateUpdated(DiscordClient d, VoiceStateUpdateEventArgs e) - { - d.Logger.LogDebug(BotEventId, "Event_VoiceStateUpdated."); - return Task.CompletedTask; - } - private Task Event_WebhooksUpdated(DiscordClient d, WebhooksUpdateEventArgs e) - { - d.Logger.LogDebug(BotEventId, "Event_WebhooksUpdated."); - return Task.CompletedTask; - } - // this structure will hold data from config.json public struct ConfigJson { diff --git a/StarsiegeBot/WelcomeMessage.cs b/StarsiegeBot/WelcomeMessage.cs new file mode 100644 index 0000000..048f3e2 --- /dev/null +++ b/StarsiegeBot/WelcomeMessage.cs @@ -0,0 +1,59 @@ +#pragma warning disable IDE0060 // Remove unused parameter +using System; +using System.Diagnostics; +using System.IO; +using System.Threading.Tasks; +using DSharpPlus.CommandsNext; +using DSharpPlus.CommandsNext.Attributes; +using DSharpPlus.Entities; +using DSharpPlus.VoiceNext; +using System.Text.RegularExpressions; +using System.Linq; +using System.Collections.Generic; +using Newtonsoft.Json; +using System.Text; +using DSharpPlus; +using DSharpPlus.CommandsNext.Exceptions; +using DSharpPlus.EventArgs; +using DSharpPlus.VoiceNext.Codec; +using Microsoft.Extensions.Logging; +using DSharpPlus.Interactivity; +using DSharpPlus.Interactivity.Extensions; +using System.Threading; + +namespace StarsiegeBot +{ + [Group("welcome")] + class WelcomeMessage : BotSettings + { + [Command("enable")] + public async Task WelcomeEnabled(CommandContext ctx, bool enable) + { + await ctx.TriggerTypingAsync(); + string gId = ctx.Guild.Id.ToString(); + + GuildSettings[gId].UseWelcome = enable; + + await ctx.RespondAsync($"Use welcome message? {enable}"); + } + + [Command("Channel")] + public async Task WelcomeChannel(CommandContext ctx, [RemainingText]string here) + { + await ctx.TriggerTypingAsync(); + string gId = ctx.Guild.Id.ToString(); + GuildSettings[gId].WelcomeChannel = ctx.Channel; + await ctx.RespondAsync("This channel is the welcome channle now!"); + } + + [Command("Message")] + public async Task MessageOfWelcome(CommandContext ctx, [RemainingText]string msg) + { + await ctx.TriggerTypingAsync(); + string gId = ctx.Guild.Id.ToString(); + GuildSettings[gId].WelcomeMessage = msg; + await ctx.RespondAsync("welcome message set."); + } + + } +}