diff --git a/pyrogram/client/dispatcher/message_parser.py b/pyrogram/client/dispatcher/message_parser.py index a101b78e..42e0a327 100644 --- a/pyrogram/client/dispatcher/message_parser.py +++ b/pyrogram/client/dispatcher/message_parser.py @@ -16,11 +16,11 @@ # You should have received a copy of the GNU Lesser General Public License # along with Pyrogram. If not, see . -from base64 import b64encode, b64decode from struct import pack import pyrogram from pyrogram.api import types +from ..utils import encode # TODO: Organize the code better? @@ -534,39 +534,3 @@ def parse_message_service( m.pinned_message = parse_message_service(client, message, users, chats) return m - - -def decode(s: str) -> bytes: - s = b64decode(s + "=" * (-len(s) % 4), "-_") - r = b"" - - assert s[-1] == 2 - - i = 0 - while i < len(s) - 1: - if s[i] != 0: - r += bytes([s[i]]) - else: - r += b"\x00" * s[i + 1] - i += 1 - - i += 1 - - return r - - -def encode(s: bytes) -> str: - r = b"" - n = 0 - - for i in s + bytes([2]): - if i == 0: - n += 1 - else: - if n: - r += b"\x00" + bytes([n]) - n = 0 - - r += bytes([i]) - - return b64encode(r, b"-_").decode().rstrip("=") diff --git a/pyrogram/client/utils.py b/pyrogram/client/utils.py new file mode 100644 index 00000000..e1819b43 --- /dev/null +++ b/pyrogram/client/utils.py @@ -0,0 +1,37 @@ +from base64 import b64decode, b64encode + + +def decode(s: str) -> bytes: + s = b64decode(s + "=" * (-len(s) % 4), "-_") + r = b"" + + assert s[-1] == 2 + + i = 0 + while i < len(s) - 1: + if s[i] != 0: + r += bytes([s[i]]) + else: + r += b"\x00" * s[i + 1] + i += 1 + + i += 1 + + return r + + +def encode(s: bytes) -> str: + r = b"" + n = 0 + + for i in s + bytes([2]): + if i == 0: + n += 1 + else: + if n: + r += b"\x00" + bytes([n]) + n = 0 + + r += bytes([i]) + + return b64encode(r, b"-_").decode().rstrip("=")