Fix message.py typehints
This commit is contained in:
parent
3561ce9d5a
commit
d8b06ca7f2
@ -29,7 +29,7 @@ import datetime
|
||||
import re
|
||||
import io
|
||||
from os import PathLike
|
||||
from typing import Dict, TYPE_CHECKING, Union, List, Optional, Any, Callable, Tuple, ClassVar, Optional, overload
|
||||
from typing import Dict, TYPE_CHECKING, Union, List, Optional, Any, Callable, Tuple, ClassVar, Optional, overload, TypeVar, Type
|
||||
|
||||
from . import utils
|
||||
from .reaction import Reaction
|
||||
@ -76,6 +76,7 @@ if TYPE_CHECKING:
|
||||
from .role import Role
|
||||
from .ui.view import View
|
||||
|
||||
MR = TypeVar('MR', bound='MessageReference')
|
||||
EmojiInputType = Union[Emoji, PartialEmoji, str]
|
||||
|
||||
__all__ = (
|
||||
@ -341,7 +342,8 @@ class DeletedReferencedMessage:
|
||||
@property
|
||||
def id(self) -> int:
|
||||
""":class:`int`: The message ID of the deleted referenced message."""
|
||||
return self._parent.message_id
|
||||
# the parent's message id won't be None here
|
||||
return self._parent.message_id # type: ignore
|
||||
|
||||
@property
|
||||
def channel_id(self) -> int:
|
||||
@ -393,13 +395,13 @@ class MessageReference:
|
||||
def __init__(self, *, message_id: int, channel_id: int, guild_id: Optional[int] = None, fail_if_not_exists: bool = True):
|
||||
self._state: Optional[ConnectionState] = None
|
||||
self.resolved: Optional[Union[Message, DeletedReferencedMessage]] = None
|
||||
self.message_id: int = message_id
|
||||
self.message_id: Optional[int] = message_id
|
||||
self.channel_id: int = channel_id
|
||||
self.guild_id: Optional[int] = guild_id
|
||||
self.fail_if_not_exists: bool = fail_if_not_exists
|
||||
|
||||
@classmethod
|
||||
def with_state(cls, state: ConnectionState, data: MessageReferencePayload) -> MessageReference:
|
||||
def with_state(cls: Type[MR], state: ConnectionState, data: MessageReferencePayload) -> MR:
|
||||
self = cls.__new__(cls)
|
||||
self.message_id = utils._get_as_snowflake(data, 'message_id')
|
||||
self.channel_id = int(data.pop('channel_id'))
|
||||
@ -410,7 +412,7 @@ class MessageReference:
|
||||
return self
|
||||
|
||||
@classmethod
|
||||
def from_message(cls, message: Message, *, fail_if_not_exists: bool = True) -> MessageReference:
|
||||
def from_message(cls: Type[MR], message: Message, *, fail_if_not_exists: bool = True) -> MR:
|
||||
"""Creates a :class:`MessageReference` from an existing :class:`~discord.Message`.
|
||||
|
||||
.. versionadded:: 1.6
|
||||
@ -457,13 +459,13 @@ class MessageReference:
|
||||
return f'<MessageReference message_id={self.message_id!r} channel_id={self.channel_id!r} guild_id={self.guild_id!r}>'
|
||||
|
||||
def to_dict(self) -> MessageReferencePayload:
|
||||
result = {'message_id': self.message_id} if self.message_id is not None else {}
|
||||
result: MessageReferencePayload = {'message_id': self.message_id} if self.message_id is not None else {}
|
||||
result['channel_id'] = self.channel_id
|
||||
if self.guild_id is not None:
|
||||
result['guild_id'] = self.guild_id
|
||||
if self.fail_if_not_exists is not None:
|
||||
result['fail_if_not_exists'] = self.fail_if_not_exists
|
||||
return result # type: ignore
|
||||
return result
|
||||
|
||||
to_message_reference_dict = to_dict
|
||||
|
||||
@ -637,7 +639,7 @@ class Message(Hashable):
|
||||
_HANDLERS: ClassVar[List[Tuple[str, Callable[..., None]]]]
|
||||
_CACHED_SLOTS: ClassVar[List[str]]
|
||||
guild: Optional[Guild]
|
||||
ref: Optional[MessageReference]
|
||||
reference: Optional[MessageReference]
|
||||
mentions: List[Union[User, Member]]
|
||||
author: Union[User, Member]
|
||||
role_mentions: List[Role]
|
||||
@ -646,7 +648,7 @@ class Message(Hashable):
|
||||
self,
|
||||
*,
|
||||
state: ConnectionState,
|
||||
channel: Union[TextChannel, Thread, DMChannel, GroupChannel, PartialMessageable],
|
||||
channel: MessageableChannel,
|
||||
data: MessagePayload,
|
||||
):
|
||||
self._state: ConnectionState = state
|
||||
@ -670,6 +672,7 @@ class Message(Hashable):
|
||||
self.components: List[Component] = [_component_factory(d) for d in data.get('components', [])]
|
||||
|
||||
try:
|
||||
# if the channel doesn't have a guild attribute, we handle that
|
||||
self.guild = channel.guild # type: ignore
|
||||
except AttributeError:
|
||||
self.guild = state._get_guild(utils._get_as_snowflake(data, 'guild_id'))
|
||||
@ -694,7 +697,8 @@ class Message(Hashable):
|
||||
else:
|
||||
chan, _ = state._get_guild_channel(resolved)
|
||||
|
||||
ref.resolved = self.__class__(channel=chan, data=resolved, state=state)
|
||||
# the channel will be the correct type here
|
||||
ref.resolved = self.__class__(channel=chan, data=resolved, state=state) # type: ignore
|
||||
|
||||
for handler in ('author', 'member', 'mentions', 'mention_roles'):
|
||||
try:
|
||||
@ -1071,6 +1075,7 @@ class Message(Hashable):
|
||||
return f'{self.author.name} has added {self.content} to this channel'
|
||||
|
||||
if self.type is MessageType.guild_stream:
|
||||
# the author will be a Member
|
||||
return f'{self.author.name} is live! Now streaming {self.author.activity.name}' # type: ignore
|
||||
|
||||
if self.type is MessageType.guild_discovery_disqualified:
|
||||
@ -1095,6 +1100,7 @@ class Message(Hashable):
|
||||
if self.reference is None or self.reference.resolved is None:
|
||||
return 'Sorry, we couldn\'t load the first message in this thread'
|
||||
|
||||
# the resolved message for the reference will be a Message
|
||||
return self.reference.resolved.content # type: ignore
|
||||
|
||||
if self.type is MessageType.guild_invite_reminder:
|
||||
@ -1527,7 +1533,7 @@ class Message(Hashable):
|
||||
name=name,
|
||||
auto_archive_duration=auto_archive_duration or self.channel.default_auto_archive_duration,
|
||||
)
|
||||
return Thread(guild=self.guild, state=self._state, data=data) # type: ignore
|
||||
return Thread(guild=self.guild, state=self._state, data=data)
|
||||
|
||||
async def reply(self, content: Optional[str] = None, **kwargs) -> Message:
|
||||
"""|coro|
|
||||
@ -1811,9 +1817,10 @@ class PartialMessage(Hashable):
|
||||
data = await self._state.http.edit_message(self.channel.id, self.id, **fields)
|
||||
|
||||
if delete_after is not None:
|
||||
await self.delete(delay=delete_after) # type: ignore
|
||||
await self.delete(delay=delete_after)
|
||||
|
||||
if fields:
|
||||
# data isn't unbound
|
||||
msg = self._state.create_message(channel=self.channel, data=data) # type: ignore
|
||||
if view and not view.is_finished():
|
||||
self._state.store_view(view, self.id)
|
||||
|
Loading…
x
Reference in New Issue
Block a user