From 093e955eace22ac272c5f29fe62a3db031aef194 Mon Sep 17 00:00:00 2001 From: Valithor Obsidion Date: Fri, 17 Jan 2025 14:22:18 -0500 Subject: [PATCH 01/20] keys() and values() --- src/Discord/Helpers/CollectionInterface.php | 2 ++ src/Discord/Helpers/CollectionTrait.php | 10 ++++++++++ src/Discord/Repository/AbstractRepositoryInterface.php | 1 + src/Discord/Repository/AbstractRepositoryTrait.php | 10 ++++++++++ 4 files changed, 23 insertions(+) diff --git a/src/Discord/Helpers/CollectionInterface.php b/src/Discord/Helpers/CollectionInterface.php index 679ae2d05..8f35bec96 100644 --- a/src/Discord/Helpers/CollectionInterface.php +++ b/src/Discord/Helpers/CollectionInterface.php @@ -38,6 +38,8 @@ public function sort(callable|int|null $callback); public function map(callable $callback); public function merge($collection): self; public function toArray(); + public function keys(): array; + public function values(): array; public function offsetExists($offset): bool; #[\ReturnTypeWillChange] public function offsetGet($offset); diff --git a/src/Discord/Helpers/CollectionTrait.php b/src/Discord/Helpers/CollectionTrait.php index 2b70a4b0a..f507b09e4 100644 --- a/src/Discord/Helpers/CollectionTrait.php +++ b/src/Discord/Helpers/CollectionTrait.php @@ -382,6 +382,16 @@ public function keys(): array return array_keys($this->items); } + /** + * Get the values of the items. + * + * @return array + */ + public function values(): array + { + return array_values($this->items); + } + /** * If the collection has an offset. * diff --git a/src/Discord/Repository/AbstractRepositoryInterface.php b/src/Discord/Repository/AbstractRepositoryInterface.php index edb6bf5eb..15bf94176 100644 --- a/src/Discord/Repository/AbstractRepositoryInterface.php +++ b/src/Discord/Repository/AbstractRepositoryInterface.php @@ -40,6 +40,7 @@ public function find(callable $callback); public function clear(): void; public function toArray(): array; public function keys(): array; + public function values(): array; public function offsetExists($offset): bool; #[\ReturnTypeWillChange] public function offsetGet($offset); diff --git a/src/Discord/Repository/AbstractRepositoryTrait.php b/src/Discord/Repository/AbstractRepositoryTrait.php index 2b4188fea..2ed029ee3 100644 --- a/src/Discord/Repository/AbstractRepositoryTrait.php +++ b/src/Discord/Repository/AbstractRepositoryTrait.php @@ -669,6 +669,16 @@ public function keys(): array return array_keys($this->items); } + /** + * Get the values of the items. + * + * @return array + */ + public function values(): array + { + return array_values($this->items); + } + /** * If the repository has an offset. * From 3302de1d5d992195e8239d855586150bb73b843f Mon Sep 17 00:00:00 2001 From: Valithor Obsidion Date: Fri, 17 Jan 2025 14:26:35 -0500 Subject: [PATCH 02/20] reduce() --- src/Discord/Helpers/CollectionInterface.php | 1 + src/Discord/Helpers/CollectionTrait.php | 17 +++++++++++++++++ 2 files changed, 18 insertions(+) diff --git a/src/Discord/Helpers/CollectionInterface.php b/src/Discord/Helpers/CollectionInterface.php index 8f35bec96..ee21184b0 100644 --- a/src/Discord/Helpers/CollectionInterface.php +++ b/src/Discord/Helpers/CollectionInterface.php @@ -35,6 +35,7 @@ public function find(callable $callback); public function clear(): void; public function slice(int $offset, ?int $length, bool $preserve_keys = false); public function sort(callable|int|null $callback); + public function reduce(callable $callback, $initial = null); public function map(callable $callback); public function merge($collection): self; public function toArray(); diff --git a/src/Discord/Helpers/CollectionTrait.php b/src/Discord/Helpers/CollectionTrait.php index f507b09e4..6f78f34b3 100644 --- a/src/Discord/Helpers/CollectionTrait.php +++ b/src/Discord/Helpers/CollectionTrait.php @@ -331,6 +331,23 @@ public function sort(callable|int|null $callback) return new Collection($items, $this->discrim, $this->class); } + /** + * Reduces the collection to a single value using a callback function. + * + * @param callable $callback + * @param ?mixed $initial + * + * @return CollectionInterface + */ + public function reduce(callable $callback, $initial = null) + { + $items = $this->items; + + $items = array_reduce($items, $callback, $initial); + + return new Collection($items, $this->discrim, $this->class); + } + /** * Runs a callback over the collection and creates a new static. * From 9ea4a19d7572bcb1e81f4f470ed9b4191edd2144 Mon Sep 17 00:00:00 2001 From: Valithor Obsidion Date: Fri, 17 Jan 2025 14:30:05 -0500 Subject: [PATCH 03/20] walk() --- src/Discord/Helpers/CollectionInterface.php | 1 + src/Discord/Helpers/CollectionTrait.php | 17 +++++++++++++++++ 2 files changed, 18 insertions(+) diff --git a/src/Discord/Helpers/CollectionInterface.php b/src/Discord/Helpers/CollectionInterface.php index ee21184b0..cbb3f53f9 100644 --- a/src/Discord/Helpers/CollectionInterface.php +++ b/src/Discord/Helpers/CollectionInterface.php @@ -35,6 +35,7 @@ public function find(callable $callback); public function clear(): void; public function slice(int $offset, ?int $length, bool $preserve_keys = false); public function sort(callable|int|null $callback); + public function walk(callable $callback, mixed $arg); public function reduce(callable $callback, $initial = null); public function map(callable $callback); public function merge($collection): self; diff --git a/src/Discord/Helpers/CollectionTrait.php b/src/Discord/Helpers/CollectionTrait.php index 6f78f34b3..908dc3cbe 100644 --- a/src/Discord/Helpers/CollectionTrait.php +++ b/src/Discord/Helpers/CollectionTrait.php @@ -331,6 +331,23 @@ public function sort(callable|int|null $callback) return new Collection($items, $this->discrim, $this->class); } + /** + * Applies the given callback function to each item in the collection. + * + * @param callable $callback + * @param mixed $arg + * + * @return CollectionInterface + */ + public function walk(callable $callback, mixed $arg) + { + $items = $this->items; + + array_walk($items, $callback, $arg); + + return new Collection($items, $this->discrim, $this->class); + } + /** * Reduces the collection to a single value using a callback function. * From cb0a8f310033780b6e07a971598d5feef42c24fc Mon Sep 17 00:00:00 2001 From: Valithor Obsidion Date: Fri, 17 Jan 2025 14:46:39 -0500 Subject: [PATCH 04/20] diff() and fix documented param types --- src/Discord/Helpers/CollectionInterface.php | 1 + src/Discord/Helpers/CollectionTrait.php | 34 ++++++++++++++++++--- 2 files changed, 31 insertions(+), 4 deletions(-) diff --git a/src/Discord/Helpers/CollectionInterface.php b/src/Discord/Helpers/CollectionInterface.php index cbb3f53f9..efeae5bc6 100644 --- a/src/Discord/Helpers/CollectionInterface.php +++ b/src/Discord/Helpers/CollectionInterface.php @@ -42,6 +42,7 @@ public function merge($collection): self; public function toArray(); public function keys(): array; public function values(): array; + public function diff(): array; public function offsetExists($offset): bool; #[\ReturnTypeWillChange] public function offsetGet($offset); diff --git a/src/Discord/Helpers/CollectionTrait.php b/src/Discord/Helpers/CollectionTrait.php index 908dc3cbe..42ec1d4d5 100644 --- a/src/Discord/Helpers/CollectionTrait.php +++ b/src/Discord/Helpers/CollectionTrait.php @@ -18,7 +18,7 @@ trait CollectionTrait * * @param array $items * @param ?string $discrim - * @param string|null $class + * @param ?string $class */ public function __construct(array $items = [], ?string $discrim = 'id', ?string $class = null) { @@ -32,7 +32,7 @@ public function __construct(array $items = [], ?string $discrim = 'id', ?string * * @param array $items * @param ?string $discrim - * @param string|null $class + * @param ?string $class * * @return static */ @@ -298,8 +298,8 @@ public function clear(): void /** * Slices the collection. * - * @param int $offset - * @param null|int $length + * @param int $offset + * @param ?int $length * @param bool $preserve_keys * * @return CollectionInterface @@ -331,6 +331,32 @@ public function sort(callable|int|null $callback) return new Collection($items, $this->discrim, $this->class); } + /** + * Computes the difference between the current collection and the given array. + * + * If a callback is provided and is callable, it uses `array_udiff_assoc` to compute the difference. + * Otherwise, it uses `array_diff`. + * + * @param CollectionInterface|array $array + * @param ?callable $callback + * + * @return CollectionInterface + */ + public function diff($array, ?callable $callback) + { + $array = $array instanceof CollectionInterface + ? $array->toArray() + : $array; + + $items = $this->items; + + $callback && is_callable($callback) + ? array_udiff_assoc($items, $array, $callback) + : array_diff($items, $array); + + return new Collection($items, $this->discrim, $this->class); + } + /** * Applies the given callback function to each item in the collection. * From 1b8f252f1b9b2d695a03f8f611645b072c9e63fc Mon Sep 17 00:00:00 2001 From: Valithor Obsidion Date: Fri, 17 Jan 2025 15:14:13 -0500 Subject: [PATCH 05/20] insersect() --- src/Discord/Helpers/CollectionTrait.php | 34 ++++++++++++++++++------- 1 file changed, 25 insertions(+), 9 deletions(-) diff --git a/src/Discord/Helpers/CollectionTrait.php b/src/Discord/Helpers/CollectionTrait.php index 42ec1d4d5..073966827 100644 --- a/src/Discord/Helpers/CollectionTrait.php +++ b/src/Discord/Helpers/CollectionTrait.php @@ -342,19 +342,35 @@ public function sort(callable|int|null $callback) * * @return CollectionInterface */ - public function diff($array, ?callable $callback) + public function diff($items, ?callable $callback) { - $array = $array instanceof CollectionInterface - ? $array->toArray() - : $array; + $items = $items instanceof CollectionInterface + ? $items->toArray() + : $items; - $items = $this->items; + $diff = $callback && is_callable($callback) + ? array_udiff_assoc($this->items, $items, $callback) + : array_diff($this->items, $items); - $callback && is_callable($callback) - ? array_udiff_assoc($items, $array, $callback) - : array_diff($items, $array); + return new Collection($diff, $this->discrim, $this->class); + } - return new Collection($items, $this->discrim, $this->class); + /** + * Gets the intersection of the items. + * + * @param CollectionInterface|array $array + * + * @return CollectionInterface + */ + public function intersect($items) + { + $items = $items instanceof CollectionInterface + ? $items->toArray() + : $items; + + $diff = array_intersect($this->items, $items); + + return new Collection($diff, $this->discrim, $this->class); } /** From 065d27d8d58f7459701911842bd166f3f9fa6211 Mon Sep 17 00:00:00 2001 From: Valithor Obsidion Date: Fri, 17 Jan 2025 15:16:53 -0500 Subject: [PATCH 06/20] uintersect --- src/Discord/Helpers/CollectionTrait.php | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/Discord/Helpers/CollectionTrait.php b/src/Discord/Helpers/CollectionTrait.php index 073966827..dc9863da7 100644 --- a/src/Discord/Helpers/CollectionTrait.php +++ b/src/Discord/Helpers/CollectionTrait.php @@ -332,13 +332,13 @@ public function sort(callable|int|null $callback) } /** - * Computes the difference between the current collection and the given array. + * Gets the difference between the items. * * If a callback is provided and is callable, it uses `array_udiff_assoc` to compute the difference. * Otherwise, it uses `array_diff`. * * @param CollectionInterface|array $array - * @param ?callable $callback + * @param ?callable $callback * * @return CollectionInterface */ @@ -358,17 +358,23 @@ public function diff($items, ?callable $callback) /** * Gets the intersection of the items. * + * If a callback is provided and is callable, it uses `array_uintersect_assoc` to compute the intersection. + * Otherwise, it uses `array_intersect`. + * * @param CollectionInterface|array $array + * @param ?callable $callback * * @return CollectionInterface */ - public function intersect($items) + public function intersect($items, ?callable $callback) { $items = $items instanceof CollectionInterface ? $items->toArray() : $items; - $diff = array_intersect($this->items, $items); + $diff = $callback && is_callable($callback) + ? array_uintersect_assoc($this->items, $items, $callback) + : array_intersect($this->items, $items); return new Collection($diff, $this->discrim, $this->class); } From cb2e7a32351ccf256844431c0c82727f2edbb5b9 Mon Sep 17 00:00:00 2001 From: Valithor Obsidion Date: Fri, 17 Jan 2025 15:20:04 -0500 Subject: [PATCH 07/20] unique() --- src/Discord/Helpers/CollectionTrait.php | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/Discord/Helpers/CollectionTrait.php b/src/Discord/Helpers/CollectionTrait.php index dc9863da7..7dafdd9b8 100644 --- a/src/Discord/Helpers/CollectionTrait.php +++ b/src/Discord/Helpers/CollectionTrait.php @@ -428,6 +428,18 @@ public function map(callable $callback) return new Collection(array_combine($keys, $values), $this->discrim, $this->class); } + /** + * Returns unique items. + * + * @param int $flags + * + * @return CollectionInterface + */ + public function unique(int $flags = SORT_STRING) + { + return new Collection(array_unique($this->items, $flags), $this->discrim, $this->class); + } + /** * Merges another collection into this collection. * @@ -523,6 +535,9 @@ public function offsetUnset($offset): void /** * Returns the string representation of the collection. * + * @param int $flags + * @param ?int $depth + * * @return string */ public function serialize(int $flags = 0, ?int $depth = 512): string From 7893f56f287b9bcfad9789ac8a2c6905ee1f42ea Mon Sep 17 00:00:00 2001 From: Valithor Obsidion Date: Fri, 17 Jan 2025 16:33:53 -0500 Subject: [PATCH 08/20] shift() --- src/Discord/Helpers/CollectionTrait.php | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/Discord/Helpers/CollectionTrait.php b/src/Discord/Helpers/CollectionTrait.php index 7dafdd9b8..37a5d1084 100644 --- a/src/Discord/Helpers/CollectionTrait.php +++ b/src/Discord/Helpers/CollectionTrait.php @@ -113,6 +113,24 @@ public function pull($key, $default = null) return $default; } + /** + * Shifts an item from the collection. + * + * @return mixed + */ + public function shift() + { + if (empty($this->items)) { + return null; + } + + reset($this->items); + $key = key($this->items); + $value = array_shift($this->items); + + return [$key => $value]; + } + /** * Fills an array of items into the collection. * From 0a271bc9f42abb5227da349be5b9aae93a18bff0 Mon Sep 17 00:00:00 2001 From: Valithor Obsidion Date: Fri, 17 Jan 2025 16:34:39 -0500 Subject: [PATCH 09/20] shift() interface --- src/Discord/Helpers/CollectionInterface.php | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Discord/Helpers/CollectionInterface.php b/src/Discord/Helpers/CollectionInterface.php index efeae5bc6..7e7c42a5a 100644 --- a/src/Discord/Helpers/CollectionInterface.php +++ b/src/Discord/Helpers/CollectionInterface.php @@ -22,6 +22,7 @@ interface CollectionInterface extends ArrayAccess, JsonSerializable, IteratorAgg public function get(string $discrim, $key); public function set($offset, $value); public function pull($key, $default = null); + public function shift(); public function fill(array $items): self; public function push(...$items): self; public function pushItem($item): self; From 7e69786812c2d833a95654d732e0e224910065ad Mon Sep 17 00:00:00 2001 From: Valithor Obsidion Date: Fri, 17 Jan 2025 16:42:18 -0500 Subject: [PATCH 10/20] collect() --- src/Discord/Helpers/CollectionInterface.php | 1 + src/Discord/Helpers/CollectionTrait.php | 10 ++++++++++ 2 files changed, 11 insertions(+) diff --git a/src/Discord/Helpers/CollectionInterface.php b/src/Discord/Helpers/CollectionInterface.php index 7e7c42a5a..577033dd0 100644 --- a/src/Discord/Helpers/CollectionInterface.php +++ b/src/Discord/Helpers/CollectionInterface.php @@ -41,6 +41,7 @@ public function reduce(callable $callback, $initial = null); public function map(callable $callback); public function merge($collection): self; public function toArray(); + public function collect(); public function keys(): array; public function values(): array; public function diff(): array; diff --git a/src/Discord/Helpers/CollectionTrait.php b/src/Discord/Helpers/CollectionTrait.php index 37a5d1084..ac20e9148 100644 --- a/src/Discord/Helpers/CollectionTrait.php +++ b/src/Discord/Helpers/CollectionTrait.php @@ -482,6 +482,16 @@ public function toArray() return $this->items; } + /** + * Converts the items into a new collection. + * + * @return CollectionInterface + */ + public function collect() + { + return new Collection($this->items, $this->discrim, $this->class); + } + /** * @since 11.0.0 * From 39b428d6eeb2da54874b30b28ecb3925949f3925 Mon Sep 17 00:00:00 2001 From: Valithor Obsidion Date: Fri, 17 Jan 2025 16:59:21 -0500 Subject: [PATCH 11/20] array support for merge() --- src/Discord/Helpers/CollectionTrait.php | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/Discord/Helpers/CollectionTrait.php b/src/Discord/Helpers/CollectionTrait.php index ac20e9148..6fe542124 100644 --- a/src/Discord/Helpers/CollectionTrait.php +++ b/src/Discord/Helpers/CollectionTrait.php @@ -467,7 +467,11 @@ public function unique(int $flags = SORT_STRING) */ public function merge($collection): self { - $this->items = array_merge($this->items, $collection->toArray()); + $items = $collection instanceof CollectionInterface + ? $collection->toArray() + : $collection; + + $this->items = array_merge($this->items, $items); return $this; } From 71c24b4aa7f46ec0f5b1d39f4e060b95148a58cc Mon Sep 17 00:00:00 2001 From: Valithor Obsidion Date: Fri, 17 Jan 2025 18:32:39 -0500 Subject: [PATCH 12/20] Partially implement CollectionInterface --- src/Discord/Parts/Guild/Guild.php | 32 ++++++++++++++++++++++++------- src/Discord/Parts/User/Member.php | 14 +++++++++++--- 2 files changed, 36 insertions(+), 10 deletions(-) diff --git a/src/Discord/Parts/Guild/Guild.php b/src/Discord/Parts/Guild/Guild.php index 215bd8a76..d848bd799 100644 --- a/src/Discord/Parts/Guild/Guild.php +++ b/src/Discord/Parts/Guild/Guild.php @@ -14,6 +14,7 @@ use Carbon\Carbon; use Discord\Exceptions\FileNotFoundException; use Discord\Helpers\Collection; +use Discord\Helpers\CollectionInterface; use Discord\Helpers\Multipart; use Discord\Http\Endpoint; use Discord\Http\Exceptions\NoPermissionsException; @@ -335,12 +336,22 @@ protected function setChannelsAttribute(?array $channels): void /** * Sets the roles attribute. * - * @param ?array $roles + * @param CollectionInterface|array|null $roles */ - protected function setRolesAttribute(?array $roles): void + protected function setRolesAttribute($roles): void { + if ($roles instanceof CollectionInterface) { + $roles = $roles->toArray(); + } + if ($roles === null) { + $roles = []; + } + if (! is_array($roles)) { + throw new \InvalidArgumentException('Roles must be an array or CollectionInterface.'); + } + $rolesDiscrim = $this->roles->discrim; - foreach ($roles ?? [] as $role) { + foreach ($roles as $role) { $role = (array) $role; /** @var ?Role */ if ($rolePart = $this->roles->offsetGet($role[$rolesDiscrim])) { @@ -1106,16 +1117,23 @@ public function getBotPermissions(): ?RolePermission * * @link https://discord.com/developers/docs/resources/guild#modify-guild-role-positions * - * @param array $roles Associative array where the LHS key is the position, - * and the RHS value is a `Role` object or a string ID, - * e.g. `[1 => 'role_id_1', 3 => 'role_id_3']`. + * @param CollectionInterface|array $roles Associative array where the LHS key is the position, + * and the RHS value is a `Role` object or a string ID, + * e.g. `[1 => 'role_id_1', 3 => 'role_id_3']`. * * @throws NoPermissionsException Missing manage_roles permission. * * @return PromiseInterface */ - public function updateRolePositions(array $roles): PromiseInterface + public function updateRolePositions($roles): PromiseInterface { + if ($roles instanceof CollectionInterface) { + $roles = $roles->toArray(); + } + if (! is_array($roles)) { + return reject(new \InvalidArgumentException('Roles must be an array of Role instances or Role IDs.')); + } + $botperms = $this->getBotPermissions(); if ($botperms && ! $botperms->manage_roles) { return reject(new NoPermissionsException("You do not have permission to update role positions in the guild {$this->id}.")); diff --git a/src/Discord/Parts/User/Member.php b/src/Discord/Parts/User/Member.php index cdf2088e7..39941295a 100644 --- a/src/Discord/Parts/User/Member.php +++ b/src/Discord/Parts/User/Member.php @@ -15,6 +15,7 @@ use Discord\Builders\MessageBuilder; use Discord\Helpers\BigInt; use Discord\Helpers\Collection; +use Discord\Helpers\CollectionInterface; use Discord\Http\Endpoint; use Discord\Http\Exceptions\NoPermissionsException; use Discord\Parts\Channel\Channel; @@ -331,15 +332,22 @@ public function removeRole($role, ?string $reason = null): PromiseInterface * * @link https://discord.com/developers/docs/resources/guild#modify-guild-member * - * @param Role[]|string[] $roles The roles to set to the member. - * @param string|null $reason Reason for Audit Log. + * @param CollectionInterface|Role[]|string[] $roles The roles to set to the member. + * @param string|null $reason Reason for Audit Log. * * @throws NoPermissionsException Missing manage_roles permission. * * @return PromiseInterface */ - public function setRoles(array $roles, ?string $reason = null): PromiseInterface + public function setRoles($roles, ?string $reason = null): PromiseInterface { + if ($roles instanceof CollectionInterface) { + $roles = $roles->toArray(); + } + if (! is_array($roles)) { + return reject(new \InvalidArgumentException('Roles must be an array of Role instances or Role IDs.')); + } + foreach ($roles as $i => $role) { if ($role instanceof Role) { $roles[$i] = $role->id; From c32e30dedee2f06347a5736af9550fed45c8b608 Mon Sep 17 00:00:00 2001 From: Valithor Obsidion Date: Fri, 17 Jan 2025 18:37:05 -0500 Subject: [PATCH 13/20] Fix interface for `diff()` --- src/Discord/Helpers/CollectionInterface.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Discord/Helpers/CollectionInterface.php b/src/Discord/Helpers/CollectionInterface.php index 577033dd0..a16704270 100644 --- a/src/Discord/Helpers/CollectionInterface.php +++ b/src/Discord/Helpers/CollectionInterface.php @@ -44,7 +44,7 @@ public function toArray(); public function collect(); public function keys(): array; public function values(): array; - public function diff(): array; + public function diff($items, ?callable $callback); public function offsetExists($offset): bool; #[\ReturnTypeWillChange] public function offsetGet($offset); From e1f42fee86a50ddd4869478213c343b0302ae820 Mon Sep 17 00:00:00 2001 From: Valithor Obsidion Date: Fri, 17 Jan 2025 18:39:59 -0500 Subject: [PATCH 14/20] Add interface for `intersect()` --- src/Discord/Helpers/CollectionInterface.php | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Discord/Helpers/CollectionInterface.php b/src/Discord/Helpers/CollectionInterface.php index a16704270..ff2cbdd66 100644 --- a/src/Discord/Helpers/CollectionInterface.php +++ b/src/Discord/Helpers/CollectionInterface.php @@ -45,6 +45,7 @@ public function collect(); public function keys(): array; public function values(): array; public function diff($items, ?callable $callback); + public function intersect($items, ?callable $callback); public function offsetExists($offset): bool; #[\ReturnTypeWillChange] public function offsetGet($offset); From 123328f708e7ed60a18ab75e8a2412a61d499dab Mon Sep 17 00:00:00 2001 From: Valithor Obsidion Date: Fri, 17 Jan 2025 18:41:41 -0500 Subject: [PATCH 15/20] Add interface for `unique()` --- src/Discord/Helpers/CollectionInterface.php | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Discord/Helpers/CollectionInterface.php b/src/Discord/Helpers/CollectionInterface.php index ff2cbdd66..e49a1ab98 100644 --- a/src/Discord/Helpers/CollectionInterface.php +++ b/src/Discord/Helpers/CollectionInterface.php @@ -46,6 +46,7 @@ public function keys(): array; public function values(): array; public function diff($items, ?callable $callback); public function intersect($items, ?callable $callback); + public function unique(int $flags = SORT_STRING) public function offsetExists($offset): bool; #[\ReturnTypeWillChange] public function offsetGet($offset); From a86f2b40dd1d02e2b4384cad62587a0b61510434 Mon Sep 17 00:00:00 2001 From: Valithor Obsidion Date: Fri, 17 Jan 2025 18:47:01 -0500 Subject: [PATCH 16/20] Remove strict array typing to `fill()` --- src/Discord/Helpers/CollectionInterface.php | 2 +- src/Discord/Helpers/CollectionTrait.php | 10 ++++++++-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/src/Discord/Helpers/CollectionInterface.php b/src/Discord/Helpers/CollectionInterface.php index e49a1ab98..797346f58 100644 --- a/src/Discord/Helpers/CollectionInterface.php +++ b/src/Discord/Helpers/CollectionInterface.php @@ -23,7 +23,7 @@ public function get(string $discrim, $key); public function set($offset, $value); public function pull($key, $default = null); public function shift(); - public function fill(array $items): self; + public function fill($items): self; public function push(...$items): self; public function pushItem($item): self; public function count(): int; diff --git a/src/Discord/Helpers/CollectionTrait.php b/src/Discord/Helpers/CollectionTrait.php index 6fe542124..e2bd603cf 100644 --- a/src/Discord/Helpers/CollectionTrait.php +++ b/src/Discord/Helpers/CollectionTrait.php @@ -134,12 +134,18 @@ public function shift() /** * Fills an array of items into the collection. * - * @param array $items + * @param CollectionInterface|array $items * * @return self */ - public function fill(array $items): self + public function fill($items): self { + if ($items instanceof CollectionInterface) { + $items = $items->toArray(); + } + if (! is_array($items)) { + throw new \InvalidArgumentException('The fill method only accepts arrays or CollectionInterface instances.'); + } foreach ($items as $item) { $this->pushItem($item); } From c558428a7aa47c623ca7a483c9d7b98de6ae73fc Mon Sep 17 00:00:00 2001 From: Valithor Obsidion Date: Fri, 17 Jan 2025 18:48:37 -0500 Subject: [PATCH 17/20] Remove strict array typing from `__unserialize()` --- src/Discord/Helpers/CollectionInterface.php | 2 +- src/Discord/Helpers/CollectionTrait.php | 12 ++++++++++-- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/src/Discord/Helpers/CollectionInterface.php b/src/Discord/Helpers/CollectionInterface.php index 797346f58..62205510f 100644 --- a/src/Discord/Helpers/CollectionInterface.php +++ b/src/Discord/Helpers/CollectionInterface.php @@ -55,7 +55,7 @@ public function offsetUnset($offset): void; public function serialize(int $flags = 0, ?int $depth = 512): string; public function __serialize(): array; public function unserialize(string $serialized): void; - public function __unserialize(array $data): void; + public function __unserialize($data): void; public function jsonSerialize(): array; public function getIterator(): Traversable; public function __debugInfo(): array; diff --git a/src/Discord/Helpers/CollectionTrait.php b/src/Discord/Helpers/CollectionTrait.php index e2bd603cf..62566b577 100644 --- a/src/Discord/Helpers/CollectionTrait.php +++ b/src/Discord/Helpers/CollectionTrait.php @@ -146,6 +146,7 @@ public function fill($items): self if (! is_array($items)) { throw new \InvalidArgumentException('The fill method only accepts arrays or CollectionInterface instances.'); } + foreach ($items as $item) { $this->pushItem($item); } @@ -606,10 +607,17 @@ public function unserialize(string $serialized): void /** * Unserializes the collection. * - * @param array $data + * @param CollectionInterface|array $data */ - public function __unserialize(array $data): void + public function __unserialize($data): void { + if ($data instanceof CollectionInterface) { + $data = $data->toArray(); + } + if (! is_array($data)) { + throw new \InvalidArgumentException('The __unserialize method only accepts arrays or CollectionInterface instances.'); + } + $this->items = $data; } From 604fa6f7373e4e354945b9cbd594f9c2339eb86b Mon Sep 17 00:00:00 2001 From: Valithor Obsidion Date: Fri, 17 Jan 2025 18:50:54 -0500 Subject: [PATCH 18/20] Fix accidentally removed semicolon --- src/Discord/Helpers/CollectionInterface.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Discord/Helpers/CollectionInterface.php b/src/Discord/Helpers/CollectionInterface.php index 62205510f..75e3dff7e 100644 --- a/src/Discord/Helpers/CollectionInterface.php +++ b/src/Discord/Helpers/CollectionInterface.php @@ -46,7 +46,7 @@ public function keys(): array; public function values(): array; public function diff($items, ?callable $callback); public function intersect($items, ?callable $callback); - public function unique(int $flags = SORT_STRING) + public function unique(int $flags = SORT_STRING); public function offsetExists($offset): bool; #[\ReturnTypeWillChange] public function offsetGet($offset); From 4c90bf2ef18b53675715a046d99365f5fff4dd60 Mon Sep 17 00:00:00 2001 From: Valithor Obsidion Date: Fri, 17 Jan 2025 18:59:43 -0500 Subject: [PATCH 19/20] Update typecasting for Collections --- src/Discord/Parts/Channel/Channel.php | 4 ++-- src/Discord/Parts/Channel/Message.php | 10 +++++----- src/Discord/Parts/Embed/Embed.php | 2 +- src/Discord/Parts/Guild/AuditLog/AuditLog.php | 18 +++++++++--------- src/Discord/Parts/Guild/AuditLog/Entry.php | 2 +- .../Parts/Guild/AutoModeration/Rule.php | 6 +++--- src/Discord/Parts/Guild/CommandPermissions.php | 2 +- src/Discord/Parts/Guild/Emoji.php | 2 +- src/Discord/Parts/Guild/Guild.php | 2 +- src/Discord/Parts/Guild/WelcomeScreen.php | 2 +- .../Parts/Interactions/Command/Option.php | 2 +- src/Discord/Parts/User/Member.php | 4 ++-- .../Parts/WebSockets/PresenceUpdate.php | 4 ++-- .../Repository/Channel/ThreadRepository.php | 2 +- 14 files changed, 31 insertions(+), 31 deletions(-) diff --git a/src/Discord/Parts/Channel/Channel.php b/src/Discord/Parts/Channel/Channel.php index 75deb273e..93c439e8f 100644 --- a/src/Discord/Parts/Channel/Channel.php +++ b/src/Discord/Parts/Channel/Channel.php @@ -253,7 +253,7 @@ protected function getRecipientIdAttribute(): ?string * * @return Collection A collection of recipients. */ - protected function getRecipientsAttribute(): Collection + protected function getRecipientsAttribute(): CollectionInterface { $recipients = Collection::for(User::class); @@ -999,7 +999,7 @@ protected function getPermissionOverwritesAttribute(): ?array * * @since 7.4.0 */ - protected function getAvailableTagsAttribute(): Collection + protected function getAvailableTagsAttribute(): CollectionInterface { $available_tags = Collection::for(Tag::class); diff --git a/src/Discord/Parts/Channel/Message.php b/src/Discord/Parts/Channel/Message.php index ebe1485c7..f7bc4ca33 100644 --- a/src/Discord/Parts/Channel/Message.php +++ b/src/Discord/Parts/Channel/Message.php @@ -336,7 +336,7 @@ protected function getSuppressNotificationsAttribute(): bool * * @return Collection|Channel[] */ - protected function getMentionChannelsAttribute(): Collection + protected function getMentionChannelsAttribute(): CollectionInterface { $collection = Collection::for(Channel::class); @@ -360,7 +360,7 @@ protected function getMentionChannelsAttribute(): Collection * * @return Collection|Attachment[] Attachment objects. */ - protected function getAttachmentsAttribute(): Collection + protected function getAttachmentsAttribute(): CollectionInterface { $attachments = Collection::for(Attachment::class); @@ -492,7 +492,7 @@ protected function getGuildAttribute(): ?Guild * * @return Collection The roles that were mentioned. null role only contains the ID in the collection. */ - protected function getMentionRolesAttribute(): Collection + protected function getMentionRolesAttribute(): CollectionInterface { $roles = new Collection(); @@ -516,7 +516,7 @@ protected function getMentionRolesAttribute(): Collection * * @return Collection|User[] The users that were mentioned. */ - protected function getMentionsAttribute(): Collection + protected function getMentionsAttribute(): CollectionInterface { $users = Collection::for(User::class); @@ -583,7 +583,7 @@ protected function getMemberAttribute(): ?Member * * @return Collection A collection of embeds. */ - protected function getEmbedsAttribute(): Collection + protected function getEmbedsAttribute(): CollectionInterface { $embeds = new Collection([], null); diff --git a/src/Discord/Parts/Embed/Embed.php b/src/Discord/Parts/Embed/Embed.php index 811635a39..67e17a706 100644 --- a/src/Discord/Parts/Embed/Embed.php +++ b/src/Discord/Parts/Embed/Embed.php @@ -137,7 +137,7 @@ protected function getAuthorAttribute(): Author * * @return Collection|Field[] */ - protected function getFieldsAttribute(): Collection + protected function getFieldsAttribute(): CollectionInterface { $fields = Collection::for(Field::class, null); diff --git a/src/Discord/Parts/Guild/AuditLog/AuditLog.php b/src/Discord/Parts/Guild/AuditLog/AuditLog.php index 1cba91e8a..cbac620e2 100644 --- a/src/Discord/Parts/Guild/AuditLog/AuditLog.php +++ b/src/Discord/Parts/Guild/AuditLog/AuditLog.php @@ -76,7 +76,7 @@ protected function getGuildAttribute(): ?Guild * * @return Collection|Command[] */ - protected function getApplicationCommandsAttribute(): Collection + protected function getApplicationCommandsAttribute(): CollectionInterface { $collection = Collection::for(Command::class); @@ -92,7 +92,7 @@ protected function getApplicationCommandsAttribute(): Collection * * @return Collection|Entry[] */ - protected function getAuditLogEntriesAttribute(): Collection + protected function getAuditLogEntriesAttribute(): CollectionInterface { $collection = Collection::for(Entry::class); @@ -108,7 +108,7 @@ protected function getAuditLogEntriesAttribute(): Collection * * @return Collection|Rule[] */ - protected function getAutoModerationRulesAttribute(): Collection + protected function getAutoModerationRulesAttribute(): CollectionInterface { $collection = Collection::for(Rule::class); @@ -124,7 +124,7 @@ protected function getAutoModerationRulesAttribute(): Collection * * @return Collection|ScheduledEvent[] */ - protected function getGuildScheduledEventsAttribute(): Collection + protected function getGuildScheduledEventsAttribute(): CollectionInterface { $collection = Collection::for(ScheduledEvent::class); @@ -142,7 +142,7 @@ protected function getGuildScheduledEventsAttribute(): Collection * * @return Collection|Integration[] */ - protected function getIntegrationsAttribute(): Collection + protected function getIntegrationsAttribute(): CollectionInterface { $collection = Collection::for(Integration::class); @@ -158,7 +158,7 @@ protected function getIntegrationsAttribute(): Collection * * @return Collection|Thread[] */ - protected function getThreadsAttribute(): Collection + protected function getThreadsAttribute(): CollectionInterface { $collection = Collection::for(Thread::class); @@ -174,7 +174,7 @@ protected function getThreadsAttribute(): Collection * * @return Collection|User[] */ - protected function getUsersAttribute(): Collection + protected function getUsersAttribute(): CollectionInterface { $collection = Collection::for(User::class); @@ -190,7 +190,7 @@ protected function getUsersAttribute(): Collection * * @return Collection|Webhook[] */ - protected function getWebhooksAttribute(): Collection + protected function getWebhooksAttribute(): CollectionInterface { $collection = Collection::for(Webhook::class); @@ -210,7 +210,7 @@ protected function getWebhooksAttribute(): Collection * * @return Collection|Entry[] */ - public function searchByType(int $action_type): Collection + public function searchByType(int $action_type): CollectionInterface { $types = array_values((new ReflectionClass(Entry::class))->getConstants()); diff --git a/src/Discord/Parts/Guild/AuditLog/Entry.php b/src/Discord/Parts/Guild/AuditLog/Entry.php index 70ccc9979..95aa020d5 100644 --- a/src/Discord/Parts/Guild/AuditLog/Entry.php +++ b/src/Discord/Parts/Guild/AuditLog/Entry.php @@ -123,7 +123,7 @@ protected function getUserAttribute(): ?User * * @return Collection */ - protected function getChangesAttribute(): Collection + protected function getChangesAttribute(): CollectionInterface { return new Collection($this->attributes['changes'] ?? [], 'key', null); } diff --git a/src/Discord/Parts/Guild/AutoModeration/Rule.php b/src/Discord/Parts/Guild/AutoModeration/Rule.php index 935f3e277..e1bb888f6 100644 --- a/src/Discord/Parts/Guild/AutoModeration/Rule.php +++ b/src/Discord/Parts/Guild/AutoModeration/Rule.php @@ -100,7 +100,7 @@ protected function getCreatorAttribute(): ?User * * @return Collection|Action[] A collection of actions. */ - protected function getActionsAttribute(): Collection + protected function getActionsAttribute(): CollectionInterface { $actions = Collection::for(Action::class, null); @@ -116,7 +116,7 @@ protected function getActionsAttribute(): Collection * * @return Collection|?Role[] A collection of roles exempt from the rule. */ - protected function getExemptRolesAttribute(): Collection + protected function getExemptRolesAttribute(): CollectionInterface { $roles = new Collection(); @@ -140,7 +140,7 @@ protected function getExemptRolesAttribute(): Collection * * @return Collection|?Channel[] A collection of channels exempt from the rule. */ - protected function getExemptChannelsAttribute(): Collection + protected function getExemptChannelsAttribute(): CollectionInterface { $channels = new Collection(); diff --git a/src/Discord/Parts/Guild/CommandPermissions.php b/src/Discord/Parts/Guild/CommandPermissions.php index 7d297419b..dd8919a6e 100644 --- a/src/Discord/Parts/Guild/CommandPermissions.php +++ b/src/Discord/Parts/Guild/CommandPermissions.php @@ -57,7 +57,7 @@ protected function getGuildAttribute(): ?Guild * * @return Collection|Permission[] A collection of permissions. */ - protected function getPermissionsAttribute(): Collection + protected function getPermissionsAttribute(): CollectionInterface { $permissions = Collection::for(Permission::class); diff --git a/src/Discord/Parts/Guild/Emoji.php b/src/Discord/Parts/Guild/Emoji.php index b353ee11b..8dca7c4fe 100644 --- a/src/Discord/Parts/Guild/Emoji.php +++ b/src/Discord/Parts/Guild/Emoji.php @@ -69,7 +69,7 @@ protected function getGuildAttribute(): ?Guild * * @return Collection A collection of roles for the emoji. */ - protected function getRolesAttribute(): Collection + protected function getRolesAttribute(): CollectionInterface { $roles = new Collection(); diff --git a/src/Discord/Parts/Guild/Guild.php b/src/Discord/Parts/Guild/Guild.php index d848bd799..a6bb12e83 100644 --- a/src/Discord/Parts/Guild/Guild.php +++ b/src/Discord/Parts/Guild/Guild.php @@ -581,7 +581,7 @@ protected function getSplashHashAttribute(): ?string * * @return Collection|StageInstance[] */ - protected function getStageInstancesAttribute(): Collection + protected function getStageInstancesAttribute(): CollectionInterface { $stage_instances = Collection::for(StageInstance::class); diff --git a/src/Discord/Parts/Guild/WelcomeScreen.php b/src/Discord/Parts/Guild/WelcomeScreen.php index 3ea37c850..f837723d6 100644 --- a/src/Discord/Parts/Guild/WelcomeScreen.php +++ b/src/Discord/Parts/Guild/WelcomeScreen.php @@ -39,7 +39,7 @@ class WelcomeScreen extends Part * * @return Collection|WelcomeChannel[] The channels of welcome screen. */ - protected function getWelcomeChannelsAttribute(): Collection + protected function getWelcomeChannelsAttribute(): CollectionInterface { $collection = Collection::for(WelcomeChannel::class, null); diff --git a/src/Discord/Parts/Interactions/Command/Option.php b/src/Discord/Parts/Interactions/Command/Option.php index 6900ff6be..8a434d9d1 100644 --- a/src/Discord/Parts/Interactions/Command/Option.php +++ b/src/Discord/Parts/Interactions/Command/Option.php @@ -97,7 +97,7 @@ protected function getChoicesAttribute(): ?Collection * * @return Collection|Option[] A collection of options. */ - protected function getOptionsAttribute(): Collection + protected function getOptionsAttribute(): CollectionInterface { $options = Collection::for(Option::class, null); diff --git a/src/Discord/Parts/User/Member.php b/src/Discord/Parts/User/Member.php index 39941295a..bbc52dda7 100644 --- a/src/Discord/Parts/User/Member.php +++ b/src/Discord/Parts/User/Member.php @@ -619,7 +619,7 @@ protected function getGameAttribute(): ?Activity * * @return Collection|Activity[] */ - protected function getActivitiesAttribute(): Collection + protected function getActivitiesAttribute(): CollectionInterface { $activities = Collection::for(Activity::class, null); @@ -695,7 +695,7 @@ protected function getGuildAttribute(): ?Guild * * @return Collection A collection of roles the member is in. null role only contains ID in the collection. */ - protected function getRolesAttribute(): Collection + protected function getRolesAttribute(): CollectionInterface { $roles = new Collection(); diff --git a/src/Discord/Parts/WebSockets/PresenceUpdate.php b/src/Discord/Parts/WebSockets/PresenceUpdate.php index 911e9306b..9b83fc133 100644 --- a/src/Discord/Parts/WebSockets/PresenceUpdate.php +++ b/src/Discord/Parts/WebSockets/PresenceUpdate.php @@ -95,7 +95,7 @@ protected function getGuildAttribute(): ?Guild * * @return Collection|Activity[] */ - protected function getActivitiesAttribute(): Collection + protected function getActivitiesAttribute(): CollectionInterface { $collection = Collection::for(Activity::class, null); @@ -165,7 +165,7 @@ protected function getMemberAttribute(): ?Member * * @return Collection|Role[] */ - protected function getRolesAttribute(): Collection + protected function getRolesAttribute(): CollectionInterface { if ($member = $this->member) { return $member->roles; diff --git a/src/Discord/Repository/Channel/ThreadRepository.php b/src/Discord/Repository/Channel/ThreadRepository.php index e4dabada2..38569d85a 100644 --- a/src/Discord/Repository/Channel/ThreadRepository.php +++ b/src/Discord/Repository/Channel/ThreadRepository.php @@ -152,7 +152,7 @@ public function archived(bool $private = false, bool $joined = false, ?int $limi * * @return Collection|Thread[] */ - private function handleThreadPaginationResponse(object $response): Collection + private function handleThreadPaginationResponse(object $response): CollectionInterface { $collection = Collection::for(Thread::class); From a59fe5cfbe76e7df0d6b23385ad050d1637275a5 Mon Sep 17 00:00:00 2001 From: Valithor Obsidion Date: Fri, 17 Jan 2025 19:23:02 -0500 Subject: [PATCH 20/20] Add missing imports --- src/Discord/Parts/Channel/Channel.php | 1 + src/Discord/Parts/Channel/Message.php | 1 + src/Discord/Parts/Embed/Embed.php | 1 + src/Discord/Parts/Guild/AuditLog/AuditLog.php | 1 + src/Discord/Parts/Guild/AuditLog/Entry.php | 1 + src/Discord/Parts/Guild/AutoModeration/Rule.php | 1 + src/Discord/Parts/Guild/CommandPermissions.php | 1 + src/Discord/Parts/Guild/Emoji.php | 1 + src/Discord/Parts/Guild/WelcomeScreen.php | 1 + src/Discord/Parts/Interactions/Command/Option.php | 1 + src/Discord/Parts/WebSockets/PresenceUpdate.php | 1 + src/Discord/Repository/Channel/ThreadRepository.php | 1 + 12 files changed, 12 insertions(+) diff --git a/src/Discord/Parts/Channel/Channel.php b/src/Discord/Parts/Channel/Channel.php index 93c439e8f..fd825057a 100644 --- a/src/Discord/Parts/Channel/Channel.php +++ b/src/Discord/Parts/Channel/Channel.php @@ -15,6 +15,7 @@ use Discord\Builders\MessageBuilder; use Discord\Exceptions\InvalidOverwriteException; use Discord\Helpers\Collection; +use Discord\Helpers\CollectionInterface; use Discord\Parts\Embed\Embed; use Discord\Parts\Guild\Guild; use Discord\Parts\Guild\Role; diff --git a/src/Discord/Parts/Channel/Message.php b/src/Discord/Parts/Channel/Message.php index f7bc4ca33..844ecace6 100644 --- a/src/Discord/Parts/Channel/Message.php +++ b/src/Discord/Parts/Channel/Message.php @@ -14,6 +14,7 @@ use Carbon\Carbon; use Discord\Builders\MessageBuilder; use Discord\Helpers\Collection; +use Discord\Helpers\CollectionInterface; use Discord\Parts\Channel\Poll; use Discord\Parts\Embed\Embed; use Discord\Parts\Guild\Emoji; diff --git a/src/Discord/Parts/Embed/Embed.php b/src/Discord/Parts/Embed/Embed.php index 67e17a706..8d0bc3c29 100644 --- a/src/Discord/Parts/Embed/Embed.php +++ b/src/Discord/Parts/Embed/Embed.php @@ -13,6 +13,7 @@ use Carbon\Carbon; use Discord\Helpers\Collection; +use Discord\Helpers\CollectionInterface; use Discord\Parts\Channel\Attachment; use Discord\Parts\Part; use function Discord\poly_strlen; diff --git a/src/Discord/Parts/Guild/AuditLog/AuditLog.php b/src/Discord/Parts/Guild/AuditLog/AuditLog.php index cbac620e2..13cf16be6 100644 --- a/src/Discord/Parts/Guild/AuditLog/AuditLog.php +++ b/src/Discord/Parts/Guild/AuditLog/AuditLog.php @@ -12,6 +12,7 @@ namespace Discord\Parts\Guild\AuditLog; use Discord\Helpers\Collection; +use Discord\Helpers\CollectionInterface; use Discord\Parts\Channel\Webhook; use Discord\Parts\Guild\AutoModeration\Rule; use Discord\Parts\Guild\Guild; diff --git a/src/Discord/Parts/Guild/AuditLog/Entry.php b/src/Discord/Parts/Guild/AuditLog/Entry.php index 95aa020d5..6ef005381 100644 --- a/src/Discord/Parts/Guild/AuditLog/Entry.php +++ b/src/Discord/Parts/Guild/AuditLog/Entry.php @@ -12,6 +12,7 @@ namespace Discord\Parts\Guild\AuditLog; use Discord\Helpers\Collection; +use Discord\Helpers\CollectionInterface; use Discord\Parts\Part; use Discord\Parts\User\User; diff --git a/src/Discord/Parts/Guild/AutoModeration/Rule.php b/src/Discord/Parts/Guild/AutoModeration/Rule.php index e1bb888f6..0d983ff89 100644 --- a/src/Discord/Parts/Guild/AutoModeration/Rule.php +++ b/src/Discord/Parts/Guild/AutoModeration/Rule.php @@ -12,6 +12,7 @@ namespace Discord\Parts\Guild\AutoModeration; use Discord\Helpers\Collection; +use Discord\Helpers\CollectionInterface; use Discord\Parts\Channel\Channel; use Discord\Parts\Guild\Guild; use Discord\Parts\Guild\Role; diff --git a/src/Discord/Parts/Guild/CommandPermissions.php b/src/Discord/Parts/Guild/CommandPermissions.php index dd8919a6e..eabeb716a 100644 --- a/src/Discord/Parts/Guild/CommandPermissions.php +++ b/src/Discord/Parts/Guild/CommandPermissions.php @@ -13,6 +13,7 @@ use Discord\Helpers\BigInt; use Discord\Helpers\Collection; +use Discord\Helpers\CollectionInterface; use Discord\Parts\Interactions\Command\Permission; use Discord\Parts\Part; diff --git a/src/Discord/Parts/Guild/Emoji.php b/src/Discord/Parts/Guild/Emoji.php index 8dca7c4fe..ef730660d 100644 --- a/src/Discord/Parts/Guild/Emoji.php +++ b/src/Discord/Parts/Guild/Emoji.php @@ -12,6 +12,7 @@ namespace Discord\Parts\Guild; use Discord\Helpers\Collection; +use Discord\Helpers\CollectionInterface; use Discord\Parts\Part; use Discord\Parts\User\User; use Stringable; diff --git a/src/Discord/Parts/Guild/WelcomeScreen.php b/src/Discord/Parts/Guild/WelcomeScreen.php index f837723d6..5168537c5 100644 --- a/src/Discord/Parts/Guild/WelcomeScreen.php +++ b/src/Discord/Parts/Guild/WelcomeScreen.php @@ -12,6 +12,7 @@ namespace Discord\Parts\Guild; use Discord\Helpers\Collection; +use Discord\Helpers\CollectionInterface; use Discord\Parts\Part; /** diff --git a/src/Discord/Parts/Interactions/Command/Option.php b/src/Discord/Parts/Interactions/Command/Option.php index 8a434d9d1..79539666f 100644 --- a/src/Discord/Parts/Interactions/Command/Option.php +++ b/src/Discord/Parts/Interactions/Command/Option.php @@ -12,6 +12,7 @@ namespace Discord\Parts\Interactions\Command; use Discord\Helpers\Collection; +use Discord\Helpers\CollectionInterface; use Discord\Parts\Part; use function Discord\poly_strlen; diff --git a/src/Discord/Parts/WebSockets/PresenceUpdate.php b/src/Discord/Parts/WebSockets/PresenceUpdate.php index 9b83fc133..f7133d956 100644 --- a/src/Discord/Parts/WebSockets/PresenceUpdate.php +++ b/src/Discord/Parts/WebSockets/PresenceUpdate.php @@ -12,6 +12,7 @@ namespace Discord\Parts\WebSockets; use Discord\Helpers\Collection; +use Discord\Helpers\CollectionInterface; use Discord\Parts\Guild\Guild; use Discord\Parts\Guild\Role; use Discord\Parts\Part; diff --git a/src/Discord/Repository/Channel/ThreadRepository.php b/src/Discord/Repository/Channel/ThreadRepository.php index 38569d85a..c700e1481 100644 --- a/src/Discord/Repository/Channel/ThreadRepository.php +++ b/src/Discord/Repository/Channel/ThreadRepository.php @@ -12,6 +12,7 @@ namespace Discord\Repository\Channel; use Discord\Helpers\Collection; +use Discord\Helpers\CollectionInterface; use Discord\Http\Endpoint; use Discord\Parts\Thread\Thread; use Discord\Repository\AbstractRepository;