diff --git a/telethon/client/chats.py b/telethon/client/chats.py index 56031f19..ee2aa56b 100644 --- a/telethon/client/chats.py +++ b/telethon/client/chats.py @@ -179,8 +179,9 @@ class ChatMethods(UserMethods): """ total = [0] kwargs['_total'] = total - participants = UserList(x async for x in - self.iter_participants(*args, **kwargs)) + participants = UserList() + async for x in self.iter_participants(*args, **kwargs): + participants.append(x) participants.total = total[0] return participants diff --git a/telethon/client/dialogs.py b/telethon/client/dialogs.py index d42d1c49..c7b9c6d7 100644 --- a/telethon/client/dialogs.py +++ b/telethon/client/dialogs.py @@ -9,6 +9,7 @@ from ..tl import types, functions, custom class DialogMethods(UserMethods): + # region Public methods @async_generator @@ -103,10 +104,13 @@ class DialogMethods(UserMethods): """ total = [0] kwargs['_total'] = total - dialogs = UserList(x async for x in self.iter_dialogs(*args, **kwargs)) + dialogs = UserList() + async for x in self.iter_dialogs(*args, **kwargs): + dialogs.append(x) dialogs.total = total[0] return dialogs + @async_generator async def iter_drafts(self): # TODO: Ability to provide a `filter` """ Iterator over all open draft messages. @@ -124,6 +128,9 @@ class DialogMethods(UserMethods): """ Same as :meth:`iter_drafts`, but returns a list instead. """ - return list(x async for x in self.iter_drafts()) + result = [] + async for x in self.iter_drafts(): + result.append(x) + return result # endregion diff --git a/telethon/client/messages.py b/telethon/client/messages.py index 13d98820..93b4f573 100644 --- a/telethon/client/messages.py +++ b/telethon/client/messages.py @@ -244,7 +244,9 @@ class MessageMethods(UploadMethods, MessageParseMethods): else: kwargs['limit'] = 1 - msgs = UserList(x async for x in self.iter_messages(*args, **kwargs)) + msgs = UserList() + async for x in self.iter_messages(*args, **kwargs): + msgs.append(x) msgs.total = total[0] if 'ids' in kwargs and not utils.is_list_like(kwargs['ids']): return msgs[0] diff --git a/telethon/tl/custom/message.py b/telethon/tl/custom/message.py index 001b9b32..2124249f 100644 --- a/telethon/tl/custom/message.py +++ b/telethon/tl/custom/message.py @@ -269,24 +269,26 @@ class Message: return bool(self.original_message.reply_to_msg_id) @property - def buttons(self): + async def buttons(self): """ Returns a matrix (list of lists) containing all buttons of the message as `telethon.tl.custom.messagebutton.MessageButton` instances. """ if self._buttons is None and self.original_message.reply_markup: + sender = await self.input_sender + chat = await self.input_chat if isinstance(self.original_message.reply_markup, ( types.ReplyInlineMarkup, types.ReplyKeyboardMarkup)): self._buttons = [[ - MessageButton(self._client, button, self.input_sender, - self.input_chat, self.original_message.id) + MessageButton(self._client, button, sender, chat, + self.original_message.id) for button in row.buttons ] for row in self.original_message.reply_markup.rows] self._buttons_flat = [x for row in self._buttons for x in row] return self._buttons @property - def button_count(self): + async def button_count(self): """ Returns the total button count. """ @@ -398,7 +400,7 @@ class Message: if not self.original_message.reply_to_msg_id: return None self._reply_message = await self._client.get_messages( - self.input_chat if self.is_channel else None, + await self.input_chat if self.is_channel else None, ids=self.original_message.reply_to_msg_id )