From b9711a51cab8eb876ad8a46d6a1ab1298feb4ed0 Mon Sep 17 00:00:00 2001 From: Valithor Obsidion Date: Mon, 24 Nov 2025 12:49:14 -0500 Subject: [PATCH 1/5] Use non-deprecated classes --- src/Discord/Builders/Components/ActionRow.php | 11 ++++- src/Discord/Builders/Components/Button.php | 6 +-- .../Builders/Components/ChannelSelect.php | 2 +- src/Discord/Builders/Components/Component.php | 2 +- .../Builders/Components/ComponentObject.php | 11 +++++ src/Discord/Builders/Components/Container.php | 2 +- src/Discord/Builders/Components/File.php | 2 +- .../Builders/Components/FileUpload.php | 2 +- src/Discord/Builders/Components/Label.php | 2 +- .../Builders/Components/MediaGallery.php | 2 +- .../Builders/Components/MentionableSelect.php | 2 +- .../Builders/Components/RoleSelect.php | 2 +- src/Discord/Builders/Components/Section.php | 2 +- .../Builders/Components/SelectMenu.php | 2 +- src/Discord/Builders/Components/Separator.php | 2 +- .../Builders/Components/StringSelect.php | 2 +- .../Builders/Components/TextDisplay.php | 2 +- src/Discord/Builders/Components/TextInput.php | 4 +- src/Discord/Builders/Components/Thumbnail.php | 2 +- .../Builders/Components/UserSelect.php | 2 +- src/Discord/Builders/MessageBuilder.php | 7 ++-- src/Discord/Builders/ModalBuilder.php | 2 +- src/Discord/Parts/Channel/Message.php | 3 +- .../Parts/Channel/Message/ActionRow.php | 2 +- .../Parts/Channel/Message/Component.php | 42 +++++++++---------- src/Discord/Parts/Channel/Message/Section.php | 2 +- 26 files changed, 70 insertions(+), 52 deletions(-) diff --git a/src/Discord/Builders/Components/ActionRow.php b/src/Discord/Builders/Components/ActionRow.php index ff5b9b846..36c2f3d12 100644 --- a/src/Discord/Builders/Components/ActionRow.php +++ b/src/Discord/Builders/Components/ActionRow.php @@ -27,7 +27,7 @@ */ class ActionRow extends Layout { - /** Usage of ActionRow in Modal is deprecated. Use `Component::Label` as the top-level container. */ + /** Usage of ActionRow in Modal is deprecated. Use `ComponentObject::Label` as the top-level container. */ public const USAGE = ['Message', 'Modal']; /** @@ -35,7 +35,7 @@ class ActionRow extends Layout * * @var int */ - protected $type = Component::TYPE_ACTION_ROW; + protected $type = ComponentObject::TYPE_ACTION_ROW; /** * Components contained by the action row. @@ -44,6 +44,13 @@ class ActionRow extends Layout */ protected $components = []; + public function __construct() + { + parent::__construct(); + + $this->components = []; + } + /** * Creates a new action row. * diff --git a/src/Discord/Builders/Components/Button.php b/src/Discord/Builders/Components/Button.php index f624f7179..a05c034f9 100644 --- a/src/Discord/Builders/Components/Button.php +++ b/src/Discord/Builders/Components/Button.php @@ -63,7 +63,7 @@ class Button extends Interactive * * @var int */ - protected $type = Component::TYPE_BUTTON; + protected $type = ComponentObject::TYPE_BUTTON; /** * Style of button. @@ -214,7 +214,7 @@ public static function success(?string $custom_id = null) $button = new self(self::STYLE_SUCCESS); if (! isset($custom_id)) { - $custom_id = self::generateUuid(); + $custom_id = ComponentObject::generateUuid(); } return $button->setCustomId($custom_id); @@ -519,7 +519,7 @@ protected function createListener(callable $callback, bool $oneOff = false, int| $timer = null; $listener = function (Interaction $interaction) use ($callback, $oneOff, &$timer) { - if ($interaction->data->component_type !== Component::TYPE_BUTTON || $interaction->data->custom_id !== $this->custom_id) { + if ($interaction->data->component_type !== ComponentObject::TYPE_BUTTON || $interaction->data->custom_id !== $this->custom_id) { return; } diff --git a/src/Discord/Builders/Components/ChannelSelect.php b/src/Discord/Builders/Components/ChannelSelect.php index e31f3cc37..5109c1277 100644 --- a/src/Discord/Builders/Components/ChannelSelect.php +++ b/src/Discord/Builders/Components/ChannelSelect.php @@ -37,7 +37,7 @@ class ChannelSelect extends SelectMenu * * @var int */ - protected $type = Component::TYPE_CHANNEL_SELECT; + protected $type = ComponentObject::TYPE_CHANNEL_SELECT; /** * List of channel types to include. diff --git a/src/Discord/Builders/Components/Component.php b/src/Discord/Builders/Components/Component.php index fae921600..3199ff2e2 100644 --- a/src/Discord/Builders/Components/Component.php +++ b/src/Discord/Builders/Components/Component.php @@ -69,7 +69,7 @@ abstract class Component extends Builder implements JsonSerializable /** Undocumented. */ public const TYPE_CHECKPOINT_CARD = 20; - /** @deprecated 7.4.0 Use `Component::TYPE_STRING_SELECT` */ + /** @deprecated 7.4.0 Use `ComponentObject::TYPE_STRING_SELECT` */ public const TYPE_SELECT_MENU = 3; /** diff --git a/src/Discord/Builders/Components/ComponentObject.php b/src/Discord/Builders/Components/ComponentObject.php index 2af882266..50bba68e7 100644 --- a/src/Discord/Builders/Components/ComponentObject.php +++ b/src/Discord/Builders/Components/ComponentObject.php @@ -13,6 +13,8 @@ namespace Discord\Builders\Components; +use Discord\Parts\Channel\Message\Component as ComponentPart; + /** * Components allow you to style and structure your messages, modals, and interactions. * They are interactive elements that can create rich user experiences in your Discord applications. @@ -28,6 +30,15 @@ abstract class ComponentObject extends Component { public const USAGE = []; + /** + * Available components and their respective classes. + * + * Alias of Component::TYPES. + * + * @var array + */ + public const TYPES = ComponentPart::TYPES; + /** * The type of the component. * diff --git a/src/Discord/Builders/Components/Container.php b/src/Discord/Builders/Components/Container.php index 38dd2ca88..a1fbe0054 100644 --- a/src/Discord/Builders/Components/Container.php +++ b/src/Discord/Builders/Components/Container.php @@ -36,7 +36,7 @@ class Container extends Layout implements Contracts\ComponentV2 * * @var int */ - protected $type = Component::TYPE_CONTAINER; + protected $type = ComponentObject::TYPE_CONTAINER; /** * Array of components. diff --git a/src/Discord/Builders/Components/File.php b/src/Discord/Builders/Components/File.php index 6d02bb489..8f2f10fbd 100644 --- a/src/Discord/Builders/Components/File.php +++ b/src/Discord/Builders/Components/File.php @@ -36,7 +36,7 @@ class File extends Content implements Contracts\ComponentV2 * * @var int */ - protected $type = Component::TYPE_FILE; + protected $type = ComponentObject::TYPE_FILE; /** * The file to be displayed. diff --git a/src/Discord/Builders/Components/FileUpload.php b/src/Discord/Builders/Components/FileUpload.php index 028e4995c..bcb008855 100644 --- a/src/Discord/Builders/Components/FileUpload.php +++ b/src/Discord/Builders/Components/FileUpload.php @@ -35,7 +35,7 @@ class FileUpload extends Interactive * * @var int */ - protected $type = Component::TYPE_FILE_UPLOAD; + protected $type = ComponentObject::TYPE_FILE_UPLOAD; /** * Minimum number of files that can be uploaded. diff --git a/src/Discord/Builders/Components/Label.php b/src/Discord/Builders/Components/Label.php index 68d70b83d..f3f0d2e0c 100644 --- a/src/Discord/Builders/Components/Label.php +++ b/src/Discord/Builders/Components/Label.php @@ -39,7 +39,7 @@ class Label extends Layout * * @var int */ - protected $type = Component::TYPE_LABEL; + protected $type = ComponentObject::TYPE_LABEL; /** * The text for the label. diff --git a/src/Discord/Builders/Components/MediaGallery.php b/src/Discord/Builders/Components/MediaGallery.php index fbfa8414f..a8f142041 100644 --- a/src/Discord/Builders/Components/MediaGallery.php +++ b/src/Discord/Builders/Components/MediaGallery.php @@ -33,7 +33,7 @@ class MediaGallery extends Content implements Contracts\ComponentV2 * * @var int */ - protected $type = Component::TYPE_MEDIA_GALLERY; + protected $type = ComponentObject::TYPE_MEDIA_GALLERY; /** * Array of media gallery items. diff --git a/src/Discord/Builders/Components/MentionableSelect.php b/src/Discord/Builders/Components/MentionableSelect.php index 7b1b19adf..5be60d6de 100644 --- a/src/Discord/Builders/Components/MentionableSelect.php +++ b/src/Discord/Builders/Components/MentionableSelect.php @@ -36,7 +36,7 @@ class MentionableSelect extends SelectMenu * * @var int */ - protected $type = Component::TYPE_MENTIONABLE_SELECT; + protected $type = ComponentObject::TYPE_MENTIONABLE_SELECT; /** * Set if this component is required to be filled, default false. (Modal only). diff --git a/src/Discord/Builders/Components/RoleSelect.php b/src/Discord/Builders/Components/RoleSelect.php index de10cf03c..2a65a2be8 100644 --- a/src/Discord/Builders/Components/RoleSelect.php +++ b/src/Discord/Builders/Components/RoleSelect.php @@ -36,7 +36,7 @@ class RoleSelect extends SelectMenu * * @var int */ - protected $type = Component::TYPE_ROLE_SELECT; + protected $type = ComponentObject::TYPE_ROLE_SELECT; /** * Set if this component is required to be filled, default false. (Modal only). diff --git a/src/Discord/Builders/Components/Section.php b/src/Discord/Builders/Components/Section.php index 7a1bed14d..bc2fc2a9c 100644 --- a/src/Discord/Builders/Components/Section.php +++ b/src/Discord/Builders/Components/Section.php @@ -34,7 +34,7 @@ class Section extends Layout implements Contracts\ComponentV2 * * @var int */ - protected $type = Component::TYPE_SECTION; + protected $type = ComponentObject::TYPE_SECTION; /** * Array of text display components. diff --git a/src/Discord/Builders/Components/SelectMenu.php b/src/Discord/Builders/Components/SelectMenu.php index 0a52277af..0cd24050a 100644 --- a/src/Discord/Builders/Components/SelectMenu.php +++ b/src/Discord/Builders/Components/SelectMenu.php @@ -42,7 +42,7 @@ abstract class SelectMenu extends Interactive * * @var int */ - protected $type = Component::TYPE_SELECT_MENU; // Default type + protected $type = ComponentObject::TYPE_STRING_SELECT; // Default type /** * Custom ID to identify the select menu. diff --git a/src/Discord/Builders/Components/Separator.php b/src/Discord/Builders/Components/Separator.php index 743262639..2f25fcad7 100644 --- a/src/Discord/Builders/Components/Separator.php +++ b/src/Discord/Builders/Components/Separator.php @@ -41,7 +41,7 @@ class Separator extends Layout implements Contracts\ComponentV2 * * @var int */ - protected $type = Component::TYPE_SEPARATOR; + protected $type = ComponentObject::TYPE_SEPARATOR; /** * Whether the separator is a divider. diff --git a/src/Discord/Builders/Components/StringSelect.php b/src/Discord/Builders/Components/StringSelect.php index 19cdef2a8..f0de6352f 100644 --- a/src/Discord/Builders/Components/StringSelect.php +++ b/src/Discord/Builders/Components/StringSelect.php @@ -36,7 +36,7 @@ class StringSelect extends SelectMenu * * @var int */ - protected $type = Component::TYPE_STRING_SELECT; + protected $type = ComponentObject::TYPE_STRING_SELECT; /** * Array of options that the select menu has. diff --git a/src/Discord/Builders/Components/TextDisplay.php b/src/Discord/Builders/Components/TextDisplay.php index 2eea2707c..b3bb40dae 100644 --- a/src/Discord/Builders/Components/TextDisplay.php +++ b/src/Discord/Builders/Components/TextDisplay.php @@ -33,7 +33,7 @@ class TextDisplay extends Content implements Contracts\ComponentV2 * * @var int */ - protected $type = Component::TYPE_TEXT_DISPLAY; + protected $type = ComponentObject::TYPE_TEXT_DISPLAY; /** * Content of the text display. diff --git a/src/Discord/Builders/Components/TextInput.php b/src/Discord/Builders/Components/TextInput.php index 07b995aa6..5969e380f 100644 --- a/src/Discord/Builders/Components/TextInput.php +++ b/src/Discord/Builders/Components/TextInput.php @@ -45,7 +45,7 @@ class TextInput extends Interactive * * @var int */ - protected $type = Component::TYPE_TEXT_INPUT; + protected $type = ComponentObject::TYPE_TEXT_INPUT; /** * Style of text input. @@ -57,7 +57,7 @@ class TextInput extends Interactive /** * Label for the text input. * - * @deprecated Use a top-level `Component::Label` + * @deprecated Use a top-level `ComponentObject::Label` * * @var string|null */ diff --git a/src/Discord/Builders/Components/Thumbnail.php b/src/Discord/Builders/Components/Thumbnail.php index 4864fb31a..d36deaebf 100644 --- a/src/Discord/Builders/Components/Thumbnail.php +++ b/src/Discord/Builders/Components/Thumbnail.php @@ -37,7 +37,7 @@ class Thumbnail extends Content implements Contracts\ComponentV2 * * @var int */ - protected $type = Component::TYPE_THUMBNAIL; + protected $type = ComponentObject::TYPE_THUMBNAIL; /** * Media item for the thumbnail. diff --git a/src/Discord/Builders/Components/UserSelect.php b/src/Discord/Builders/Components/UserSelect.php index 41da9d28b..68510a6d7 100644 --- a/src/Discord/Builders/Components/UserSelect.php +++ b/src/Discord/Builders/Components/UserSelect.php @@ -35,7 +35,7 @@ class UserSelect extends SelectMenu * * @var int */ - protected $type = Component::TYPE_USER_SELECT; + protected $type = ComponentObject::TYPE_USER_SELECT; /** * Set if this component is required to be filled, default false. (Modal only). diff --git a/src/Discord/Builders/MessageBuilder.php b/src/Discord/Builders/MessageBuilder.php index 90a5f697a..ab8fc6cfd 100644 --- a/src/Discord/Builders/MessageBuilder.php +++ b/src/Discord/Builders/MessageBuilder.php @@ -14,7 +14,6 @@ namespace Discord\Builders; use Discord\Builders\Components\ActionRow; -use Discord\Builders\Components\Component; use Discord\Builders\Components\ComponentObject; use Discord\Builders\Components\Contracts\ComponentV2; use Discord\Builders\Components\Interactive; @@ -24,7 +23,7 @@ use Discord\Parts\Channel\Attachment; use Discord\Parts\Channel\Message; use Discord\Parts\Channel\Message\AllowedMentions; -use Discord\Parts\Channel\Poll\Poll; +use Discord\Parts\Channel\Poll\PollCreateRequest as Poll; use Discord\Parts\Embed\Embed; use Discord\Parts\Guild\Sticker; use JsonSerializable; @@ -536,7 +535,7 @@ public function countTotalComponents(): int * * @return $this */ - public function removeComponent(Component $component): self + public function removeComponent($component): self { if (! isset($this->components)) { return $this; @@ -787,7 +786,7 @@ public function clearAttachments(): self * * @return $this */ - public function setPoll(Poll|null $poll): self + public function setPoll($poll = null): self { $this->poll = $poll; diff --git a/src/Discord/Builders/ModalBuilder.php b/src/Discord/Builders/ModalBuilder.php index 1932ed3c6..21023b4a1 100644 --- a/src/Discord/Builders/ModalBuilder.php +++ b/src/Discord/Builders/ModalBuilder.php @@ -163,7 +163,7 @@ public function setComponents(...$components): self * * Only ActionRow, TextDisplay, and Label components are allowed. * - * Using ActionRow in modals is now deprecated. Use `Component::Label` as the top level component. + * Using ActionRow in modals is now deprecated. Use `ComponentObject::Label` as the top level component. * * @param ComponentObject $component * diff --git a/src/Discord/Parts/Channel/Message.php b/src/Discord/Parts/Channel/Message.php index a98eb3163..a70f81f62 100644 --- a/src/Discord/Parts/Channel/Message.php +++ b/src/Discord/Parts/Channel/Message.php @@ -14,6 +14,7 @@ namespace Discord\Parts\Channel; use Carbon\Carbon; +use Discord\Builders\Components\ComponentObject; use Discord\Builders\MessageBuilder; use Discord\Helpers\Collection; use Discord\Helpers\ExCollectionInterface; @@ -782,7 +783,7 @@ protected function getEditedTimestampAttribute(): ?Carbon */ protected function getComponentsAttribute(): ExCollectionInterface { - return $this->attributeTypedCollectionHelper(Component::class, 'components'); + return $this->attributeTypedCollectionHelper(ComponentObject::class, 'components'); } /** diff --git a/src/Discord/Parts/Channel/Message/ActionRow.php b/src/Discord/Parts/Channel/Message/ActionRow.php index 7ae83e581..5e26089d1 100644 --- a/src/Discord/Parts/Channel/Message/ActionRow.php +++ b/src/Discord/Parts/Channel/Message/ActionRow.php @@ -16,7 +16,7 @@ /** * An Action Row is a top-level layout component used in messages. * - * Using ActionRows in modals is now deprecated - use Component::Label as the top level component! + * Using ActionRows in modals is now deprecated - use ComponentObject::Label as the top level component! * * Action Rows can contain: * diff --git a/src/Discord/Parts/Channel/Message/Component.php b/src/Discord/Parts/Channel/Message/Component.php index a071ee4dc..766164439 100644 --- a/src/Discord/Parts/Channel/Message/Component.php +++ b/src/Discord/Parts/Channel/Message/Component.php @@ -13,7 +13,7 @@ namespace Discord\Parts\Channel\Message; -use Discord\Builders\Components\Component as ComponentBuilder; +use Discord\Builders\Components\ComponentObject; use Discord\Helpers\ExCollectionInterface; use Discord\Parts\Part; @@ -39,24 +39,24 @@ class Component extends Part * @var array */ public const TYPES = [ - 0 => Component::class, // Fallback for unknown types - ComponentBuilder::TYPE_ACTION_ROW => ActionRow::class, - ComponentBuilder::TYPE_BUTTON => Button::class, - ComponentBuilder::TYPE_STRING_SELECT => StringSelect::class, - ComponentBuilder::TYPE_TEXT_INPUT => TextInput::class, - ComponentBuilder::TYPE_USER_SELECT => UserSelect::class, - ComponentBuilder::TYPE_ROLE_SELECT => RoleSelect::class, - ComponentBuilder::TYPE_MENTIONABLE_SELECT => MentionableSelect::class, - ComponentBuilder::TYPE_CHANNEL_SELECT => ChannelSelect::class, - ComponentBuilder::TYPE_SECTION => Section::class, - ComponentBuilder::TYPE_TEXT_DISPLAY => TextDisplay::class, - ComponentBuilder::TYPE_THUMBNAIL => Thumbnail::class, - ComponentBuilder::TYPE_MEDIA_GALLERY => MediaGallery::class, - ComponentBuilder::TYPE_FILE => File::class, - ComponentBuilder::TYPE_SEPARATOR => Separator::class, - ComponentBuilder::TYPE_CONTAINER => Container::class, - ComponentBuilder::TYPE_LABEL => Label::class, - ComponentBuilder::TYPE_FILE_UPLOAD => FileUpload::class, + 0 => ComponentObject::class, // Fallback for unknown types + ComponentObject::TYPE_ACTION_ROW => ActionRow::class, + ComponentObject::TYPE_BUTTON => Button::class, + ComponentObject::TYPE_STRING_SELECT => StringSelect::class, + ComponentObject::TYPE_TEXT_INPUT => TextInput::class, + ComponentObject::TYPE_USER_SELECT => UserSelect::class, + ComponentObject::TYPE_ROLE_SELECT => RoleSelect::class, + ComponentObject::TYPE_MENTIONABLE_SELECT => MentionableSelect::class, + ComponentObject::TYPE_CHANNEL_SELECT => ChannelSelect::class, + ComponentObject::TYPE_SECTION => Section::class, + ComponentObject::TYPE_TEXT_DISPLAY => TextDisplay::class, + ComponentObject::TYPE_THUMBNAIL => Thumbnail::class, + ComponentObject::TYPE_MEDIA_GALLERY => MediaGallery::class, + ComponentObject::TYPE_FILE => File::class, + ComponentObject::TYPE_SEPARATOR => Separator::class, + ComponentObject::TYPE_CONTAINER => Container::class, + ComponentObject::TYPE_LABEL => Label::class, + ComponentObject::TYPE_FILE_UPLOAD => FileUpload::class, ]; /** @@ -74,7 +74,7 @@ class Component extends Part */ protected function getComponentsAttribute(): ExCollectionInterface { - return $this->attributeTypedCollectionHelper(Component::class, 'components'); + return $this->attributeTypedCollectionHelper(ComponentObject::class, 'components'); } /** @@ -82,6 +82,6 @@ protected function getComponentsAttribute(): ExCollectionInterface */ public function getComponentAttribute(): ?Component { - return $this->attributePartHelper('component', Component::TYPES[$this->attributes['component']->type ?? 0]); + return $this->attributePartHelper('component', self::TYPES[$this->attributes['component']->type ?? 0]); } } diff --git a/src/Discord/Parts/Channel/Message/Section.php b/src/Discord/Parts/Channel/Message/Section.php index 4a5ef3b8b..cf1f96b3f 100644 --- a/src/Discord/Parts/Channel/Message/Section.php +++ b/src/Discord/Parts/Channel/Message/Section.php @@ -42,6 +42,6 @@ class Section extends Layout /** @return Thumbnail|Button */ protected function getAccessoryAttribute(): Component { - return $this->attributePartHelper('accessory', Component::TYPES[$this->attributes['accessory']->type ?? 0]); + return $this->attributePartHelper('accessory', ComponentObject::TYPES[$this->attributes['accessory']->type ?? 0]); } } From a952290266c3cae445f8102a1f8c5594214c14f3 Mon Sep 17 00:00:00 2001 From: Valithor Obsidion Date: Mon, 24 Nov 2025 12:55:23 -0500 Subject: [PATCH 2/5] Whoops --- src/Discord/Builders/Components/ActionRow.php | 7 ------- 1 file changed, 7 deletions(-) diff --git a/src/Discord/Builders/Components/ActionRow.php b/src/Discord/Builders/Components/ActionRow.php index 36c2f3d12..6b401bebe 100644 --- a/src/Discord/Builders/Components/ActionRow.php +++ b/src/Discord/Builders/Components/ActionRow.php @@ -44,13 +44,6 @@ class ActionRow extends Layout */ protected $components = []; - public function __construct() - { - parent::__construct(); - - $this->components = []; - } - /** * Creates a new action row. * From 9b979f9202c0c778bf1761c4e2b3196ecf99f77d Mon Sep 17 00:00:00 2001 From: Valithor Obsidion Date: Mon, 24 Nov 2025 12:55:59 -0500 Subject: [PATCH 3/5] Whoops x2 --- src/Discord/Builders/Components/Button.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Discord/Builders/Components/Button.php b/src/Discord/Builders/Components/Button.php index a05c034f9..540f2d6b4 100644 --- a/src/Discord/Builders/Components/Button.php +++ b/src/Discord/Builders/Components/Button.php @@ -214,7 +214,7 @@ public static function success(?string $custom_id = null) $button = new self(self::STYLE_SUCCESS); if (! isset($custom_id)) { - $custom_id = ComponentObject::generateUuid(); + $custom_id = self::generateUuid(); } return $button->setCustomId($custom_id); From 199dd61779e5a913176899b9c810c65dfaeac821 Mon Sep 17 00:00:00 2001 From: Valithor Obsidion Date: Mon, 24 Nov 2025 12:58:50 -0500 Subject: [PATCH 4/5] Update Section.php --- src/Discord/Parts/Channel/Message/Section.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Discord/Parts/Channel/Message/Section.php b/src/Discord/Parts/Channel/Message/Section.php index cf1f96b3f..4a5ef3b8b 100644 --- a/src/Discord/Parts/Channel/Message/Section.php +++ b/src/Discord/Parts/Channel/Message/Section.php @@ -42,6 +42,6 @@ class Section extends Layout /** @return Thumbnail|Button */ protected function getAccessoryAttribute(): Component { - return $this->attributePartHelper('accessory', ComponentObject::TYPES[$this->attributes['accessory']->type ?? 0]); + return $this->attributePartHelper('accessory', Component::TYPES[$this->attributes['accessory']->type ?? 0]); } } From 6498210e8d5bc6a924fb6906ca9d467a9f51a092 Mon Sep 17 00:00:00 2001 From: Valithor Obsidion Date: Mon, 24 Nov 2025 13:26:39 -0500 Subject: [PATCH 5/5] ComponentObject is only for Builders, not parts --- src/Discord/Parts/Channel/Message.php | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/Discord/Parts/Channel/Message.php b/src/Discord/Parts/Channel/Message.php index a70f81f62..a98eb3163 100644 --- a/src/Discord/Parts/Channel/Message.php +++ b/src/Discord/Parts/Channel/Message.php @@ -14,7 +14,6 @@ namespace Discord\Parts\Channel; use Carbon\Carbon; -use Discord\Builders\Components\ComponentObject; use Discord\Builders\MessageBuilder; use Discord\Helpers\Collection; use Discord\Helpers\ExCollectionInterface; @@ -783,7 +782,7 @@ protected function getEditedTimestampAttribute(): ?Carbon */ protected function getComponentsAttribute(): ExCollectionInterface { - return $this->attributeTypedCollectionHelper(ComponentObject::class, 'components'); + return $this->attributeTypedCollectionHelper(Component::class, 'components'); } /**