From 3d6cd4e36a4f62ebc37c7fcad8ff3e8a7915f7e9 Mon Sep 17 00:00:00 2001 From: goettner Date: Mon, 8 Jan 2024 16:34:48 -0800 Subject: [PATCH] [Alias] Aliased commands retain newlines (#4656) Co-authored-by: Michael Oliveira <34169552+Flame442@users.noreply.github.com> --- redbot/cogs/alias/alias.py | 12 +++++++++++- redbot/cogs/alias/alias_entry.py | 3 +-- redbot/pytest/core.py | 14 ++++++++++++++ tests/cogs/test_alias.py | 14 ++++++++++++++ 4 files changed, 40 insertions(+), 3 deletions(-) diff --git a/redbot/cogs/alias/alias.py b/redbot/cogs/alias/alias.py index b47d39ff978b..cdc38066842b 100644 --- a/redbot/cogs/alias/alias.py +++ b/redbot/cogs/alias/alias.py @@ -150,6 +150,15 @@ async def get_prefix(self, message: discord.Message) -> str: 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 @@ async def call_alias(self, message: discord.Message, prefix: str, alias: AliasEn 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 49cf224ab6b2..159e68fa4ab6 100644 --- a/redbot/cogs/alias/alias_entry.py +++ b/redbot/cogs/alias/alias_entry.py @@ -62,8 +62,7 @@ def get_extra_args_from_alias(self, message: discord.Message, prefix: str) -> st 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 4eb60b3cf056..57450f8e41c3 100644 --- a/redbot/pytest/core.py +++ b/redbot/pytest/core.py @@ -23,7 +23,9 @@ "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 261c85dcb389..97b200582401 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")