api-surface #1

Merged
luna merged 51 commits from api-surface into mistress 2026-07-05 14:43:13 +00:00
3 changed files with 331 additions and 0 deletions
Showing only changes of commit 11a8e15b45 - Show all commits

feat(model): interaction/component/audit/automod/event enum + flags tables

Luna 2026-07-05 04:27:25 -03:00

View file

@ -122,3 +122,277 @@ end
defmodule Dexcord.ReactionType do
use Dexcord.Enum, normal: 0, burst: 1
end
defmodule Dexcord.InteractionType do
use Dexcord.Enum,
ping: 1,
application_command: 2,
message_component: 3,
application_command_autocomplete: 4,
modal_submit: 5
end
defmodule Dexcord.InteractionContextType do
use Dexcord.Enum, guild: 0, bot_dm: 1, private_channel: 2
end
defmodule Dexcord.ApplicationCommandType do
use Dexcord.Enum, chat_input: 1, user: 2, message: 3, primary_entry_point: 4
end
defmodule Dexcord.ApplicationCommandOptionType do
use Dexcord.Enum,
sub_command: 1,
sub_command_group: 2,
string: 3,
integer: 4,
boolean: 5,
user: 6,
channel: 7,
role: 8,
mentionable: 9,
number: 10,
attachment: 11
end
defmodule Dexcord.EntryPointHandlerType do
use Dexcord.Enum, app_handler: 1, discord_launch_activity: 2
end
defmodule Dexcord.ApplicationCommandPermissionType do
use Dexcord.Enum, role: 1, user: 2, channel: 3
end
# Component types 15, 16, 20 are unassigned in the current docs — real gaps.
defmodule Dexcord.ComponentType do
use Dexcord.Enum,
action_row: 1,
button: 2,
string_select: 3,
text_input: 4,
user_select: 5,
role_select: 6,
mentionable_select: 7,
channel_select: 8,
section: 9,
text_display: 10,
thumbnail: 11,
media_gallery: 12,
file: 13,
separator: 14,
container: 17,
label: 18,
file_upload: 19,
radio_group: 21,
checkbox_group: 22,
checkbox: 23
end
defmodule Dexcord.ButtonStyle do
use Dexcord.Enum, primary: 1, secondary: 2, success: 3, danger: 4, link: 5, premium: 6
end
defmodule Dexcord.TextInputStyle do
use Dexcord.Enum, short: 1, paragraph: 2
end
defmodule Dexcord.WebhookType do
use Dexcord.Enum, incoming: 1, channel_follower: 2, application: 3
end
defmodule Dexcord.InviteType do
use Dexcord.Enum, guild: 0, group_dm: 1, friend: 2
end
defmodule Dexcord.InviteTargetType do
use Dexcord.Enum, stream: 1, embedded_application: 2
end
# The complete AuditLogEvent table. The sparse ranges are REAL — Discord
# reserves whole numeric bands per object family, leaving large gaps.
defmodule Dexcord.AuditLogEvent do
use Dexcord.Enum,
guild_update: 1,
channel_create: 10,
channel_update: 11,
channel_delete: 12,
channel_overwrite_create: 13,
channel_overwrite_update: 14,
channel_overwrite_delete: 15,
member_kick: 20,
member_prune: 21,
member_ban_add: 22,
member_ban_remove: 23,
member_update: 24,
member_role_update: 25,
member_move: 26,
member_disconnect: 27,
bot_add: 28,
role_create: 30,
role_update: 31,
role_delete: 32,
invite_create: 40,
invite_update: 41,
invite_delete: 42,
webhook_create: 50,
webhook_update: 51,
webhook_delete: 52,
emoji_create: 60,
emoji_update: 61,
emoji_delete: 62,
message_delete: 72,
message_bulk_delete: 73,
message_pin: 74,
message_unpin: 75,
integration_create: 80,
integration_update: 81,
integration_delete: 82,
stage_instance_create: 83,
stage_instance_update: 84,
stage_instance_delete: 85,
sticker_create: 90,
sticker_update: 91,
sticker_delete: 92,
guild_scheduled_event_create: 100,
guild_scheduled_event_update: 101,
guild_scheduled_event_delete: 102,
thread_create: 110,
thread_update: 111,
thread_delete: 112,
application_command_permission_update: 121,
soundboard_sound_create: 130,
soundboard_sound_update: 131,
soundboard_sound_delete: 132,
auto_moderation_rule_create: 140,
auto_moderation_rule_update: 141,
auto_moderation_rule_delete: 142,
auto_moderation_block_message: 143,
auto_moderation_flag_to_channel: 144,
auto_moderation_user_communication_disabled: 145,
auto_moderation_quarantine_user: 146,
creator_monetization_request_created: 150,
creator_monetization_terms_accepted: 151,
onboarding_prompt_create: 163,
onboarding_prompt_update: 164,
onboarding_prompt_delete: 165,
onboarding_create: 166,
onboarding_update: 167,
home_settings_create: 190,
home_settings_update: 191,
voice_channel_status_create: 192,
voice_channel_status_delete: 193
end
# Trigger type 2 was removed — real gap.
defmodule Dexcord.AutoModerationTriggerType do
use Dexcord.Enum, keyword: 1, spam: 3, keyword_preset: 4, mention_spam: 5, member_profile: 6
end
defmodule Dexcord.KeywordPresetType do
use Dexcord.Enum, profanity: 1, sexual_content: 2, slurs: 3
end
defmodule Dexcord.AutoModerationEventType do
use Dexcord.Enum, message_send: 1, member_update: 2
end
defmodule Dexcord.AutoModerationActionType do
use Dexcord.Enum,
block_message: 1,
send_alert_message: 2,
timeout: 3,
block_member_interaction: 4
end
defmodule Dexcord.GuildScheduledEventPrivacyLevel do
use Dexcord.Enum, guild_only: 2
end
defmodule Dexcord.GuildScheduledEventEntityType do
use Dexcord.Enum, stage_instance: 1, voice: 2, external: 3
end
defmodule Dexcord.GuildScheduledEventStatus do
use Dexcord.Enum, scheduled: 1, active: 2, completed: 3, canceled: 4
end
defmodule Dexcord.RecurrenceRuleFrequency do
use Dexcord.Enum, yearly: 0, monthly: 1, weekly: 2, daily: 3
end
defmodule Dexcord.RecurrenceRuleWeekday do
use Dexcord.Enum,
monday: 0,
tuesday: 1,
wednesday: 2,
thursday: 3,
friday: 4,
saturday: 5,
sunday: 6
end
defmodule Dexcord.RecurrenceRuleMonth do
use Dexcord.Enum,
january: 1,
february: 2,
march: 3,
april: 4,
may: 5,
june: 6,
july: 7,
august: 8,
september: 9,
october: 10,
november: 11,
december: 12
end
defmodule Dexcord.PollLayoutType do
use Dexcord.Enum, default: 1
end
defmodule Dexcord.ApplicationIntegrationType do
use Dexcord.Enum, guild_install: 0, user_install: 1
end
defmodule Dexcord.EventWebhooksStatus do
use Dexcord.Enum, disabled: 1, enabled: 2, disabled_by_discord: 3
end
defmodule Dexcord.TeamMembershipState do
use Dexcord.Enum, invited: 1, accepted: 2
end
defmodule Dexcord.OnboardingMode do
use Dexcord.Enum, onboarding_default: 0, onboarding_advanced: 1
end
defmodule Dexcord.OnboardingPromptType do
use Dexcord.Enum, multiple_choice: 0, dropdown: 1
end
defmodule Dexcord.IntegrationExpireBehavior do
use Dexcord.Enum, remove_role: 0, kick: 1
end
defmodule Dexcord.ConnectionVisibility do
use Dexcord.Enum, none: 0, everyone: 1
end
defmodule Dexcord.ActivityType do
use Dexcord.Enum,
playing: 0,
streaming: 1,
listening: 2,
watching: 3,
custom: 4,
competing: 5
end
defmodule Dexcord.StatusDisplayType do
use Dexcord.Enum, name: 0, state: 1, details: 2
end
defmodule Dexcord.VoiceAnimationType do
use Dexcord.Enum, premium: 0, basic: 1
end

View file

@ -131,3 +131,34 @@ end
defmodule Dexcord.RoleFlags do
use Dexcord.Flags, in_prompt: 0
end
defmodule Dexcord.ApplicationFlags do
use Dexcord.Flags,
application_auto_moderation_rule_create_badge: 6,
gateway_presence: 12,
gateway_presence_limited: 13,
gateway_guild_members: 14,
gateway_guild_members_limited: 15,
verification_pending_guild_limit: 16,
embedded: 17,
gateway_message_content: 18,
gateway_message_content_limited: 19,
application_command_badge: 23
end
defmodule Dexcord.InviteFlags do
use Dexcord.Flags, is_guest_invite: 0
end
defmodule Dexcord.ActivityFlags do
use Dexcord.Flags,
instance: 0,
join: 1,
spectate: 2,
join_request: 3,
sync: 4,
play: 5,
party_privacy_friends: 6,
party_privacy_voice_channel: 7,
embedded: 8
end

View file

@ -36,4 +36,30 @@ defmodule Dexcord.ModelEnumsTest do
assert Dexcord.UserFlags.to_list(0b1_0000_0000_0000_0001) == [:staff, :verified_bot]
end
end
describe "AuditLogEvent" do
test "decodes the highest live value" do
assert Dexcord.AuditLogEvent.decode(193) == :voice_channel_status_delete
end
test "sparse gap 2 is unknown" do
assert Dexcord.AuditLogEvent.decode(2) == {:unknown, 2}
end
end
describe "ComponentType" do
test "decodes a live value" do
assert Dexcord.ComponentType.decode(23) == :checkbox
end
test "unassigned type 15 is unknown" do
assert Dexcord.ComponentType.decode(15) == {:unknown, 15}
end
end
describe "AutoModerationTriggerType" do
test "removed trigger type 2 is unknown" do
assert Dexcord.AutoModerationTriggerType.decode(2) == {:unknown, 2}
end
end
end