Use message model in some methods

This commit is contained in:
grey-cat-1908 2022-04-07 20:56:29 +03:00
parent 35ebe54e88
commit b6aa4791ec
3 changed files with 58 additions and 20 deletions

View file

@ -6,12 +6,15 @@ from __future__ import annotations
import asyncio import asyncio
from dataclasses import dataclass from dataclasses import dataclass
from enum import IntEnum from enum import IntEnum
from typing import List, Any, Optional, AsyncIterator, Union, Dict, overload from typing import List, Any, Optional, AsyncIterator, Union, Dict, overload, TYPE_CHECKING
from ..message.message import Message
from ...utils import Snowflake, Timestamp from ...utils import Snowflake, Timestamp
from ...utils import APIModelBase from ...utils import APIModelBase
from ...utils.types import APINullable from ...utils.types import APINullable
from .thread import ThreadMember, ThreadMetadata
if TYPE_CHECKING:
from .thread import ThreadMember, ThreadMetadata
class ChannelType(IntEnum): class ChannelType(IntEnum):
@ -165,7 +168,7 @@ class Channel(APIModelBase):
owner_id: APINullable[Snowflake] = None owner_id: APINullable[Snowflake] = None
application_id: APINullable[Snowflake] = None application_id: APINullable[Snowflake] = None
parent_id: APINullable[Snowflake] = None parent_id: APINullable[Snowflake] = None
last_pin_timestamp: APINullable[int] = None last_pin_timestamp: APINullable[Timestamp] = None
rtc_region: APINullable[str] = None rtc_region: APINullable[str] = None
video_quality_mode: APINullable[int] = None video_quality_mode: APINullable[int] = None
message_count: APINullable[int] = None message_count: APINullable[int] = None
@ -314,14 +317,15 @@ class MessageableChannel(Channel):
before: Optional[Snowflake] = None, before: Optional[Snowflake] = None,
after: Optional[Snowflake] = None, after: Optional[Snowflake] = None,
around: Optional[Snowflake] = None, around: Optional[Snowflake] = None,
) -> AsyncIterator[Dict[str, Any]]: ) -> AsyncIterator[Message]:
"""|coro| """|coro|
Returns a list of messages in this channel. Returns a list of messages in this channel.
Examples Examples
--------- ---------
Flattening messages into a list: :: Flattening messages into a list:
.. code-block:: python
messages = [message async for message in channel.history(limit=111)] messages = [message async for message in channel.history(limit=111)]
All parameters are optional. All parameters are optional.
@ -346,7 +350,7 @@ class MessageableChannel(Channel):
Returns Returns
------- -------
AsyncIterator[Dict[:class:`str`, Any]] AsyncIterator[:class:`~melisa.Message`]
An iterator of messages. An iterator of messages.
""" """
@ -372,7 +376,7 @@ class MessageableChannel(Channel):
break break
for message_data in raw_messages: for message_data in raw_messages:
yield message_data yield Message.from_dict(message_data)
before = raw_messages[-1]["id"] before = raw_messages[-1]["id"]
limit -= search_limit limit -= search_limit
@ -380,7 +384,7 @@ class MessageableChannel(Channel):
async def fetch_message( async def fetch_message(
self, self,
message_id: Optional[Snowflake, int, str], message_id: Optional[Snowflake, int, str],
) -> Dict[str, Any]: ) -> Message:
"""|coro| """|coro|
Returns a specific message in the channel. Returns a specific message in the channel.
@ -399,7 +403,7 @@ class MessageableChannel(Channel):
Returns Returns
------- -------
Dict[:class:`str`, Any] :class:`~melisa.Message`
Message object. Message object.
""" """
@ -407,7 +411,30 @@ class MessageableChannel(Channel):
f"/channels/{self.id}/messages/{message_id}", f"/channels/{self.id}/messages/{message_id}",
) )
return message return Message.from_dict(message)
async def pins(self) -> AsyncIterator[Message]:
"""|coro|
Retrieves all messages that are currently pinned in the channel.
Raises
-------
HTTPException
The request to perform the action failed with other http exception.
Returns
-------
AsyncIterator[:class:`~melisa.Message`]
AsyncIterator of Message objects.
"""
messages = await self._http.get(
f"/channels/{self.id}/pins",
)
for message in messages:
yield Message.from_dict(message)
async def bulk_delete_messages( async def bulk_delete_messages(
self, messages: List[Snowflake], *, reason: Optional[str] = None self, messages: List[Snowflake], *, reason: Optional[str] = None
@ -719,9 +746,9 @@ class ThreadsList(APIModelBase):
Attributes Attributes
---------- ----------
threads: List[:class:`~melisa.models.guild.channel.Thread`] threads: List[:class:`~melisa.Thread`]
Async iterator of threads. To get their type use them `.type` attribute. Async iterator of threads. To get their type use them `.type` attribute.
members: List[:class:`Any`] members: List[:class:`~melisa.ThreadMember`]
Async iterator of thread members. Async iterator of thread members.
has_more: Optional[:class:`bool`] has_more: Optional[:class:`bool`]
Whether there are potentially additional threads that could be returned on a subsequent cal Whether there are potentially additional threads that could be returned on a subsequent cal

View file

@ -1,4 +1,13 @@
# Copyright MelisaDev 2022 - Present # Copyright MelisaDev 2022 - Present
# Full MIT License can be found in `LICENSE.txt` at the project root. # Full MIT License can be found in `LICENSE.txt` at the project root.
from .message import * from .message import (
MessageActivityType, MessageFlags, MessageType, Message
)
__all__ = (
"MessageActivityType",
"MessageFlags",
"MessageType",
"Message"
)

View file

@ -5,16 +5,18 @@ from __future__ import annotations
from dataclasses import dataclass from dataclasses import dataclass
from enum import IntEnum from enum import IntEnum
from typing import List, Any, Optional from typing import List, TYPE_CHECKING
from ... import Thread
from ...utils import Snowflake, Timestamp from ...utils import Snowflake, Timestamp
from ...utils import APIModelBase from ...utils import APIModelBase
from ...utils.types import APINullable from ...utils.types import APINullable
if TYPE_CHECKING:
from ..guild.channel import Thread
class MessageTypes(IntEnum):
"""Message Types class MessageType(IntEnum):
"""Message Type
NOTE: Type `19` and `20` are only in API v8. In v6, they are still type `0`. Type `21` is only in API v9. NOTE: Type `19` and `20` are only in API v8. In v6, they are still type `0`. Type `21` is only in API v9.
""" """
@ -46,8 +48,8 @@ class MessageTypes(IntEnum):
return self.value return self.value
class MessageActivityTypes(IntEnum): class MessageActivityType(IntEnum):
"""Message Activity Types""" """Message Activity Type"""
JOIN = 1 JOIN = 1
SPECTATE = 2 SPECTATE = 2
@ -191,7 +193,7 @@ class Message(APIModelBase):
message_reference: APINullable[List] = None message_reference: APINullable[List] = None
flags: APINullable[int] = None flags: APINullable[int] = None
interaction: APINullable[List] = None interaction: APINullable[List] = None
thread: APINullable[List[Thread]] = None thread: APINullable[Thread] = None
components: APINullable[List] = None components: APINullable[List] = None
sticker_items: APINullable[List] = None sticker_items: APINullable[List] = None
stickers: APINullable[List] = None stickers: APINullable[List] = None