diff --git a/src/Discord/Builders/Components/ActionRow.php b/src/Discord/Builders/Components/ActionRow.php index ff5b9b846..6b401bebe 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. diff --git a/src/Discord/Builders/Components/Button.php b/src/Discord/Builders/Components/Button.php index f624f7179..540f2d6b4 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. @@ -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/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]); } }