diff --git a/redbot/cogs/alias/alias.py b/redbot/cogs/alias/alias.py index b47d39ff9..cdc380668 100644 --- a/redbot/cogs/alias/alias.py +++ b/redbot/cogs/alias/alias.py @@ -150,6 +150,15 @@ class Alias(commands.Cog): raise ValueError("No prefix found.") async def call_alias(self, message: discord.Message, prefix: str, alias: AliasEntry): + new_message = self.translate_alias_message(message, prefix, alias) + await self.bot.process_commands(new_message) + + def translate_alias_message(self, message: discord.Message, prefix: str, alias: AliasEntry): + """ + Translates a discord message using an alias + for a command to a discord message using the + alias' base command. + """ new_message = copy(message) try: args = alias.get_extra_args_from_alias(message, prefix) @@ -163,7 +172,8 @@ class Alias(commands.Cog): new_message.content = "{}{} {}".format( prefix, command, " ".join(args[trackform.max + 1 :]) ).strip() - await self.bot.process_commands(new_message) + + return new_message async def paginate_alias_list( self, ctx: commands.Context, alias_list: List[AliasEntry] diff --git a/redbot/cogs/alias/alias_entry.py b/redbot/cogs/alias/alias_entry.py index 49cf224ab..159e68fa4 100644 --- a/redbot/cogs/alias/alias_entry.py +++ b/redbot/cogs/alias/alias_entry.py @@ -62,8 +62,7 @@ class AliasEntry: word = view.get_quoted_word() if len(word) < view.index - prev: word = "".join((view.buffer[prev], word, view.buffer[view.index - 1])) - extra.append(word) - view.skip_ws() + extra.append(word.strip(" ")) return extra def to_json(self) -> dict: diff --git a/redbot/pytest/core.py b/redbot/pytest/core.py index 4eb60b3cf..57450f8e4 100644 --- a/redbot/pytest/core.py +++ b/redbot/pytest/core.py @@ -23,7 +23,9 @@ __all__ = [ "empty_role", "empty_user", "member_factory", + "newline_message", "user_factory", + "prefix", "ctx", ] @@ -142,6 +144,18 @@ def empty_message(): return mock_msg("No content.") +@pytest.fixture(scope="module") +def newline_message(): + mock_msg = type("", (), {})() + mock_msg.content = "!test a\nb\nc" + return mock_msg + + +@pytest.fixture(scope="module") +def prefix(): + return "!" + + @pytest.fixture() def ctx(empty_member, empty_channel, red): mock_ctx = namedtuple("Context", "author guild channel message bot") diff --git a/tests/cogs/test_alias.py b/tests/cogs/test_alias.py index 261c85dcb..97b200582 100644 --- a/tests/cogs/test_alias.py +++ b/tests/cogs/test_alias.py @@ -30,6 +30,20 @@ async def test_add_guild_alias(alias, ctx): assert alias_obj.name == "test" +async def test_translate_alias_message(alias, ctx, newline_message, prefix): + await create_test_guild_alias(alias, ctx) + alias_obj = await alias._aliases.get_alias(ctx.guild, "test") + + translated_message = alias.translate_alias_message(newline_message, prefix, alias_obj) + + original_content = newline_message.content.split(" ", 1)[1] + original_content = original_content.replace(" ", "") + new_content = translated_message.content.split(" ", 1)[1] + new_content = new_content.replace(" ", "") + + assert new_content == original_content + + async def test_delete_guild_alias(alias, ctx): await create_test_guild_alias(alias, ctx) alias_obj = await alias._aliases.get_alias(ctx.guild, "test")