From fba5310bf4e73480f175207ddb28a6f616eaa55f Mon Sep 17 00:00:00 2001 From: Exanlv Date: Thu, 26 Sep 2024 10:22:42 +0200 Subject: [PATCH 01/24] Add integration types config for application part --- src/Parts/Application.php | 7 ++++++- src/Parts/ApplicationIntegrationType.php | 10 ++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) create mode 100644 src/Parts/ApplicationIntegrationType.php diff --git a/src/Parts/Application.php b/src/Parts/Application.php index 7327a033..a6e0dda6 100644 --- a/src/Parts/Application.php +++ b/src/Parts/Application.php @@ -4,8 +4,8 @@ namespace Ragnarok\Fenrir\Parts; -use Ragnarok\Fenrir\Attributes\Partial; use Ragnarok\Fenrir\Bitwise\Bitwise; +use Ragnarok\Fenrir\Mapping\ArrayMapping; class Application { @@ -36,4 +36,9 @@ class Application public ?InstallParams $install_params; public ?string $custom_install_url; public ?string $role_connections_verification_url; + /** + * @var ApplicationIntegrationType[] + */ + #[ArrayMapping(ApplicationIntegrationType::class)] + public ?array $integration_types_config; } diff --git a/src/Parts/ApplicationIntegrationType.php b/src/Parts/ApplicationIntegrationType.php new file mode 100644 index 00000000..4935c382 --- /dev/null +++ b/src/Parts/ApplicationIntegrationType.php @@ -0,0 +1,10 @@ + Date: Thu, 26 Sep 2024 11:32:38 +0200 Subject: [PATCH 02/24] Add integration types and contexts to application command --- src/Enums/ApplicationIntegrationType.php | 11 ++++ src/Enums/InteractionContextType.php | 12 +++++ src/Parts/ApplicationCommand.php | 12 +++++ src/Rest/Helpers/Command/CommandBuilder.php | 50 +++++++++++++++++++ .../Helpers/Command/CommandBuilderTest.php | 20 ++++++++ 5 files changed, 105 insertions(+) create mode 100644 src/Enums/ApplicationIntegrationType.php create mode 100644 src/Enums/InteractionContextType.php diff --git a/src/Enums/ApplicationIntegrationType.php b/src/Enums/ApplicationIntegrationType.php new file mode 100644 index 00000000..fe86ac27 --- /dev/null +++ b/src/Enums/ApplicationIntegrationType.php @@ -0,0 +1,11 @@ +data['nsfw'] ?? null; } + public function setIntegrationTypes(ApplicationIntegrationType ...$integrationTypes): self + { + $this->integrationTypes = $integrationTypes; + + return $this; + } + + public function getIntegrationTypes(): ?array + { + return $this->integrationTypes ?? null; + } + + public function setContexts(InteractionContextType ...$contextTypes): self + { + $this->contextTypes = $contextTypes; + + return $this; + } + + public function getContexts(): ?array + { + return $this->contextTypes ?? null; + } + private function isAllowedName($name): bool { return Regex::match(Command::NAME_REGEX, $name)->hasMatch(); @@ -192,6 +228,20 @@ public function get(): array ); } + if (isset($this->integrationTypes)) { + $data['integration_types'] = array_map( + fn (ApplicationIntegrationType $integrationType) => $integrationType->value, + $this->integrationTypes + ); + } + + if (isset($this->contextTypes)) { + $data['contexts'] = array_map( + fn (InteractionContextType $contextType) => $contextType->value, + $this->contextTypes + ); + } + return $data; } } diff --git a/tests/Rest/Helpers/Command/CommandBuilderTest.php b/tests/Rest/Helpers/Command/CommandBuilderTest.php index 608beae8..9554d9d5 100644 --- a/tests/Rest/Helpers/Command/CommandBuilderTest.php +++ b/tests/Rest/Helpers/Command/CommandBuilderTest.php @@ -8,6 +8,8 @@ use Ragnarok\Fenrir\Bitwise\Bitwise; use Ragnarok\Fenrir\Enums\ApplicationCommandOptionType; use Ragnarok\Fenrir\Enums\ApplicationCommandTypes; +use Ragnarok\Fenrir\Enums\ApplicationIntegrationType; +use Ragnarok\Fenrir\Enums\InteractionContextType; use Ragnarok\Fenrir\Exceptions\Rest\Helpers\Command\InvalidCommandNameException; use Ragnarok\Fenrir\Rest\Helpers\Command\CommandBuilder; use Ragnarok\Fenrir\Rest\Helpers\Command\CommandOptionBuilder; @@ -118,4 +120,22 @@ public function testSetNsfw(): void $this->assertTrue($commandBuilder->getNsfw()); $this->assertTrue($commandBuilder->get()['nsfw']); } + + public function testSetIntegrationTypes() + { + $types = [ApplicationIntegrationType::GUILD_INSTALL, ApplicationIntegrationType::USER_INSTALL]; + $commandBuilder = new CommandBuilder(); + $commandBuilder->setIntegrationTypes(...$types); + $this->assertEquals($types, $commandBuilder->getIntegrationTypes()); + $this->assertEquals([0, 1], $commandBuilder->get()['integration_types']); + } + + public function testSetContexts() + { + $types = [InteractionContextType::GUILD, InteractionContextType::PRIVATE_CHANNEL]; + $commandBuilder = new CommandBuilder(); + $commandBuilder->setContexts(...$types); + $this->assertEquals($types, $commandBuilder->getContexts()); + $this->assertEquals([0, 2], $commandBuilder->get()['contexts']); + } } From 771042e3e916871090f9d5dc92fb25d0f3871fac Mon Sep 17 00:00:00 2001 From: Exanlv Date: Thu, 26 Sep 2024 11:33:20 +0200 Subject: [PATCH 03/24] Add context to interaction --- src/Parts/Interaction.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/Parts/Interaction.php b/src/Parts/Interaction.php index 48b8f867..9d5730b7 100644 --- a/src/Parts/Interaction.php +++ b/src/Parts/Interaction.php @@ -4,6 +4,7 @@ namespace Ragnarok\Fenrir\Parts; +use Ragnarok\Fenrir\Enums\InteractionContextType; use Ragnarok\Fenrir\Enums\InteractionType; class Interaction @@ -24,4 +25,5 @@ class Interaction public ?string $locale; public string $guild_locale; public Channel $channel; + public InteractionContextType $context; } From 8dc9b30bc1f000a2dce5dacdbc73ea8fc12d13ca Mon Sep 17 00:00:00 2001 From: Exanlv Date: Thu, 26 Sep 2024 11:36:50 +0200 Subject: [PATCH 04/24] Add authorizing_integration_owners to interaction --- src/Parts/Interaction.php | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/Parts/Interaction.php b/src/Parts/Interaction.php index 9d5730b7..b189e2f5 100644 --- a/src/Parts/Interaction.php +++ b/src/Parts/Interaction.php @@ -26,4 +26,9 @@ class Interaction public string $guild_locale; public Channel $channel; public InteractionContextType $context; + /** + * @var string[] + * @see https://discord.com/developers/docs/interactions/receiving-and-responding#interaction-object-authorizing-integration-owners-object + */ + public array $authorizing_integration_owners; } From 8a505330361c1865a06f98ba7721a0109ef83cfb Mon Sep 17 00:00:00 2001 From: Exanlv Date: Thu, 26 Sep 2024 11:44:41 +0200 Subject: [PATCH 05/24] Add interaction_metadata to message --- src/Parts/Message.php | 2 +- src/Parts/MessageInteraction.php | 10 +++++++--- src/Parts/MessageInteractionMetadata.php | 16 ++++++++++++++++ 3 files changed, 24 insertions(+), 4 deletions(-) create mode 100644 src/Parts/MessageInteractionMetadata.php diff --git a/src/Parts/Message.php b/src/Parts/Message.php index c46b1cef..ee56de82 100644 --- a/src/Parts/Message.php +++ b/src/Parts/Message.php @@ -5,7 +5,6 @@ namespace Ragnarok\Fenrir\Parts; use Carbon\Carbon; -use Ragnarok\Fenrir\Attributes\Partial; use Ragnarok\Fenrir\Bitwise\Bitwise; use Ragnarok\Fenrir\Enums\MessageType; use Ragnarok\Fenrir\Mapping\ArrayMapping; @@ -58,6 +57,7 @@ class Message public ?MessageReference $message_reference; public ?Bitwise $flags; public ?Message $referenced_message; + public ?MessageInteractionMetadata $interaction_metadata; public ?MessageInteraction $interaction; public ?Channel $thread; /** diff --git a/src/Parts/MessageInteraction.php b/src/Parts/MessageInteraction.php index 250c6dc5..aca8f48c 100644 --- a/src/Parts/MessageInteraction.php +++ b/src/Parts/MessageInteraction.php @@ -4,14 +4,18 @@ namespace Ragnarok\Fenrir\Parts; -use Ragnarok\Fenrir\Attributes\Partial; use Ragnarok\Fenrir\Enums\InteractionType; +/** + * @see https://discord.com/developers/docs/resources/message#message-interaction-metadata-object-message-interaction-metadata-structure + */ class MessageInteraction { public string $id; public InteractionType $type; - public string $name; public User $user; - public ?GuildMember $member; + public array $authorizing_integration_owners; + public ?string $original_response_message_id; + public ?string $interacted_message_id; + public ?self $triggering_interaction_metadata; } diff --git a/src/Parts/MessageInteractionMetadata.php b/src/Parts/MessageInteractionMetadata.php new file mode 100644 index 00000000..bc8ce17c --- /dev/null +++ b/src/Parts/MessageInteractionMetadata.php @@ -0,0 +1,16 @@ + Date: Thu, 26 Sep 2024 11:46:52 +0200 Subject: [PATCH 06/24] Deprecate ApplicationCommand::$dm_permissions and Message::$interaction --- src/Parts/ApplicationCommand.php | 3 +++ src/Parts/Message.php | 3 +++ 2 files changed, 6 insertions(+) diff --git a/src/Parts/ApplicationCommand.php b/src/Parts/ApplicationCommand.php index 336fa148..632428fb 100644 --- a/src/Parts/ApplicationCommand.php +++ b/src/Parts/ApplicationCommand.php @@ -31,6 +31,9 @@ class ApplicationCommand #[ArrayMapping(ApplicationCommandOptionStructure::class)] public ?array $options; public ?string $default_member_permissions; + /** + * @deprecated use $this->contexts instead + */ public ?bool $dm_permission; public ?bool $default_permission; public ?bool $nsfw; diff --git a/src/Parts/Message.php b/src/Parts/Message.php index ee56de82..68fa82f1 100644 --- a/src/Parts/Message.php +++ b/src/Parts/Message.php @@ -58,6 +58,9 @@ class Message public ?Bitwise $flags; public ?Message $referenced_message; public ?MessageInteractionMetadata $interaction_metadata; + /** + * @deprecated use $this->interaction_metadata instead + */ public ?MessageInteraction $interaction; public ?Channel $thread; /** From d87288db85c621317d48e8327583dd9f37483174 Mon Sep 17 00:00:00 2001 From: Exanlv Date: Thu, 26 Sep 2024 11:49:23 +0200 Subject: [PATCH 07/24] Add AutoModerationRuleTriggerType::MEMBER_PROFILE and ActionType::BLOCK_MEMBER_INTERACTION --- src/Enums/ActionType.php | 1 + src/Enums/AutoModerationRuleTriggerType.php | 1 + 2 files changed, 2 insertions(+) diff --git a/src/Enums/ActionType.php b/src/Enums/ActionType.php index 6521bdff..d3f22d88 100644 --- a/src/Enums/ActionType.php +++ b/src/Enums/ActionType.php @@ -9,4 +9,5 @@ enum ActionType: int case BLOCK_MESSAGE = 1; case SENT_ALERT_MESSAGE = 2; case TIMEOUT = 3; + case BLOCK_MEMBER_INTERACTION = 4; } diff --git a/src/Enums/AutoModerationRuleTriggerType.php b/src/Enums/AutoModerationRuleTriggerType.php index a7501e3f..b1fbdcec 100644 --- a/src/Enums/AutoModerationRuleTriggerType.php +++ b/src/Enums/AutoModerationRuleTriggerType.php @@ -10,4 +10,5 @@ enum AutoModerationRuleTriggerType: int case SPAM = 3; case KEYWORD_PRESET = 4; case MENTION_SPAM = 5; + case MEMBER_PROFILE = 6; } From 74d4bd2eef84ec89e550e02125ef41c130d85417 Mon Sep 17 00:00:00 2001 From: Exanlv Date: Thu, 26 Sep 2024 11:58:07 +0200 Subject: [PATCH 08/24] Add premium button --- src/Component/Button/PremiumButton.php | 32 +++++++++++++++++++++ src/Enums/ButtonStyle.php | 1 + tests/Component/ButtonTest.php | 40 ++++++++++++++++++++++++++ 3 files changed, 73 insertions(+) create mode 100644 src/Component/Button/PremiumButton.php diff --git a/src/Component/Button/PremiumButton.php b/src/Component/Button/PremiumButton.php new file mode 100644 index 00000000..44f9b311 --- /dev/null +++ b/src/Component/Button/PremiumButton.php @@ -0,0 +1,32 @@ + 2, + 'style' => $this->style, + 'sku_id' => $this->skuId, + 'disabled' => $this->disabled, + ]; + + return $data; + } +} diff --git a/src/Enums/ButtonStyle.php b/src/Enums/ButtonStyle.php index fc13ae2d..b63e563d 100644 --- a/src/Enums/ButtonStyle.php +++ b/src/Enums/ButtonStyle.php @@ -11,4 +11,5 @@ enum ButtonStyle: int case Success = 3; case Danger = 4; case Link = 5; + case Premium = 6; } diff --git a/tests/Component/ButtonTest.php b/tests/Component/ButtonTest.php index 76977251..702c7c08 100644 --- a/tests/Component/ButtonTest.php +++ b/tests/Component/ButtonTest.php @@ -7,6 +7,7 @@ use PHPUnit\Framework\TestCase; use Ragnarok\Fenrir\Component\Button\DangerButton; use Ragnarok\Fenrir\Component\Button\LinkButton; +use Ragnarok\Fenrir\Component\Button\PremiumButton; use Ragnarok\Fenrir\Component\Button\PrimaryButton; use Ragnarok\Fenrir\Component\Button\SecondaryButton; use Ragnarok\Fenrir\Component\Button\SuccessButton; @@ -186,4 +187,43 @@ public static function convertionExpectationProviderLinkButton(): array ], ]; } + + /** + * @dataProvider convertionExpectationProviderPremiumButton + */ + public function testCorrectlyConvertedPremiumButton(array $args, array $expected): void + { + $button = new PremiumButton(...$args); + + $this->assertEquals($expected, $button->get()); + } + + public static function convertionExpectationProviderPremiumButton(): array + { + return [ + 'Completely filled out' => [ + 'args' => [ + '::sku::', + true, + ], + 'expected' => [ + 'type' => 2, + 'style' => ButtonStyle::Premium, + 'sku_id' => '::sku::', + 'disabled' => true + ], + ], + 'Missing disabled' => [ + 'args' => [ + '::sku::', + ], + 'expected' => [ + 'type' => 2, + 'style' => ButtonStyle::Premium, + 'sku_id' => '::sku::', + 'disabled' => false + ], + ], + ]; + } } From c4f5e977f342e8bbe2ed01f36d76cfee238ff64c Mon Sep 17 00:00:00 2001 From: Exanlv Date: Thu, 26 Sep 2024 11:58:59 +0200 Subject: [PATCH 09/24] Add use Permission::USE_EXTERNAL_SOUNDS --- src/Enums/Permission.php | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Enums/Permission.php b/src/Enums/Permission.php index 62142433..cc1e0b96 100644 --- a/src/Enums/Permission.php +++ b/src/Enums/Permission.php @@ -49,4 +49,5 @@ enum Permission: int case MODERATE_MEMBERS = 1 << 40; case CREATE_GUILD_EXPRESSIONS = 1 << 43; case CREATE_EVENTS = 1 << 44; + case USE_EXTERNAL_SOUNDS = 1 << 45; } From 46a3d2ae3d6a71d22f65125abcdddd2035223484 Mon Sep 17 00:00:00 2001 From: Exanlv Date: Thu, 26 Sep 2024 11:59:20 +0200 Subject: [PATCH 10/24] Add Permission::SEND_VOICE_MESSAGES --- src/Enums/Permission.php | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Enums/Permission.php b/src/Enums/Permission.php index cc1e0b96..b4c3f1e1 100644 --- a/src/Enums/Permission.php +++ b/src/Enums/Permission.php @@ -50,4 +50,5 @@ enum Permission: int case CREATE_GUILD_EXPRESSIONS = 1 << 43; case CREATE_EVENTS = 1 << 44; case USE_EXTERNAL_SOUNDS = 1 << 45; + case SEND_VOICE_MESSAGES = 1 << 46; } From a08169fa7c01fbe0f07a51059e02fdcecb503d1b Mon Sep 17 00:00:00 2001 From: Exanlv Date: Thu, 26 Sep 2024 12:01:44 +0200 Subject: [PATCH 11/24] Add Permission::SEND_POLLS --- src/Enums/Permission.php | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Enums/Permission.php b/src/Enums/Permission.php index b4c3f1e1..5f749502 100644 --- a/src/Enums/Permission.php +++ b/src/Enums/Permission.php @@ -51,4 +51,5 @@ enum Permission: int case CREATE_EVENTS = 1 << 44; case USE_EXTERNAL_SOUNDS = 1 << 45; case SEND_VOICE_MESSAGES = 1 << 46; + case SEND_POLLS = 1 << 49; } From b40285d49dec6354c38130be13216a8bd8c28b6c Mon Sep 17 00:00:00 2001 From: Exanlv Date: Thu, 26 Sep 2024 12:02:07 +0200 Subject: [PATCH 12/24] Add Permission::USE_EXTERNAL_APPS --- src/Enums/Permission.php | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Enums/Permission.php b/src/Enums/Permission.php index 5f749502..8532b71c 100644 --- a/src/Enums/Permission.php +++ b/src/Enums/Permission.php @@ -52,4 +52,5 @@ enum Permission: int case USE_EXTERNAL_SOUNDS = 1 << 45; case SEND_VOICE_MESSAGES = 1 << 46; case SEND_POLLS = 1 << 49; + case USE_EXTERNAL_APPS = 1 << 50; } From 24138e70d5be19cf7ec2bc6288e1666b3d60ebc1 Mon Sep 17 00:00:00 2001 From: Exanlv Date: Thu, 26 Sep 2024 12:07:17 +0200 Subject: [PATCH 13/24] Add MessageReferenceType to MessageReference --- src/Enums/MessageReferenceType.php | 11 +++++++++++ src/Parts/MessageReference.php | 3 +++ 2 files changed, 14 insertions(+) create mode 100644 src/Enums/MessageReferenceType.php diff --git a/src/Enums/MessageReferenceType.php b/src/Enums/MessageReferenceType.php new file mode 100644 index 00000000..ad00e532 --- /dev/null +++ b/src/Enums/MessageReferenceType.php @@ -0,0 +1,11 @@ + Date: Thu, 26 Sep 2024 12:10:10 +0200 Subject: [PATCH 14/24] Add Application::$approximate_guild_count --- src/Parts/Application.php | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Parts/Application.php b/src/Parts/Application.php index a6e0dda6..f5addcc9 100644 --- a/src/Parts/Application.php +++ b/src/Parts/Application.php @@ -29,6 +29,7 @@ class Application public ?string $slug; public ?string $cover_image; public ?Bitwise $flags; + public ?int $approximate_guild_count; /** * @var string[] */ From bc4b2e14ca97ce050937c89d2dfe541e04feadbc Mon Sep 17 00:00:00 2001 From: Exanlv Date: Thu, 26 Sep 2024 12:10:35 +0200 Subject: [PATCH 15/24] Add Application::$approximate_user_install_count --- src/Parts/Application.php | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Parts/Application.php b/src/Parts/Application.php index f5addcc9..3dbabd30 100644 --- a/src/Parts/Application.php +++ b/src/Parts/Application.php @@ -30,6 +30,7 @@ class Application public ?string $cover_image; public ?Bitwise $flags; public ?int $approximate_guild_count; + public ?int $approximate_user_install_count; /** * @var string[] */ From 6a3fa65c2c27950897dd94e041fe7aabea3634ec Mon Sep 17 00:00:00 2001 From: Exanlv Date: Thu, 26 Sep 2024 12:11:32 +0200 Subject: [PATCH 16/24] Add Application::$redirect_uris --- src/Parts/Application.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/Parts/Application.php b/src/Parts/Application.php index 3dbabd30..a632fd81 100644 --- a/src/Parts/Application.php +++ b/src/Parts/Application.php @@ -31,6 +31,10 @@ class Application public ?Bitwise $flags; public ?int $approximate_guild_count; public ?int $approximate_user_install_count; + /** + * @var string[] + */ + public ?array $redirect_uris; /** * @var string[] */ From 7d7e4fea2177c67250818875dde30516ed42d41a Mon Sep 17 00:00:00 2001 From: Exanlv Date: Thu, 26 Sep 2024 12:11:53 +0200 Subject: [PATCH 17/24] Add Application::$interactions_endpoint_url --- src/Parts/Application.php | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Parts/Application.php b/src/Parts/Application.php index a632fd81..20b86f43 100644 --- a/src/Parts/Application.php +++ b/src/Parts/Application.php @@ -35,6 +35,7 @@ class Application * @var string[] */ public ?array $redirect_uris; + public ?string $interactions_endpoint_url; /** * @var string[] */ From b5a59dc36aa2aaffcb1e13f59da652a5edd7c20e Mon Sep 17 00:00:00 2001 From: Exanlv Date: Thu, 26 Sep 2024 12:20:28 +0200 Subject: [PATCH 18/24] Add Application Emoji rest calls --- src/Rest/Emoji.php | 99 ++++++++++++++++++++++++++++++++++++++++ tests/Rest/EmojiTest.php | 55 ++++++++++++++++++++++ 2 files changed, 154 insertions(+) diff --git a/src/Rest/Emoji.php b/src/Rest/Emoji.php index 462a1a39..12a07921 100644 --- a/src/Rest/Emoji.php +++ b/src/Rest/Emoji.php @@ -119,4 +119,103 @@ public function deleteGuildEmoji( $this->getAuditLogReasonHeader($reason) )->otherwise($this->logThrowable(...)); } + + /** + * @see https://discord.com/developers/docs/resources/emoji#list-application-emojis + * + * @return ExtendedPromiseInterface<\Ragnarok\Fenrir\Parts\Emoji[]> + */ + public function listApplicationEmojis(string $applicationId): ExtendedPromiseInterface + { + return $this->mapArrayPromise( + $this->http->get( + Endpoint::bind( + 'applications/:application/emojis', + $applicationId + ), + ), + PartsEmoji::class + )->otherwise($this->logThrowable(...)); + } + + /** + * @see https://discord.com/developers/docs/resources/emoji#get-application-emoji + * + * @return ExtendedPromiseInterface<\Ragnarok\Fenrir\Parts\Emoji> + */ + public function getApplicationEmoji(string $guildId, string $emojiId): ExtendedPromiseInterface + { + return $this->mapPromise( + $this->http->get( + Endpoint::bind( + 'applications/:application/emojis/:emoji', + $guildId, + $emojiId + ) + ), + PartsEmoji::class + )->otherwise($this->logThrowable(...)); + } + + /** + * @see https://discord.com/developers/docs/resources/emoji#create-application-emoji + * + * @return ExtendedPromiseInterface<\Ragnarok\Fenrir\Parts\Emoji> + */ + public function createApplicationEmoji( + string $applicationId, + CreateEmojiBuilder $emojiBuilder, + ): ExtendedPromiseInterface { + return $this->mapPromise( + $this->http->post( + Endpoint::bind( + 'applications/:application/emojis', + $applicationId + ), + $emojiBuilder->get(), + ), + PartsEmoji::class + )->otherwise($this->logThrowable(...)); + } + + /** + * @see https://discord.com/developers/docs/resources/emoji#modify-application-emoji + * + * @return ExtendedPromiseInterface<\Ragnarok\Fenrir\Parts\Emoji> + */ + public function modifyApplicationEmoji( + string $applicationId, + string $emojiId, + CreateEmojiBuilder $emojiBuilder, + ): ExtendedPromiseInterface { + return $this->mapPromise( + $this->http->patch( + Endpoint::bind( + 'applications/:application/emojis/:emoji', + $applicationId, + $emojiId + ), + $emojiBuilder->get(), + ), + PartsEmoji::class + )->otherwise($this->logThrowable(...)); + } + + /** + * @see https://discord.com/developers/docs/resources/emoji#delete-application-emoji + * + * @return ExtendedPromiseInterface + */ + public function deleteApplicationEmoji( + string $guildId, + string $emojiId, + ): ExtendedPromiseInterface { + return $this->http->delete( + Endpoint::bind( + 'applications/:application/emojis/:emoji', + $guildId, + $emojiId + ), + )->otherwise($this->logThrowable(...)); + } } diff --git a/tests/Rest/EmojiTest.php b/tests/Rest/EmojiTest.php index edb395ba..b803238c 100644 --- a/tests/Rest/EmojiTest.php +++ b/tests/Rest/EmojiTest.php @@ -70,6 +70,61 @@ public static function httpBindingsProvider(): array ], 'validationOptions' => [] ], + + 'List application emojis' => [ + 'method' => 'listApplicationEmojis', + 'args' => ['::application id::'], + 'mockOptions' => [ + 'method' => 'get', + 'return' => [(object) [], (object) [], (object) []], + ], + 'validationOptions' => [ + 'returnType' => PartsEmoji::class, + 'array' => true, + ] + ], + 'Get application emoji' => [ + 'method' => 'getApplicationEmoji', + 'args' => ['::application id::', '::emoji id::'], + 'mockOptions' => [ + 'method' => 'get', + 'return' => (object) [], + ], + 'validationOptions' => [ + 'returnType' => PartsEmoji::class, + ] + ], + 'Create application emoji' => [ + 'method' => 'createApplicationEmoji', + 'args' => ['::application id::', new CreateEmojiBuilder()], + 'mockOptions' => [ + 'method' => 'post', + 'return' => (object) [], + ], + 'validationOptions' => [ + 'returnType' => PartsEmoji::class, + ] + ], + 'Modify application emoji' => [ + 'method' => 'modifyApplicationEmoji', + 'args' => ['::application id::', '::emoji id::', new CreateEmojiBuilder()], + 'mockOptions' => [ + 'method' => 'patch', + 'return' => (object) [], + ], + 'validationOptions' => [ + 'returnType' => PartsEmoji::class, + ] + ], + 'Delete application emoji' => [ + 'method' => 'deleteApplicationEmoji', + 'args' => ['::application id::', '::emoji id::'], + 'mockOptions' => [ + 'method' => 'delete', + 'return' => null, + ], + 'validationOptions' => [] + ], ]; } } From eac742cc091846b3571453b88c9eaf5eb6774604 Mon Sep 17 00:00:00 2001 From: Exanlv Date: Thu, 26 Sep 2024 12:23:40 +0200 Subject: [PATCH 19/24] Add Guild voice state endpoints --- src/Rest/Guild.php | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/src/Rest/Guild.php b/src/Rest/Guild.php index 09198734..7c840fc3 100644 --- a/src/Rest/Guild.php +++ b/src/Rest/Guild.php @@ -17,6 +17,7 @@ use Ragnarok\Fenrir\Parts\PruneCount; use Ragnarok\Fenrir\Parts\Role; use Ragnarok\Fenrir\Parts\VoiceRegion; +use Ragnarok\Fenrir\Parts\VoiceState; use Ragnarok\Fenrir\Parts\WelcomeScreen; use Ragnarok\Fenrir\Parts\Widget; use Ragnarok\Fenrir\Parts\WidgetSettings; @@ -653,6 +654,43 @@ public function getVoiceRegions(string $guildId): ExtendedPromiseInterface )->otherwise($this->logThrowable(...)); } + /** + * @see https://discord.com/developers/docs/resources/guild#get-guild-voice-regions + * + * @return ExtendedPromiseInterface<\Ragnarok\Fenrir\Parts\VoiceState> + */ + public function getCurrentUserVoiceState(string $guildId): ExtendedPromiseInterface + { + return $this->mapArrayPromise( + $this->http->get( + Endpoint::bind( + '/guilds/:guild/voice-states/@me', + $guildId, + ), + ), + VoiceState::class + )->otherwise($this->logThrowable(...)); + } + + /** + * @see https://discord.com/developers/docs/resources/guild#get-guild-voice-regions + * + * @return ExtendedPromiseInterface<\Ragnarok\Fenrir\Parts\VoiceState> + */ + public function getUserVoiceState(string $guildId, string $userId): ExtendedPromiseInterface + { + return $this->mapArrayPromise( + $this->http->get( + Endpoint::bind( + '/guilds/:guild/voice-states/:user', + $guildId, + $userId, + ), + ), + VoiceState::class + )->otherwise($this->logThrowable(...)); + } + /** * @see https://discord.com/developers/docs/resources/guild#get-guild-invites * From 613462a12b540757f109e47de479e5977cb24c82 Mon Sep 17 00:00:00 2001 From: Exanlv Date: Thu, 26 Sep 2024 12:27:48 +0200 Subject: [PATCH 20/24] Add Guild get role endpoint --- src/Rest/Guild.php | 27 +++++++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/src/Rest/Guild.php b/src/Rest/Guild.php index 7c840fc3..b4781d4b 100644 --- a/src/Rest/Guild.php +++ b/src/Rest/Guild.php @@ -487,6 +487,25 @@ public function getRoles(string $guildId): ExtendedPromiseInterface )->otherwise($this->logThrowable(...)); } + /** + * @see https://discord.com/developers/docs/resources/guild#get-guild-role + * + * @return ExtendedPromiseInterface<\Ragnarok\Fenrir\Parts\Role> + */ + public function getRole(string $guildId, string $roleId): ExtendedPromiseInterface + { + return $this->mapPromise( + $this->http->get( + Endpoint::bind( + Endpoint::GUILD_ROLE, + $guildId, + $roleId + ), + ), + Role::class, + )->otherwise($this->logThrowable(...)); + } + /** * @see https://discord.com/developers/docs/resources/guild#create-guild-role * @@ -655,13 +674,13 @@ public function getVoiceRegions(string $guildId): ExtendedPromiseInterface } /** - * @see https://discord.com/developers/docs/resources/guild#get-guild-voice-regions + * @see https://discord.com/developers/docs/resources/voice#get-current-user-voice-state * * @return ExtendedPromiseInterface<\Ragnarok\Fenrir\Parts\VoiceState> */ public function getCurrentUserVoiceState(string $guildId): ExtendedPromiseInterface { - return $this->mapArrayPromise( + return $this->mapPromise( $this->http->get( Endpoint::bind( '/guilds/:guild/voice-states/@me', @@ -673,13 +692,13 @@ public function getCurrentUserVoiceState(string $guildId): ExtendedPromiseInterf } /** - * @see https://discord.com/developers/docs/resources/guild#get-guild-voice-regions + * @see https://discord.com/developers/docs/resources/voice#get-user-voice-state * * @return ExtendedPromiseInterface<\Ragnarok\Fenrir\Parts\VoiceState> */ public function getUserVoiceState(string $guildId, string $userId): ExtendedPromiseInterface { - return $this->mapArrayPromise( + return $this->mapPromise( $this->http->get( Endpoint::bind( '/guilds/:guild/voice-states/:user', From c2c2ca156f653c4fa2d4a89b36b7f5824d04296e Mon Sep 17 00:00:00 2001 From: Exanlv Date: Thu, 26 Sep 2024 12:28:02 +0200 Subject: [PATCH 21/24] Add Launch activity interaction callback type --- src/Enums/InteractionCallbackType.php | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Enums/InteractionCallbackType.php b/src/Enums/InteractionCallbackType.php index 9ff31c61..e5184572 100644 --- a/src/Enums/InteractionCallbackType.php +++ b/src/Enums/InteractionCallbackType.php @@ -13,4 +13,5 @@ enum InteractionCallbackType: int case UPDATE_MESSAGE = 7; case APPLICATION_COMMAND_AUTOCOMPLETE_RESULT = 8; case MODAL = 9; + case LAUNCH_ACTIVITY = 12; } From 6368a1a1d34c2c3fea08e579ba39f75f77b0554a Mon Sep 17 00:00:00 2001 From: Exanlv <51094537+Exanlv@users.noreply.github.com> Date: Thu, 26 Sep 2024 12:34:07 +0200 Subject: [PATCH 22/24] Add doc comment --- src/Parts/MessageInteraction.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/Parts/MessageInteraction.php b/src/Parts/MessageInteraction.php index aca8f48c..290958db 100644 --- a/src/Parts/MessageInteraction.php +++ b/src/Parts/MessageInteraction.php @@ -14,6 +14,10 @@ class MessageInteraction public string $id; public InteractionType $type; public User $user; + /** + * @var string[] + * @see https://discord.com/developers/docs/interactions/receiving-and-responding#interaction-object-authorizing-integration-owners-object + */ public array $authorizing_integration_owners; public ?string $original_response_message_id; public ?string $interacted_message_id; From f44a12f42262d06ac943a8ca4e8a82a9e5d6dd9e Mon Sep 17 00:00:00 2001 From: Exanlv <51094537+Exanlv@users.noreply.github.com> Date: Thu, 26 Sep 2024 12:34:58 +0200 Subject: [PATCH 23/24] Use proper var name for application emoji delete call --- src/Rest/Emoji.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Rest/Emoji.php b/src/Rest/Emoji.php index 12a07921..d010d526 100644 --- a/src/Rest/Emoji.php +++ b/src/Rest/Emoji.php @@ -207,13 +207,13 @@ public function modifyApplicationEmoji( * @return ExtendedPromiseInterface */ public function deleteApplicationEmoji( - string $guildId, + string $applicationId, string $emojiId, ): ExtendedPromiseInterface { return $this->http->delete( Endpoint::bind( 'applications/:application/emojis/:emoji', - $guildId, + $applicationId, $emojiId ), )->otherwise($this->logThrowable(...)); From 8005e33ef6d94df3f65fa92593824a64c48d1105 Mon Sep 17 00:00:00 2001 From: Exanlv Date: Thu, 26 Sep 2024 12:36:53 +0200 Subject: [PATCH 24/24] cd --- src/Rest/Guild.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/Rest/Guild.php b/src/Rest/Guild.php index b4781d4b..0d3d8eb0 100644 --- a/src/Rest/Guild.php +++ b/src/Rest/Guild.php @@ -29,6 +29,8 @@ * * @SuppressWarnings(PHPMD.TooManyMethods) * @SuppressWarnings(PHPMD.TooManyPublicMethods) + * @SuppressWarnings(PHPMD.ExcessivePublicCount) + * @SuppressWarnings(PHPMD.ExcessiveClassComplexity) */ class Guild extends HttpResource {