Compare commits

..

8 commits

Author SHA1 Message Date
wulan17
50b8d17400
pyrofork: Add support for parsing Reaction as channel
Some checks failed
Build-docs / build (push) Has been cancelled
Pyrofork / build (macos-latest, 3.10) (push) Has been cancelled
Pyrofork / build (macos-latest, 3.11) (push) Has been cancelled
Pyrofork / build (macos-latest, 3.12) (push) Has been cancelled
Pyrofork / build (macos-latest, 3.13) (push) Has been cancelled
Pyrofork / build (macos-latest, 3.9) (push) Has been cancelled
Pyrofork / build (ubuntu-latest, 3.10) (push) Has been cancelled
Pyrofork / build (ubuntu-latest, 3.11) (push) Has been cancelled
Pyrofork / build (ubuntu-latest, 3.12) (push) Has been cancelled
Pyrofork / build (ubuntu-latest, 3.13) (push) Has been cancelled
Pyrofork / build (ubuntu-latest, 3.9) (push) Has been cancelled
Signed-off-by: wulan17 <wulan17@nusantararom.org>
2025-03-27 02:22:50 +07:00
wulan17
e020eba68f
pyrofork: Update API schema to Layer 201
Signed-off-by: wulan17 <wulan17@nusantararom.org>
2025-03-27 02:22:50 +07:00
wulan17
e5b01eb04b
pyrofork: Refactor GiveawayResult
Signed-off-by: wulan17 <wulan17@nusantararom.org>
2025-03-27 02:22:50 +07:00
wulan17
776ee3afb3
pyrofork: Refactor ShippingQuery
Signed-off-by: wulan17 <wulan17@nusantararom.org>
2025-03-27 02:22:49 +07:00
wulan17
a1db77fcee
pyrofork: Refactor Giveaway
Signed-off-by: wulan17 <wulan17@nusantararom.org>
2025-03-27 02:05:36 +07:00
wulan17
6e3a840c5a
pyrofork: utils: Don't append message to messages_with_replies if reply_to_msg_id is None
Signed-off-by: wulan17 <wulan17@nusantararom.org>
2025-03-27 00:02:02 +07:00
wulan17
1b27e24675
Revert "Pyrofork: types: message: Fix cross chat reply parsing"
This reverts commit b4cb8ff17c.

Signed-off-by: wulan17 <wulan17@nusantararom.org>
2025-03-27 00:02:02 +07:00
KurimuzonAkuma
c8b90101eb
Add ExternalReplyInfo
Signed-off-by: wulan17 <wulan17@nusantararom.org>
2025-03-27 00:02:01 +07:00
12 changed files with 96 additions and 46 deletions

View file

@ -194,6 +194,8 @@ messageActionGiftStars#45d5b021 flags:# currency:string amount:long stars:long c
messageActionPrizeStars#b00c47a2 flags:# unclaimed:flags.0?true stars:long transaction_id:string boost_peer:Peer giveaway_msg_id:int = MessageAction; messageActionPrizeStars#b00c47a2 flags:# unclaimed:flags.0?true stars:long transaction_id:string boost_peer:Peer giveaway_msg_id:int = MessageAction;
messageActionStarGift#4717e8a4 flags:# name_hidden:flags.0?true saved:flags.2?true converted:flags.3?true upgraded:flags.5?true refunded:flags.9?true can_upgrade:flags.10?true gift:StarGift message:flags.1?TextWithEntities convert_stars:flags.4?long upgrade_msg_id:flags.5?int upgrade_stars:flags.8?long from_id:flags.11?Peer peer:flags.12?Peer saved_id:flags.12?long = MessageAction; messageActionStarGift#4717e8a4 flags:# name_hidden:flags.0?true saved:flags.2?true converted:flags.3?true upgraded:flags.5?true refunded:flags.9?true can_upgrade:flags.10?true gift:StarGift message:flags.1?TextWithEntities convert_stars:flags.4?long upgrade_msg_id:flags.5?int upgrade_stars:flags.8?long from_id:flags.11?Peer peer:flags.12?Peer saved_id:flags.12?long = MessageAction;
messageActionStarGiftUnique#acdfcb81 flags:# upgrade:flags.0?true transferred:flags.1?true saved:flags.2?true refunded:flags.5?true gift:StarGift can_export_at:flags.3?int transfer_stars:flags.4?long from_id:flags.6?Peer peer:flags.7?Peer saved_id:flags.7?long = MessageAction; messageActionStarGiftUnique#acdfcb81 flags:# upgrade:flags.0?true transferred:flags.1?true saved:flags.2?true refunded:flags.5?true gift:StarGift can_export_at:flags.3?int transfer_stars:flags.4?long from_id:flags.6?Peer peer:flags.7?Peer saved_id:flags.7?long = MessageAction;
messageActionPaidMessagesRefunded#ac1f1fcd count:int stars:long = MessageAction;
messageActionPaidMessagesPrice#bcd71419 stars:long = MessageAction;
dialog#d58a08c6 flags:# pinned:flags.2?true unread_mark:flags.3?true view_forum_as_messages:flags.6?true peer:Peer top_message:int read_inbox_max_id:int read_outbox_max_id:int unread_count:int unread_mentions_count:int unread_reactions_count:int notify_settings:PeerNotifySettings pts:flags.0?int draft:flags.1?DraftMessage folder_id:flags.4?int ttl_period:flags.5?int = Dialog; dialog#d58a08c6 flags:# pinned:flags.2?true unread_mark:flags.3?true view_forum_as_messages:flags.6?true peer:Peer top_message:int read_inbox_max_id:int read_outbox_max_id:int unread_count:int unread_mentions_count:int unread_reactions_count:int notify_settings:PeerNotifySettings pts:flags.0?int draft:flags.1?DraftMessage folder_id:flags.4?int ttl_period:flags.5?int = Dialog;
dialogFolder#71bd134c flags:# pinned:flags.2?true folder:Folder peer:Peer top_message:int unread_muted_peers_count:int unread_unmuted_peers_count:int unread_muted_messages_count:int unread_unmuted_messages_count:int = Dialog; dialogFolder#71bd134c flags:# pinned:flags.2?true folder:Folder peer:Peer top_message:int unread_muted_peers_count:int unread_unmuted_peers_count:int unread_muted_messages_count:int unread_unmuted_messages_count:int = Dialog;
@ -213,6 +215,7 @@ geoPoint#b2a2f663 flags:# long:double lat:double access_hash:long accuracy_radiu
auth.sentCode#5e002502 flags:# type:auth.SentCodeType phone_code_hash:string next_type:flags.1?auth.CodeType timeout:flags.2?int = auth.SentCode; auth.sentCode#5e002502 flags:# type:auth.SentCodeType phone_code_hash:string next_type:flags.1?auth.CodeType timeout:flags.2?int = auth.SentCode;
auth.sentCodeSuccess#2390fe44 authorization:auth.Authorization = auth.SentCode; auth.sentCodeSuccess#2390fe44 authorization:auth.Authorization = auth.SentCode;
auth.sentCodePaymentRequired#d7cef980 store_product:string phone_code_hash:string = auth.SentCode;
auth.authorization#2ea2c0d4 flags:# setup_password_required:flags.1?true otherwise_relogin_days:flags.1?int tmp_sessions:flags.0?int future_auth_token:flags.2?bytes user:User = auth.Authorization; auth.authorization#2ea2c0d4 flags:# setup_password_required:flags.1?true otherwise_relogin_days:flags.1?int tmp_sessions:flags.0?int future_auth_token:flags.2?bytes user:User = auth.Authorization;
auth.authorizationSignUpRequired#44747e9a flags:# terms_of_service:flags.0?help.TermsOfService = auth.Authorization; auth.authorizationSignUpRequired#44747e9a flags:# terms_of_service:flags.0?help.TermsOfService = auth.Authorization;
@ -245,7 +248,7 @@ inputReportReasonFake#f5ddd6e7 = ReportReason;
inputReportReasonIllegalDrugs#a8eb2be = ReportReason; inputReportReasonIllegalDrugs#a8eb2be = ReportReason;
inputReportReasonPersonalDetails#9ec7863d = ReportReason; inputReportReasonPersonalDetails#9ec7863d = ReportReason;
userFull#d2234ea0 flags:# blocked:flags.0?true phone_calls_available:flags.4?true phone_calls_private:flags.5?true can_pin_message:flags.7?true has_scheduled:flags.12?true video_calls_available:flags.13?true voice_messages_forbidden:flags.20?true translations_disabled:flags.23?true stories_pinned_available:flags.26?true blocked_my_stories_from:flags.27?true wallpaper_overridden:flags.28?true contact_require_premium:flags.29?true read_dates_private:flags.30?true flags2:# sponsored_enabled:flags2.7?true can_view_revenue:flags2.9?true bot_can_manage_emoji_status:flags2.10?true id:long about:flags.1?string settings:PeerSettings personal_photo:flags.21?Photo profile_photo:flags.2?Photo fallback_photo:flags.22?Photo notify_settings:PeerNotifySettings bot_info:flags.3?BotInfo pinned_msg_id:flags.6?int common_chats_count:int folder_id:flags.11?int ttl_period:flags.14?int theme_emoticon:flags.15?string private_forward_name:flags.16?string bot_group_admin_rights:flags.17?ChatAdminRights bot_broadcast_admin_rights:flags.18?ChatAdminRights wallpaper:flags.24?WallPaper stories:flags.25?PeerStories business_work_hours:flags2.0?BusinessWorkHours business_location:flags2.1?BusinessLocation business_greeting_message:flags2.2?BusinessGreetingMessage business_away_message:flags2.3?BusinessAwayMessage business_intro:flags2.4?BusinessIntro birthday:flags2.5?Birthday personal_channel_id:flags2.6?long personal_channel_message:flags2.6?int stargifts_count:flags2.8?int starref_program:flags2.11?StarRefProgram bot_verification:flags2.12?BotVerification send_paid_messages_stars:flags2.14?long = UserFull; userFull#99e78045 flags:# blocked:flags.0?true phone_calls_available:flags.4?true phone_calls_private:flags.5?true can_pin_message:flags.7?true has_scheduled:flags.12?true video_calls_available:flags.13?true voice_messages_forbidden:flags.20?true translations_disabled:flags.23?true stories_pinned_available:flags.26?true blocked_my_stories_from:flags.27?true wallpaper_overridden:flags.28?true contact_require_premium:flags.29?true read_dates_private:flags.30?true flags2:# sponsored_enabled:flags2.7?true can_view_revenue:flags2.9?true bot_can_manage_emoji_status:flags2.10?true display_gifts_button:flags2.16?true id:long about:flags.1?string settings:PeerSettings personal_photo:flags.21?Photo profile_photo:flags.2?Photo fallback_photo:flags.22?Photo notify_settings:PeerNotifySettings bot_info:flags.3?BotInfo pinned_msg_id:flags.6?int common_chats_count:int folder_id:flags.11?int ttl_period:flags.14?int theme_emoticon:flags.15?string private_forward_name:flags.16?string bot_group_admin_rights:flags.17?ChatAdminRights bot_broadcast_admin_rights:flags.18?ChatAdminRights wallpaper:flags.24?WallPaper stories:flags.25?PeerStories business_work_hours:flags2.0?BusinessWorkHours business_location:flags2.1?BusinessLocation business_greeting_message:flags2.2?BusinessGreetingMessage business_away_message:flags2.3?BusinessAwayMessage business_intro:flags2.4?BusinessIntro birthday:flags2.5?Birthday personal_channel_id:flags2.6?long personal_channel_message:flags2.6?int stargifts_count:flags2.8?int starref_program:flags2.11?StarRefProgram bot_verification:flags2.12?BotVerification send_paid_messages_stars:flags2.14?long disallowed_gifts:flags2.15?DisallowedGiftsSettings = UserFull;
contact#145ade0b user_id:long mutual:Bool = Contact; contact#145ade0b user_id:long mutual:Bool = Contact;
@ -436,6 +439,7 @@ updateBusinessBotCallbackQuery#1ea2fda7 flags:# query_id:long user_id:long conne
updateStarsRevenueStatus#a584b019 peer:Peer status:StarsRevenueStatus = Update; updateStarsRevenueStatus#a584b019 peer:Peer status:StarsRevenueStatus = Update;
updateBotPurchasedPaidMedia#283bd312 user_id:long payload:string qts:int = Update; updateBotPurchasedPaidMedia#283bd312 user_id:long payload:string qts:int = Update;
updatePaidReactionPrivacy#8b725fce private:PaidReactionPrivacy = Update; updatePaidReactionPrivacy#8b725fce private:PaidReactionPrivacy = Update;
updateSentPhoneCode#504aa18f sent_code:auth.SentCode = Update;
updates.state#a56c2a3e pts:int qts:int date:int seq:int unread_count:int = updates.State; updates.state#a56c2a3e pts:int qts:int date:int seq:int unread_count:int = updates.State;
@ -1320,7 +1324,7 @@ statsGroupTopInviter#535f779d user_id:long invitations:int = StatsGroupTopInvite
stats.megagroupStats#ef7ff916 period:StatsDateRangeDays members:StatsAbsValueAndPrev messages:StatsAbsValueAndPrev viewers:StatsAbsValueAndPrev posters:StatsAbsValueAndPrev growth_graph:StatsGraph members_graph:StatsGraph new_members_by_source_graph:StatsGraph languages_graph:StatsGraph messages_graph:StatsGraph actions_graph:StatsGraph top_hours_graph:StatsGraph weekdays_graph:StatsGraph top_posters:Vector<StatsGroupTopPoster> top_admins:Vector<StatsGroupTopAdmin> top_inviters:Vector<StatsGroupTopInviter> users:Vector<User> = stats.MegagroupStats; stats.megagroupStats#ef7ff916 period:StatsDateRangeDays members:StatsAbsValueAndPrev messages:StatsAbsValueAndPrev viewers:StatsAbsValueAndPrev posters:StatsAbsValueAndPrev growth_graph:StatsGraph members_graph:StatsGraph new_members_by_source_graph:StatsGraph languages_graph:StatsGraph messages_graph:StatsGraph actions_graph:StatsGraph top_hours_graph:StatsGraph weekdays_graph:StatsGraph top_posters:Vector<StatsGroupTopPoster> top_admins:Vector<StatsGroupTopAdmin> top_inviters:Vector<StatsGroupTopInviter> users:Vector<User> = stats.MegagroupStats;
globalPrivacySettings#c9d8df1c flags:# archive_and_mute_new_noncontact_peers:flags.0?true keep_archived_unmuted:flags.1?true keep_archived_folders:flags.2?true hide_read_marks:flags.3?true new_noncontact_peers_require_premium:flags.4?true noncontact_peers_paid_stars:flags.5?long = GlobalPrivacySettings; globalPrivacySettings#fe41b34f flags:# archive_and_mute_new_noncontact_peers:flags.0?true keep_archived_unmuted:flags.1?true keep_archived_folders:flags.2?true hide_read_marks:flags.3?true new_noncontact_peers_require_premium:flags.4?true display_gifts_button:flags.7?true noncontact_peers_paid_stars:flags.5?long disallowed_gifts:flags.6?DisallowedGiftsSettings = GlobalPrivacySettings;
help.countryCode#4203c5ef flags:# country_code:string prefixes:flags.0?Vector<string> patterns:flags.1?Vector<string> = help.CountryCode; help.countryCode#4203c5ef flags:# country_code:string prefixes:flags.0?Vector<string> patterns:flags.1?Vector<string> = help.CountryCode;
@ -1503,6 +1507,7 @@ inputStorePaymentPremiumGiveaway#160544ca flags:# only_new_subscribers:flags.0?t
inputStorePaymentStarsTopup#dddd0f56 stars:long currency:string amount:long = InputStorePaymentPurpose; inputStorePaymentStarsTopup#dddd0f56 stars:long currency:string amount:long = InputStorePaymentPurpose;
inputStorePaymentStarsGift#1d741ef7 user_id:InputUser stars:long currency:string amount:long = InputStorePaymentPurpose; inputStorePaymentStarsGift#1d741ef7 user_id:InputUser stars:long currency:string amount:long = InputStorePaymentPurpose;
inputStorePaymentStarsGiveaway#751f08fa flags:# only_new_subscribers:flags.0?true winners_are_visible:flags.3?true stars:long boost_peer:InputPeer additional_peers:flags.1?Vector<InputPeer> countries_iso2:flags.2?Vector<string> prize_description:flags.4?string random_id:long until_date:int currency:string amount:long users:int = InputStorePaymentPurpose; inputStorePaymentStarsGiveaway#751f08fa flags:# only_new_subscribers:flags.0?true winners_are_visible:flags.3?true stars:long boost_peer:InputPeer additional_peers:flags.1?Vector<InputPeer> countries_iso2:flags.2?Vector<string> prize_description:flags.4?string random_id:long until_date:int currency:string amount:long users:int = InputStorePaymentPurpose;
inputStorePaymentAuthCode#9bb2636d flags:# restore:flags.0?true phone_number:string phone_code_hash:string currency:string amount:long = InputStorePaymentPurpose;
paymentFormMethod#88f8f21b url:string title:string = PaymentFormMethod; paymentFormMethod#88f8f21b url:string title:string = PaymentFormMethod;
@ -1761,7 +1766,7 @@ inputQuickReplyShortcutId#1190cf1 shortcut_id:int = InputQuickReplyShortcut;
messages.quickReplies#c68d6695 quick_replies:Vector<QuickReply> messages:Vector<Message> chats:Vector<Chat> users:Vector<User> = messages.QuickReplies; messages.quickReplies#c68d6695 quick_replies:Vector<QuickReply> messages:Vector<Message> chats:Vector<Chat> users:Vector<User> = messages.QuickReplies;
messages.quickRepliesNotModified#5f91eb5b = messages.QuickReplies; messages.quickRepliesNotModified#5f91eb5b = messages.QuickReplies;
connectedBot#bd068601 flags:# can_reply:flags.0?true bot_id:long recipients:BusinessBotRecipients = ConnectedBot; connectedBot#cd64636c flags:# bot_id:long recipients:BusinessBotRecipients rights:BusinessBotRights = ConnectedBot;
account.connectedBots#17d7f87b connected_bots:Vector<ConnectedBot> users:Vector<User> = account.ConnectedBots; account.connectedBots#17d7f87b connected_bots:Vector<ConnectedBot> users:Vector<User> = account.ConnectedBots;
@ -1769,7 +1774,7 @@ messages.dialogFilters#2ad93719 flags:# tags_enabled:flags.0?true filters:Vector
birthday#6c8e1e06 flags:# day:int month:int year:flags.0?int = Birthday; birthday#6c8e1e06 flags:# day:int month:int year:flags.0?int = Birthday;
botBusinessConnection#896433b4 flags:# can_reply:flags.0?true disabled:flags.1?true connection_id:string user_id:long dc_id:int date:int = BotBusinessConnection; botBusinessConnection#8f34b2f5 flags:# disabled:flags.1?true connection_id:string user_id:long dc_id:int date:int rights:flags.2?BusinessBotRights = BotBusinessConnection;
inputBusinessIntro#9c469cd flags:# title:string description:string sticker:flags.0?InputDocument = InputBusinessIntro; inputBusinessIntro#9c469cd flags:# title:string description:string sticker:flags.0?InputDocument = InputBusinessIntro;
@ -1953,6 +1958,15 @@ requirementToContactEmpty#50a9839 = RequirementToContact;
requirementToContactPremium#e581e4e9 = RequirementToContact; requirementToContactPremium#e581e4e9 = RequirementToContact;
requirementToContactPaidMessages#b4f67e93 stars_amount:long = RequirementToContact; requirementToContactPaidMessages#b4f67e93 stars_amount:long = RequirementToContact;
businessBotRights#a0624cf7 flags:# reply:flags.0?true read_messages:flags.1?true delete_sent_messages:flags.2?true delete_received_messages:flags.3?true edit_name:flags.4?true edit_bio:flags.5?true edit_profile_photo:flags.6?true edit_username:flags.7?true view_gifts:flags.8?true sell_gifts:flags.9?true change_gift_settings:flags.10?true transfer_and_upgrade_gifts:flags.11?true transfer_stars:flags.12?true manage_stories:flags.13?true = BusinessBotRights;
disallowedGiftsSettings#71f276c4 flags:# disallow_unlimited_stargifts:flags.0?true disallow_limited_stargifts:flags.1?true disallow_unique_stargifts:flags.2?true disallow_premium_gifts:flags.3?true = DisallowedGiftsSettings;
sponsoredPeer#c69708d3 flags:# random_id:bytes peer:Peer sponsor_info:flags.0?string additional_info:flags.1?string = SponsoredPeer;
contacts.sponsoredPeersEmpty#ea32b4b1 = contacts.SponsoredPeers;
contacts.sponsoredPeers#eb032884 peers:Vector<SponsoredPeer> chats:Vector<Chat> users:Vector<User> = contacts.SponsoredPeers;
---functions--- ---functions---
invokeAfterMsg#cb9f372d {X:Type} msg_id:long query:!X = X; invokeAfterMsg#cb9f372d {X:Type} msg_id:long query:!X = X;
@ -2087,7 +2101,7 @@ account.updateBusinessWorkHours#4b00e066 flags:# business_work_hours:flags.0?Bus
account.updateBusinessLocation#9e6b131a flags:# geo_point:flags.1?InputGeoPoint address:flags.0?string = Bool; account.updateBusinessLocation#9e6b131a flags:# geo_point:flags.1?InputGeoPoint address:flags.0?string = Bool;
account.updateBusinessGreetingMessage#66cdafc4 flags:# message:flags.0?InputBusinessGreetingMessage = Bool; account.updateBusinessGreetingMessage#66cdafc4 flags:# message:flags.0?InputBusinessGreetingMessage = Bool;
account.updateBusinessAwayMessage#a26a7fa5 flags:# message:flags.0?InputBusinessAwayMessage = Bool; account.updateBusinessAwayMessage#a26a7fa5 flags:# message:flags.0?InputBusinessAwayMessage = Bool;
account.updateConnectedBot#43d8521d flags:# can_reply:flags.0?true deleted:flags.1?true bot:InputUser recipients:InputBusinessBotRecipients = Updates; account.updateConnectedBot#66a08c7e flags:# deleted:flags.1?true rights:flags.0?BusinessBotRights bot:InputUser recipients:InputBusinessBotRecipients = Updates;
account.getConnectedBots#4ea4c80f = account.ConnectedBots; account.getConnectedBots#4ea4c80f = account.ConnectedBots;
account.getBotBusinessConnection#76a86270 connection_id:string = Updates; account.getBotBusinessConnection#76a86270 connection_id:string = Updates;
account.updateBusinessIntro#a614d034 flags:# intro:flags.0?InputBusinessIntro = Bool; account.updateBusinessIntro#a614d034 flags:# intro:flags.0?InputBusinessIntro = Bool;
@ -2138,6 +2152,7 @@ contacts.importContactToken#13005788 token:string = User;
contacts.editCloseFriends#ba6705f0 id:Vector<long> = Bool; contacts.editCloseFriends#ba6705f0 id:Vector<long> = Bool;
contacts.setBlocked#94c65c76 flags:# my_stories_from:flags.0?true id:Vector<InputPeer> limit:int = Bool; contacts.setBlocked#94c65c76 flags:# my_stories_from:flags.0?true id:Vector<InputPeer> limit:int = Bool;
contacts.getBirthdays#daeda864 = contacts.ContactBirthdays; contacts.getBirthdays#daeda864 = contacts.ContactBirthdays;
contacts.getSponsoredPeers#b6c8c393 q:string = contacts.SponsoredPeers;
messages.getMessages#63c66506 id:Vector<InputMessage> = messages.Messages; messages.getMessages#63c66506 id:Vector<InputMessage> = messages.Messages;
messages.getDialogs#a0f4cb4f flags:# exclude_pinned:flags.0?true folder_id:flags.1?int offset_date:int offset_id:int offset_peer:InputPeer limit:int hash:long = messages.Dialogs; messages.getDialogs#a0f4cb4f flags:# exclude_pinned:flags.0?true folder_id:flags.1?int offset_date:int offset_id:int offset_peer:InputPeer limit:int hash:long = messages.Dialogs;
@ -2356,9 +2371,9 @@ messages.requestMainWebView#c9e01e7b flags:# compact:flags.7?true fullscreen:fla
messages.sendPaidReaction#58bbcb50 flags:# peer:InputPeer msg_id:int count:int random_id:long private:flags.0?PaidReactionPrivacy = Updates; messages.sendPaidReaction#58bbcb50 flags:# peer:InputPeer msg_id:int count:int random_id:long private:flags.0?PaidReactionPrivacy = Updates;
messages.togglePaidReactionPrivacy#435885b5 peer:InputPeer msg_id:int private:PaidReactionPrivacy = Bool; messages.togglePaidReactionPrivacy#435885b5 peer:InputPeer msg_id:int private:PaidReactionPrivacy = Bool;
messages.getPaidReactionPrivacy#472455aa = Updates; messages.getPaidReactionPrivacy#472455aa = Updates;
messages.viewSponsoredMessage#673ad8f1 peer:InputPeer random_id:bytes = Bool; messages.viewSponsoredMessage#269e3643 random_id:bytes = Bool;
messages.clickSponsoredMessage#f093465 flags:# media:flags.0?true fullscreen:flags.1?true peer:InputPeer random_id:bytes = Bool; messages.clickSponsoredMessage#8235057e flags:# media:flags.0?true fullscreen:flags.1?true random_id:bytes = Bool;
messages.reportSponsoredMessage#1af3dbb8 peer:InputPeer random_id:bytes option:bytes = channels.SponsoredMessageReportResult; messages.reportSponsoredMessage#12cbf0c4 random_id:bytes option:bytes = channels.SponsoredMessageReportResult;
messages.getSponsoredMessages#9bd2f439 peer:InputPeer = messages.SponsoredMessages; messages.getSponsoredMessages#9bd2f439 peer:InputPeer = messages.SponsoredMessages;
messages.savePreparedInlineMessage#f21f7f2f flags:# result:InputBotInlineResult user_id:InputUser peer_types:flags.0?Vector<InlineQueryPeerType> = messages.BotPreparedInlineMessage; messages.savePreparedInlineMessage#f21f7f2f flags:# result:InputBotInlineResult user_id:InputUser peer_types:flags.0?Vector<InlineQueryPeerType> = messages.BotPreparedInlineMessage;
messages.getPreparedInlineMessage#857ebdb8 bot:InputUser id:string = messages.PreparedInlineMessage; messages.getPreparedInlineMessage#857ebdb8 bot:InputUser id:string = messages.PreparedInlineMessage;
@ -2514,7 +2529,6 @@ payments.getBankCardData#2e79d779 number:string = payments.BankCardData;
payments.exportInvoice#f91b065 invoice_media:InputMedia = payments.ExportedInvoice; payments.exportInvoice#f91b065 invoice_media:InputMedia = payments.ExportedInvoice;
payments.assignAppStoreTransaction#80ed747d receipt:bytes purpose:InputStorePaymentPurpose = Updates; payments.assignAppStoreTransaction#80ed747d receipt:bytes purpose:InputStorePaymentPurpose = Updates;
payments.assignPlayMarketTransaction#dffd50d3 receipt:DataJSON purpose:InputStorePaymentPurpose = Updates; payments.assignPlayMarketTransaction#dffd50d3 receipt:DataJSON purpose:InputStorePaymentPurpose = Updates;
payments.canPurchasePremium#9fc19eb6 purpose:InputStorePaymentPurpose = Bool;
payments.getPremiumGiftCodeOptions#2757ba54 flags:# boost_peer:flags.0?InputPeer = Vector<PremiumGiftCodeOption>; payments.getPremiumGiftCodeOptions#2757ba54 flags:# boost_peer:flags.0?InputPeer = Vector<PremiumGiftCodeOption>;
payments.checkGiftCode#8e51b4c1 slug:string = payments.CheckedGiftCode; payments.checkGiftCode#8e51b4c1 slug:string = payments.CheckedGiftCode;
payments.applyGiftCode#f6e26854 slug:string = Updates; payments.applyGiftCode#f6e26854 slug:string = Updates;
@ -2552,6 +2566,7 @@ payments.getSavedStarGift#b455a106 stargift:Vector<InputSavedStarGift> = payment
payments.getStarGiftWithdrawalUrl#d06e93a8 stargift:InputSavedStarGift password:InputCheckPasswordSRP = payments.StarGiftWithdrawalUrl; payments.getStarGiftWithdrawalUrl#d06e93a8 stargift:InputSavedStarGift password:InputCheckPasswordSRP = payments.StarGiftWithdrawalUrl;
payments.toggleChatStarGiftNotifications#60eaefa1 flags:# enabled:flags.0?true peer:InputPeer = Bool; payments.toggleChatStarGiftNotifications#60eaefa1 flags:# enabled:flags.0?true peer:InputPeer = Bool;
payments.toggleStarGiftsPinnedToTop#1513e7b0 peer:InputPeer stargift:Vector<InputSavedStarGift> = Bool; payments.toggleStarGiftsPinnedToTop#1513e7b0 peer:InputPeer stargift:Vector<InputSavedStarGift> = Bool;
payments.canPurchaseStore#4fdc5ea7 purpose:InputStorePaymentPurpose = Bool;
stickers.createStickerSet#9021ab67 flags:# masks:flags.0?true emojis:flags.5?true text_color:flags.6?true user_id:InputUser title:string short_name:string thumb:flags.2?InputDocument stickers:Vector<InputStickerSetItem> software:flags.3?string = messages.StickerSet; stickers.createStickerSet#9021ab67 flags:# masks:flags.0?true emojis:flags.5?true text_color:flags.6?true user_id:InputUser title:string short_name:string thumb:flags.2?InputDocument stickers:Vector<InputStickerSetItem> software:flags.3?string = messages.StickerSet;
stickers.removeStickerFromSet#f7760f51 sticker:InputDocument = messages.StickerSet; stickers.removeStickerFromSet#f7760f51 sticker:InputDocument = messages.StickerSet;
@ -2672,4 +2687,4 @@ smsjobs.finishJob#4f1ebf24 flags:# job_id:string error:flags.0?string = Bool;
fragment.getCollectibleInfo#be1e85ba collectible:InputCollectible = fragment.CollectibleInfo; fragment.getCollectibleInfo#be1e85ba collectible:InputCollectible = fragment.CollectibleInfo;
// LAYER 200 // LAYER 201

View file

@ -109,9 +109,11 @@ class SendReaction:
add_to_recent=add_to_recent add_to_recent=add_to_recent
) )
) )
users = {i.id: i for i in r.users}
chats = {i.id: i for i in r.chats}
for i in r.updates: for i in r.updates:
if isinstance(i, raw.types.UpdateMessageReactions): if isinstance(i, raw.types.UpdateMessageReactions):
return types.MessageReactions._parse(self, i.reactions) return types.MessageReactions._parse(self, i.reactions, users, chats)
elif story_id is not None: elif story_id is not None:
await self.invoke( await self.invoke(
raw.functions.stories.SendReaction( raw.functions.stories.SendReaction(

View file

@ -68,7 +68,8 @@ class SendPaidReaction:
) )
) )
users = {i.id: i for i in r.users} users = {i.id: i for i in r.users}
chats = {i.id: i for i in r.chats}
for i in r.updates: for i in r.updates:
if isinstance(i, raw.types.UpdateMessageReactions): if isinstance(i, raw.types.UpdateMessageReactions):
return types.MessageReactions._parse(self, i.reactions, users) return types.MessageReactions._parse(self, i.reactions, users, chats)

View file

@ -20,6 +20,7 @@
import pyrogram import pyrogram
from pyrogram import raw, types from pyrogram import raw, types
from typing import Dict
from ..object import Object from ..object import Object
from ..update import Update from ..update import Update
@ -76,7 +77,7 @@ class PreCheckoutQuery(Object, Update):
async def _parse( async def _parse(
client: "pyrogram.Client", client: "pyrogram.Client",
pre_checkout_query: "raw.types.UpdateBotPrecheckoutQuery", pre_checkout_query: "raw.types.UpdateBotPrecheckoutQuery",
users users: Dict[int, "raw.types.User"] = None
) -> "PreCheckoutQuery": ) -> "PreCheckoutQuery":
# Try to decode pre-checkout query payload into string. If that fails, fallback to bytes instead of decoding by # Try to decode pre-checkout query payload into string. If that fails, fallback to bytes instead of decoding by
# ignoring/replacing errors, this way, button clicks will still work. # ignoring/replacing errors, this way, button clicks will still work.
@ -96,14 +97,7 @@ class PreCheckoutQuery(Object, Update):
name=pre_checkout_query.info.name, name=pre_checkout_query.info.name,
phone_number=pre_checkout_query.info.phone, phone_number=pre_checkout_query.info.phone,
email=pre_checkout_query.info.email, email=pre_checkout_query.info.email,
shipping_address=types.ShippingAddress( shipping_address=types.ShippingAddress._parse(pre_checkout_query.info.shipping_address)
street_line1=pre_checkout_query.info.shipping_address.street_line1,
street_line2=pre_checkout_query.info.shipping_address.street_line2,
city=pre_checkout_query.info.shipping_address.city,
state=pre_checkout_query.info.shipping_address.state,
post_code=pre_checkout_query.info.shipping_address.post_code,
country_code=pre_checkout_query.info.shipping_address.country_iso2
)
) if pre_checkout_query.info else None, ) if pre_checkout_query.info else None,
client=client client=client
) )

View file

@ -17,6 +17,8 @@
# You should have received a copy of the GNU Lesser General Public License # You should have received a copy of the GNU Lesser General Public License
# along with Pyrofork. If not, see <http://www.gnu.org/licenses/>. # along with Pyrofork. If not, see <http://www.gnu.org/licenses/>.
from pyrogram import raw
from ..object import Object from ..object import Object
@ -60,3 +62,17 @@ class ShippingAddress(Object):
self.state = state self.state = state
self.post_code = post_code self.post_code = post_code
self.country_code = country_code self.country_code = country_code
@staticmethod
def _parse(shipping_address: "raw.types.raw.types.PostAddress") -> "ShippingAddress":
if shipping_address is None:
return None
return ShippingAddress(
street_line1=shipping_address.street_line1,
street_line2=shipping_address.street_line2,
city=shipping_address.city,
state=shipping_address.state,
post_code=shipping_address.post_code,
country_code=shipping_address.country_code
)

View file

@ -61,7 +61,7 @@ class ShippingQuery(Object, Update):
@staticmethod @staticmethod
async def _parse( async def _parse(
client: "pyrogram.Client", client: "pyrogram.Client",
shipping_query: "raw.types.updateBotShippingQuery", shipping_query: "raw.types.UpdateBotShippingQuery",
users: dict users: dict
) -> "types.PreCheckoutQuery": ) -> "types.PreCheckoutQuery":
# Try to decode pre-checkout query payload into string. If that fails, fallback to bytes instead of decoding by # Try to decode pre-checkout query payload into string. If that fails, fallback to bytes instead of decoding by
@ -74,9 +74,9 @@ class ShippingQuery(Object, Update):
return ShippingQuery( return ShippingQuery(
client=client, client=client,
id=shipping_query.query_id, id=shipping_query.query_id,
from_user=types.User._parse(client, shipping_query.user_id, users), from_user=types.User._parse(client, users.get(shipping_query.user_id)),
payload=payload, payload=payload,
shipping_address=types.ShippingAddress._parse(client, shipping_query.shipping_address) shipping_address=types.ShippingAddress._parse(shipping_query.shipping_address)
) )
async def answer( async def answer(

View file

@ -90,8 +90,8 @@ class ExternalReplyInfo(Object):
giveaway (:obj:`~pyrogram.types.Giveaway`, *optional*): giveaway (:obj:`~pyrogram.types.Giveaway`, *optional*):
Message is a scheduled giveaway, information about the giveaway. Message is a scheduled giveaway, information about the giveaway.
giveaway_winners (:obj:`~pyrogram.types.GiveawayWinners`, *optional*): giveaway_result (:obj:`~pyrogram.types.GiveawayResult`, *optional*):
A giveaway with public winners was completed Message is a giveaway result, information about the giveaway result.
invoice (:obj:`~pyrogram.types.Invoice`, *optional*): invoice (:obj:`~pyrogram.types.Invoice`, *optional*):
Message is a invoice, information about the invoice. Message is a invoice, information about the invoice.
@ -130,7 +130,7 @@ class ExternalReplyInfo(Object):
dice: Optional["types.Dice"] = None, dice: Optional["types.Dice"] = None,
game: Optional["types.Game"] = None, game: Optional["types.Game"] = None,
giveaway: Optional["types.Giveaway"] = None, giveaway: Optional["types.Giveaway"] = None,
giveaway_winners: Optional["types.GiveawayWinners"] = None, giveaway_result: Optional["types.GiveawayResult"] = None,
invoice: Optional["types.Invoice"] = None, invoice: Optional["types.Invoice"] = None,
location: Optional["types.Location"] = None, location: Optional["types.Location"] = None,
poll: Optional["types.Poll"] = None, poll: Optional["types.Poll"] = None,
@ -157,7 +157,7 @@ class ExternalReplyInfo(Object):
self.dice = dice self.dice = dice
self.game = game self.game = game
self.giveaway = giveaway self.giveaway = giveaway
self.giveaway_winners = giveaway_winners self.giveaway_result = giveaway_result
self.invoice = invoice self.invoice = invoice
self.location = location self.location = location
self.poll = poll self.poll = poll
@ -190,7 +190,7 @@ class ExternalReplyInfo(Object):
dice = None dice = None
game = None game = None
giveaway = None giveaway = None
giveaway_winners = None giveaway_result = None
invoice = None invoice = None
location = None location = None
poll = None poll = None
@ -221,7 +221,7 @@ class ExternalReplyInfo(Object):
giveaway = types.Giveaway._parse(client, reply, chats) giveaway = types.Giveaway._parse(client, reply, chats)
media_type = enums.MessageMediaType.GIVEAWAY media_type = enums.MessageMediaType.GIVEAWAY
elif isinstance(media, raw.types.MessageMediaGiveawayResults): elif isinstance(media, raw.types.MessageMediaGiveawayResults):
giveaway_winners = await types.GiveawayResult._parse(client, media, users, chats) giveaway_result = await types.GiveawayResult._parse(client, media, users, chats)
media_type = enums.MessageMediaType.GIVEAWAY_RESULT media_type = enums.MessageMediaType.GIVEAWAY_RESULT
elif isinstance(media, raw.types.MessageMediaInvoice): elif isinstance(media, raw.types.MessageMediaInvoice):
invoice = types.Invoice._parse(media) invoice = types.Invoice._parse(media)
@ -319,7 +319,7 @@ class ExternalReplyInfo(Object):
dice=dice, dice=dice,
game=game, game=game,
giveaway=giveaway, giveaway=giveaway,
giveaway_winners=giveaway_winners, giveaway_result=giveaway_result,
invoice=invoice, invoice=invoice,
location=location, location=location,
poll=poll, poll=poll,

View file

@ -23,7 +23,7 @@ from datetime import datetime
from pyrogram import raw, types, utils from pyrogram import raw, types, utils
from pyrogram.errors import FloodWait from pyrogram.errors import FloodWait
from ..object import Object from ..object import Object
from typing import List from typing import List, Dict
class Giveaway(Object): class Giveaway(Object):
@ -88,7 +88,11 @@ class Giveaway(Object):
self.is_winners_hidden = is_winners_hidden self.is_winners_hidden = is_winners_hidden
@staticmethod @staticmethod
async def _parse(client, message: "raw.types.Message", chats: dict) -> "Giveaway": async def _parse(
client,
message: "raw.types.Message",
chats: Dict[int, "raw.types.Chat"] = None
) -> "Giveaway":
giveaway: "raw.types.MessageMediaGiveaway" = message.media giveaway: "raw.types.MessageMediaGiveaway" = message.media
chats = types.List([types.Chat._parse_channel_chat(client, chats.get(i)) for i in giveaway.channels]) chats = types.List([types.Chat._parse_channel_chat(client, chats.get(i)) for i in giveaway.channels])

View file

@ -21,7 +21,7 @@ import pyrogram
from datetime import datetime from datetime import datetime
from pyrogram import raw, types, utils from pyrogram import raw, types, utils
from ..object import Object from ..object import Object
from typing import List, Union from typing import List, Union, Dict
class GiveawayResult(Object): class GiveawayResult(Object):
@ -105,8 +105,8 @@ class GiveawayResult(Object):
"raw.types.MessageMediaGiveawayResults" "raw.types.MessageMediaGiveawayResults"
], ],
hide_winners: bool = False, hide_winners: bool = False,
users: dict = None, users: Dict[int, "raw.types.User"] = None,
chats: dict = None chats: Dict[int, "raw.types.Chat"] = None
) -> "GiveawayResult": ) -> "GiveawayResult":
chat = None chat = None
giveaway_message = None giveaway_message = None

View file

@ -852,7 +852,7 @@ class Message(Object, Update):
giveaway_launched = types.GiveawayLaunched._parse(client, action) giveaway_launched = types.GiveawayLaunched._parse(client, action)
service_type = enums.MessageServiceType.GIVEAWAY_LAUNCHED service_type = enums.MessageServiceType.GIVEAWAY_LAUNCHED
elif isinstance(action, raw.types.MessageActionGiveawayResults): elif isinstance(action, raw.types.MessageActionGiveawayResults):
giveaway_result = await types.GiveawayResult._parse(client, action, True) giveaway_result = await types.GiveawayResult._parse(client, action, True, users, chats)
service_type = enums.MessageServiceType.GIVEAWAY_RESULT service_type = enums.MessageServiceType.GIVEAWAY_RESULT
elif isinstance(action, raw.types.MessageActionBoostApply): elif isinstance(action, raw.types.MessageActionBoostApply):
boosts_applied = action.boosts boosts_applied = action.boosts
@ -1042,7 +1042,7 @@ class Message(Object, Update):
giveaway = await types.Giveaway._parse(client, message, chats) giveaway = await types.Giveaway._parse(client, message, chats)
media_type = enums.MessageMediaType.GIVEAWAY media_type = enums.MessageMediaType.GIVEAWAY
elif isinstance(media, raw.types.MessageMediaGiveawayResults): elif isinstance(media, raw.types.MessageMediaGiveawayResults):
giveaway_result = await types.GiveawayResult._parse(client, message.media, users, chats) giveaway_result = await types.GiveawayResult._parse(client, message.media, users=users, chats=chats)
media_type = enums.MessageMediaType.GIVEAWAY_RESULT media_type = enums.MessageMediaType.GIVEAWAY_RESULT
elif isinstance(media, raw.types.MessageMediaStory): elif isinstance(media, raw.types.MessageMediaStory):
story = await types.MessageStory._parse(client, media) story = await types.MessageStory._parse(client, media)
@ -1143,7 +1143,7 @@ class Message(Object, Update):
from_user = types.User._parse(client, users.get(user_id, None)) from_user = types.User._parse(client, users.get(user_id, None))
sender_chat = types.Chat._parse(client, message, users, chats, is_chat=False) if not from_user else None sender_chat = types.Chat._parse(client, message, users, chats, is_chat=False) if not from_user else None
reactions = types.MessageReactions._parse(client, message.reactions, users) reactions = types.MessageReactions._parse(client, message.reactions, users, chats)
if message.via_business_bot_id: if message.via_business_bot_id:
sender_business_bot = types.User._parse(client, users.get(message.via_business_bot_id, None)) sender_business_bot = types.User._parse(client, users.get(message.via_business_bot_id, None))

View file

@ -51,7 +51,8 @@ class MessageReactions(Object):
def _parse( def _parse(
client: "pyrogram.Client", client: "pyrogram.Client",
message_reactions: Optional["raw.base.MessageReactions"] = None, message_reactions: Optional["raw.base.MessageReactions"] = None,
users: Optional[Dict[int, "raw.types.User"]] = None users: Optional[Dict[int, "raw.types.User"]] = None,
chats: Dict[int, "raw.types.Chat"] = None
) -> Optional["MessageReactions"]: ) -> Optional["MessageReactions"]:
if not message_reactions: if not message_reactions:
return None return None
@ -63,7 +64,7 @@ class MessageReactions(Object):
for reaction in message_reactions.results for reaction in message_reactions.results
], ],
top_reactors=[ top_reactors=[
types.MessageReactor._parse(client, reactor, users) types.MessageReactor._parse(client, reactor, users, chats)
for reactor in message_reactions.top_reactors for reactor in message_reactions.top_reactors
] ]
) )

View file

@ -42,6 +42,9 @@ class MessageReactor(Object):
from_user (:obj:`~pyrogram.types.User`, *optional*): from_user (:obj:`~pyrogram.types.User`, *optional*):
Information about the reactor. Information about the reactor.
sender_chat (:obj:`~pyrogram.types.Chat`, *optional*):
Information about the sender chat.
""" """
def __init__( def __init__(
self, self,
@ -51,7 +54,8 @@ class MessageReactor(Object):
is_top: bool = None, is_top: bool = None,
is_my: bool = None, is_my: bool = None,
is_anonymous: bool = None, is_anonymous: bool = None,
from_user: "types.User" = None from_user: "types.User" = None,
sender_chat: "types.Chat" = None
): ):
super().__init__(client) super().__init__(client)
@ -60,26 +64,39 @@ class MessageReactor(Object):
self.is_my = is_my self.is_my = is_my
self.is_anonymous = is_anonymous self.is_anonymous = is_anonymous
self.from_user = from_user self.from_user = from_user
self.sender_chat = sender_chat
@staticmethod @staticmethod
def _parse( def _parse(
client: "pyrogram.Client", client: "pyrogram.Client",
message_reactor: Optional["raw.base.MessageReactor"] = None, message_reactor: Optional["raw.base.MessageReactor"] = None,
users: Dict[int, "raw.types.User"] = None users: Dict[int, "raw.types.User"] = None,
chats: Dict[int, "raw.types.Chat"] = None
) -> Optional["MessageReactor"]: ) -> Optional["MessageReactor"]:
if not message_reactor: if not message_reactor:
return None return None
is_anonymous = message_reactor.anonymous is_anonymous = message_reactor.anonymous
from_user = None from_user = None
sender_chat = None
if not is_anonymous: if not is_anonymous:
from_user = types.User._parse(client, users.get(message_reactor.peer_id.user_id)) if isinstance(message_reactor.peer, raw.types.PeerUser):
from_user = types.User._parse(
client,
users.get(message_reactor.peer_id.user_id)
)
elif isinstance(message_reactor.peer, raw.types.PeerChannel):
sender_chat = types.Chat._parse_channel_chat(
client,
chats.get(message_reactor.peer_id.channel_id)
)
return MessageReactor( return MessageReactor(
client=client, client=client,
amount=message_reactor.count, amount=message_reactor.count,
is_top=message_reactor.top, is_top=message_reactor.top,
is_my=message_reactor.my, is_my=message_reactor.my,
is_anonymous=is_anonymous, is_anonymous=is_anonymous,
from_user=from_user from_user=from_user,
sender_chat=sender_chat
) )