[Alias] Aliased commands retain newlines (#4656)

Co-authored-by: Michael Oliveira <34169552+Flame442@users.noreply.github.com>
This commit is contained in:
goettner 2024-01-08 16:34:48 -08:00 committed by GitHub
parent a393a10ceb
commit 569840e9e6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 40 additions and 3 deletions

View File

@ -150,6 +150,15 @@ class Alias(commands.Cog):
raise ValueError("No prefix found.") raise ValueError("No prefix found.")
async def call_alias(self, message: discord.Message, prefix: str, alias: AliasEntry): 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) new_message = copy(message)
try: try:
args = alias.get_extra_args_from_alias(message, prefix) args = alias.get_extra_args_from_alias(message, prefix)
@ -163,7 +172,8 @@ class Alias(commands.Cog):
new_message.content = "{}{} {}".format( new_message.content = "{}{} {}".format(
prefix, command, " ".join(args[trackform.max + 1 :]) prefix, command, " ".join(args[trackform.max + 1 :])
).strip() ).strip()
await self.bot.process_commands(new_message)
return new_message
async def paginate_alias_list( async def paginate_alias_list(
self, ctx: commands.Context, alias_list: List[AliasEntry] self, ctx: commands.Context, alias_list: List[AliasEntry]

View File

@ -62,8 +62,7 @@ class AliasEntry:
word = view.get_quoted_word() word = view.get_quoted_word()
if len(word) < view.index - prev: if len(word) < view.index - prev:
word = "".join((view.buffer[prev], word, view.buffer[view.index - 1])) word = "".join((view.buffer[prev], word, view.buffer[view.index - 1]))
extra.append(word) extra.append(word.strip(" "))
view.skip_ws()
return extra return extra
def to_json(self) -> dict: def to_json(self) -> dict:

View File

@ -23,7 +23,9 @@ __all__ = [
"empty_role", "empty_role",
"empty_user", "empty_user",
"member_factory", "member_factory",
"newline_message",
"user_factory", "user_factory",
"prefix",
"ctx", "ctx",
] ]
@ -142,6 +144,18 @@ def empty_message():
return mock_msg("No content.") 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() @pytest.fixture()
def ctx(empty_member, empty_channel, red): def ctx(empty_member, empty_channel, red):
mock_ctx = namedtuple("Context", "author guild channel message bot") mock_ctx = namedtuple("Context", "author guild channel message bot")

View File

@ -30,6 +30,20 @@ async def test_add_guild_alias(alias, ctx):
assert alias_obj.name == "test" 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): async def test_delete_guild_alias(alias, ctx):
await create_test_guild_alias(alias, ctx) await create_test_guild_alias(alias, ctx)
alias_obj = await alias._aliases.get_alias(ctx.guild, "test") alias_obj = await alias._aliases.get_alias(ctx.guild, "test")