Skip to content

Commit a96a834

Browse files
authored
feat: add webhook message functions (#1689)
* feat: add delete_message to Webhook * feat: add get_message to Webhook * fix: make get_message return None * style: rename get_message to fetch_message to match library naming scheme
1 parent cfe3199 commit a96a834

File tree

1 file changed

+46
-1
lines changed

1 file changed

+46
-1
lines changed

interactions/models/discord/webhooks.py

Lines changed: 46 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
1+
import asyncio
12
import re
23
from enum import IntEnum
34
from typing import Optional, TYPE_CHECKING, Union, Dict, Any, List
45

56
import attrs
67

78
from interactions.client.const import MISSING, Absent
8-
from interactions.client.errors import ForeignWebhookException, EmptyMessageException
9+
from interactions.client.errors import ForeignWebhookException, EmptyMessageException, NotFound
910
from interactions.client.mixins.send import SendMixin
1011
from interactions.client.utils.serializer import to_image_data
1112
from interactions.models.discord.message import process_message_payload
@@ -256,6 +257,24 @@ async def send(
256257
if message_data:
257258
return self._client.cache.place_message_data(message_data)
258259

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+
259278
async def edit_message(
260279
self,
261280
message: Union["Message", "Snowflake_Type"],
@@ -313,3 +332,29 @@ async def edit_message(
313332
)
314333
if msg_data:
315334
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

Comments
 (0)