[commands] Add GuildChannelConverter
This commit is contained in:
parent
7ebfface22
commit
2a6d79078e
@ -71,6 +71,7 @@ __all__ = (
|
|||||||
'CategoryChannelConverter',
|
'CategoryChannelConverter',
|
||||||
'IDConverter',
|
'IDConverter',
|
||||||
'StoreChannelConverter',
|
'StoreChannelConverter',
|
||||||
|
'GuildChannelConverter',
|
||||||
'clean_content',
|
'clean_content',
|
||||||
'Greedy',
|
'Greedy',
|
||||||
'run_converters',
|
'run_converters',
|
||||||
@ -376,8 +377,8 @@ class MessageConverter(IDConverter[discord.Message]):
|
|||||||
raise ChannelNotReadable(channel)
|
raise ChannelNotReadable(channel)
|
||||||
|
|
||||||
|
|
||||||
class TextChannelConverter(IDConverter[discord.TextChannel]):
|
class GuildChannelConverter(IDConverter[discord.abc.GuildChannel]):
|
||||||
"""Converts to a :class:`~discord.TextChannel`.
|
"""Converts to a :class:`~discord.abc.GuildChannel`.
|
||||||
|
|
||||||
All lookups are via the local guild. If in a DM context, then the lookup
|
All lookups are via the local guild. If in a DM context, then the lookup
|
||||||
is done by the global cache.
|
is done by the global cache.
|
||||||
@ -386,14 +387,13 @@ class TextChannelConverter(IDConverter[discord.TextChannel]):
|
|||||||
|
|
||||||
1. Lookup by ID.
|
1. Lookup by ID.
|
||||||
2. Lookup by mention.
|
2. Lookup by mention.
|
||||||
3. Lookup by name
|
3. Lookup by name.
|
||||||
|
|
||||||
.. versionchanged:: 1.5
|
.. versionadded:: 2.0
|
||||||
Raise :exc:`.ChannelNotFound` instead of generic :exc:`.BadArgument`
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
async def convert(self, ctx: Context, argument: str) -> discord.TextChannel:
|
async def convert(self, ctx: Context, argument: str) -> discord.abc.GuildChannel:
|
||||||
return self._resolve_channel(ctx, argument, ctx.guild.text_channels, discord.TextChannel)
|
return self._resolve_channel(ctx, argument, ctx.guild.channels, discord.abc.GuildChannel)
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def _resolve_channel(ctx: Context, argument: str, iterable: Iterable[CT], type: Type[CT]) -> CT:
|
def _resolve_channel(ctx: Context, argument: str, iterable: Iterable[CT], type: Type[CT]) -> CT:
|
||||||
@ -426,6 +426,26 @@ class TextChannelConverter(IDConverter[discord.TextChannel]):
|
|||||||
return result
|
return result
|
||||||
|
|
||||||
|
|
||||||
|
class TextChannelConverter(IDConverter[discord.TextChannel]):
|
||||||
|
"""Converts to a :class:`~discord.TextChannel`.
|
||||||
|
|
||||||
|
All lookups are via the local guild. If in a DM context, then the lookup
|
||||||
|
is done by the global cache.
|
||||||
|
|
||||||
|
The lookup strategy is as follows (in order):
|
||||||
|
|
||||||
|
1. Lookup by ID.
|
||||||
|
2. Lookup by mention.
|
||||||
|
3. Lookup by name
|
||||||
|
|
||||||
|
.. versionchanged:: 1.5
|
||||||
|
Raise :exc:`.ChannelNotFound` instead of generic :exc:`.BadArgument`
|
||||||
|
"""
|
||||||
|
|
||||||
|
async def convert(self, ctx: Context, argument: str) -> discord.TextChannel:
|
||||||
|
return GuildChannelConverter._resolve_channel(ctx, argument, ctx.guild.text_channels, discord.TextChannel)
|
||||||
|
|
||||||
|
|
||||||
class VoiceChannelConverter(IDConverter[discord.VoiceChannel]):
|
class VoiceChannelConverter(IDConverter[discord.VoiceChannel]):
|
||||||
"""Converts to a :class:`~discord.VoiceChannel`.
|
"""Converts to a :class:`~discord.VoiceChannel`.
|
||||||
|
|
||||||
@ -443,7 +463,7 @@ class VoiceChannelConverter(IDConverter[discord.VoiceChannel]):
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
async def convert(self, ctx: Context, argument: str) -> discord.VoiceChannel:
|
async def convert(self, ctx: Context, argument: str) -> discord.VoiceChannel:
|
||||||
return TextChannelConverter._resolve_channel(ctx, argument, ctx.guild.voice_channels, discord.VoiceChannel)
|
return GuildChannelConverter._resolve_channel(ctx, argument, ctx.guild.voice_channels, discord.VoiceChannel)
|
||||||
|
|
||||||
|
|
||||||
class StageChannelConverter(IDConverter[discord.StageChannel]):
|
class StageChannelConverter(IDConverter[discord.StageChannel]):
|
||||||
@ -462,7 +482,7 @@ class StageChannelConverter(IDConverter[discord.StageChannel]):
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
async def convert(self, ctx: Context, argument: str) -> discord.StageChannel:
|
async def convert(self, ctx: Context, argument: str) -> discord.StageChannel:
|
||||||
return TextChannelConverter._resolve_channel(ctx, argument, ctx.guild.stage_channels, discord.StageChannel)
|
return GuildChannelConverter._resolve_channel(ctx, argument, ctx.guild.stage_channels, discord.StageChannel)
|
||||||
|
|
||||||
|
|
||||||
class CategoryChannelConverter(IDConverter[discord.CategoryChannel]):
|
class CategoryChannelConverter(IDConverter[discord.CategoryChannel]):
|
||||||
@ -482,7 +502,7 @@ class CategoryChannelConverter(IDConverter[discord.CategoryChannel]):
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
async def convert(self, ctx: Context, argument: str) -> discord.CategoryChannel:
|
async def convert(self, ctx: Context, argument: str) -> discord.CategoryChannel:
|
||||||
return TextChannelConverter._resolve_channel(ctx, argument, ctx.guild.categories, discord.CategoryChannel)
|
return GuildChannelConverter._resolve_channel(ctx, argument, ctx.guild.categories, discord.CategoryChannel)
|
||||||
|
|
||||||
|
|
||||||
class StoreChannelConverter(IDConverter[discord.StoreChannel]):
|
class StoreChannelConverter(IDConverter[discord.StoreChannel]):
|
||||||
@ -501,7 +521,7 @@ class StoreChannelConverter(IDConverter[discord.StoreChannel]):
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
async def convert(self, ctx: Context, argument: str) -> discord.StoreChannel:
|
async def convert(self, ctx: Context, argument: str) -> discord.StoreChannel:
|
||||||
return TextChannelConverter._resolve_channel(ctx, argument, ctx.guild.channels, discord.StoreChannel)
|
return GuildChannelConverter._resolve_channel(ctx, argument, ctx.guild.channels, discord.StoreChannel)
|
||||||
|
|
||||||
|
|
||||||
class ColourConverter(Converter[discord.Colour]):
|
class ColourConverter(Converter[discord.Colour]):
|
||||||
@ -930,6 +950,7 @@ CONVERTER_MAPPING: Dict[Type[Any], Any] = {
|
|||||||
discord.PartialEmoji: PartialEmojiConverter,
|
discord.PartialEmoji: PartialEmojiConverter,
|
||||||
discord.CategoryChannel: CategoryChannelConverter,
|
discord.CategoryChannel: CategoryChannelConverter,
|
||||||
discord.StoreChannel: StoreChannelConverter,
|
discord.StoreChannel: StoreChannelConverter,
|
||||||
|
discord.abc.GuildChannel: GuildChannelConverter,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -288,6 +288,9 @@ Converters
|
|||||||
.. autoclass:: discord.ext.commands.PartialMessageConverter
|
.. autoclass:: discord.ext.commands.PartialMessageConverter
|
||||||
:members:
|
:members:
|
||||||
|
|
||||||
|
.. autoclass:: discord.ext.commands.GuildChannelConverter
|
||||||
|
:members:
|
||||||
|
|
||||||
.. autoclass:: discord.ext.commands.TextChannelConverter
|
.. autoclass:: discord.ext.commands.TextChannelConverter
|
||||||
:members:
|
:members:
|
||||||
|
|
||||||
|
@ -379,6 +379,7 @@ A lot of discord models work out of the gate as a parameter:
|
|||||||
- :class:`User`
|
- :class:`User`
|
||||||
- :class:`Message` (since v1.1)
|
- :class:`Message` (since v1.1)
|
||||||
- :class:`PartialMessage` (since v1.7)
|
- :class:`PartialMessage` (since v1.7)
|
||||||
|
- :class:`abc.GuildChannel` (since 2.0)
|
||||||
- :class:`TextChannel`
|
- :class:`TextChannel`
|
||||||
- :class:`VoiceChannel`
|
- :class:`VoiceChannel`
|
||||||
- :class:`StageChannel` (since v1.7)
|
- :class:`StageChannel` (since v1.7)
|
||||||
@ -411,6 +412,8 @@ converter is given below:
|
|||||||
+--------------------------+-------------------------------------------------+
|
+--------------------------+-------------------------------------------------+
|
||||||
| :class:`PartialMessage` | :class:`~ext.commands.PartialMessageConverter` |
|
| :class:`PartialMessage` | :class:`~ext.commands.PartialMessageConverter` |
|
||||||
+--------------------------+-------------------------------------------------+
|
+--------------------------+-------------------------------------------------+
|
||||||
|
| :class:`.GuildChannel` | :class:`~ext.commands.GuildChannelConverter` |
|
||||||
|
+--------------------------+-------------------------------------------------+
|
||||||
| :class:`TextChannel` | :class:`~ext.commands.TextChannelConverter` |
|
| :class:`TextChannel` | :class:`~ext.commands.TextChannelConverter` |
|
||||||
+--------------------------+-------------------------------------------------+
|
+--------------------------+-------------------------------------------------+
|
||||||
| :class:`VoiceChannel` | :class:`~ext.commands.VoiceChannelConverter` |
|
| :class:`VoiceChannel` | :class:`~ext.commands.VoiceChannelConverter` |
|
||||||
|
Loading…
x
Reference in New Issue
Block a user