|
27 | 27 |
|
28 | 28 | from typing import TYPE_CHECKING, Any, Coroutine
|
29 | 29 |
|
30 |
| -from typing_extensions import override, reveal_type |
| 30 | +from typing_extensions import override |
31 | 31 |
|
32 | 32 | from .asset import Asset
|
33 |
| -from .emoji import PartialEmoji |
| 33 | +from .emoji import GuildEmoji, PartialEmoji, _EmojiTag |
34 | 34 | from .mixins import Hashable
|
35 | 35 | from .types.channel import (
|
36 | 36 | VoiceChannelEffectSendEvent as VoiceChannelEffectSendEventPayload,
|
@@ -185,7 +185,76 @@ def is_default_sound(self) -> bool:
|
185 | 185 | """:class:`bool`: Whether the sound is a default sound."""
|
186 | 186 | return self.guild_id is None
|
187 | 187 |
|
| 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 | + |
188 | 245 | 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 | + """ |
189 | 258 | if self.is_default_sound:
|
190 | 259 | raise ValueError("Cannot delete a default sound.")
|
191 | 260 | return self._http.delete_sound(self, reason=reason)
|
|
0 commit comments