///|
/// Gateway intents that can cause this dispatch event to be delivered.
///
/// Events shared by guild and direct-message contexts return the union of
/// both intents. `MESSAGE_CONTENT` is deliberately absent because it controls
/// field visibility rather than event delivery.
pub fn EventKind::required_intents(self : EventKind) -> Intents {
  match self {
    KGuildCreate
    | KGuildDelete
    | KGuildRoleCreate
    | KGuildRoleDelete
    | KGuildRoleUpdate
    | KGuildUpdate
    | KChannelCreate
    | KChannelDelete
    | KChannelUpdate
    | KStageInstanceCreate
    | KStageInstanceDelete
    | KStageInstanceUpdate
    | KThreadCreate
    | KThreadDelete
    | KThreadListSync
    | KThreadMemberUpdate
    | KThreadUpdate
    | KVoiceChannelStartTimeUpdate
    | KVoiceChannelStatusUpdate => Intents::guilds()
    KChannelPinsUpdate => Intents::guilds() | Intents::direct_messages()
    KThreadMembersUpdate => Intents::guilds() | Intents::guild_members()
    KGuildMemberAdd | KGuildMemberRemove | KGuildMemberUpdate =>
      Intents::guild_members()
    KGuildAuditLogEntryCreate | KGuildBanAdd | KGuildBanRemove =>
      Intents::guild_moderation()
    KGuildEmojisUpdate
    | KGuildSoundboardSoundCreate
    | KGuildSoundboardSoundDelete
    | KGuildSoundboardSoundsUpdate
    | KGuildSoundboardSoundUpdate
    | KGuildStickersUpdate => Intents::guild_expressions()
    KGuildIntegrationsUpdate
    | KIntegrationCreate
    | KIntegrationDelete
    | KIntegrationUpdate => Intents::guild_integrations()
    KWebhooksUpdate => Intents::guild_webhooks()
    KInviteCreate | KInviteDelete => Intents::guild_invites()
    KVoiceChannelEffectSend | KVoiceStateUpdate => Intents::guild_voice_states()
    KPresenceUpdate => Intents::guild_presences()
    KMessageCreate | KMessageDelete | KMessageUpdate =>
      Intents::guild_messages() | Intents::direct_messages()
    KMessageDeleteBulk => Intents::guild_messages()
    KMessageReactionAdd
    | KMessageReactionRemove
    | KMessageReactionRemoveAll
    | KMessageReactionRemoveEmoji =>
      Intents::guild_message_reactions() | Intents::direct_message_reactions()
    KTypingStart =>
      Intents::guild_message_typing() | Intents::direct_message_typing()
    KGuildScheduledEventCreate
    | KGuildScheduledEventDelete
    | KGuildScheduledEventUpdate
    | KGuildScheduledEventUserAdd
    | KGuildScheduledEventUserRemove => Intents::guild_scheduled_events()
    KAutoModerationRuleCreate
    | KAutoModerationRuleDelete
    | KAutoModerationRuleUpdate => Intents::auto_moderation_configuration()
    KAutoModerationActionExecution => Intents::auto_moderation_execution()
    KMessagePollVoteAdd | KMessagePollVoteRemove =>
      Intents::guild_message_polls() | Intents::direct_message_polls()
    // These application-scoped dispatches are not gated by gateway intents.
    KApplicationCommandPermissionsUpdate
    | KSubscriptionCreate
    | KSubscriptionDelete
    | KSubscriptionUpdate => Intents::none()
    KChannelInfo
    | KEntitlementCreate
    | KEntitlementDelete
    | KEntitlementUpdate
    | KGuildMembersChunk
    | KInteractionCreate
    | KRateLimited
    | KReady
    | KResumed
    | KSoundboardSounds
    | KUserUpdate
    | KVoiceServerUpdate
    | KUnknown => Intents::none()
  }
}