Skip to content

Commit a600965

Browse files
committed
✨ Soundboard gateway events
1 parent 8238d7c commit a600965

File tree

2 files changed

+98
-0
lines changed

2 files changed

+98
-0
lines changed

discord/state.py

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,7 @@
8787
from .types.guild import Guild as GuildPayload
8888
from .types.message import Message as MessagePayload
8989
from .types.poll import Poll as PollPayload
90+
from .types.soundboard import SounboardSound as SoundboardSoundPayload
9091
from .types.sticker import GuildSticker as GuildStickerPayload
9192
from .types.user import User as UserPayload
9293
from .voice_client import VoiceClient
@@ -2017,6 +2018,11 @@ def parse_voice_channel_effect_send(self, data) -> None:
20172018
def _get_sound(self, sound_id: int) -> SoundboardSound | None:
20182019
return self._sounds.get(sound_id)
20192020

2021+
def _update_sound(self, sound: SoundboardSound) -> SoundboardSound | None:
2022+
before = self._sounds.get(sound.id)
2023+
self._sounds[sound.id] = sound
2024+
return before
2025+
20202026
def parse_soundboard_sounds(self, data) -> None:
20212027
guild_id = int(data["guild_id"])
20222028
for sound_data in data["soundboard_sounds"]:
@@ -2026,6 +2032,36 @@ def parse_soundboard_sounds(self, data) -> None:
20262032
)
20272033
)
20282034

2035+
def parse_guild_soundboard_sounds_update(self, data):
2036+
before_sounds = []
2037+
after_sounds = []
2038+
for sound_data in data["soundboard_sounds"]:
2039+
after = SoundboardSound(state=self, http=self.http, data=sound_data)
2040+
if before := self._update_sound(after):
2041+
before_sounds.append(before)
2042+
after_sounds.append(after)
2043+
if len(before_sounds) == len(after_sounds):
2044+
self.dispatch("soundboard_sounds_update", before_sounds, after_sounds)
2045+
self.dispatch("raw_soundboard_sounds_update", after_sounds)
2046+
2047+
def parse_guild_soundboard_sound_update(self, data):
2048+
after = SoundboardSound(state=self, http=self.http, data=data)
2049+
if before := self._update_sound(after):
2050+
self.dispatch("soundboard_sound_update", before, after)
2051+
self.dispatch("raw_soundboard_sound_update", after)
2052+
2053+
def parse_guild_soundboard_sound_create(self, data):
2054+
sound = SoundboardSound(state=self, http=self.http, data=data)
2055+
self._add_sound(sound)
2056+
self.dispatch("soundboard_sound_create", sound)
2057+
2058+
def parse_guild_soundboard_sound_delete(self, data):
2059+
sound_id = int(data["sound_id"])
2060+
sound = self._get_sound(sound_id)
2061+
if sound is not None:
2062+
self._remove_sound(sound)
2063+
self.dispatch("soundboard_sound_delete", sound)
2064+
20292065
async def _add_default_sounds(self):
20302066
default_sounds = await self.http.get_default_sounds()
20312067
for default_sound in default_sounds:

docs/api/events.rst

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1388,3 +1388,65 @@ Voice Channel Effects
13881388

13891389
:param event: The voice channel effect event.
13901390
:type event: :class:`VoiceChannelEffectSendEvent`
1391+
1392+
Soundboard Sound
1393+
----------------
1394+
.. function:: on_soundboard_sounds_update(before, after)
1395+
1396+
Called when multiple guild soundboard sounds are updated at once and they were all already in the cache.
1397+
This is called for example when a guild looses a boost level and some sounds become unavailable.
1398+
1399+
.. versionadded:: 2.7
1400+
1401+
:param before: The soundboard sounds prior to being updated.
1402+
:type before: List[:class:`SoundboardSound`]
1403+
:param after: The soundboard sounds after being updated.
1404+
:type after: List[:class:`SoundboardSound`]
1405+
1406+
.. function:: on_raw_soundboard_sounds_update(after)
1407+
1408+
Called when multiple guild soundboard sounds are updated at once.
1409+
This is called for example when a guild looses a boost level and some sounds become unavailable.
1410+
1411+
.. versionadded:: 2.7
1412+
1413+
:param after: The soundboard sounds after being updated.
1414+
:type after: List[:class:`SoundboardSound`]
1415+
1416+
.. function:: on_soundboard_sound_update(before, after)
1417+
1418+
Called when a soundboard sound is updated and it was already in the cache.
1419+
1420+
.. versionadded:: 2.7
1421+
1422+
:param before: The soundboard sound prior to being updated.
1423+
:type before: :class:`Soundboard
1424+
:param after: The soundboard sound after being updated.
1425+
:type after: :class:`Soundboard
1426+
1427+
.. function:: on_raw_soundboard_sound_update(after)
1428+
1429+
Called when a soundboard sound is updated.
1430+
1431+
.. versionadded:: 2.7
1432+
1433+
:param after: The soundboard sound after being updated.
1434+
:type after: :class:`SoundboardSound`
1435+
1436+
.. function:: on_soundboard_sound_delete(sound)
1437+
1438+
Called when a soundboard sound is deleted.
1439+
1440+
.. versionadded:: 2.7
1441+
1442+
:param sound: The soundboard sound that was deleted.
1443+
:type sound: :class:`SoundboardSound`
1444+
1445+
.. function:: on_soundboard_sound_create(sound)
1446+
1447+
Called when a soundboard sound is created.
1448+
1449+
.. versionadded:: 2.7
1450+
1451+
:param sound: The soundboard sound that was created.
1452+
:type sound: :class:`SoundboardSound`

0 commit comments

Comments
 (0)