pyrofork: Update ChatMemberUpdatedHandler to support UpdateBotStopped updates

Signed-off-by: wulan17 <wulan17@nusantararom.org>
This commit is contained in:
shriMADhav U k 2024-04-21 17:48:01 +02:00 committed by wulan17
parent b7dcc5b298
commit f03f5ffd79
No known key found for this signature in database
GPG key ID: 318CD6CD3A6AC0A5
3 changed files with 36 additions and 7 deletions

View file

@ -53,7 +53,7 @@ from pyrogram.raw.types import (
UpdateDeleteMessages, UpdateDeleteChannelMessages, UpdateDeleteMessages, UpdateDeleteChannelMessages,
UpdateBotCallbackQuery, UpdateInlineBotCallbackQuery, UpdateBotCallbackQuery, UpdateInlineBotCallbackQuery,
UpdateUserStatus, UpdateBotInlineQuery, UpdateMessagePoll, UpdateUserStatus, UpdateBotInlineQuery, UpdateMessagePoll,
UpdateBotInlineSend, UpdateChatParticipant, UpdateChannelParticipant, UpdateBotInlineSend, UpdateChatParticipant, UpdateChannelParticipant, UpdateBotStopped,
UpdateBotChatInviteRequester, UpdateStory, UpdateBotChatInviteRequester, UpdateStory,
UpdateBotMessageReaction, UpdateBotMessageReaction,
UpdateBotMessageReactions UpdateBotMessageReactions
@ -70,7 +70,7 @@ class Dispatcher:
DELETE_MESSAGES_UPDATES = (UpdateDeleteMessages, UpdateDeleteChannelMessages) DELETE_MESSAGES_UPDATES = (UpdateDeleteMessages, UpdateDeleteChannelMessages)
DELETE_BOT_BUSINESS_MESSAGES_UPDATES = (UpdateBotDeleteBusinessMessage,) DELETE_BOT_BUSINESS_MESSAGES_UPDATES = (UpdateBotDeleteBusinessMessage,)
CALLBACK_QUERY_UPDATES = (UpdateBotCallbackQuery, UpdateInlineBotCallbackQuery) CALLBACK_QUERY_UPDATES = (UpdateBotCallbackQuery, UpdateInlineBotCallbackQuery)
CHAT_MEMBER_UPDATES = (UpdateChatParticipant, UpdateChannelParticipant) CHAT_MEMBER_UPDATES = (UpdateChatParticipant, UpdateChannelParticipant, UpdateBotStopped,)
USER_STATUS_UPDATES = (UpdateUserStatus,) USER_STATUS_UPDATES = (UpdateUserStatus,)
BOT_INLINE_QUERY_UPDATES = (UpdateBotInlineQuery,) BOT_INLINE_QUERY_UPDATES = (UpdateBotInlineQuery,)
POLL_UPDATES = (UpdateMessagePoll,) POLL_UPDATES = (UpdateMessagePoll,)

View file

@ -25,7 +25,7 @@ from .auto_name import AutoName
class ChatMemberStatus(AutoName): class ChatMemberStatus(AutoName):
"""Chat member status enumeration used in :obj:`~pyrogram.types.ChatMember`.""" """Chat member status enumeration used in :obj:`~pyrogram.types.ChatMember`."""
OWNER = auto() OWNER = auto() # TODO: rename to 'creator'
"Chat owner" "Chat owner"
ADMINISTRATOR = auto() ADMINISTRATOR = auto()
@ -40,5 +40,5 @@ class ChatMemberStatus(AutoName):
LEFT = auto() LEFT = auto()
"Left chat member" "Left chat member"
BANNED = auto() BANNED = auto() # TODO: rename to 'kicked'
"Banned chat member" "Banned chat member"

View file

@ -21,8 +21,7 @@ from datetime import datetime
from typing import Dict, Union from typing import Dict, Union
import pyrogram import pyrogram
from pyrogram import raw, utils from pyrogram import enums, raw, types, utils
from pyrogram import types
from ..object import Object from ..object import Object
from ..update import Update from ..update import Update
@ -78,10 +77,40 @@ class ChatMemberUpdated(Object, Update):
@staticmethod @staticmethod
def _parse( def _parse(
client: "pyrogram.Client", client: "pyrogram.Client",
update: Union["raw.types.UpdateChatParticipant", "raw.types.UpdateChannelParticipant"], update: Union["raw.types.UpdateChatParticipant", "raw.types.UpdateChannelParticipant", "raw.types.UpdateBotStopped"],
users: Dict[int, "raw.types.User"], users: Dict[int, "raw.types.User"],
chats: Dict[int, "raw.types.Chat"] chats: Dict[int, "raw.types.Chat"]
) -> "ChatMemberUpdated": ) -> "ChatMemberUpdated":
if isinstance(update, raw.types.UpdateBotStopped):
from_user = types.User._parse(client, users[update.user_id])
_chat_member_one = types.ChatMember(
user=from_user,
status=enums.ChatMemberStatus.BANNED,
client=client
)
_chat_member_two = types.ChatMember(
user=from_user,
status=enums.ChatMemberStatus.MEMBER,
client=client
)
if update.stopped:
return ChatMemberUpdated(
chat=types.Chat._parse_chat(client, users[update.user_id]),
from_user=from_user,
date=utils.timestamp_to_datetime(update.date),
old_chat_member=_chat_member_two,
new_chat_member=_chat_member_one,
client=client
)
return ChatMemberUpdated(
chat=types.Chat._parse_chat(client, users[update.user_id]),
from_user=from_user,
date=utils.timestamp_to_datetime(update.date),
old_chat_member=_chat_member_one,
new_chat_member=_chat_member_two,
client=client
)
chat_id = getattr(update, "chat_id", None) or getattr(update, "channel_id") chat_id = getattr(update, "chat_id", None) or getattr(update, "channel_id")
old_chat_member = None old_chat_member = None