Update handlers works; it also seems stable

This commit is contained in:
Andrey Egorov
2017-10-22 15:06:36 +03:00
parent 917665852d
commit 780e0ceddf
9 changed files with 300 additions and 265 deletions

View File

@@ -61,6 +61,7 @@ class TelegramClient(TelegramBareClient):
connection_mode=ConnectionMode.TCP_FULL,
proxy=None,
timeout=timedelta(seconds=5),
loop=None,
**kwargs):
"""Initializes the Telegram client with the specified API ID and Hash.
@@ -87,6 +88,7 @@ class TelegramClient(TelegramBareClient):
connection_mode=connection_mode,
proxy=proxy,
timeout=timeout,
loop=loop,
**kwargs
)
@@ -104,8 +106,9 @@ class TelegramClient(TelegramBareClient):
"""Sends a code request to the specified phone number"""
phone = EntityDatabase.parse_phone(phone) or self._phone
result = await self(SendCodeRequest(phone, self.api_id, self.api_hash))
self._phone = phone
self._phone_code_hash = result.phone_code_hash
if result:
self._phone = phone
self._phone_code_hash = result.phone_code_hash
return result
async def sign_in(self, phone=None, code=None,
@@ -169,8 +172,10 @@ class TelegramClient(TelegramBareClient):
'and a password only if an RPCError was raised before.'
)
self._set_connected_and_authorized()
return result.user
if result:
self._set_connected_and_authorized()
return result.user
return result
async def sign_up(self, code, first_name, last_name=''):
"""Signs up to Telegram. Make sure you sent a code request first!"""
@@ -182,8 +187,10 @@ class TelegramClient(TelegramBareClient):
last_name=last_name
))
self._set_connected_and_authorized()
return result.user
if result:
self._set_connected_and_authorized()
return result.user
return result
async def log_out(self):
"""Logs out and deletes the current session.
@@ -239,7 +246,7 @@ class TelegramClient(TelegramBareClient):
offset_peer=offset_peer,
limit=need if need < float('inf') else 0
))
if not r.dialogs:
if not r or not r.dialogs:
break
for d in r.dialogs:
@@ -288,10 +295,12 @@ class TelegramClient(TelegramBareClient):
:return List[telethon.tl.custom.Draft]: A list of open drafts
"""
response = await self(GetAllDraftsRequest())
self.session.process_entities(response)
self.session.generate_sequence(response.seq)
drafts = [Draft._from_update(self, u) for u in response.updates]
return drafts
if response:
self.session.process_entities(response)
self.session.generate_sequence(response.seq)
drafts = [Draft._from_update(self, u) for u in response.updates]
return drafts
return response
async def send_message(self,
entity,
@@ -313,6 +322,9 @@ class TelegramClient(TelegramBareClient):
reply_to_msg_id=self._get_reply_to(reply_to)
)
result = await self(request)
if not result:
return result
if isinstance(result, UpdateShortSentMessage):
return Message(
id=result.id,
@@ -407,6 +419,8 @@ class TelegramClient(TelegramBareClient):
min_id=min_id,
add_offset=add_offset
))
if not result:
return result
# The result may be a messages slice (not all messages were retrieved)
# or simply a messages TLObject. In the later case, no "count"