| @@ -28,6 +28,7 @@ from __future__ import annotations | |||||||
| import asyncio | import asyncio | ||||||
| import collections | import collections | ||||||
| import collections.abc | import collections.abc | ||||||
|  | from functools import cached_property | ||||||
|  |  | ||||||
| import inspect | import inspect | ||||||
| import importlib.util | import importlib.util | ||||||
| @@ -72,7 +73,9 @@ from .cog import Cog | |||||||
| if TYPE_CHECKING: | if TYPE_CHECKING: | ||||||
|     import importlib.machinery |     import importlib.machinery | ||||||
|  |  | ||||||
|  |     from discord.role import Role | ||||||
|     from discord.message import Message |     from discord.message import Message | ||||||
|  |     from discord.abc import PartialMessageableChannel | ||||||
|     from ._types import ( |     from ._types import ( | ||||||
|         Check, |         Check, | ||||||
|         CoroFunc, |         CoroFunc, | ||||||
| @@ -94,10 +97,17 @@ CXT = TypeVar("CXT", bound="Context") | |||||||
|  |  | ||||||
| class _FakeSlashMessage(discord.PartialMessage): | class _FakeSlashMessage(discord.PartialMessage): | ||||||
|     activity = application = edited_at = reference = webhook_id = None |     activity = application = edited_at = reference = webhook_id = None | ||||||
|     attachments = components = reactions = stickers = mentions = [] |     attachments = components = reactions = stickers = [] | ||||||
|     author: Union[discord.User, discord.Member] |  | ||||||
|     tts = False |     tts = False | ||||||
|  |  | ||||||
|  |     raw_mentions = discord.Message.raw_mentions | ||||||
|  |     clean_content = discord.Message.clean_content | ||||||
|  |     channel_mentions = discord.Message.channel_mentions | ||||||
|  |     raw_role_mentions = discord.Message.raw_role_mentions | ||||||
|  |     raw_channel_mentions = discord.Message.raw_channel_mentions | ||||||
|  |  | ||||||
|  |     author: Union[discord.User, discord.Member] | ||||||
|  |  | ||||||
|     @classmethod |     @classmethod | ||||||
|     def from_interaction( |     def from_interaction( | ||||||
|         cls, interaction: discord.Interaction, channel: Union[discord.TextChannel, discord.DMChannel, discord.Thread] |         cls, interaction: discord.Interaction, channel: Union[discord.TextChannel, discord.DMChannel, discord.Thread] | ||||||
| @@ -108,6 +118,22 @@ class _FakeSlashMessage(discord.PartialMessage): | |||||||
|  |  | ||||||
|         return self |         return self | ||||||
|  |  | ||||||
|  |     @cached_property | ||||||
|  |     def mentions(self) -> List[Union[discord.Member, discord.User]]: | ||||||
|  |         client = self._state._get_client() | ||||||
|  |         if self.guild: | ||||||
|  |             ensure_user = lambda id: self.guild.get_member(id) or client.get_user(id) # type: ignore | ||||||
|  |         else: | ||||||
|  |             ensure_user = client.get_user | ||||||
|  |  | ||||||
|  |         return discord.utils._unique(filter(None, map(ensure_user, self.raw_mentions))) | ||||||
|  |  | ||||||
|  |     @cached_property | ||||||
|  |     def role_mentions(self) -> List[Role]: | ||||||
|  |         if self.guild is None: | ||||||
|  |             return [] | ||||||
|  |         return discord.utils._unique(filter(None, map(self.guild.get_role, self.raw_role_mentions))) | ||||||
|  |  | ||||||
|  |  | ||||||
| def when_mentioned(bot: Union[Bot, AutoShardedBot], msg: Message) -> List[str]: | def when_mentioned(bot: Union[Bot, AutoShardedBot], msg: Message) -> List[str]: | ||||||
|     """A callable that implements a command prefix equivalent to being mentioned. |     """A callable that implements a command prefix equivalent to being mentioned. | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user