|
24 | 24 | use Discord\Parts\User\User; |
25 | 25 | use Discord\Repository\Channel\MessageRepository; |
26 | 26 | use Discord\Repository\Channel\OverwriteRepository; |
27 | | -use Discord\Repository\Channel\VoiceMemberRepository as MemberRepository; |
28 | 27 | use Discord\Repository\Channel\WebhookRepository; |
29 | 28 | use Discord\Helpers\Multipart; |
30 | 29 | use Discord\Http\Endpoint; |
31 | 30 | use Discord\Http\Exceptions\NoPermissionsException; |
32 | 31 | use Discord\Parts\Channel\Forum\Reaction; |
33 | 32 | use Discord\Parts\Channel\Forum\Tag; |
| 33 | +use Discord\Parts\Guild\Guild; |
34 | 34 | use Discord\Parts\Thread\Thread; |
| 35 | +use Discord\Parts\WebSockets\VoiceStateUpdate; |
35 | 36 | use Discord\Repository\Channel\InviteRepository; |
36 | 37 | use Discord\Repository\Channel\StageInstanceRepository; |
37 | 38 | use Discord\Repository\Channel\ThreadRepository; |
@@ -194,7 +195,6 @@ class Channel extends Part implements Stringable |
194 | 195 | */ |
195 | 196 | protected $repositories = [ |
196 | 197 | 'overwrites' => OverwriteRepository::class, |
197 | | - 'members' => MemberRepository::class, |
198 | 198 | 'messages' => MessageRepository::class, |
199 | 199 | 'webhooks' => WebhookRepository::class, |
200 | 200 | 'threads' => ThreadRepository::class, |
@@ -997,6 +997,21 @@ public function startThread(array|string $options, string|bool|null $reason = nu |
997 | 997 | return $threadPart; |
998 | 998 | }); |
999 | 999 | } |
| 1000 | + |
| 1001 | + /** |
| 1002 | + * Gets the members currently in the voice channel. |
| 1003 | + * |
| 1004 | + * @return ExCollectionInterface<VoiceStateUpdate>|VoiceStateUpdate[] Members in the voice channel. |
| 1005 | + */ |
| 1006 | + public function getMembersAttribute(): ExCollectionInterface |
| 1007 | + { |
| 1008 | + if ($guild = $this->guild) { |
| 1009 | + return $guild->voice_states->filter(fn (VoiceStateUpdate $voice_state) => $voice_state->channel_id === $this->id); |
| 1010 | + } |
| 1011 | + |
| 1012 | + return Collection::for(VoiceStateUpdate::class, 'user_id'); |
| 1013 | + } |
| 1014 | + |
1000 | 1015 | /** |
1001 | 1016 | * @inheritDoc |
1002 | 1017 | * |
@@ -1168,6 +1183,28 @@ public function getUpdatableAttributes(): array |
1168 | 1183 | return $attr; |
1169 | 1184 | } |
1170 | 1185 |
|
| 1186 | + /** |
| 1187 | + * @inheritDoc |
| 1188 | + */ |
| 1189 | + public function save(?string $reason = null): PromiseInterface |
| 1190 | + { |
| 1191 | + if (isset($this->attributes['guild_id'])) { |
| 1192 | + if ($botperms = $this->getBotPermissions()) { |
| 1193 | + if (! $botperms->manage_channels) { |
| 1194 | + return reject(new NoPermissionsException("You do not have permission to manage channels in the guild {$this->attributes['guild_id']}.")); |
| 1195 | + } |
| 1196 | + } |
| 1197 | + /** @var Guild $guild */ |
| 1198 | + $guild = $this->guild ?? $this->factory->part(Guild::class, ['id' => $this->attributes['guild_id']], true); |
| 1199 | + |
| 1200 | + return $guild->channels->save($this, $reason); |
| 1201 | + } elseif ($this->created && $this->discord->private_channels->get('id', $this->id)) { |
| 1202 | + return $this->discord->private_channels->save($this, $reason); |
| 1203 | + } |
| 1204 | + |
| 1205 | + return parent::save($reason); |
| 1206 | + } |
| 1207 | + |
1171 | 1208 | /** |
1172 | 1209 | * @inheritDoc |
1173 | 1210 | */ |
|
0 commit comments