aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--bot/converters.py40
-rw-r--r--bot/exts/moderation/silence.py6
-rw-r--r--tests/bot/test_converters.py48
3 files changed, 3 insertions, 91 deletions
diff --git a/bot/converters.py b/bot/converters.py
index 613be73eb..2e118d476 100644
--- a/bot/converters.py
+++ b/bot/converters.py
@@ -536,46 +536,6 @@ class FetchedUser(UserConverter):
raise BadArgument(f"User `{arg}` does not exist")
-class AnyChannelConverter(Converter):
- """
- Converts to a `discord.Channel` or, raises an error.
-
- Unlike the default Channel Converter, this converter can handle channels given
- in string, id, or mention formatting for both `TextChannel`s and `VoiceChannel`s.
- Always returns 1 or fewer channels, errors if more than one match exists.
-
- It is able to handle the following formats (caveats noted below:)
- 1. Convert from ID - Example: 267631170882240512
- 2. Convert from Explicit Mention - Example: #welcome
- 3. Convert from ID Mention - Example: <#267631170882240512>
- 4. Convert from Unmentioned Name: - Example: welcome
-
- All the previous conversions are valid for both text and voice channels, but explicit
- raw names (#4) do not work for non-unique channels, instead opting for an error.
- Explicit mentions (#2) do not work for non-unique voice channels either.
- """
-
- async def convert(self, ctx: Context, arg: str) -> t.Union[discord.TextChannel, discord.VoiceChannel]:
- """Convert the `arg` to a `TextChannel` or `VoiceChannel`."""
- stripped = arg.strip().lstrip("<").lstrip("#").rstrip(">").lower()
-
- # Filter channels by name and ID
- channels = [channel for channel in ctx.guild.channels if stripped in (channel.name.lower(), str(channel.id))]
-
- if len(channels) == 0:
- # Couldn't find a matching channel
- log.debug(f"Could not convert `{arg}` to channel, no matches found.")
- raise BadArgument(f"{arg} returned no matches.")
-
- elif len(channels) > 1:
- # Couldn't discern the desired channel
- log.debug(f"Could not convert `{arg}` to channel, {len(channels)} matches found.")
- raise BadArgument(f"The provided argument returned too many matches ({len(channels)}).")
-
- else:
- return channels[0]
-
-
def _snowflake_from_regex(pattern: t.Pattern, arg: str) -> int:
"""
Extract the snowflake from `arg` using a regex `pattern` and return it as an int.
diff --git a/bot/exts/moderation/silence.py b/bot/exts/moderation/silence.py
index 62f3ede73..8ad30f0d9 100644
--- a/bot/exts/moderation/silence.py
+++ b/bot/exts/moderation/silence.py
@@ -12,7 +12,7 @@ from discord.ext.commands import Context
from bot.bot import Bot
from bot.constants import Channels, Emojis, Guild, MODERATION_ROLES, Roles
-from bot.converters import AnyChannelConverter, HushDurationConverter
+from bot.converters import HushDurationConverter
from bot.utils.lock import LockedResourceError, lock_arg
from bot.utils.scheduling import Scheduler
@@ -148,7 +148,7 @@ class Silence(commands.Cog):
@lock_arg(LOCK_NAMESPACE, "ctx", attrgetter("channel"), raise_error=True)
async def silence(
self, ctx: Context, duration: HushDurationConverter = 10, kick: bool = False,
- *, channel: Optional[AnyChannelConverter] = None
+ *, channel: Union[TextChannel, VoiceChannel] = None
) -> None:
"""
Silence the current channel for `duration` minutes or `forever`.
@@ -182,7 +182,7 @@ class Silence(commands.Cog):
await self.send_message(MSG_SILENCE_SUCCESS, ctx.channel, channel, True, duration)
@commands.command(aliases=("unhush",))
- async def unsilence(self, ctx: Context, *, channel: AnyChannelConverter = None) -> None:
+ async def unsilence(self, ctx: Context, *, channel: Union[TextChannel, VoiceChannel] = None) -> None:
"""
Unsilence the given channel if given, else the current one.
diff --git a/tests/bot/test_converters.py b/tests/bot/test_converters.py
index 6bea71977..c42111f3f 100644
--- a/tests/bot/test_converters.py
+++ b/tests/bot/test_converters.py
@@ -7,7 +7,6 @@ from dateutil.relativedelta import relativedelta
from discord.ext.commands import BadArgument
from bot.converters import (
- AnyChannelConverter,
Duration,
HushDurationConverter,
ISODateTime,
@@ -25,18 +24,6 @@ class ConverterTests(unittest.IsolatedAsyncioTestCase):
cls.context = MagicMock
cls.context.author = 'bob'
- cls.context.guild = MagicMock
- cls.context.guild.channels = []
-
- for i in range(10):
- channel = MagicMock()
- channel.name = f"test-{i}"
- channel.id = str(i) * 18
-
- cls.context.guild.channels.append(channel)
- if i > 7:
- cls.context.guild.channels.append(channel)
-
cls.fixed_utc_now = datetime.datetime.fromisoformat('2019-01-01T00:00:00')
async def test_tag_content_converter_for_valid(self):
@@ -325,38 +312,3 @@ class ConverterTests(unittest.IsolatedAsyncioTestCase):
with self.subTest(invalid_minutes_string=invalid_minutes_string, exception_message=exception_message):
with self.assertRaisesRegex(BadArgument, re.escape(exception_message)):
await converter.convert(self.context, invalid_minutes_string)
-
- async def test_any_channel_converter_for_valid(self):
- """AnyChannelConverter returns correct channel from input."""
- test_values = (
- ("test-0", self.context.guild.channels[0]),
- ("#test-0", self.context.guild.channels[0]),
- (" #tEsT-0 ", self.context.guild.channels[0]),
- (f"<#{'0' * 18}>", self.context.guild.channels[0]),
- (f"{'0' * 18}", self.context.guild.channels[0]),
- ("test-5", self.context.guild.channels[5]),
- ("#test-5", self.context.guild.channels[5]),
- (f"<#{'5' * 18}>", self.context.guild.channels[5]),
- (f"{'5' * 18}", self.context.guild.channels[5]),
- )
-
- converter = AnyChannelConverter()
- for input_string, expected_channel in test_values:
- with self.subTest(input_string=input_string, expected_channel=expected_channel):
- converted = await converter.convert(self.context, input_string)
- self.assertEqual(expected_channel, converted)
-
- async def test_any_channel_converter_for_invalid(self):
- """AnyChannelConverter raises BadArgument for invalid channels."""
- test_values = (
- ("#test-8", "The provided argument returned too many matches (2)."),
- ("#test-9", "The provided argument returned too many matches (2)."),
- ("#random-name", "#random-name returned no matches."),
- ("test-10", "test-10 returned no matches.")
- )
-
- converter = AnyChannelConverter()
- for invalid_input, exception_message in test_values:
- with self.subTest(invalid_input=invalid_input, exception_message=exception_message):
- with self.assertRaisesRegex(BadArgument, re.escape(exception_message)):
- await converter.convert(self.context, invalid_input)