Fix resolve_invite_link in Python 3.6

This commit is contained in:
Lonami 2021-01-12 20:04:34 +01:00 committed by GitHub
parent c0ed709adf
commit 4bf1d67eba
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -1267,14 +1267,13 @@ def resolve_invite_link(link):
Resolves the given invite link. Returns a tuple of Resolves the given invite link. Returns a tuple of
``(link creator user id, global chat id, random int)``. ``(link creator user id, global chat id, random int)``.
Note that for broadcast channels, the link creator Note that for broadcast channels or with the newest link format, the link
user ID will be zero to protect their identity. creator user ID will be zero to protect their identity. Normal chats and
Normal chats and megagroup channels will have such ID. megagroup channels will have such ID.
Note that the chat ID may not be accurate for chats Note that the chat ID may not be accurate for chats with a link that were
with a link that were upgraded to megagroup, since upgraded to megagroup, since the link can remain the same, but the chat
the link can remain the same, but the chat ID will ID will be correct once a new link is generated.
be correct once a new link is generated.
""" """
link_hash, is_link = parse_username(link) link_hash, is_link = parse_username(link)
if not is_link: if not is_link:
@ -1283,14 +1282,14 @@ def resolve_invite_link(link):
# Little known fact, but invite links with a # Little known fact, but invite links with a
# hex-string of bytes instead of base64 also works. # hex-string of bytes instead of base64 also works.
if re.match(r'[a-fA-F\d]{32}', link_hash): if re.match(r'[a-fA-F\d]+', link_hash) and len(link_hash) in (24, 32):
payload = bytes.fromhex(link_hash) payload = bytes.fromhex(link_hash)
else: else:
payload = _decode_telegram_base64(link_hash) payload = _decode_telegram_base64(link_hash)
try: try:
if len(payload) == 12: if len(payload) == 12:
return 0, *struct.unpack('>LQ', payload) return (0, *struct.unpack('>LQ', payload))
elif len(payload) == 16: elif len(payload) == 16:
return struct.unpack('>LLQ', payload) return struct.unpack('>LLQ', payload)
else: else: