Skip to content

Commit 4bc73c2

Browse files
authored
refactor: allow archiving of threads in channel helper methods (#676)
* refactor: allow archiving of threads in channel helper methods * feat: add methods for thread modifying
1 parent 556b387 commit 4bc73c2

File tree

4 files changed

+136
-2
lines changed

4 files changed

+136
-2
lines changed

interactions/api/models/channel.py

Lines changed: 85 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -284,11 +284,17 @@ async def modify(
284284
permission_overwrites: Optional[List[Overwrite]] = MISSING,
285285
parent_id: Optional[int] = MISSING,
286286
nsfw: Optional[bool] = MISSING,
287+
archived: Optional[bool] = MISSING,
288+
auto_archive_duration: Optional[int] = MISSING,
289+
locked: Optional[bool] = MISSING,
287290
reason: Optional[str] = None,
288291
) -> "Channel":
289292
"""
290293
Edits the channel.
291294
295+
.. note::
296+
The fields `archived`, `auto_archive_duration` and `locked` require the provided channel to be a thread.
297+
292298
:param name?: The name of the channel, defaults to the current value of the channel
293299
:type name: str
294300
:param topic?: The topic of that channel, defaults to the current value of the channel
@@ -307,6 +313,12 @@ async def modify(
307313
:type nsfw: Optional[bool]
308314
:param permission_overwrites?: The permission overwrites, if any
309315
:type permission_overwrites: Optional[List[Overwrite]]
316+
:param archived?: Whether the thread is archived
317+
:type archived: Optional[bool]
318+
:param auto_archive_duration?: The time after the thread is automatically archived. One of 60, 1440, 4320, 10080
319+
:type auto_archive_duration: Optional[int]
320+
:param locked?: Whether the thread is locked
321+
:type locked: Optional[bool]
310322
:param reason?: The reason for the edit
311323
:type reason: Optional[str]
312324
:return: The modified channel as new object
@@ -343,10 +355,25 @@ async def modify(
343355
nsfw=_nsfw,
344356
permission_overwrites=_permission_overwrites,
345357
)
358+
359+
payload = payload._json
360+
361+
if (
362+
archived is not MISSING or auto_archive_duration is not MISSING or locked is not MISSING
363+
) and not self.thread_metadata:
364+
raise ValueError("The specified channel is not a Thread!")
365+
366+
if archived is not MISSING:
367+
payload["archived"] = archived
368+
if auto_archive_duration is not MISSING:
369+
payload["auto_archive_duration"] = auto_archive_duration
370+
if locked is not MISSING:
371+
payload["locked"] = locked
372+
346373
res = await self._client.modify_channel(
347374
channel_id=int(self.id),
348375
reason=reason,
349-
payload=payload._json,
376+
payload=payload,
350377
)
351378
return Channel(**res, _client=self._client)
352379

@@ -508,6 +535,63 @@ async def set_nsfw(
508535

509536
return await self.modify(nsfw=nsfw, reason=reason)
510537

538+
async def archive(
539+
self,
540+
archived: bool = True,
541+
*,
542+
reason: Optional[str] = None,
543+
) -> "Channel":
544+
"""
545+
Sets the archived state of the thread.
546+
547+
:param archived: Whether the Thread is archived, defaults to True
548+
:type archived: bool
549+
:param reason?: The reason of the archiving
550+
:type reason: Optional[str]
551+
:return: The edited channel
552+
:rtype: Channel
553+
"""
554+
555+
return await self.modify(archived=archived, reason=reason)
556+
557+
async def set_auto_archive_duration(
558+
self,
559+
auto_archive_duration: int,
560+
*,
561+
reason: Optional[str] = None,
562+
) -> "Channel":
563+
"""
564+
Sets the time after the thread is automatically archived.
565+
566+
:param auto_archive_duration: The time after the thread is automatically archived. One of 60, 1440, 4320, 10080
567+
:type auto_archive_duration: int
568+
:param reason?: The reason of the edit
569+
:type reason: Optional[str]
570+
:return: The edited channel
571+
:rtype: Channel
572+
"""
573+
574+
return await self.modify(auto_archive_duration=auto_archive_duration, reason=reason)
575+
576+
async def lock(
577+
self,
578+
locked: bool = True,
579+
*,
580+
reason: Optional[str] = None,
581+
) -> "Channel":
582+
"""
583+
Sets the locked state of the thread.
584+
585+
:param locked: Whether the Thread is locked, defaults to True
586+
:type locked: bool
587+
:param reason?: The reason of the edit
588+
:type reason: Optional[str]
589+
:return: The edited channel
590+
:rtype: Channel
591+
"""
592+
593+
return await self.modify(locked=locked, reason=reason)
594+
511595
async def add_member(
512596
self,
513597
member_id: int,

interactions/api/models/channel.pyi

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,9 @@ class Channel(DictSerializerMixin):
103103
permission_overwrites: Optional[List[Overwrite]] = MISSING,
104104
parent_id: Optional[int] = MISSING,
105105
nsfw: Optional[bool] = MISSING,
106+
archived: Optional[bool] = MISSING,
107+
auto_archive_duration: Optional[int] = MISSING,
108+
locked: Optional[bool] = MISSING,
106109
reason: Optional[str] = None,
107110
) -> "Channel": ...
108111
async def set_name(
@@ -153,6 +156,24 @@ class Channel(DictSerializerMixin):
153156
*,
154157
reason: Optional[str] = None
155158
) -> "Channel": ...
159+
async def archive(
160+
self,
161+
archived: bool = True,
162+
*,
163+
reason: Optional[str] = None,
164+
) -> "Channel": ...
165+
async def set_auto_archive_duration(
166+
self,
167+
auto_archive_duration: int,
168+
*,
169+
reason: Optional[str] = None,
170+
) -> "Channel": ...
171+
async def lock(
172+
self,
173+
locked: bool = True,
174+
*,
175+
reason: Optional[str] = None,
176+
) -> "Channel": ...
156177
async def add_member(
157178
self,
158179
member_id: int,

interactions/api/models/guild.py

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -779,11 +779,17 @@ async def modify_channel(
779779
permission_overwrites: Optional[List[Overwrite]] = MISSING,
780780
parent_id: Optional[int] = MISSING,
781781
nsfw: Optional[bool] = MISSING,
782+
archived: Optional[bool] = MISSING,
783+
auto_archive_duration: Optional[int] = MISSING,
784+
locked: Optional[bool] = MISSING,
782785
reason: Optional[str] = None,
783786
) -> Channel:
784787
"""
785788
Edits a channel of the guild.
786789
790+
.. note::
791+
The fields `archived`, `auto_archive_duration` and `locked` require the provided channel to be a thread.
792+
787793
:param channel_id: The id of the channel to modify
788794
:type channel_id: int
789795
:param name?: The name of the channel, defaults to the current value of the channel
@@ -804,6 +810,12 @@ async def modify_channel(
804810
:type permission_overwrites: Optional[Overwrite]
805811
:param nsfw?: Whether the channel is nsfw or not, defaults to the current value of the channel
806812
:type nsfw: Optional[bool]
813+
:param archived?: Whether the thread is archived
814+
:type archived: Optional[bool]
815+
:param auto_archive_duration?: The time after the thread is automatically archived. One of 60, 1440, 4320, 10080
816+
:type auto_archive_duration: Optional[int]
817+
:param locked?: Whether the thread is locked
818+
:type locked: Optional[bool]
807819
:param reason: The reason for the edit
808820
:type reason: Optional[str]
809821
:return: The modified channel
@@ -843,10 +855,24 @@ async def modify_channel(
843855
nsfw=_nsfw,
844856
)
845857

858+
payload = payload._json
859+
860+
if (
861+
archived is not MISSING or auto_archive_duration is not MISSING or locked is not MISSING
862+
) and not ch.thread_metadata:
863+
raise ValueError("The specified channel is not a Thread!")
864+
865+
if archived is not MISSING:
866+
payload["archived"] = archived
867+
if auto_archive_duration is not MISSING:
868+
payload["auto_archive_duration"] = auto_archive_duration
869+
if locked is not MISSING:
870+
payload["locked"] = locked
871+
846872
res = await self._client.modify_channel(
847873
channel_id=channel_id,
848874
reason=reason,
849-
payload=payload._json,
875+
payload=payload,
850876
)
851877
return Channel(**res, _client=self._client)
852878

interactions/api/models/guild.pyi

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -236,6 +236,9 @@ class Guild(DictSerializerMixin):
236236
permission_overwrites: Optional[List[Overwrite]] = MISSING,
237237
parent_id: Optional[int] = MISSING,
238238
nsfw: Optional[bool] = MISSING,
239+
archived: Optional[bool] = MISSING,
240+
auto_archive_duration: Optional[int] = MISSING,
241+
locked: Optional[bool] = MISSING,
239242
reason: Optional[str] = None,
240243
) -> Channel: ...
241244
async def modify_member(

0 commit comments

Comments
 (0)