Skip to content
Merged
24 changes: 17 additions & 7 deletions disnake/mentions.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

from __future__ import annotations

from typing import TYPE_CHECKING, Any, List, Union
from typing import TYPE_CHECKING, Any, List, Sequence, Union

from .enums import MessageType

Expand Down Expand Up @@ -69,13 +69,22 @@ def __init__(
self,
*,
everyone: bool = default,
users: Union[bool, List[Snowflake]] = default,
roles: Union[bool, List[Snowflake]] = default,
users: Union[bool, Sequence[Snowflake]] = default,
roles: Union[bool, Sequence[Snowflake]] = default,
replied_user: bool = default,
) -> None:
self.everyone = everyone
self.users = users
self.roles = roles
# TODO(3.0): annotate attributes as `Sequence` instead of copying to list
self.users: Union[bool, List[Snowflake]]
self.roles: Union[bool, List[Snowflake]]
if isinstance(users, Sequence):
self.users = list(users)
else:
self.users = users
if isinstance(roles, Sequence):
self.roles = list(roles)
else:
self.roles = roles
self.replied_user = replied_user

@classmethod
Expand Down Expand Up @@ -108,8 +117,8 @@ def from_message(cls, message: Message) -> Self:

return cls(
everyone=message.mention_everyone,
users=message.mentions.copy(), # type: ignore # mentions is a list of Snowflakes
roles=message.role_mentions.copy(), # type: ignore # mentions is a list of Snowflakes
users=list(message.mentions),
roles=list(message.role_mentions),
replied_user=bool(
message.type is MessageType.reply
and message.reference
Expand All @@ -119,6 +128,7 @@ def from_message(cls, message: Message) -> Self:
)

def to_dict(self) -> AllowedMentionsPayload:
# n.b. this runs nearly every time a message is sent
parse: List[AllowedMentionTypePayload] = []
data: AllowedMentionsPayload = {} # type: ignore

Expand Down
1 change: 1 addition & 0 deletions tests/test_mentions.py
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,7 @@ def test_from_message_replied_user() -> None:
message = mock.Mock(Message)
author = Object(123)
message.mentions = [author]
message.role_mentions = []
assert AllowedMentions.from_message(message).replied_user is False

message.type = MessageType.reply
Expand Down
Loading