|
30 | 30 |
|
31 | 31 | from .automod import AutoModAction, AutoModTriggerType |
32 | 32 | from .enums import ChannelType, try_enum |
| 33 | +from .types.user import User |
33 | 34 |
|
34 | 35 | if TYPE_CHECKING: |
35 | 36 | from .abc import MessageableChannel |
|
43 | 44 | from .types.raw_models import ( |
44 | 45 | BulkMessageDeleteEvent, |
45 | 46 | IntegrationDeleteEvent, |
| 47 | + MemberRemoveEvent, |
46 | 48 | MessageDeleteEvent, |
47 | 49 | MessageUpdateEvent, |
48 | 50 | ReactionActionEvent, |
49 | 51 | ReactionClearEmojiEvent, |
50 | 52 | ReactionClearEvent, |
51 | 53 | ScheduledEventSubscription, |
52 | 54 | ThreadDeleteEvent, |
| 55 | + ThreadMembersUpdateEvent, |
| 56 | + ThreadUpdateEvent, |
53 | 57 | TypingEvent, |
54 | 58 | ) |
55 | 59 |
|
|
62 | 66 | "RawReactionClearEvent", |
63 | 67 | "RawReactionClearEmojiEvent", |
64 | 68 | "RawIntegrationDeleteEvent", |
| 69 | + "RawThreadUpdateEvent", |
65 | 70 | "RawThreadDeleteEvent", |
66 | 71 | "RawTypingEvent", |
| 72 | + "RawMemberRemoveEvent", |
67 | 73 | "RawScheduledEventSubscription", |
68 | 74 | "AutoModActionExecutionEvent", |
| 75 | + "RawThreadMembersUpdateEvent", |
69 | 76 | ) |
70 | 77 |
|
71 | 78 |
|
@@ -305,6 +312,38 @@ def __init__(self, data: IntegrationDeleteEvent) -> None: |
305 | 312 | self.application_id: int | None = None |
306 | 313 |
|
307 | 314 |
|
| 315 | +class RawThreadUpdateEvent(_RawReprMixin): |
| 316 | + """Represents the payload for an :func:`on_raw_thread_update` event. |
| 317 | +
|
| 318 | + .. versionadded:: 2.4 |
| 319 | +
|
| 320 | + Attributes |
| 321 | + ---------- |
| 322 | + thread_id: :class:`int` |
| 323 | + The ID of the updated thread. |
| 324 | + thread_type: :class:`discord.ChannelType` |
| 325 | + The channel type of the updated thread. |
| 326 | + guild_id: :class:`int` |
| 327 | + The ID of the guild the thread belongs to. |
| 328 | + parent_id: :class:`int` |
| 329 | + The ID of the channel the thread belongs to. |
| 330 | + data: :class:`dict` |
| 331 | + The raw data given by the `gateway <https://discord.com/developers/docs/topics/gateway-events#thread-update>`_. |
| 332 | + thread: :class:`discord.Thread` | None |
| 333 | + The thread, if it could be found in the internal cache. |
| 334 | + """ |
| 335 | + |
| 336 | + __slots__ = ("thread_id", "thread_type", "parent_id", "guild_id", "data", "thread") |
| 337 | + |
| 338 | + def __init__(self, data: ThreadUpdateEvent) -> None: |
| 339 | + self.thread_id: int = int(data["id"]) |
| 340 | + self.thread_type: ChannelType = try_enum(ChannelType, data["type"]) |
| 341 | + self.guild_id: int = int(data["guild_id"]) |
| 342 | + self.parent_id: int = int(data["parent_id"]) |
| 343 | + self.data: ThreadUpdateEvent = data |
| 344 | + self.thread: Thread | None = None |
| 345 | + |
| 346 | + |
308 | 347 | class RawThreadDeleteEvent(_RawReprMixin): |
309 | 348 | """Represents the payload for :func:`on_raw_thread_delete` event. |
310 | 349 |
|
@@ -370,6 +409,26 @@ def __init__(self, data: TypingEvent) -> None: |
370 | 409 | self.guild_id: int | None = None |
371 | 410 |
|
372 | 411 |
|
| 412 | +class RawMemberRemoveEvent(_RawReprMixin): |
| 413 | + """Represents the payload for an :func:`on_raw_member_remove` event. |
| 414 | +
|
| 415 | + .. versionadded:: 2.4 |
| 416 | +
|
| 417 | + Attributes |
| 418 | + ---------- |
| 419 | + user: :class:`discord.User` |
| 420 | + The user that left the guild. |
| 421 | + guild_id: :class:`int` |
| 422 | + The ID of the guild the user left. |
| 423 | + """ |
| 424 | + |
| 425 | + __slots__ = ("user", "guild_id") |
| 426 | + |
| 427 | + def __init__(self, data: MemberRemoveEvent, user: User): |
| 428 | + self.user: User = user |
| 429 | + self.guild_id: int = int(data["guild_id"]) |
| 430 | + |
| 431 | + |
373 | 432 | class RawScheduledEventSubscription(_RawReprMixin): |
374 | 433 | """Represents the payload for a :func:`raw_scheduled_event_user_add` or |
375 | 434 | :func:`raw_scheduled_event_user_remove` event. |
@@ -516,3 +575,29 @@ def __repr__(self) -> str: |
516 | 575 | f"rule_id={self.rule_id!r} guild_id={self.guild_id!r} " |
517 | 576 | f"user_id={self.user_id!r}>" |
518 | 577 | ) |
| 578 | + |
| 579 | + |
| 580 | +class RawThreadMembersUpdateEvent(_RawReprMixin): |
| 581 | + """Represents the payload for an :func:`on_raw_thread_member_remove` event. |
| 582 | +
|
| 583 | + .. versionadded:: 2.4 |
| 584 | +
|
| 585 | + Attributes |
| 586 | + ---------- |
| 587 | + thread_id: :class:`int` |
| 588 | + The ID of the thread that was updated. |
| 589 | + guild_id: :class:`int` |
| 590 | + The ID of the guild the thread is in. |
| 591 | + member_count: :class:`int` |
| 592 | + The approximate number of members in the thread. Maximum of 50. |
| 593 | + data: :class:`dict` |
| 594 | + The raw data given by the `gateway <https://discord.com/developers/docs/topics/gateway-events#thread-members-update>`_. |
| 595 | + """ |
| 596 | + |
| 597 | + __slots__ = ("thread_id", "guild_id", "member_count", "data") |
| 598 | + |
| 599 | + def __init__(self, data: ThreadMembersUpdateEvent) -> None: |
| 600 | + self.thread_id = int(data["id"]) |
| 601 | + self.guild_id = int(data["guild_id"]) |
| 602 | + self.member_count = int(data["member_count"]) |
| 603 | + self.data = data |
0 commit comments