From 1dec267ea48b042af44bb555360b8e4e38d7ed1f Mon Sep 17 00:00:00 2001 From: Leo Developer Date: Mon, 8 Apr 2024 14:54:32 +0200 Subject: [PATCH 01/10] add make_link() to MessageReference --- hikari/messages.py | 12 ++++++++++++ tests/hikari/test_messages.py | 20 ++++++++++++++++++++ 2 files changed, 32 insertions(+) diff --git a/hikari/messages.py b/hikari/messages.py index fde2a63546..f9ec80e73e 100644 --- a/hikari/messages.py +++ b/hikari/messages.py @@ -309,6 +309,18 @@ class MessageReference: a guild. """ + def make_link(self) -> str: + """Generate a jump link to this message or channel in case for follow add messages. + + Returns + ------- + str + The jump link to the message. + """ + guild_id_str = "@me" if self.guild_id is None else str(self.guild_id) + message_id_str = "" if self.id is None else str(self.id) + return f"{urls.BASE_URL}/channels/{guild_id_str}/{self.channel_id}/{message_id_str}" + @attrs_extensions.with_copy @attrs.define(hash=True, kw_only=True, weakref_slot=False) diff --git a/tests/hikari/test_messages.py b/tests/hikari/test_messages.py index 112a42af4a..3327cf2205 100644 --- a/tests/hikari/test_messages.py +++ b/tests/hikari/test_messages.py @@ -134,6 +134,26 @@ def test_make_link_when_guild_is_none(self, message): assert message.make_link(None) == "https://discord.com/channels/@me/456/789" +@pytest.fixture +def message_reference(): + return messages.MessageReference( + app=None, guild_id=snowflakes.Snowflake(123), channel_id=snowflakes.Snowflake(456), id=snowflakes.Snowflake(789) + ) + + +class TestMessageReference: + def test_make_link_when_guild_is_not_none(self, message_reference): + assert message_reference.make_link() == "https://discord.com/channels/123/456/789" + + def test_make_link_when_guild_is_none(self, message_reference): + message_reference.guild_id = None + assert message_reference.make_link() == "https://discord.com/channels/@me/456/789" + + def test_make_link_when_id_is_none(self, message_reference): + message_reference.id = None + assert message_reference.make_link() == "https://discord.com/channels/123/456/" + + @pytest.mark.asyncio class TestAsyncMessage: async def test_fetch_channel(self, message): From 1a2dc1b83f5bb840a4a8b59c9e690a964afd04d5 Mon Sep 17 00:00:00 2001 From: Leo Developer Date: Mon, 8 Apr 2024 14:58:26 +0200 Subject: [PATCH 02/10] add changelog fragment --- changes/1877.feature.md | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 changes/1877.feature.md diff --git a/changes/1877.feature.md b/changes/1877.feature.md new file mode 100644 index 0000000000..91119d1146 --- /dev/null +++ b/changes/1877.feature.md @@ -0,0 +1,2 @@ +Add `make_link()` function to `MessageReference` class. + From 3095a2d4428f3cf631f4f5a64468c2ce4ead8ec1 Mon Sep 17 00:00:00 2001 From: Leo Developer Date: Fri, 12 Apr 2024 18:35:48 +0000 Subject: [PATCH 03/10] Update hikari/messages.py Co-authored-by: beagold <86345081+beagold@users.noreply.github.com> Signed-off-by: Leo Developer --- hikari/messages.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hikari/messages.py b/hikari/messages.py index f9ec80e73e..cc921977d4 100644 --- a/hikari/messages.py +++ b/hikari/messages.py @@ -310,7 +310,7 @@ class MessageReference: """ def make_link(self) -> str: - """Generate a jump link to this message or channel in case for follow add messages. + """Generate a jump link to the referenced message or channel (in case for follow add messages). Returns ------- From 22be3d02c446819dad627174a8d41d0cbfcc0e9c Mon Sep 17 00:00:00 2001 From: Leo Developer Date: Fri, 12 Apr 2024 18:35:54 +0000 Subject: [PATCH 04/10] Update hikari/messages.py Co-authored-by: beagold <86345081+beagold@users.noreply.github.com> Signed-off-by: Leo Developer --- hikari/messages.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hikari/messages.py b/hikari/messages.py index cc921977d4..ab499093b9 100644 --- a/hikari/messages.py +++ b/hikari/messages.py @@ -315,7 +315,7 @@ def make_link(self) -> str: Returns ------- str - The jump link to the message. + The jump link to the message reference target. """ guild_id_str = "@me" if self.guild_id is None else str(self.guild_id) message_id_str = "" if self.id is None else str(self.id) From 59aa6a1995596417292ec3b4a5724656a8df28da Mon Sep 17 00:00:00 2001 From: Leo Developer Date: Fri, 12 Apr 2024 20:40:16 +0200 Subject: [PATCH 05/10] remove extra LF --- changes/1877.feature.md | 1 - 1 file changed, 1 deletion(-) diff --git a/changes/1877.feature.md b/changes/1877.feature.md index 91119d1146..52bc3fd58d 100644 --- a/changes/1877.feature.md +++ b/changes/1877.feature.md @@ -1,2 +1 @@ Add `make_link()` function to `MessageReference` class. - From 5b5feedbf628487516c21e40f3cc91e627d3e36c Mon Sep 17 00:00:00 2001 From: Leo Developer Date: Fri, 12 Apr 2024 20:47:58 +0200 Subject: [PATCH 06/10] remove useless str conversion (f-string will do it for us) --- hikari/messages.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/hikari/messages.py b/hikari/messages.py index ab499093b9..6b4362b89e 100644 --- a/hikari/messages.py +++ b/hikari/messages.py @@ -317,8 +317,8 @@ def make_link(self) -> str: str The jump link to the message reference target. """ - guild_id_str = "@me" if self.guild_id is None else str(self.guild_id) - message_id_str = "" if self.id is None else str(self.id) + guild_id_str = "@me" if self.guild_id is None else self.guild_id + message_id_str = "" if self.id is None else self.id return f"{urls.BASE_URL}/channels/{guild_id_str}/{self.channel_id}/{message_id_str}" From a980659aaa92960b0aebb947b56726b78c2d8719 Mon Sep 17 00:00:00 2001 From: Leo Developer Date: Sun, 14 Apr 2024 09:45:00 +0200 Subject: [PATCH 07/10] remove trailing / when id=None --- hikari/messages.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/hikari/messages.py b/hikari/messages.py index 6b4362b89e..b235ef6dd0 100644 --- a/hikari/messages.py +++ b/hikari/messages.py @@ -318,8 +318,8 @@ def make_link(self) -> str: The jump link to the message reference target. """ guild_id_str = "@me" if self.guild_id is None else self.guild_id - message_id_str = "" if self.id is None else self.id - return f"{urls.BASE_URL}/channels/{guild_id_str}/{self.channel_id}/{message_id_str}" + message_id_str = "" if self.id is None else f"/{self.id}" + return f"{urls.BASE_URL}/channels/{guild_id_str}/{self.channel_id}{message_id_str}" @attrs_extensions.with_copy From f46ef3e41cc98f5aaafd0d55ae14d4987deb4f89 Mon Sep 17 00:00:00 2001 From: Leo Developer Date: Sun, 14 Apr 2024 09:47:52 +0200 Subject: [PATCH 08/10] forgor to adjust test --- tests/hikari/test_messages.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/hikari/test_messages.py b/tests/hikari/test_messages.py index 3327cf2205..5e8699f11a 100644 --- a/tests/hikari/test_messages.py +++ b/tests/hikari/test_messages.py @@ -151,7 +151,7 @@ def test_make_link_when_guild_is_none(self, message_reference): def test_make_link_when_id_is_none(self, message_reference): message_reference.id = None - assert message_reference.make_link() == "https://discord.com/channels/123/456/" + assert message_reference.make_link() == "https://discord.com/channels/123/456" @pytest.mark.asyncio From 9bf78ad2de427000c80a0f13a16f07c8c8f6283a Mon Sep 17 00:00:00 2001 From: Leo Developer Date: Sun, 14 Apr 2024 10:16:57 +0200 Subject: [PATCH 09/10] separate properties --- changes/1877.feature.md | 3 ++- hikari/messages.py | 26 ++++++++++++++++++-------- tests/hikari/test_messages.py | 9 ++++++--- 3 files changed, 26 insertions(+), 12 deletions(-) diff --git a/changes/1877.feature.md b/changes/1877.feature.md index 52bc3fd58d..d6f3029305 100644 --- a/changes/1877.feature.md +++ b/changes/1877.feature.md @@ -1 +1,2 @@ -Add `make_link()` function to `MessageReference` class. +- Add `message_link` property to `MessageReference` +- Add `channel_link` property to `MessageReference` diff --git a/hikari/messages.py b/hikari/messages.py index b235ef6dd0..fd04e36aca 100644 --- a/hikari/messages.py +++ b/hikari/messages.py @@ -309,17 +309,27 @@ class MessageReference: a guild. """ - def make_link(self) -> str: - """Generate a jump link to the referenced message or channel (in case for follow add messages). + @property + def message_link(self) -> typing.Optional[str]: + """Generate a jump link to the referenced message. - Returns - ------- - str - The jump link to the message reference target. + This will be [`None`][] for channel follow add messages. This may + point to a deleted message. + """ + if self.id is None: + return None + + guild_id_str = "@me" if self.guild_id is None else self.guild_id + return f"{urls.BASE_URL}/channels/{guild_id_str}/{self.channel_id}/{self.id}" + + @property + def channel_link(self) -> str: + """Generate a jump link to the channel the referenced message was sent in. + + This will always be a valid link. """ guild_id_str = "@me" if self.guild_id is None else self.guild_id - message_id_str = "" if self.id is None else f"/{self.id}" - return f"{urls.BASE_URL}/channels/{guild_id_str}/{self.channel_id}{message_id_str}" + return f"{urls.BASE_URL}/channels/{guild_id_str}/{self.channel_id}" @attrs_extensions.with_copy diff --git a/tests/hikari/test_messages.py b/tests/hikari/test_messages.py index 5e8699f11a..027697c8de 100644 --- a/tests/hikari/test_messages.py +++ b/tests/hikari/test_messages.py @@ -143,15 +143,18 @@ def message_reference(): class TestMessageReference: def test_make_link_when_guild_is_not_none(self, message_reference): - assert message_reference.make_link() == "https://discord.com/channels/123/456/789" + assert message_reference.message_link == "https://discord.com/channels/123/456/789" + assert message_reference.channel_link == "https://discord.com/channels/123/456" def test_make_link_when_guild_is_none(self, message_reference): message_reference.guild_id = None - assert message_reference.make_link() == "https://discord.com/channels/@me/456/789" + assert message_reference.message_link == "https://discord.com/channels/@me/456/789" + assert message_reference.channel_link == "https://discord.com/channels/@me/456" def test_make_link_when_id_is_none(self, message_reference): message_reference.id = None - assert message_reference.make_link() == "https://discord.com/channels/123/456" + assert message_reference.message_link is None + assert message_reference.channel_link == "https://discord.com/channels/123/456" @pytest.mark.asyncio From 231adfe2b334cde5cc680434c7a91ca764e9ef2c Mon Sep 17 00:00:00 2001 From: Leo Developer Date: Sun, 14 Apr 2024 10:34:42 +0200 Subject: [PATCH 10/10] style --- hikari/messages.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hikari/messages.py b/hikari/messages.py index fd04e36aca..8df6ed70d7 100644 --- a/hikari/messages.py +++ b/hikari/messages.py @@ -321,7 +321,7 @@ def message_link(self) -> typing.Optional[str]: guild_id_str = "@me" if self.guild_id is None else self.guild_id return f"{urls.BASE_URL}/channels/{guild_id_str}/{self.channel_id}/{self.id}" - + @property def channel_link(self) -> str: """Generate a jump link to the channel the referenced message was sent in.