PaiGram/utils/chatmember.py
洛水居室 471ed052ea
Use ChatMemberHandler to Get Chat Member Updates
使用 ChatMemberHandler 获取 chat member updates

解决在部分群开启了隐藏成员列表后Bot无法工作的问题
2023-01-03 17:14:57 +08:00

30 lines
1.1 KiB
Python

from typing import Optional, Tuple
from telegram import ChatMemberUpdated, ChatMember
def extract_status_change(chat_member_update: ChatMemberUpdated) -> Optional[Tuple[bool, bool]]:
"""Takes a ChatMemberUpdated instance and extracts whether the 'old_chat_member' was a member
of the chat and whether the 'new_chat_member' is a member of the chat. Returns None, if
the status didn't change.
"""
status_change = chat_member_update.difference().get("status")
old_is_member, new_is_member = chat_member_update.difference().get("is_member", (None, None))
if status_change is None:
return None
old_status, new_status = status_change
was_member = old_status in [
ChatMember.MEMBER,
ChatMember.OWNER,
ChatMember.ADMINISTRATOR,
] or (old_status == ChatMember.RESTRICTED and old_is_member is True)
is_member = new_status in [
ChatMember.MEMBER,
ChatMember.OWNER,
ChatMember.ADMINISTRATOR,
] or (new_status == ChatMember.RESTRICTED and new_is_member is True)
return was_member, is_member