diff --git a/telethon/telegram_client.py b/telethon/telegram_client.py index 5d5b3b69..717ec6ac 100644 --- a/telethon/telegram_client.py +++ b/telethon/telegram_client.py @@ -2445,7 +2445,7 @@ class TelegramClient(TelegramBareClient): async def catch_up(self): state = self.session.get_update_state(0) - if not state: + if not state or not state.pts: return self.session.catching_up = True diff --git a/telethon/utils.py b/telethon/utils.py index 0ba64177..ddf68cca 100644 --- a/telethon/utils.py +++ b/telethon/utils.py @@ -552,8 +552,13 @@ def resolve_id(marked_id): if marked_id >= 0: return marked_id, PeerUser - if str(marked_id).startswith('-100'): - return int(str(marked_id)[4:]), PeerChannel + # There have been report of chat IDs being 10000xyz, which means their + # marked version is -10000xyz, which in turn looks like a channel but + # it becomes 00xyz (= xyz). Hence, we must assert that there are only + # two zeroes. + m = re.match(r'-100([^0]\d*)', str(marked_id)) + if m: + return int(m.group(1)), PeerChannel return -marked_id, PeerChat diff --git a/telethon_generator/generators/tlobject.py b/telethon_generator/generators/tlobject.py index 63613c9f..e0c1844d 100644 --- a/telethon_generator/generators/tlobject.py +++ b/telethon_generator/generators/tlobject.py @@ -477,6 +477,12 @@ def _write_arg_to_bytes(builder, arg, args, name=None): # Else it may be a custom type builder.write('bytes({})', name) + # If the type is not boxed (i.e. starts with lowercase) we should + # not serialize the constructor ID (so remove its first 4 bytes). + boxed = arg.type[arg.type.find('.') + 1].isupper() + if not boxed: + builder.write('[4:]') + if arg.is_flag: builder.write(')') if arg.is_vector: