aboutsummaryrefslogtreecommitdiff
path: root/discord/ext/commands/converter.py
diff options
context:
space:
mode:
Diffstat (limited to 'discord/ext/commands/converter.py')
-rw-r--r--discord/ext/commands/converter.py44
1 files changed, 37 insertions, 7 deletions
diff --git a/discord/ext/commands/converter.py b/discord/ext/commands/converter.py
index eb1023b0..7e54241f 100644
--- a/discord/ext/commands/converter.py
+++ b/discord/ext/commands/converter.py
@@ -32,8 +32,8 @@ import inspect
from .errors import BadArgument, NoPrivateMessage
__all__ = [ 'Converter', 'MemberConverter', 'UserConverter',
- 'ChannelConverter', 'InviteConverter', 'RoleConverter',
- 'GameConverter', 'ColourConverter' ]
+ 'TextChannelConverter', 'InviteConverter', 'RoleConverter',
+ 'GameConverter', 'ColourConverter', 'VoiceChannelConverter' ]
def _get_from_guilds(bot, getter, argument):
result = None
@@ -103,20 +103,50 @@ class MemberConverter(IDConverter):
UserConverter = MemberConverter
-class ChannelConverter(IDConverter):
+class TextChannelConverter(IDConverter):
def convert(self):
- message = self.ctx.message
bot = self.ctx.bot
match = self._get_id_match() or re.match(r'<#([0-9]+)>$', self.argument)
result = None
- guild = message.guild
+ guild = self.ctx.guild
+
+ if match is None:
+ # not a mention
+ if guild:
+ result = discord.utils.get(guild.text_channels, name=self.argument)
+ else:
+ def check(c):
+ return isinstance(c, discord.TextChannel) and c.name == self.argument
+ result = discord.utils.find(check, bot.get_all_channels())
+ else:
+ channel_id = int(match.group(1))
+ if guild:
+ result = guild.get_channel(channel_id)
+ else:
+ result = _get_from_guilds(bot, 'get_channel', channel_id)
+
+ if result is None:
+ raise BadArgument('Channel "{}" not found.'.format(self.argument))
+
+ return result
+
+class VoiceChannelConverter(IDConverter):
+ def convert(self):
+ bot = self.ctx.bot
+
+ match = self._get_id_match() or re.match(r'<#([0-9]+)>$', self.argument)
+ result = None
+ guild = self.ctx.guild
+
if match is None:
# not a mention
if guild:
- result = discord.utils.get(guild.channels, name=self.argument)
+ result = discord.utils.get(guild.voice_channels, name=self.argument)
else:
- result = discord.utils.get(bot.get_all_channels(), name=self.argument)
+ def check(c):
+ return isinstance(c, discord.VoiceChannel) and c.name == self.argument
+ result = discord.utils.find(check, bot.get_all_channels())
else:
channel_id = int(match.group(1))
if guild: