diff --git a/DisCatSharp/Enums/DiscordEvent.cs b/DisCatSharp/Enums/DiscordEvent.cs
index 42ef7d0d..fb855664 100644
--- a/DisCatSharp/Enums/DiscordEvent.cs
+++ b/DisCatSharp/Enums/DiscordEvent.cs
@@ -1,284 +1,299 @@
// This file is part of the DisCatSharp project, based off DSharpPlus.
//
// Copyright (c) 2021-2023 AITSYS
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.
#nullable enable
using System;
namespace DisCatSharp;
///
/// Methods marked with this attribute will be registered as modal handling methods.
///
[AttributeUsage(AttributeTargets.Method, AllowMultiple = true, Inherited = false)]
public class ModalInteractionAttribute : InteractionAttribute
{
///
/// The custom id to listen for.
///
internal readonly string CustomId;
///
/// Registers a method as modal handler.
///
/// The custom id of the modal to handle.
public ModalInteractionAttribute(string custom_id)
+ : base("InteractionCreated")
{
this.CustomId = custom_id;
}
}
///
/// Methods marked with this attribute will be registered as modal handling methods.
/// Modal custom ids will be checked with .
///
[AttributeUsage(AttributeTargets.Method, AllowMultiple = true, Inherited = false)]
public class ModalInteractionWithPrefixAttribute : InteractionAttribute
{
///
/// The custom id to listen for.
///
internal readonly string CustomIdPrefix;
///
/// Registers a method as modal handler.
///
/// The custom id prefix of the modal to handle.
public ModalInteractionWithPrefixAttribute(string custom_id_prefix)
+ : base("InteractionCreated", true)
{
this.CustomIdPrefix = custom_id_prefix;
}
}
///
/// Methods marked with this attribute will be registered as button handling methods.
///
[AttributeUsage(AttributeTargets.Method, AllowMultiple = true, Inherited = false)]
public class ButtonInteractionAttribute : InteractionAttribute
{
///
/// The custom id to listen for.
///
internal readonly string CustomId;
///
/// Registers a method as button handler.
///
/// The custom id of the button to handle.
public ButtonInteractionAttribute(string custom_id)
+ : base("ComponentInteractionCreated")
{
this.CustomId = custom_id;
}
}
///
/// Methods marked with this attribute will be registered as button handling methods.
/// Modal custom ids will be checked with .
///
[AttributeUsage(AttributeTargets.Method, AllowMultiple = true, Inherited = false)]
public class ButtonInteractionWithPrefixAttribute : InteractionAttribute
{
///
/// The custom id to listen for.
///
internal readonly string CustomIdPrefix;
///
/// Registers a method as button handler.
///
/// The custom id prefix of the button to handle.
public ButtonInteractionWithPrefixAttribute(string custom_id_prefix)
+ : base("ComponentInteractionCreated", true)
{
this.CustomIdPrefix = custom_id_prefix;
}
}
///
/// Methods marked with this attribute will be registered as select menu handling methods.
///
[AttributeUsage(AttributeTargets.Method, AllowMultiple = true, Inherited = false)]
public class SelectInteractionAttribute : InteractionAttribute
{
///
/// The custom id to listen for.
///
internal readonly string CustomId;
///
/// Registers a method as select menu handler.
///
/// The custom id of the select menu to handle.
public SelectInteractionAttribute(string custom_id)
+ : base("ComponentInteractionCreated")
{
this.CustomId = custom_id;
}
}
///
/// Methods marked with this attribute will be registered as select menu handling methods.
/// Modal custom ids will be checked with .
///
[AttributeUsage(AttributeTargets.Method, AllowMultiple = true, Inherited = false)]
public class SelectMenuInteractionWithPrefixAttribute : InteractionAttribute
{
///
/// The custom id to listen for.
///
internal readonly string CustomIdPrefix;
///
/// Registers a method as select menu handler.
///
/// The custom id prefix of the select menu to handle.
public SelectMenuInteractionWithPrefixAttribute(string custom_id_prefix)
+ : base("ComponentInteractionCreated", true)
{
this.CustomIdPrefix = custom_id_prefix;
}
}
[AttributeUsage(AttributeTargets.Method, AllowMultiple = true, Inherited = false)]
public class InteractionAttribute : Attribute
-{ }
+{
+ internal readonly string EventName;
+ internal readonly bool IsPrefixed;
+
+ public InteractionAttribute(string event_name, bool prefixed = false)
+ {
+ this.EventName = event_name;
+ this.IsPrefixed = prefixed;
+ }
+}
///
/// Methods marked with this attribute will be registered as event handling methods
/// if the associated type / an associated instance is being registered.
///
[AttributeUsage(AttributeTargets.Method)]
public class EventAttribute : Attribute
{
///
/// The event name to listen for.
///
internal readonly string? EventName;
public EventAttribute() { }
///
/// Registers a method as event handler.
///
/// The name of the event.
/// The attributed method's name will be used if null.
public EventAttribute(DiscordEvent evtn)
{
this.EventName = evtn.ToString();
}
}
///
/// Classes marked with this attribute will be considered for event handler registration from an assembly.
///
[AttributeUsage(AttributeTargets.Class, Inherited = false)]
public class EventHandlerAttribute : Attribute { }
///
/// All events available in for use with .
///
public enum DiscordEvent
{
ApplicationCommandCreated,
ApplicationCommandDeleted,
ApplicationCommandPermissionsUpdated,
ApplicationCommandUpdated,
ChannelCreated,
ChannelDeleted,
ChannelPinsUpdated,
ChannelUpdated,
ClientErrored,
ComponentInteractionCreated,
ContextMenuInteractionCreated,
DmChannelDeleted,
EmbeddedActivityUpdated,
GuildApplicationCommandCountUpdated,
GuildAvailable,
GuildBanAdded,
GuildBanRemoved,
GuildCreated,
GuildDeleted,
GuildDownloadCompleted,
GuildEmojisUpdated,
GuildIntegrationCreated,
GuildIntegrationDeleted,
GuildIntegrationsUpdated,
GuildIntegrationUpdated,
GuildMemberAdded,
GuildMemberRemoved,
GuildMembersChunked,
GuildMemberTimeoutAdded,
GuildMemberTimeoutChanged,
GuildMemberTimeoutRemoved,
GuildMemberUpdated,
GuildRoleCreated,
GuildRoleDeleted,
GuildRoleUpdated,
GuildScheduledEventCreated,
GuildScheduledEventDeleted,
GuildScheduledEventUpdated,
GuildScheduledEventUserAdded,
GuildScheduledEventUserRemoved,
GuildStickersUpdated,
GuildUnavailable,
GuildUpdated,
Heartbeated,
InteractionCreated,
InviteCreated,
InviteDeleted,
MessageAcknowledged,
MessageCreated,
MessageDeleted,
MessageReactionAdded,
MessageReactionRemoved,
MessageReactionRemovedEmoji,
MessageReactionsCleared,
MessagesBulkDeleted,
MessageUpdated,
PayloadReceived,
PresenceUpdated,
RateLimitHit,
Ready,
Resumed,
SocketClosed,
SocketErrored,
SocketOpened,
StageInstanceCreated,
StageInstanceDeleted,
StageInstanceUpdated,
ThreadCreated,
ThreadDeleted,
ThreadListSynced,
ThreadMembersUpdated,
ThreadMemberUpdated,
ThreadUpdated,
TypingStarted,
UnknownEvent,
UserSettingsUpdated,
UserUpdated,
VoiceServerUpdated,
VoiceStateUpdated,
WebhooksUpdated,
Zombied,
AutomodRuleCreated,
AutomodRuleUpdated,
AutomodRuleDeleted,
AutomodActionExecuted,
GuildAuditLogEntryCreated
}