Skip to content

Commit 0ce7736

Browse files
refactor!: Improve DX with allowing the usage of the actual object additionally to the ID (#828)
* refactor!: guild model * ci: check * allow message object without importing it * ci: correct from checks. * refactor!: channel model * refactor!: member model * refactor!: Emoji model * refactor!: Emoji model * refactor!: role model * ci: check * fix: Add missing `_` Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
1 parent 06f4924 commit 0ce7736

File tree

10 files changed

+310
-215
lines changed

10 files changed

+310
-215
lines changed

interactions/api/models/channel.py

Lines changed: 42 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -595,7 +595,7 @@ async def lock(
595595

596596
async def add_member(
597597
self,
598-
member_id: int,
598+
member_id: Union[int, Snowflake, "Member"], # noqa
599599
) -> None:
600600
"""
601601
This adds a member to the channel, if the channel is a thread.
@@ -609,54 +609,71 @@ async def add_member(
609609
raise TypeError(
610610
"The Channel you specified is not a thread!"
611611
) # TODO: Move to new error formatter.
612-
await self._client.add_member_to_thread(thread_id=int(self.id), user_id=member_id)
612+
613+
_member_id = (
614+
int(member_id) if isinstance(member_id, (int, Snowflake)) else int(member_id.id)
615+
)
616+
617+
await self._client.add_member_to_thread(thread_id=int(self.id), user_id=_member_id)
613618

614619
async def pin_message(
615620
self,
616-
message_id: int,
621+
message_id: Union[int, Snowflake, "Message"], # noqa
617622
) -> None:
618623
"""
619624
Pins a message to the channel.
620625
621626
:param message_id: The id of the message to pin
622-
:type message_id: int
627+
:type message_id: Union[int, Snowflake, "Message"]
623628
"""
624629
if not self._client:
625630
raise AttributeError("HTTPClient not found!")
626631

627-
await self._client.pin_message(channel_id=int(self.id), message_id=message_id)
632+
_message_id = (
633+
int(message_id) if isinstance(message_id, (int, Snowflake)) else int(message_id.id)
634+
)
635+
636+
await self._client.pin_message(channel_id=int(self.id), message_id=_message_id)
628637

629638
async def unpin_message(
630639
self,
631-
message_id: int,
640+
message_id: Union[int, Snowflake, "Message"], # noqa
632641
) -> None:
633642
"""
634643
Unpins a message from the channel.
635644
636645
:param message_id: The id of the message to unpin
637-
:type message_id: int
646+
:type message_id: Union[int, Snowflake, "Message"]
638647
"""
639648
if not self._client:
640649
raise AttributeError("HTTPClient not found!")
641650

642-
await self._client.unpin_message(channel_id=int(self.id), message_id=message_id)
651+
_message_id = (
652+
int(message_id) if isinstance(message_id, (int, Snowflake)) else int(message_id.id)
653+
)
654+
655+
await self._client.unpin_message(channel_id=int(self.id), message_id=_message_id)
643656

644657
async def publish_message(
645658
self,
646-
message_id: int,
659+
message_id: Union[int, Snowflake, "Message"], # noqa
647660
) -> "Message": # noqa
648661
"""Publishes (API calls it crossposts) a message in the channel to any that is followed by.
649662
650663
:param message_id: The id of the message to publish
651-
:type message_id: int
664+
:type message_id: Union[int, Snowflake, "Message"]
652665
:return: The message published
653666
:rtype: Message
654667
"""
655668
if not self._client:
656669
raise AttributeError("HTTPClient not found!")
657670
from .message import Message
658671

659-
res = await self._client.publish_message(channel_id=int(self.id), message_id=message_id)
672+
_message_id = (
673+
int(message_id) if isinstance(message_id, (int, Snowflake)) else int(message_id.id)
674+
)
675+
676+
res = await self._client.publish_message(channel_id=int(self.id), message_id=_message_id)
660677

661678
return Message(**res, _client=self._client)
662679

@@ -676,17 +693,19 @@ async def get_pinned_messages(self) -> List["Message"]: # noqa
676693

677694
async def get_message(
678695
self,
679-
message_id: int,
696+
message_id: Union[int, Snowflake],
680697
) -> "Message": # noqa
681698
"""
682699
Gets a message sent in that channel.
683700
701+
:param message_id: The ID of the message to get
702+
:type message_id: Union[int, Snowflake]
684703
:return: The message as object
685704
:rtype: Message
686705
"""
687706
res = await self._client.get_message(
688707
channel_id=int(self.id),
689-
message_id=message_id,
708+
message_id=int(message_id),
690709
)
691710
from .message import Message
692711

@@ -695,7 +714,7 @@ async def get_message(
695714
async def purge(
696715
self,
697716
amount: int,
698-
check: Callable = MISSING,
717+
check: Callable[[...], bool] = MISSING,
699718
before: Optional[int] = MISSING,
700719
reason: Optional[str] = None,
701720
bulk: Optional[bool] = True,
@@ -900,7 +919,7 @@ async def create_thread(
900919
type: Optional[ChannelType] = ChannelType.GUILD_PUBLIC_THREAD,
901920
auto_archive_duration: Optional[int] = MISSING,
902921
invitable: Optional[bool] = MISSING,
903-
message_id: Optional[int] = MISSING,
922+
message_id: Optional[Union[int, Snowflake, "Message"]] = MISSING, # noqa
904923
reason: Optional[str] = None,
905924
) -> "Channel":
906925
"""
@@ -916,7 +935,7 @@ async def create_thread(
916935
:param invitable?: Boolean to display if the Thread is open to join or private.
917936
:type invitable: Optional[bool]
918937
:param message_id?: An optional message to create a thread from.
919-
:type message_id: Optional[int]
938+
:type message_id: Optional[Union[int, Snowflake, "Message"]]
920939
:param reason?: An optional reason for the audit log
921940
:type reason: Optional[str]
922941
:return: The created thread
@@ -933,7 +952,13 @@ async def create_thread(
933952

934953
_auto_archive_duration = None if auto_archive_duration is MISSING else auto_archive_duration
935954
_invitable = None if invitable is MISSING else invitable
936-
_message_id = None if message_id is MISSING else message_id
955+
_message_id = (
956+
None
957+
if message_id is MISSING
958+
else (
959+
int(message_id) if isinstance(message_id, (int, Snowflake)) else int(message_id.id)
960+
)
961+
)
937962
res = await self._client.create_thread(
938963
channel_id=int(self.id),
939964
thread_type=type.value,

interactions/api/models/channel.pyi

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -122,16 +122,16 @@ class Channel(ClientSerializerMixin):
122122
self, auto_archive_duration: int, *, reason: Optional[str] = ...
123123
) -> Channel: ...
124124
async def lock(self, locked: bool = ..., *, reason: Optional[str] = ...) -> Channel: ...
125-
async def add_member(self, member_id: int) -> None: ...
126-
async def pin_message(self, message_id: int) -> None: ...
127-
async def unpin_message(self, message_id: int) -> None: ...
128-
async def publish_message(self, message_id: int) -> Message: ...
125+
async def add_member(self, member_id: Union[int, Snowflake, "Member"]) -> None: ... # noqa
126+
async def pin_message(self, message_id: Union[int, Snowflake, "Message"]) -> None: ... # noqa
127+
async def unpin_message(self, message_id: Union[int, Snowflake, "Message"]) -> None: ... # noqa
128+
async def publish_message(self, message_id: Union[int, Snowflake, "Message"]) -> Message: ... # noqa
129129
async def get_pinned_messages(self) -> List[Message]: ...
130-
async def get_message(self, message_id: int) -> Message: ...
130+
async def get_message(self, message_id: Union[int, Snowflake]) -> Message: ...
131131
async def purge(
132132
self,
133133
amount: int,
134-
check: Callable = ...,
134+
check: Callable[[...], bool] = ...,
135135
before: Optional[int] = ...,
136136
reason: Optional[str] = ...,
137137
bulk: Optional[bool] = ...,
@@ -142,7 +142,7 @@ class Channel(ClientSerializerMixin):
142142
type: Optional[ChannelType] = ...,
143143
auto_archive_duration: Optional[int] = ...,
144144
invitable: Optional[bool] = ...,
145-
message_id: Optional[int] = ...,
145+
message_id: Optional[Union[int, Snowflake, "Message"]] = ..., # noqa
146146
reason: Optional[str] = ...,
147147
) -> Channel: ...
148148
@property

0 commit comments

Comments
 (0)