diff --git a/hydrogram/dispatcher.py b/hydrogram/dispatcher.py index 138125c7c..6eacc5284 100644 --- a/hydrogram/dispatcher.py +++ b/hydrogram/dispatcher.py @@ -88,11 +88,11 @@ def __init__(self, client: "hydrogram.Client"): async def message_parser(update, users, chats): return ( await hydrogram.types.Message._parse( - self.client, - update.message, - users, - chats, - isinstance(update, UpdateNewScheduledMessage), + client=self.client, + message=update.message, + users=users, + chats=chats, + is_scheduled=isinstance(update, UpdateNewScheduledMessage), ), MessageHandler, ) diff --git a/hydrogram/methods/bots/send_game.py b/hydrogram/methods/bots/send_game.py index 833efe731..5174da40e 100644 --- a/hydrogram/methods/bots/send_game.py +++ b/hydrogram/methods/bots/send_game.py @@ -101,9 +101,9 @@ async def send_game( for i in r.updates: if isinstance(i, (raw.types.UpdateNewMessage, raw.types.UpdateNewChannelMessage)): return await types.Message._parse( - self, - i.message, - {i.id: i for i in r.users}, - {i.id: i for i in r.chats}, + client=self, + message=i.message, + users={i.id: i for i in r.users}, + chats={i.id: i for i in r.chats}, ) return None diff --git a/hydrogram/methods/bots/set_game_score.py b/hydrogram/methods/bots/set_game_score.py index 2810654d9..cc8ab1d2a 100644 --- a/hydrogram/methods/bots/set_game_score.py +++ b/hydrogram/methods/bots/set_game_score.py @@ -91,10 +91,10 @@ async def set_game_score( for i in r.updates: if isinstance(i, (raw.types.UpdateEditMessage, raw.types.UpdateEditChannelMessage)): return await types.Message._parse( - self, - i.message, - {i.id: i for i in r.users}, - {i.id: i for i in r.chats}, + client=self, + message=i.message, + users={i.id: i for i in r.users}, + chats={i.id: i for i in r.chats}, ) return True diff --git a/hydrogram/methods/chats/ban_chat_member.py b/hydrogram/methods/chats/ban_chat_member.py index 216ec5daf..2e7df1858 100644 --- a/hydrogram/methods/chats/ban_chat_member.py +++ b/hydrogram/methods/chats/ban_chat_member.py @@ -100,9 +100,9 @@ async def ban_chat_member( for i in r.updates: if isinstance(i, (raw.types.UpdateNewMessage, raw.types.UpdateNewChannelMessage)): return await types.Message._parse( - self, - i.message, - {i.id: i for i in r.users}, - {i.id: i for i in r.chats}, + client=self, + message=i.message, + users={i.id: i for i in r.users}, + chats={i.id: i for i in r.chats}, ) return True diff --git a/hydrogram/methods/chats/get_dialogs.py b/hydrogram/methods/chats/get_dialogs.py index 080d170a7..1277e1fdd 100644 --- a/hydrogram/methods/chats/get_dialogs.py +++ b/hydrogram/methods/chats/get_dialogs.py @@ -77,7 +77,9 @@ async def get_dialogs( continue chat_id = utils.get_peer_id(message.peer_id) - messages[chat_id] = await types.Message._parse(self, message, users, chats) + messages[chat_id] = await types.Message._parse( + client=self, message=message, users=users, chats=chats + ) dialogs = [ types.Dialog._parse(self, dialog, messages, users, chats) diff --git a/hydrogram/methods/messages/edit_message_media.py b/hydrogram/methods/messages/edit_message_media.py index 00c82ce16..a12cc845c 100644 --- a/hydrogram/methods/messages/edit_message_media.py +++ b/hydrogram/methods/messages/edit_message_media.py @@ -273,9 +273,9 @@ async def edit_message_media( for i in r.updates: if isinstance(i, (raw.types.UpdateEditMessage, raw.types.UpdateEditChannelMessage)): return await types.Message._parse( - self, - i.message, - {i.id: i for i in r.users}, - {i.id: i for i in r.chats}, + client=self, + message=i.message, + users={i.id: i for i in r.users}, + chats={i.id: i for i in r.chats}, ) return None diff --git a/hydrogram/methods/messages/edit_message_reply_markup.py b/hydrogram/methods/messages/edit_message_reply_markup.py index e7e7d8fb2..99660b5e4 100644 --- a/hydrogram/methods/messages/edit_message_reply_markup.py +++ b/hydrogram/methods/messages/edit_message_reply_markup.py @@ -71,9 +71,9 @@ async def edit_message_reply_markup( for i in r.updates: if isinstance(i, (raw.types.UpdateEditMessage, raw.types.UpdateEditChannelMessage)): return await types.Message._parse( - self, - i.message, - {i.id: i for i in r.users}, - {i.id: i for i in r.chats}, + client=self, + message=i.message, + users={i.id: i for i in r.users}, + chats={i.id: i for i in r.chats}, ) return None diff --git a/hydrogram/methods/messages/edit_message_text.py b/hydrogram/methods/messages/edit_message_text.py index 18b9a6a4a..563b8ed58 100644 --- a/hydrogram/methods/messages/edit_message_text.py +++ b/hydrogram/methods/messages/edit_message_text.py @@ -91,9 +91,9 @@ async def edit_message_text( for i in r.updates: if isinstance(i, (raw.types.UpdateEditMessage, raw.types.UpdateEditChannelMessage)): return await types.Message._parse( - self, - i.message, - {i.id: i for i in r.users}, - {i.id: i for i in r.chats}, + client=self, + message=i.message, + users={i.id: i for i in r.users}, + chats={i.id: i for i in r.chats}, ) return None diff --git a/hydrogram/methods/messages/forward_messages.py b/hydrogram/methods/messages/forward_messages.py index 23abc226d..faddbdf21 100644 --- a/hydrogram/methods/messages/forward_messages.py +++ b/hydrogram/methods/messages/forward_messages.py @@ -105,7 +105,7 @@ async def forward_messages( chats = {i.id: i for i in r.chats} forwarded_messages: list = [ - await types.Message._parse(self, i.message, users, chats) + await types.Message._parse(client=self, message=i.message, users=users, chats=chats) for i in r.updates if isinstance( i, diff --git a/hydrogram/methods/messages/get_discussion_message.py b/hydrogram/methods/messages/get_discussion_message.py index b5a0aaac2..5ef59bfa5 100644 --- a/hydrogram/methods/messages/get_discussion_message.py +++ b/hydrogram/methods/messages/get_discussion_message.py @@ -61,4 +61,6 @@ async def get_discussion_message( users = {u.id: u for u in r.users} chats = {c.id: c for c in r.chats} - return await types.Message._parse(self, r.messages[0], users, chats) + return await types.Message._parse( + client=self, message=r.messages[0], users=users, chats=chats + ) diff --git a/hydrogram/methods/messages/get_discussion_replies.py b/hydrogram/methods/messages/get_discussion_replies.py index 884c51010..a0e8ea66b 100644 --- a/hydrogram/methods/messages/get_discussion_replies.py +++ b/hydrogram/methods/messages/get_discussion_replies.py @@ -80,7 +80,9 @@ async def get_discussion_replies( return for message in messages: - yield await types.Message._parse(self, message, users, chats, replies=0) + yield await types.Message._parse( + client=self, message=message, users=users, chats=chats, replies=0 + ) current += 1 diff --git a/hydrogram/methods/messages/send_audio.py b/hydrogram/methods/messages/send_audio.py index 4c25445b3..406eea169 100644 --- a/hydrogram/methods/messages/send_audio.py +++ b/hydrogram/methods/messages/send_audio.py @@ -244,10 +244,10 @@ async def progress(current, total): ), ): return await types.Message._parse( - self, - i.message, - {i.id: i for i in r.users}, - {i.id: i for i in r.chats}, + client=self, + message=i.message, + users={i.id: i for i in r.users}, + chats={i.id: i for i in r.chats}, is_scheduled=isinstance(i, raw.types.UpdateNewScheduledMessage), ) except StopTransmission: diff --git a/hydrogram/methods/messages/send_cached_media.py b/hydrogram/methods/messages/send_cached_media.py index 5529e0ca4..4365f9280 100644 --- a/hydrogram/methods/messages/send_cached_media.py +++ b/hydrogram/methods/messages/send_cached_media.py @@ -129,10 +129,10 @@ async def send_cached_media( ), ): return await types.Message._parse( - self, - i.message, - {i.id: i for i in r.users}, - {i.id: i for i in r.chats}, + client=self, + message=i.message, + users={i.id: i for i in r.users}, + chats={i.id: i for i in r.chats}, is_scheduled=isinstance(i, raw.types.UpdateNewScheduledMessage), ) return None diff --git a/hydrogram/methods/messages/send_contact.py b/hydrogram/methods/messages/send_contact.py index 951f4a7d1..a86076a36 100644 --- a/hydrogram/methods/messages/send_contact.py +++ b/hydrogram/methods/messages/send_contact.py @@ -128,10 +128,10 @@ async def send_contact( ), ): return await types.Message._parse( - self, - i.message, - {i.id: i for i in r.users}, - {i.id: i for i in r.chats}, + client=self, + message=i.message, + users={i.id: i for i in r.users}, + chats={i.id: i for i in r.chats}, is_scheduled=isinstance(i, raw.types.UpdateNewScheduledMessage), ) return None diff --git a/hydrogram/methods/messages/send_dice.py b/hydrogram/methods/messages/send_dice.py index 855da1f75..e66aacc6b 100644 --- a/hydrogram/methods/messages/send_dice.py +++ b/hydrogram/methods/messages/send_dice.py @@ -122,10 +122,10 @@ async def send_dice( ), ): return await types.Message._parse( - self, - i.message, - {i.id: i for i in r.users}, - {i.id: i for i in r.chats}, + client=self, + message=i.message, + users={i.id: i for i in r.users}, + chats={i.id: i for i in r.chats}, is_scheduled=isinstance(i, raw.types.UpdateNewScheduledMessage), ) return None diff --git a/hydrogram/methods/messages/send_document.py b/hydrogram/methods/messages/send_document.py index ad08ffeee..930d92650 100644 --- a/hydrogram/methods/messages/send_document.py +++ b/hydrogram/methods/messages/send_document.py @@ -229,10 +229,10 @@ async def progress(current, total): ), ): return await types.Message._parse( - self, - i.message, - {i.id: i for i in r.users}, - {i.id: i for i in r.chats}, + client=self, + message=i.message, + users={i.id: i for i in r.users}, + chats={i.id: i for i in r.chats}, is_scheduled=isinstance(i, raw.types.UpdateNewScheduledMessage), ) except StopTransmission: diff --git a/hydrogram/methods/messages/send_location.py b/hydrogram/methods/messages/send_location.py index 724ba2b5b..bf2d4f9d7 100644 --- a/hydrogram/methods/messages/send_location.py +++ b/hydrogram/methods/messages/send_location.py @@ -117,10 +117,10 @@ async def send_location( ), ): return await types.Message._parse( - self, - i.message, - {i.id: i for i in r.users}, - {i.id: i for i in r.chats}, + client=self, + message=i.message, + users={i.id: i for i in r.users}, + chats={i.id: i for i in r.chats}, is_scheduled=isinstance(i, raw.types.UpdateNewScheduledMessage), ) return None diff --git a/hydrogram/methods/messages/send_message.py b/hydrogram/methods/messages/send_message.py index 48d67ea58..c327a3e08 100644 --- a/hydrogram/methods/messages/send_message.py +++ b/hydrogram/methods/messages/send_message.py @@ -176,10 +176,10 @@ async def send_message( ), ): return await types.Message._parse( - self, - i.message, - {i.id: i for i in r.users}, - {i.id: i for i in r.chats}, + client=self, + message=i.message, + users={i.id: i for i in r.users}, + chats={i.id: i for i in r.chats}, is_scheduled=isinstance(i, raw.types.UpdateNewScheduledMessage), ) return None diff --git a/hydrogram/methods/messages/send_photo.py b/hydrogram/methods/messages/send_photo.py index 9f733ce43..88c19e9b1 100644 --- a/hydrogram/methods/messages/send_photo.py +++ b/hydrogram/methods/messages/send_photo.py @@ -205,10 +205,10 @@ async def send_photo( ), ): return await types.Message._parse( - self, - i.message, - {i.id: i for i in r.users}, - {i.id: i for i in r.chats}, + client=self, + message=i.message, + users={i.id: i for i in r.users}, + chats={i.id: i for i in r.chats}, is_scheduled=isinstance(i, raw.types.UpdateNewScheduledMessage), ) except hydrogram.StopTransmission: diff --git a/hydrogram/methods/messages/send_poll.py b/hydrogram/methods/messages/send_poll.py index 924adfeed..c8b239222 100644 --- a/hydrogram/methods/messages/send_poll.py +++ b/hydrogram/methods/messages/send_poll.py @@ -191,10 +191,10 @@ async def send_poll( ), ): return await types.Message._parse( - self, - i.message, - {i.id: i for i in r.users}, - {i.id: i for i in r.chats}, + client=self, + message=i.message, + users={i.id: i for i in r.users}, + chats={i.id: i for i in r.chats}, is_scheduled=isinstance(i, raw.types.UpdateNewScheduledMessage), ) return None diff --git a/hydrogram/methods/messages/send_sticker.py b/hydrogram/methods/messages/send_sticker.py index e40279943..b66c9fc2b 100644 --- a/hydrogram/methods/messages/send_sticker.py +++ b/hydrogram/methods/messages/send_sticker.py @@ -181,10 +181,10 @@ async def send_sticker( ), ): return await types.Message._parse( - self, - i.message, - {i.id: i for i in r.users}, - {i.id: i for i in r.chats}, + client=self, + message=i.message, + users={i.id: i for i in r.users}, + chats={i.id: i for i in r.chats}, is_scheduled=isinstance(i, raw.types.UpdateNewScheduledMessage), ) except StopTransmission: diff --git a/hydrogram/methods/messages/send_venue.py b/hydrogram/methods/messages/send_venue.py index 705afa93c..9fd7fbac3 100644 --- a/hydrogram/methods/messages/send_venue.py +++ b/hydrogram/methods/messages/send_venue.py @@ -141,10 +141,10 @@ async def send_venue( ), ): return await types.Message._parse( - self, - i.message, - {i.id: i for i in r.users}, - {i.id: i for i in r.chats}, + client=self, + message=i.message, + users={i.id: i for i in r.users}, + chats={i.id: i for i in r.chats}, is_scheduled=isinstance(i, raw.types.UpdateNewScheduledMessage), ) return None diff --git a/hydrogram/methods/messages/send_video.py b/hydrogram/methods/messages/send_video.py index 644a21e0b..d6e560771 100644 --- a/hydrogram/methods/messages/send_video.py +++ b/hydrogram/methods/messages/send_video.py @@ -269,10 +269,10 @@ async def progress(current, total): ), ): return await types.Message._parse( - self, - i.message, - {i.id: i for i in r.users}, - {i.id: i for i in r.chats}, + client=self, + message=i.message, + users={i.id: i for i in r.users}, + chats={i.id: i for i in r.chats}, is_scheduled=isinstance(i, raw.types.UpdateNewScheduledMessage), ) except StopTransmission: diff --git a/hydrogram/methods/messages/send_video_note.py b/hydrogram/methods/messages/send_video_note.py index 9a24ef094..f80d367db 100644 --- a/hydrogram/methods/messages/send_video_note.py +++ b/hydrogram/methods/messages/send_video_note.py @@ -206,10 +206,10 @@ async def send_video_note( ), ): return await types.Message._parse( - self, - i.message, - {i.id: i for i in r.users}, - {i.id: i for i in r.chats}, + client=self, + message=i.message, + users={i.id: i for i in r.users}, + chats={i.id: i for i in r.chats}, is_scheduled=isinstance(i, raw.types.UpdateNewScheduledMessage), ) except StopTransmission: diff --git a/hydrogram/methods/messages/send_voice.py b/hydrogram/methods/messages/send_voice.py index 5b5a52339..7348278a0 100644 --- a/hydrogram/methods/messages/send_voice.py +++ b/hydrogram/methods/messages/send_voice.py @@ -200,10 +200,10 @@ async def send_voice( ), ): return await types.Message._parse( - self, - i.message, - {i.id: i for i in r.users}, - {i.id: i for i in r.chats}, + client=self, + message=i.message, + users={i.id: i for i in r.users}, + chats={i.id: i for i in r.chats}, is_scheduled=isinstance(i, raw.types.UpdateNewScheduledMessage), ) except StopTransmission: diff --git a/hydrogram/types/messages_and_media/message.py b/hydrogram/types/messages_and_media/message.py index 3f5fbec24..d5541ee0c 100644 --- a/hydrogram/types/messages_and_media/message.py +++ b/hydrogram/types/messages_and_media/message.py @@ -507,6 +507,7 @@ def __init__( @staticmethod async def _parse( + *, client: "hydrogram.Client", message: raw.base.Message, users: dict, diff --git a/hydrogram/types/user_and_chats/chat_event.py b/hydrogram/types/user_and_chats/chat_event.py index 363747ebc..a8c356ed6 100644 --- a/hydrogram/types/user_and_chats/chat_event.py +++ b/hydrogram/types/user_and_chats/chat_event.py @@ -362,12 +362,18 @@ async def _parse( action = enums.ChatEventAction.CHAT_PERMISSIONS_CHANGED elif isinstance(action, raw.types.ChannelAdminLogEventActionDeleteMessage): - deleted_message = await types.Message._parse(client, action.message, users, chats) + deleted_message = await types.Message._parse( + client=client, message=action.message, users=users, chats=chats + ) action = enums.ChatEventAction.MESSAGE_DELETED elif isinstance(action, raw.types.ChannelAdminLogEventActionEditMessage): - old_message = await types.Message._parse(client, action.prev_message, users, chats) - new_message = await types.Message._parse(client, action.new_message, users, chats) + old_message = await types.Message._parse( + client=client, message=action.prev_message, users=users, chats=chats + ) + new_message = await types.Message._parse( + client=client, message=action.new_message, users=users, chats=chats + ) action = enums.ChatEventAction.MESSAGE_EDITED elif isinstance(action, raw.types.ChannelAdminLogEventActionParticipantInvite): @@ -393,7 +399,9 @@ async def _parse( action = enums.ChatEventAction.MEMBER_PERMISSIONS_CHANGED elif isinstance(action, raw.types.ChannelAdminLogEventActionStopPoll): - stopped_poll = await types.Message._parse(client, action.message, users, chats) + stopped_poll = await types.Message._parse( + client=client, message=action.message, users=users, chats=chats + ) action = enums.ChatEventAction.POLL_STOPPED elif isinstance(action, raw.types.ChannelAdminLogEventActionParticipantJoin): @@ -423,10 +431,14 @@ async def _parse( message = action.message if message.pinned: - pinned_message = await types.Message._parse(client, message, users, chats) + pinned_message = await types.Message._parse( + client=client, message=message, users=users, chats=chats + ) action = enums.ChatEventAction.MESSAGE_PINNED else: - unpinned_message = await types.Message._parse(client, message, users, chats) + unpinned_message = await types.Message._parse( + client=client, message=message, users=users, chats=chats + ) action = enums.ChatEventAction.MESSAGE_UNPINNED elif isinstance(action, raw.types.ChannelAdminLogEventActionExportedInviteEdit): diff --git a/hydrogram/utils.py b/hydrogram/utils.py index c03271415..4ddcb874a 100644 --- a/hydrogram/utils.py +++ b/hydrogram/utils.py @@ -96,7 +96,9 @@ async def parse_messages( parsed_messages = [] parsed_messages = [ - await types.Message._parse(client, message, users, chats, topics, replies=0) + await types.Message._parse( + client=client, message=message, users=users, chats=chats, topics=topics, replies=0 + ) for message in messages.messages ] diff --git a/news/14.bugfix.rst b/news/14.bugfix.rst new file mode 100644 index 000000000..77792c356 --- /dev/null +++ b/news/14.bugfix.rst @@ -0,0 +1 @@ +Fixed `Message.is_scheduled` field being always `False` when parsing `UpdateNewScheduledMessage` diff --git a/news/14.misc.rst b/news/14.misc.rst new file mode 100644 index 000000000..17c27cb96 --- /dev/null +++ b/news/14.misc.rst @@ -0,0 +1 @@ +Make `Message._parse` accept only keyword-only arguments