45 lines
1.1 KiB
Python
45 lines
1.1 KiB
Python
import base64
|
|
import json
|
|
from typing import Any
|
|
|
|
import phonenumbers
|
|
from aiogram.types import (
|
|
ChatMemberAdministrator,
|
|
ChatMemberMember,
|
|
ChatMemberOwner,
|
|
ResultChatMemberUnion,
|
|
)
|
|
from phonenumbers import NumberParseException
|
|
|
|
|
|
def is_valid_phone(phone: str, region="RU") -> bool:
|
|
try:
|
|
parsed = phonenumbers.parse(phone, region)
|
|
return phonenumbers.is_valid_number(parsed)
|
|
except NumberParseException:
|
|
return False
|
|
|
|
|
|
def dict_to_b64(payload: dict) -> str:
|
|
json_str = json.dumps(payload, separators=(",", ":"))
|
|
json_bytes = json_str.encode("utf-8")
|
|
b64 = base64.urlsafe_b64encode(json_bytes).decode("ascii")
|
|
return b64.rstrip("=")
|
|
|
|
|
|
def b64_to_dict(payload: str) -> dict["str", Any]:
|
|
padding = "=" * (-len(payload) % 4)
|
|
payload += padding
|
|
json_bytes = base64.urlsafe_b64decode(payload)
|
|
return json.loads(json_bytes.decode("utf-8"))
|
|
|
|
|
|
def is_member(chatmember: ResultChatMemberUnion):
|
|
return any(
|
|
[
|
|
isinstance(chatmember, ChatMemberOwner),
|
|
isinstance(chatmember, ChatMemberAdministrator),
|
|
isinstance(chatmember, ChatMemberMember),
|
|
]
|
|
)
|