|
| 1 | +import asyncio |
1 | 2 | import re
|
2 | 3 | from enum import IntEnum
|
3 | 4 | from typing import Optional, TYPE_CHECKING, Union, Dict, Any, List
|
4 | 5 |
|
5 | 6 | import attrs
|
6 | 7 |
|
7 | 8 | from interactions.client.const import MISSING, Absent
|
8 |
| -from interactions.client.errors import ForeignWebhookException, EmptyMessageException |
| 9 | +from interactions.client.errors import ForeignWebhookException, EmptyMessageException, NotFound |
9 | 10 | from interactions.client.mixins.send import SendMixin
|
10 | 11 | from interactions.client.utils.serializer import to_image_data
|
11 | 12 | from interactions.models.discord.message import process_message_payload
|
@@ -256,6 +257,24 @@ async def send(
|
256 | 257 | if message_data:
|
257 | 258 | return self._client.cache.place_message_data(message_data)
|
258 | 259 |
|
| 260 | + async def fetch_message(self, message_id: Union["Message", "Snowflake_Type"]) -> Optional["Message"]: |
| 261 | + """ |
| 262 | + Returns a previously-sent webhook message from the same token. Returns a message object on success. |
| 263 | +
|
| 264 | + Args: |
| 265 | + message_id: ID of message to retrieve. |
| 266 | +
|
| 267 | + Returns: |
| 268 | + The message object fetched. If the message is not found, returns None. |
| 269 | +
|
| 270 | + """ |
| 271 | + message_id = to_snowflake(message_id) |
| 272 | + try: |
| 273 | + msg_data = await self._client.http.get_webhook_message(self.id, self.token, message_id) |
| 274 | + except NotFound: |
| 275 | + return None |
| 276 | + return self._client.cache.place_message_data(msg_data) |
| 277 | + |
259 | 278 | async def edit_message(
|
260 | 279 | self,
|
261 | 280 | message: Union["Message", "Snowflake_Type"],
|
@@ -313,3 +332,29 @@ async def edit_message(
|
313 | 332 | )
|
314 | 333 | if msg_data:
|
315 | 334 | return self._client.cache.place_message_data(msg_data)
|
| 335 | + |
| 336 | + async def delete_message( |
| 337 | + self, |
| 338 | + message: Union["Message", "Snowflake_Type"], |
| 339 | + *, |
| 340 | + delay: int = 0, |
| 341 | + ) -> None: |
| 342 | + """ |
| 343 | + Delete a message as this webhook. |
| 344 | +
|
| 345 | + Args: |
| 346 | + message: Message to delete |
| 347 | + delay: Seconds to wait before deleting message. |
| 348 | +
|
| 349 | + """ |
| 350 | + |
| 351 | + async def _delete() -> None: |
| 352 | + if delay: |
| 353 | + await asyncio.sleep(delay) |
| 354 | + |
| 355 | + await self._client.http.delete_webhook_message(self.id, self.token, to_snowflake(message)) |
| 356 | + |
| 357 | + if delay: |
| 358 | + return asyncio.create_task(_delete()) |
| 359 | + |
| 360 | + return await _delete() |
0 commit comments