Skip to content

Commit 7568ada

Browse files
committed
SoundboardSound.edit
1 parent 7dccbb4 commit 7568ada

File tree

2 files changed

+72
-3
lines changed

2 files changed

+72
-3
lines changed

discord/http.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3229,7 +3229,7 @@ def get_guild_sound(
32293229
)
32303230
)
32313231

3232-
def edit_sound(
3232+
def edit_guild_sound(
32333233
self, guild_id: Snowflake, sound_Id: Snowflake, *, reason: str | None, **payload
32343234
):
32353235
keys = (

discord/soundboard.py

Lines changed: 71 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,10 @@
2727

2828
from typing import TYPE_CHECKING, Any, Coroutine
2929

30-
from typing_extensions import override, reveal_type
30+
from typing_extensions import override
3131

3232
from .asset import Asset
33-
from .emoji import PartialEmoji
33+
from .emoji import GuildEmoji, PartialEmoji, _EmojiTag
3434
from .mixins import Hashable
3535
from .types.channel import (
3636
VoiceChannelEffectSendEvent as VoiceChannelEffectSendEventPayload,
@@ -185,7 +185,76 @@ def is_default_sound(self) -> bool:
185185
""":class:`bool`: Whether the sound is a default sound."""
186186
return self.guild_id is None
187187

188+
def edit(
189+
self,
190+
*,
191+
name: str | None = None,
192+
volume: float | None = None,
193+
emoji: PartialEmoji | str | None = None,
194+
reason: str | None = None,
195+
) -> Coroutine[Any, Any, SoundboardSound]:
196+
"""Edits the sound.
197+
198+
Parameters
199+
----------
200+
name: :class:`str`
201+
The new name of the sound.
202+
volume: :class:`float`
203+
The new volume of the sound.
204+
emoji: Union[:class:`PartialEmoji`, :class:`str`]
205+
The new emoji of the sound.
206+
reason: :class:`str`
207+
The reason for editing the sound. Shows up in the audit log.
208+
209+
Returns
210+
-------
211+
:class:`SoundboardSound`
212+
The edited sound.
213+
214+
Raises
215+
------
216+
:exc:`ValueError`
217+
Editing a default sound is not allowed.
218+
"""
219+
if self.is_default_sound:
220+
raise ValueError("Cannot edit a default sound.")
221+
payload: dict[str, Any] = {
222+
"name": name,
223+
"volume": volume,
224+
"emoji_id": None,
225+
"emoji_name": None,
226+
}
227+
if emoji is not None:
228+
if isinstance(emoji, _EmojiTag):
229+
partial_emoji = emoji._to_partial()
230+
elif isinstance(emoji, str):
231+
partial_emoji = PartialEmoji.from_str(emoji)
232+
else:
233+
partial_emoji = None
234+
235+
if partial_emoji is not None:
236+
if partial_emoji.id is None:
237+
payload["emoji_name"] = partial_emoji.name
238+
else:
239+
payload["emoji_id"] = partial_emoji.id
240+
241+
return self._http.edit_guild_sound(
242+
self.guild_id, self.id, reason=reason, **payload
243+
)
244+
188245
def delete(self, *, reason: str | None = None) -> Coroutine[Any, Any, None]:
246+
"""Deletes the sound.
247+
248+
Parameters
249+
----------
250+
reason: :class:`str`
251+
The reason for deleting the sound. Shows up in the audit log.
252+
253+
Raises
254+
------
255+
:exc:`ValueError`
256+
Deleting a default sound is not allowed.
257+
"""
189258
if self.is_default_sound:
190259
raise ValueError("Cannot delete a default sound.")
191260
return self._http.delete_sound(self, reason=reason)

0 commit comments

Comments
 (0)