diff --git a/compiler/api/docs.json b/compiler/api/docs.json index aec83247..9835a55d 100644 --- a/compiler/api/docs.json +++ b/compiler/api/docs.json @@ -78,8 +78,12 @@ "params": {} }, "AuctionBidLevel": { - "desc": "", - "params": {} + "desc": "{schema}", + "params": { + "amount": "", + "date": "", + "pos": "" + } }, "Authorization": { "desc": "Logged-in session", @@ -748,13 +752,6 @@ "prev_stickerset": "Previous stickerset" } }, - "ChannelAdminLogEventActionChangeTheme": { - "desc": "The chat theme was changed", - "params": { - "new_value": "New theme emoji", - "prev_value": "Previous theme emoji" - } - }, "ChannelAdminLogEventActionChangeTitle": { "desc": "Channel/supergroup title was changed", "params": { @@ -1041,6 +1038,7 @@ "flags": "Flags, see TL conditional fields", "id": "Channel ID", "megagroup": "Is this a supergroup", + "monoforum": "", "title": "Title", "until_date": "The ban is valid until the specified date" } @@ -1762,6 +1760,7 @@ "params": { "disallow_limited_stargifts": "Disallow the reception of limited-supply gifts (those with the starGift.limited flag set).", "disallow_premium_gifts": "Disallow the reception of gifted Telegram Premium subscriptions \u00bb.", + "disallow_stargifts_from_channels": "", "disallow_unique_stargifts": "Disallow the reception of collectible gifts \u00bb.", "disallow_unlimited_stargifts": "Disallow the reception of gifts with an unlimited supply (those with the starGift.limited flag not set).", "flags": "Flags, see TL conditional fields" @@ -2170,11 +2169,13 @@ "id": "Topic ID", "my": "Whether the topic was created by the current user", "notify_settings": "Notification settings", + "peer": "", "pinned": "Whether the topic is pinned", "read_inbox_max_id": "Position up to which all incoming messages are read.", "read_outbox_max_id": "Position up to which all outgoing messages are read.", "short": "Whether this constructor is a reduced version of the full topic information. If set, only the my, closed, id, date, title, icon_color, icon_emoji_id and from_id parameters will contain valid information. Reduced info is usually only returned in topic-related admin log events \u00bb and in the messages.channelMessages constructor: if needed, full information can be fetched using channels.getForumTopicsByID.", "title": "Topic title", + "title_missing": "", "top_message": "ID of the last message that was sent to this topic", "unread_count": "Number of unread messages", "unread_mentions_count": "Number of unread mentions", @@ -2250,21 +2251,26 @@ "params": { "access_hash": "Group call access hash", "can_change_join_muted": "Whether the current user can change the value of the join_muted flag using phone.toggleGroupCallSettings", + "can_change_messages_enabled": "", "can_start_video": "Whether you can start streaming video into the call", "conference": "Whether this is an E2E conference call.", "creator": "Whether we're created this group call.", + "default_send_as": "", "flags": "Flags, see TL conditional fields", "id": "Group call ID", "invite_link": "Invitation link for the conference.", "join_date_asc": "Specifies the ordering to use when locally sorting by date and displaying in the UI group call participants.", "join_muted": "Whether the user should be muted upon joining the call", "listeners_hidden": "Whether the listeners list is hidden and cannot be fetched using phone.getGroupParticipants. The phone.groupParticipants.count and groupCall.participants_count counters will still include listeners.", + "messages_enabled": "", + "min": "", "participants_count": "Participant count", "record_start_date": "When was the recording started", "record_video_active": "Whether the group call is currently being recorded", "rtmp_stream": "Whether RTMP streams are allowed", "schedule_date": "When is the call scheduled to start", "schedule_start_subscribed": "Whether we subscribed to the scheduled call", + "send_paid_messages_stars": "", "stream_dc_id": "DC ID to be used for livestream chunks", "title": "Group call title", "unmuted_video_count": "Number of people currently streaming video into the call", @@ -2281,12 +2287,26 @@ } }, "GroupCallDonor": { - "desc": "", - "params": {} + "desc": "{schema}", + "params": { + "flags": "Flags, see TL conditional fields", + "my": "", + "peer_id": "", + "stars": "", + "top": "" + } }, "GroupCallMessage": { - "desc": "", - "params": {} + "desc": "{schema}", + "params": { + "date": "", + "flags": "Flags, see TL conditional fields", + "from_admin": "", + "from_id": "", + "id": "", + "message": "", + "paid_message_stars": "" + } }, "GroupCallParticipant": { "desc": "Info about a group call participant", @@ -2301,6 +2321,7 @@ "min": "If not set, the volume and muted_by_you fields can be safely used to overwrite locally cached information; otherwise, volume will contain valid information only if volume_by_admin is set both in the cache and in the received constructor.", "muted": "Whether the participant is muted", "muted_by_you": "Whether this participant was muted by the current user", + "paid_stars_total": "", "peer": "Peer information", "presentation": "Info about the screen sharing stream the participant is currently broadcasting", "raise_hand_rating": "Specifies the UI visualization order of peers with raised hands: peers with a higher rating should be showed first in the list.", @@ -2918,8 +2939,10 @@ } }, "InputInvoicePremiumAuthCode": { - "desc": "", - "params": {} + "desc": "{schema}", + "params": { + "purpose": "" + } }, "InputInvoicePremiumGiftCode": { "desc": "Used if the user wishes to start a channel/supergroup giveaway or send some giftcodes to members of a channel/supergroup, in exchange for boosts.", @@ -2955,12 +2978,22 @@ } }, "InputInvoiceStarGiftAuctionBid": { - "desc": "", - "params": {} + "desc": "{schema}", + "params": { + "bid_amount": "", + "flags": "Flags, see TL conditional fields", + "gift_id": "", + "hide_name": "", + "message": "", + "peer": "", + "update_bid": "" + } }, "InputInvoiceStarGiftDropOriginalDetails": { - "desc": "", - "params": {} + "desc": "{schema}", + "params": { + "stargift": "" + } }, "InputInvoiceStarGiftPrepaidUpgrade": { "desc": "Separately prepay for the upgrade of a gift \u00bb.", @@ -3008,6 +3041,7 @@ "name_requested": "Set this flag to request the peer's name.", "peer_type": "Filtering criteria to use for the peer selection list shown to the user. The list should display all existing peers of the specified type, and should also offer an option for the user to create and immediately use one or more (up to max_quantity) peers of the specified type, if needed.", "photo_requested": "Set this flag to request the peer's photo (if any).", + "style": "", "text": "Button text", "username_requested": "Set this flag to request the peer's @username (if any)." } @@ -3019,6 +3053,7 @@ "flags": "Flags, see TL conditional fields", "fwd_text": "New text of the button in forwarded messages.", "request_write_access": "Set this flag to request the permission for your bot to send messages to the user.", + "style": "", "text": "Button text", "url": "An HTTP URL to be opened with user authorization data added to the query string when the button is pressed. If the user refuses to provide authorization data, the original URL without information about the user will be opened. The data added is the same as described in Receiving authorization data.NOTE: You must always check the hash of the received data to verify the authentication and the integrity of the data as described in Checking authorization." } @@ -3026,6 +3061,8 @@ "InputKeyboardButtonUserProfile": { "desc": "Button that links directly to a user profile", "params": { + "flags": "Flags, see TL conditional fields", + "style": "", "text": "Button text", "user_id": "User ID" } @@ -3164,8 +3201,12 @@ } }, "InputMediaStakeDice": { - "desc": "", - "params": {} + "desc": "{schema}", + "params": { + "client_seed": "", + "game_hash": "", + "ton_amount": "" + } }, "InputMediaStory": { "desc": "Forwarded story", @@ -3302,10 +3343,6 @@ "desc": "Filter for messages containing photos or videos.", "params": {} }, - "InputMessagesFilterPhotoVideoDocuments": { - "desc": "", - "params": {} - }, "InputMessagesFilterPhotos": { "desc": "Filter for messages containing photos.", "params": {} @@ -3360,20 +3397,34 @@ "params": {} }, "InputPasskeyCredentialFirebasePNV": { - "desc": "", - "params": {} + "desc": "{schema}", + "params": { + "pnv_token": "" + } }, "InputPasskeyCredentialPublicKey": { - "desc": "", - "params": {} + "desc": "{schema}", + "params": { + "id": "", + "raw_id": "", + "response": "" + } }, "InputPasskeyResponseLogin": { - "desc": "", - "params": {} + "desc": "{schema}", + "params": { + "authenticator_data": "", + "client_data": "", + "signature": "", + "user_handle": "" + } }, "InputPasskeyResponseRegister": { - "desc": "", - "params": {} + "desc": "{schema}", + "params": { + "attestation_data": "", + "client_data": "" + } }, "InputPaymentCredentials": { "desc": "Payment credentials", @@ -3424,8 +3475,10 @@ } }, "InputPeerColorCollectible": { - "desc": "", - "params": {} + "desc": "{schema}", + "params": { + "collectible_id": "" + } }, "InputPeerEmpty": { "desc": "An empty constructor, no user or chat is defined.", @@ -3484,7 +3537,9 @@ "params": { "client_id": "An arbitrary 64-bit integer: it should be set, for example, to an incremental number when using contacts.importContacts, in order to retry importing only the contacts that weren't imported successfully, according to the client_ids returned in contacts.importedContacts.retry_contacts.", "first_name": "Contact's first name", + "flags": "Flags, see TL conditional fields", "last_name": "Contact's last name", + "note": "", "phone": "Phone number" } }, @@ -3561,7 +3616,7 @@ "params": {} }, "InputPrivacyKeySavedMusic": { - "desc": "", + "desc": "{schema}", "params": {} }, "InputPrivacyKeyStarGiftsAutoSave": { @@ -3779,12 +3834,16 @@ } }, "InputStarGiftAuction": { - "desc": "", - "params": {} + "desc": "{schema}", + "params": { + "gift_id": "" + } }, "InputStarGiftAuctionSlug": { - "desc": "", - "params": {} + "desc": "{schema}", + "params": { + "slug": "" + } }, "InputStarsTransaction": { "desc": "Used to fetch info about a Telegram Star transaction \u00bb.", @@ -4143,12 +4202,16 @@ "KeyboardButton": { "desc": "Bot keyboard button", "params": { + "flags": "Flags, see TL conditional fields", + "style": "", "text": "Button text" } }, "KeyboardButtonBuy": { "desc": "Button to buy a product", "params": { + "flags": "Flags, see TL conditional fields", + "style": "", "text": "Button text" } }, @@ -4158,6 +4221,7 @@ "data": "Callback data", "flags": "Flags, see TL conditional fields", "requires_password": "Whether the user should verify his identity by entering his 2FA SRP parameters to the messages.getBotCallbackAnswer method. NOTE: telegram and the bot WILL NOT have access to the plaintext password, thanks to SRP. This button is mainly used by the official @botfather bot, for verifying the user's identity before transferring ownership of a bot to another user.", + "style": "", "text": "Button text" } }, @@ -4165,18 +4229,24 @@ "desc": "Clipboard button: when clicked, the attached text must be copied to the clipboard.", "params": { "copy_text": "The text that will be copied to the clipboard", + "flags": "Flags, see TL conditional fields", + "style": "", "text": "Title of the button" } }, "KeyboardButtonGame": { "desc": "Button to start a game", "params": { + "flags": "Flags, see TL conditional fields", + "style": "", "text": "Button text" } }, "KeyboardButtonRequestGeoLocation": { "desc": "Button to request a user's geolocation", "params": { + "flags": "Flags, see TL conditional fields", + "style": "", "text": "Button text" } }, @@ -4184,14 +4254,18 @@ "desc": "Prompts the user to select and share one or more peers with the bot using messages.sendBotRequestedPeer", "params": { "button_id": "Button ID, to be passed to messages.sendBotRequestedPeer.", + "flags": "Flags, see TL conditional fields", "max_quantity": "Maximum number of peers that can be chosen.", "peer_type": "Filtering criteria to use for the peer selection list shown to the user. The list should display all existing peers of the specified type, and should also offer an option for the user to create and immediately use one or more (up to max_quantity) peers of the specified type, if needed.", + "style": "", "text": "Button text" } }, "KeyboardButtonRequestPhone": { "desc": "Button to request a user's phone number", "params": { + "flags": "Flags, see TL conditional fields", + "style": "", "text": "Button text" } }, @@ -4200,6 +4274,7 @@ "params": { "flags": "Flags, see TL conditional fields", "quiz": "If set, only quiz polls can be sent", + "style": "", "text": "Button text" } }, @@ -4212,13 +4287,21 @@ "KeyboardButtonSimpleWebView": { "desc": "Button to open a bot mini app using messages.requestSimpleWebView, without sending user information to the web app.", "params": { + "flags": "Flags, see TL conditional fields", + "style": "", "text": "Button text", "url": "Web app URL" } }, "KeyboardButtonStyle": { - "desc": "", - "params": {} + "desc": "{schema}", + "params": { + "bg_danger": "", + "bg_primary": "", + "bg_success": "", + "flags": "Flags, see TL conditional fields", + "icon": "" + } }, "KeyboardButtonSwitchInline": { "desc": "Button to force a user to switch to inline mode: pressing the button will prompt the user to select one of their chats, open that chat and insert the bot's username and the specified inline query in the input field.", @@ -4227,12 +4310,15 @@ "peer_types": "Filter to use when selecting chats.", "query": "The inline query to use", "same_peer": "If set, pressing the button will insert the bot's username and the specified inline query in the current chat's input field.", + "style": "", "text": "Button label" } }, "KeyboardButtonUrl": { "desc": "URL button", "params": { + "flags": "Flags, see TL conditional fields", + "style": "", "text": "Button label", "url": "URL" } @@ -4243,6 +4329,7 @@ "button_id": "ID of the button to pass to messages.requestUrlAuth", "flags": "Flags, see TL conditional fields", "fwd_text": "New text of the button in forwarded messages.", + "style": "", "text": "Button label", "url": "An HTTP URL to be opened with user authorization data added to the query string when the button is pressed. If the user refuses to provide authorization data, the original URL without information about the user will be opened. The data added is the same as described in Receiving authorization data.NOTE: Services must always check the hash of the received data to verify the authentication and the integrity of the data as described in Checking authorization." } @@ -4250,6 +4337,8 @@ "KeyboardButtonUserProfile": { "desc": "Button that links directly to a user profile", "params": { + "flags": "Flags, see TL conditional fields", + "style": "", "text": "Button text", "user_id": "User ID" } @@ -4257,6 +4346,8 @@ "KeyboardButtonWebView": { "desc": "Button to open a bot mini app using messages.requestWebView, sending over user information after user confirmation.", "params": { + "flags": "Flags, see TL conditional fields", + "style": "", "text": "Button text", "url": "Web app url" } @@ -4445,8 +4536,10 @@ "report_delivery_until_date": "Used for Telegram Gateway verification messages: if set and the current unixtime is bigger than the specified unixtime, invoke messages.reportMessagesDelivery passing the ID and the peer of this message as soon as it is received by the client (optionally batching requests for the same peer).", "restriction_reason": "Contains the reason why access to this message must be restricted.", "saved_peer_id": "Messages from a saved messages dialog \u00bb will have peer=inputPeerSelf and the saved_peer_id flag set to the ID of the saved dialog.Messages from a monoforum \u00bb will have peer=ID of the monoforum and the saved_peer_id flag set to the ID of a topic.", + "schedule_repeat_period": "", "silent": "Whether this is a silent message (no notification triggered)", "suggested_post": "Used to suggest a post to a channel, see here \u00bb for more info on the full flow.", + "summary_from_language": "", "ttl_period": "Time To Live of the message, once message.date+message.ttl_period === time(), the message will be deleted on the server, and must be deleted locally as well.", "via_bot_id": "ID of the inline bot that generated the message", "via_business_bot_id": "Whether the message was sent by the business bot specified in via_bot_id on behalf of the user.", @@ -4471,8 +4564,10 @@ } }, "MessageActionChangeCreator": { - "desc": "", - "params": {} + "desc": "{schema}", + "params": { + "new_creator_id": "" + } }, "MessageActionChannelCreate": { "desc": "The channel was created", @@ -4554,10 +4649,6 @@ "desc": "A contact just signed up to telegram", "params": {} }, - "MessageActionCreatedBroadcastList": { - "desc": "", - "params": {} - }, "MessageActionCustomAction": { "desc": "Custom action (most likely not supported by the current layer, an upgrade might be needed)", "params": { @@ -4591,9 +4682,9 @@ "crypto_amount": "If crypto_currency is set, contains the paid amount, in the smallest units of the cryptocurrency.", "crypto_currency": "If set, the gift was made using the specified cryptocurrency.", "currency": "Three-letter ISO 4217 currency code", + "days": "", "flags": "Flags, see TL conditional fields", "message": "Message attached with the gift", - "months": "Duration in months of the gifted Telegram Premium subscription.", "slug": "Slug of the Telegram Premium giftcode link", "unclaimed": "If set, the link was not redeemed yet.", "via_giveaway": "If set, this gift code was received from a giveaway \u00bb started by a channel/supergroup we're subscribed to." @@ -4606,9 +4697,9 @@ "crypto_amount": "If the gift was bought using a cryptocurrency, price of the gift in the smallest units of a cryptocurrency.", "crypto_currency": "If the gift was bought using a cryptocurrency, the cryptocurrency name.", "currency": "Three-letter ISO 4217 currency code", + "days": "", "flags": "Flags, see TL conditional fields", - "message": "Message attached with the gift", - "months": "Duration of the gifted Telegram Premium subscription." + "message": "Message attached with the gift" } }, "MessageActionGiftStars": { @@ -4676,13 +4767,11 @@ "users": "The invited users" } }, - "MessageActionLoginUnknownLocation": { - "desc": "", - "params": {} - }, "MessageActionNewCreatorPending": { - "desc": "", - "params": {} + "desc": "{schema}", + "params": { + "new_creator_id": "" + } }, "MessageActionPaidMessagesPrice": { "desc": "The price of paid messages \u00bb in this chat was changed.", @@ -4747,10 +4836,6 @@ "video": "Is this a video call?" } }, - "MessageActionPhoneNumberRequest": { - "desc": "", - "params": {} - }, "MessageActionPinMessage": { "desc": "A message was pinned", "params": {} @@ -4823,6 +4908,7 @@ "MessageActionStarGift": { "desc": "You received a gift, see here \u00bb for more info.", "params": { + "auction_acquired": "", "can_upgrade": "If set, this gift can be upgraded to a collectible gift; can only be set for the receiver of a gift.", "convert_stars": "The receiver of this gift may convert it to this many Telegram Stars, instead of displaying it on their profile page.convert_stars will be equal to stars only if the gift was bought using recently bought Telegram Stars, otherwise it will be less than stars.", "converted": "Whether this gift was converted to Telegram Stars and cannot be displayed on the profile anymore.", @@ -4830,6 +4916,7 @@ "from_id": "Sender of the gift (unset for anonymous gifts).", "gift": "Info about the gift", "gift_msg_id": "For separate upgrades, the identifier of the message with the gift whose upgrade was prepaid (only valid for the receiver of the service message).", + "gift_num": "", "message": "Additional message from the sender of the gift", "name_hidden": "If set, the name of the sender of the gift will be hidden if the destination user decides to display the gift on their profile", "peer": "Receiver of the gift.", @@ -4838,6 +4925,7 @@ "refunded": "This gift is not available anymore because a request to refund the payment related to this gift was made, and the money was returned.", "saved": "Whether this gift was added to the destination user's profile (may be toggled using payments.saveStarGift and fetched using payments.getSavedStarGifts)", "saved_id": "For channel gifts, ID to use in inputSavedStarGiftChat constructors.", + "to_id": "", "upgrade_msg_id": "If set, this gift was upgraded to a collectible gift, and the corresponding messageActionStarGiftUnique is available at the specified message ID.", "upgrade_separate": "This service message is the notification of a separate pre-payment for the upgrade of a gift we own.", "upgrade_stars": "The number of Telegram Stars the user can pay to convert the gift into a collectible gift \u00bb.", @@ -4845,21 +4933,38 @@ } }, "MessageActionStarGiftPurchaseOffer": { - "desc": "", - "params": {} + "desc": "{schema}", + "params": { + "accepted": "", + "declined": "", + "expires_at": "", + "flags": "Flags, see TL conditional fields", + "gift": "", + "price": "" + } }, "MessageActionStarGiftPurchaseOfferDeclined": { - "desc": "", - "params": {} + "desc": "{schema}", + "params": { + "expired": "", + "flags": "Flags, see TL conditional fields", + "gift": "", + "price": "" + } }, "MessageActionStarGiftUnique": { "desc": "A gift \u00bb was upgraded to a collectible gift \u00bb.", "params": { + "assigned": "", + "can_craft_at": "", "can_export_at": "If set, indicates that the current gift can't be exported to the TON blockchain \u00bb yet: the owner will be able to export it at the specified unixtime.", "can_resell_at": "If set, indicates that the current gift can't be resold \u00bb yet: the owner will be able to put it up for sale at the specified unixtime.", "can_transfer_at": "If set, indicates that the current gift can't be transferred \u00bb yet: the owner will be able to transfer it at the specified unixtime.", + "craft": "", + "drop_original_details_stars": "", "flags": "Flags, see TL conditional fields", "from_id": "Sender of the gift (unset for anonymous gifts).", + "from_offer": "", "gift": "The collectible gift.", "peer": "Receiver of the gift.", "prepaid_upgrade": "The sender has pre-paid for the upgrade of this gift to a collectible gift.", @@ -4873,8 +4978,10 @@ } }, "MessageActionSuggestBirthday": { - "desc": "", - "params": {} + "desc": "{schema}", + "params": { + "birthday": "" + } }, "MessageActionSuggestProfilePhoto": { "desc": "A new profile picture was suggested using photos.uploadContactProfilePhoto.", @@ -4906,10 +5013,6 @@ "price": "The price." } }, - "MessageActionTTLChange": { - "desc": "", - "params": {} - }, "MessageActionTodoAppendTasks": { "desc": "Items were appended to the todo list \u00bb.", "params": { @@ -4929,7 +5032,8 @@ "flags": "Flags, see TL conditional fields", "icon_color": "If no custom emoji icon is specified, specifies the color of the fallback topic icon (RGB), one of 0x6FB9F0, 0xFFD67E, 0xCB86DB, 0x8EEE98, 0xFF93B2, or 0xFB6F5F.", "icon_emoji_id": "ID of the custom emoji used as topic icon.", - "title": "Topic name." + "title": "Topic name.", + "title_missing": "" } }, "MessageActionTopicEdit": { @@ -4942,14 +5046,6 @@ "title": "New topic title." } }, - "MessageActionUserJoined": { - "desc": "", - "params": {} - }, - "MessageActionUserUpdatedPhoto": { - "desc": "", - "params": {} - }, "MessageActionWebViewDataSent": { "desc": "Data from an opened reply keyboard bot mini app was relayed to the bot that owns it (user side service message).", "params": { @@ -5166,6 +5262,8 @@ "desc": "Dice-based animated sticker", "params": { "emoticon": "The emoji, for now , and are supported", + "flags": "Flags, see TL conditional fields", + "game_outcome": "", "value": "Dice value" } }, @@ -5317,8 +5415,12 @@ } }, "MessageMediaVideoStream": { - "desc": "", - "params": {} + "desc": "{schema}", + "params": { + "call": "", + "flags": "Flags, see TL conditional fields", + "rtmp_stream": "" + } }, "MessageMediaWebPage": { "desc": "Preview of webpage", @@ -5873,8 +5975,15 @@ } }, "Passkey": { - "desc": "", - "params": {} + "desc": "{schema}", + "params": { + "date": "", + "flags": "Flags, see TL conditional fields", + "id": "", + "last_usage_date": "", + "name": "", + "software_emoji_id": "" + } }, "PasswordKdfAlgoSHA256SHA256PBKDF2HMACSHA512iter100000SHA256ModPow": { "desc": "This key derivation algorithm defines that SRP 2FA login must be used", @@ -5948,8 +6057,17 @@ } }, "PeerColorCollectible": { - "desc": "", - "params": {} + "desc": "{schema}", + "params": { + "accent_color": "", + "background_emoji_id": "", + "collectible_id": "", + "colors": "", + "dark_accent_color": "", + "dark_colors": "", + "flags": "Flags, see TL conditional fields", + "gift_emoji_id": "" + } }, "PeerLocated": { "desc": "Peer geolocated nearby", @@ -6331,10 +6449,6 @@ "users": "Number of users which will be able to activate the gift codes." } }, - "PremiumGiftOption": { - "desc": "Telegram Premium gift option", - "params": {} - }, "PremiumSubscriptionOption": { "desc": "Describes a Telegram Premium subscription option", "params": { @@ -6409,7 +6523,7 @@ "params": {} }, "PrivacyKeySavedMusic": { - "desc": "", + "desc": "{schema}", "params": {} }, "PrivacyKeyStarGiftsAutoSave": { @@ -6630,8 +6744,12 @@ } }, "RecentStory": { - "desc": "", - "params": {} + "desc": "{schema}", + "params": { + "flags": "Flags, see TL conditional fields", + "live": "", + "max_id": "" + } }, "ReplyInlineMarkup": { "desc": "Bot or inline keyboard", @@ -6798,6 +6916,7 @@ "SavedStarGift": { "desc": "Represents a gift owned by a peer.", "params": { + "can_craft_at": "", "can_export_at": "If set, indicates that the current gift can't be exported to the TON blockchain \u00bb yet: the owner will be able to export it at the specified unixtime.", "can_resell_at": "If set, indicates that the current gift can't be resold \u00bb yet: the owner will be able to put it up for sale at the specified unixtime.", "can_transfer_at": "If set, indicates that the current gift can't be transferred \u00bb yet: the owner will be able to transfer it at the specified unixtime.", @@ -6805,9 +6924,11 @@ "collection_id": "IDs of the collections \u00bb that this gift is a part of.", "convert_stars": "For non-collectible gifts, the receiver of this gift may convert it to this many Telegram Stars, instead of displaying it on their profile page.", "date": "Reception date of the gift.", + "drop_original_details_stars": "", "flags": "Flags, see TL conditional fields", "from_id": "Sender of the gift (unset for anonymous gifts).", "gift": "The collectible gift.", + "gift_num": "", "message": "Message attached to the gift.", "msg_id": "For gifts received by users, ID to use in inputSavedStarGiftUser constructors.", "name_hidden": "If set, the gift sender in from_id and the message are set only for the receiver of the gift.", @@ -7141,8 +7262,11 @@ "params": {} }, "SendMessageTextDraftAction": { - "desc": "", - "params": {} + "desc": "{schema}", + "params": { + "random_id": "", + "text": "" + } }, "SendMessageTypingAction": { "desc": "User is typing.", @@ -7239,18 +7363,24 @@ "StarGift": { "desc": "Represents a star gift, see here \u00bb for more info.", "params": { + "auction": "", + "auction_slug": "", + "auction_start_date": "", "availability_remains": "For limited-supply gifts: the remaining number of gifts that may be bought.", "availability_resale": "The total number of (upgraded to collectibles) gifts of this type currently on resale", "availability_total": "For limited-supply gifts: the total number of gifts that was available in the initial supply.", + "background": "", "birthday": "Whether this is a birthday-themed gift", "convert_stars": "The receiver of this gift may convert it to this many Telegram Stars, instead of displaying it on their profile page.convert_stars will be equal to stars only if the gift was bought using recently bought Telegram Stars, otherwise it will be less than stars.", "first_sale_date": "For sold out gifts only: when was the gift first bought.", "flags": "Flags, see TL conditional fields", + "gifts_per_round": "", "id": "Identifier of the gift", "last_sale_date": "For sold out gifts only: when was the gift last bought.", "limited": "Whether this is a limited-supply gift.", "limited_per_user": "If set, the maximum number of gifts of this type that can be owned by a single user is limited and specified in per_user_total, and the remaining slots for the current user in per_user_remains.", "locked_until_date": "If set, the specified gift possibly cannot be sent until the specified date, see here \u00bb for the full flow.", + "peer_color_available": "", "per_user_remains": "Remaining number of gifts of this type that can be owned by the current user.", "per_user_total": "Maximum number of gifts of this type that can be owned by any user.", "released_by": "This gift was released by the specified peer.", @@ -7260,12 +7390,17 @@ "stars": "Price of the gift in Telegram Stars.", "sticker": "Sticker that represents the gift.", "title": "Title of the gift", - "upgrade_stars": "The number of Telegram Stars the user can pay to convert the gift into a collectible gift \u00bb." + "upgrade_stars": "The number of Telegram Stars the user can pay to convert the gift into a collectible gift \u00bb.", + "upgrade_variants": "" } }, "StarGiftActiveAuctionState": { - "desc": "", - "params": {} + "desc": "{schema}", + "params": { + "gift": "", + "state": "", + "user_state": "" + } }, "StarGiftAttributeBackdrop": { "desc": "The backdrop of a collectible gift \u00bb.", @@ -7275,7 +7410,7 @@ "edge_color": "Color of the edges of the backdrop in RGB24 format.", "name": "Name of the backdrop", "pattern_color": "Color of the starGiftAttributePattern applied on the backdrop in RGB24 format.", - "rarity_permille": "The number of upgraded gifts that receive this backdrop for each 1000 gifts upgraded.", + "rarity": "", "text_color": "Color of the text on the backdrop in RGB24 format." } }, @@ -7307,9 +7442,11 @@ "StarGiftAttributeModel": { "desc": "The model of a collectible gift \u00bb.", "params": { + "crafted": "", "document": "The sticker representing the upgraded gift", + "flags": "Flags, see TL conditional fields", "name": "Name of the model", - "rarity_permille": "The number of upgraded gifts that receive this backdrop for each 1000 gifts upgraded." + "rarity": "" } }, "StarGiftAttributeOriginalDetails": { @@ -7327,60 +7464,113 @@ "params": { "document": "The symbol", "name": "Name of the symbol", - "rarity_permille": "The number of upgraded gifts that receive this backdrop for each 1000 gifts upgraded." + "rarity": "" } }, "StarGiftAttributeRarity": { - "desc": "", - "params": {} + "desc": "{schema}", + "params": { + "permille": "" + } }, "StarGiftAttributeRarityEpic": { - "desc": "", + "desc": "{schema}", "params": {} }, "StarGiftAttributeRarityLegendary": { - "desc": "", + "desc": "{schema}", "params": {} }, "StarGiftAttributeRarityRare": { - "desc": "", + "desc": "{schema}", "params": {} }, "StarGiftAttributeRarityUncommon": { - "desc": "", + "desc": "{schema}", "params": {} }, "StarGiftAuctionAcquiredGift": { - "desc": "", - "params": {} + "desc": "{schema}", + "params": { + "bid_amount": "", + "date": "", + "flags": "Flags, see TL conditional fields", + "gift_num": "", + "message": "", + "name_hidden": "", + "peer": "", + "pos": "", + "round": "" + } }, "StarGiftAuctionRound": { - "desc": "", - "params": {} + "desc": "{schema}", + "params": { + "duration": "", + "num": "" + } }, "StarGiftAuctionRoundExtendable": { - "desc": "", - "params": {} + "desc": "{schema}", + "params": { + "duration": "", + "extend_top": "", + "extend_window": "", + "num": "" + } }, "StarGiftAuctionState": { - "desc": "", - "params": {} + "desc": "{schema}", + "params": { + "bid_levels": "", + "current_round": "", + "end_date": "", + "gifts_left": "", + "last_gift_num": "", + "min_bid_amount": "", + "next_round_at": "", + "rounds": "", + "start_date": "", + "top_bidders": "", + "total_rounds": "", + "version": "" + } }, "StarGiftAuctionStateFinished": { - "desc": "", - "params": {} + "desc": "{schema}", + "params": { + "average_price": "", + "end_date": "", + "flags": "Flags, see TL conditional fields", + "fragment_listed_count": "", + "fragment_listed_url": "", + "listed_count": "", + "start_date": "" + } }, "StarGiftAuctionStateNotModified": { - "desc": "", + "desc": "{schema}", "params": {} }, "StarGiftAuctionUserState": { - "desc": "", - "params": {} + "desc": "{schema}", + "params": { + "acquired_count": "", + "bid_amount": "", + "bid_date": "", + "bid_peer": "", + "flags": "Flags, see TL conditional fields", + "min_bid_amount": "", + "returned": "" + } }, "StarGiftBackground": { - "desc": "", - "params": {} + "desc": "{schema}", + "params": { + "center_color": "", + "edge_color": "", + "text_color": "" + } }, "StarGiftCollection": { "desc": "Represents a star gift collection \u00bb.", @@ -7399,14 +7589,20 @@ "attributes": "Collectible attributes", "availability_issued": "Total number of gifts of the same type that were upgraded to a collectible gift.", "availability_total": "Total number of gifts of the same type that can be upgraded or were already upgraded to a collectible gift.", + "burned": "", + "craft_chance_permille": "", + "crafted": "", "flags": "Flags, see TL conditional fields", "gift_address": "For NFTs on the TON blockchain, contains the address of the NFT (append it to the ton_blockchain_explorer_url client configuration value \u00bb to obtain a link with information about the address).", "gift_id": "Unique ID of the gift.", + "host_id": "", "id": "Identifier of the collectible gift.", "num": "Unique identifier of this collectible gift among all (already upgraded) collectible gifts of the same type.", + "offer_min_stars": "", "owner_address": "For NFTs on the TON blockchain, contains the address of the owner (append it to the ton_blockchain_explorer_url client configuration value \u00bb to obtain a link with information about the address).", "owner_id": "The owner of the gift.", "owner_name": "The name of the owner if neither owner_id nor owner_address are set.", + "peer_color": "", "released_by": "This gift was released by the specified peer.", "require_premium": "This gift can only be bought by users with a Premium subscription.", "resale_ton_only": "Whether the gift can be bought only using Toncoins.", @@ -7416,12 +7612,16 @@ "theme_peer": "The current chat where the associated chat theme is installed, if any (gift-based themes can only be installed in one chat at a time).", "title": "Collectible title.", "value_amount": "Price of the gift.", - "value_currency": "Currency for the gift's price." + "value_currency": "Currency for the gift's price.", + "value_usd_amount": "" } }, "StarGiftUpgradePrice": { - "desc": "", - "params": {} + "desc": "{schema}", + "params": { + "date": "", + "upgrade_stars": "" + } }, "StarRefProgram": { "desc": "Indo about an affiliate program offered by a bot", @@ -7556,15 +7756,19 @@ "giveaway_post_id": "ID of the message containing the messageMediaGiveaway, for incoming star giveaway prizes.", "id": "Transaction ID.", "msg_id": "For paid media transactions \u00bb, message ID of the paid media posted to peer.peer (can point to a deleted message; either way, extended_media will always contain the bought media).", + "offer": "", "paid_messages": "This transaction is related to the reception or transmission of a paid message \u00bb.", "peer": "Source of the incoming transaction, or its recipient for outgoing transactions.", "pending": "The transaction is currently pending.", + "phonegroup_message": "", "photo": "For transactions with bots, photo of the bought product.", "posts_search": "Represents payment for a paid global post search \u00bb.", "premium_gift_months": "This transaction indicates the payment for a gifted Telegram Premium subscription \u00bb.", "reaction": "This transaction is a paid reaction \u00bb.", "refund": "Whether this transaction is a refund.", "stargift": "This transaction indicates a purchase or a sale (conversion back to Stars) of a gift \u00bb.", + "stargift_auction_bid": "", + "stargift_drop_original_details": "", "stargift_prepaid_upgrade": "Represents payment for a separate prepaid upgrade of a gift.", "stargift_resale": "This transaction is related to the resale of a collectible gift \u00bb.", "stargift_upgrade": "This transaction pays for the upgrade of a gift to a collectible gift \u00bb.", @@ -7818,7 +8022,8 @@ "date": "When was the story posted.", "expire_date": "When does the story expire.", "flags": "Flags, see TL conditional fields", - "id": "Story ID" + "id": "Story ID", + "live": "" } }, "StoryReaction": { @@ -8290,10 +8495,6 @@ "user_id": "The user ID" } }, - "UpdateBotSubscriptionExpire": { - "desc": "", - "params": {} - }, "UpdateBotWebhookJSON": { "desc": "A new incoming event; for bots only", "params": { @@ -8502,8 +8703,11 @@ } }, "UpdateDeleteGroupCallMessages": { - "desc": "", - "params": {} + "desc": "{schema}", + "params": { + "call": "", + "messages": "" + } }, "UpdateDeleteMessages": { "desc": "Messages were deleted.", @@ -8598,8 +8802,10 @@ } }, "UpdateEmojiGameInfo": { - "desc": "", - "params": {} + "desc": "{schema}", + "params": { + "info": "" + } }, "UpdateEncryptedChatTyping": { "desc": "Interlocutor is typing a message in an encrypted chat. Update period is 6 second. If upon this time there is no repeated update, it shall be considered that the interlocutor stopped typing.", @@ -8645,8 +8851,9 @@ "desc": "A new groupcall was started", "params": { "call": "Info about the group call or livestream", - "chat_id": "The channel/supergroup where this group call or livestream takes place", - "flags": "Flags, see TL conditional fields" + "flags": "Flags, see TL conditional fields", + "live_story": "", + "peer": "" } }, "UpdateGroupCallChainBlocks": { @@ -8667,12 +8874,19 @@ } }, "UpdateGroupCallEncryptedMessage": { - "desc": "", - "params": {} + "desc": "{schema}", + "params": { + "call": "", + "encrypted_message": "", + "from_id": "" + } }, "UpdateGroupCallMessage": { - "desc": "", - "params": {} + "desc": "{schema}", + "params": { + "call": "", + "message": "" + } }, "UpdateGroupCallParticipants": { "desc": "The participant list of a certain group call has changed", @@ -8925,12 +9139,21 @@ } }, "UpdatePinnedForumTopic": { - "desc": "", - "params": {} + "desc": "{schema}", + "params": { + "flags": "Flags, see TL conditional fields", + "peer": "", + "pinned": "", + "topic_id": "" + } }, "UpdatePinnedForumTopics": { - "desc": "", - "params": {} + "desc": "{schema}", + "params": { + "flags": "Flags, see TL conditional fields", + "order": "", + "peer": "" + } }, "UpdatePinnedMessages": { "desc": "Some messages were pinned in a chat", @@ -9027,7 +9250,8 @@ "peer": "Peer", "pts": "Event count after generation", "pts_count": "Number of events that were generated", - "still_unread_count": "Number of messages that are still unread" + "still_unread_count": "Number of messages that are still unread", + "top_msg_id": "" } }, "UpdateReadHistoryOutbox": { @@ -9202,15 +9426,21 @@ } }, "UpdateStarGiftAuctionState": { - "desc": "", - "params": {} + "desc": "{schema}", + "params": { + "gift_id": "", + "state": "" + } }, "UpdateStarGiftAuctionUserState": { - "desc": "", - "params": {} + "desc": "{schema}", + "params": { + "gift_id": "", + "user_state": "" + } }, "UpdateStarGiftCraftFail": { - "desc": "", + "desc": "{schema}", "params": {} }, "UpdateStarsBalance": { @@ -9269,10 +9499,6 @@ "theme": "Theme" } }, - "UpdateTranscribeAudio": { - "desc": "", - "params": {} - }, "UpdateTranscribedAudio": { "desc": "A pending voice message transcription \u00bb initiated with messages.transcribeAudio was updated.", "params": { @@ -9324,6 +9550,8 @@ "desc": "The user is preparing a message; typing, recording, uploading, etc. This update is valid for 6 seconds. If no further updates of this kind are received after 6 seconds, it should be considered that the user stopped doing whatever they were doing", "params": { "action": "Action type", + "flags": "Flags, see TL conditional fields", + "top_msg_id": "", "user_id": "User id" } }, @@ -9369,6 +9597,7 @@ "UrlAuthResultAccepted": { "desc": "Details about an accepted authorization request, for more info click here \u00bb", "params": { + "flags": "Flags, see TL conditional fields", "url": "The URL name of the website on which the user has logged in." } }, @@ -9380,8 +9609,13 @@ "desc": "Details about the authorization request, for more info click here \u00bb", "params": { "bot": "Username of a bot, which will be used for user authorization. If not specified, the current bot's username will be assumed. The url's domain must be the same as the domain linked with the bot. See Linking your domain to the bot for more details.", + "browser": "", "domain": "The domain name of the website on which the user will log in.", "flags": "Flags, see TL conditional fields", + "ip": "", + "platform": "", + "region": "", + "request_phone_number": "", "request_write_access": "Whether the bot would like to send messages to the user" } }, @@ -9397,6 +9631,8 @@ "bot_business": "Whether this bot can be connected to a user as specified here \u00bb.", "bot_can_edit": "Whether we can edit the profile picture, name, about text and description of this bot because we own it. When updating the local peer database, do not apply changes to this field if the min flag is set. Changes to this flag (if min is not set) should invalidate the local userFull cache for this user ID.", "bot_chat_history": "Can the bot see all messages in groups?", + "bot_forum_can_manage_topics": "", + "bot_forum_view": "", "bot_has_main_app": "If set, this bot has configured a Main Mini App \u00bb.", "bot_info_version": "Version of the bot_info field in userFull, incremented every time it changes. Changes to this flag should invalidate the local userFull cache for this user ID, see here \u00bb for more info.", "bot_inline_geo": "Whether the bot can request our geolocation in inline mode", @@ -9473,6 +9709,7 @@ "has_scheduled": "Whether scheduled messages are available", "id": "User ID", "main_tab": "The main tab for the user's profile, see here \u00bb for more info.", + "note": "", "notify_settings": "Notification settings", "personal_channel_id": "ID of the associated personal channel \u00bb, that should be shown in the profile page.", "personal_channel_message": "ID of the latest message of the associated personal channel \u00bb, that should be previewed in the profile page.", @@ -9522,10 +9759,6 @@ "desc": "User status has not been set yet.", "params": {} }, - "UserStatusHidden": { - "desc": "", - "params": {} - }, "UserStatusLastMonth": { "desc": "Online status: last seen last month", "params": { @@ -9688,14 +9921,17 @@ "photo": "Image representing the content", "site_name": "Short name of the site (e.g., Google Docs, App Store)", "title": "Title of the content", - "type": "Type of the web page. One of the following: - app- article- document- gif- photo- profile- telegram_album- telegram_background- telegram_bot- telegram_botapp- telegram_call- telegram_channel- telegram_channel_boost- telegram_channel_direct- telegram_channel_request- telegram_chat- telegram_chat_request- telegram_chatlist- telegram_collection- telegram_community- telegram_giftcode- telegram_group_boost- telegram_livestream- telegram_megagroup- telegram_megagroup_request- telegram_message- telegram_nft- telegram_stickerset- telegram_story- telegram_story_album- telegram_theme- telegram_user- telegram_videochat- telegram_voicechat- video", + "type": "Type of the web page. One of the following: - app- article- document- gif- photo- profile- telegram_album- telegram_auction- telegram_background- telegram_bot- telegram_botapp- telegram_call- telegram_channel- telegram_channel_boost- telegram_channel_direct- telegram_channel_request- telegram_chat- telegram_chat_request- telegram_chatlist- telegram_collection- telegram_community- telegram_giftcode- telegram_group_boost- telegram_livestream- telegram_megagroup- telegram_megagroup_request- telegram_message- telegram_nft- telegram_stickerset- telegram_story- telegram_story_album- telegram_theme- telegram_user- telegram_videochat- telegram_voicechat- video", "url": "URL of previewed webpage", "video_cover_photo": "Represents a custom video cover." } }, "WebPageAttributeStarGiftAuction": { - "desc": "", - "params": {} + "desc": "{schema}", + "params": { + "end_date": "", + "gift": "" + } }, "WebPageAttributeStarGiftCollection": { "desc": "Contains info about a gift collection \u00bb for a webPage preview of a gift collection \u00bb (the webPage will have a type of telegram_collection).", @@ -9759,10 +9995,6 @@ "url": "URL of the webpage" } }, - "WebPageUrlPending": { - "desc": "", - "params": {} - }, "WebViewMessageSent": { "desc": "Info about a sent inline webview message", "params": { @@ -9886,12 +10118,16 @@ } }, "account.PasskeyRegistrationOptions": { - "desc": "", - "params": {} + "desc": "{schema}", + "params": { + "options": "" + } }, "account.Passkeys": { - "desc": "", - "params": {} + "desc": "{schema}", + "params": { + "passkeys": "" + } }, "account.Password": { "desc": "Configuration for two-factor authorization", @@ -10119,8 +10355,10 @@ } }, "auth.PasskeyLoginOptions": { - "desc": "", - "params": {} + "desc": "{schema}", + "params": { + "options": "" + } }, "auth.PasswordRecovery": { "desc": "Recovery info of a 2FA password, only for accounts with a recovery email configured.", @@ -10141,6 +10379,8 @@ "auth.SentCodePaymentRequired": { "desc": "Official apps may receive this constructor, indicating that due to the high cost of SMS verification codes for the user's country/provider, the user must purchase a Telegram Premium subscription in order to proceed with the login/signup.", "params": { + "amount": "", + "currency": "", "phone_code_hash": "Phone code hash, to be stored and later re-used with auth.signIn", "store_product": "Store identifier of the Telegram Premium subscription.", "support_email_address": "An email address that can be contacted for more information about this request.", @@ -10913,15 +11153,26 @@ } }, "messages.EmojiGameDiceInfo": { - "desc": "", - "params": {} + "desc": "{schema}", + "params": { + "current_streak": "", + "flags": "Flags, see TL conditional fields", + "game_hash": "", + "params": "", + "plays_left": "", + "prev_stake": "" + } }, "messages.EmojiGameOutcome": { - "desc": "", - "params": {} + "desc": "{schema}", + "params": { + "seed": "", + "stake_ton_amount": "", + "ton_amount": "" + } }, "messages.EmojiGameUnavailable": { - "desc": "", + "desc": "{schema}", "params": {} }, "messages.EmojiGroups": { @@ -11071,10 +11322,6 @@ "flags": "Flags, see TL conditional fields" } }, - "messages.MessageEmpty": { - "desc": "Empty constructor. Can be used, for example, in case when an action did not require to create a service message.", - "params": {} - }, "messages.MessageReactionsList": { "desc": "List of peers that reacted to a specific message", "params": { @@ -11099,6 +11346,7 @@ "params": { "chats": "List of chats mentioned in dialogs", "messages": "List of messages", + "topics": "", "users": "List of users mentioned in messages and chats" } }, @@ -11119,6 +11367,7 @@ "next_rate": "Rate to use in the offset_rate parameter in the next call to messages.searchGlobal", "offset_id_offset": "Indicates the absolute position of messages[0] within the total result set with count count. This is useful, for example, if the result was fetched using offset_id, and we need to display a progress/total counter (like photo 134 of 200, for all media in a chat, we could simply use photo ${offset_id_offset} of ${count}).", "search_flood": "For global post searches \u00bb, the remaining amount of free searches, here query_is_free is related to the current call only, not to the next paginated call, and all subsequent pagination calls will always be free.", + "topics": "", "users": "List of users mentioned in messages and chats" } }, @@ -11379,10 +11628,6 @@ "users": "Users mentioned within the media object." } }, - "messages.WebViewResult": { - "desc": "", - "params": {} - }, "payments.BankCardData": { "desc": "Credit card info, provided by the card's bank(s)", "params": { @@ -11405,10 +11650,10 @@ "params": { "chats": "Mentioned chats", "date": "Creation date of the gift code.", + "days": "", "flags": "Flags, see TL conditional fields", "from_id": "The peer that created the gift code.", "giveaway_msg_id": "Message ID of the giveaway in the channel specified in from_id.", - "months": "Duration in months of the gifted Telegram Premium subscription.", "to_id": "The destination user of the gift.", "used_date": "When was the giftcode imported, if it was imported.", "users": "Mentioned users", @@ -11580,20 +11825,35 @@ } }, "payments.StarGiftActiveAuctions": { - "desc": "", - "params": {} + "desc": "{schema}", + "params": { + "auctions": "", + "chats": "", + "users": "" + } }, "payments.StarGiftActiveAuctionsNotModified": { - "desc": "", + "desc": "{schema}", "params": {} }, "payments.StarGiftAuctionAcquiredGifts": { - "desc": "", - "params": {} + "desc": "{schema}", + "params": { + "chats": "", + "gifts": "", + "users": "" + } }, "payments.StarGiftAuctionState": { - "desc": "", - "params": {} + "desc": "{schema}", + "params": { + "chats": "", + "gift": "", + "state": "", + "timeout": "", + "user_state": "", + "users": "" + } }, "payments.StarGiftCollections": { "desc": "Represents a list of star gift collections \u00bb.", @@ -11606,12 +11866,16 @@ "params": {} }, "payments.StarGiftUpgradeAttributes": { - "desc": "", - "params": {} + "desc": "{schema}", + "params": { + "attributes": "" + } }, "payments.StarGiftUpgradePreview": { "desc": "A preview of the possible attributes (chosen randomly) a gift \u00bb can receive after upgrading it to a collectible gift \u00bb, see here \u00bb for more info.", "params": { + "next_prices": "", + "prices": "", "sample_attributes": "Possible gift attributes" } }, @@ -11733,8 +11997,13 @@ } }, "phone.GroupCallStars": { - "desc": "", - "params": {} + "desc": "{schema}", + "params": { + "chats": "", + "top_donors": "", + "total_stars": "", + "users": "" + } }, "phone.GroupCallStreamChannels": { "desc": "Info about RTMP streams in a group call or livestream", @@ -12408,8 +12677,10 @@ } }, "account.DeletePasskey": { - "desc": "", - "params": {} + "desc": "{schema}", + "params": { + "id": "" + } }, "account.DeleteSecureValue": { "desc": "Delete stored Telegram Passport documents, for more info see the passport docs \u00bb", @@ -12569,7 +12840,7 @@ } }, "account.GetPasskeys": { - "desc": "", + "desc": "{schema}", "params": {} }, "account.GetPassword": { @@ -12662,7 +12933,7 @@ "params": {} }, "account.InitPasskeyRegistration": { - "desc": "", + "desc": "{schema}", "params": {} }, "account.InitTakeoutSession": { @@ -12714,8 +12985,10 @@ } }, "account.RegisterPasskey": { - "desc": "", - "params": {} + "desc": "{schema}", + "params": { + "credential": "" + } }, "account.ReorderUsernames": { "desc": "Reorder usernames associated with the currently logged-in user.", @@ -12998,7 +13271,6 @@ "account.UpdateColor": { "desc": "Update the accent color and background custom emoji \u00bb of the current account.", "params": { - "background_emoji_id": "Custom emoji ID used in the accent color pattern.", "color": "ID of the accent color palette \u00bb to use (not RGB24, see here \u00bb for more info).", "flags": "Flags, see TL conditional fields", "for_profile": "Whether to change the accent color emoji pattern of the profile page; otherwise, the accent color and emoji pattern of messages will be changed." @@ -13145,8 +13417,12 @@ } }, "auth.CheckPaidAuth": { - "desc": "", - "params": {} + "desc": "{schema}", + "params": { + "form_id": "", + "phone_code_hash": "", + "phone_number": "" + } }, "auth.CheckPassword": { "desc": "Try logging to an account protected by a 2FA password.", @@ -13181,8 +13457,13 @@ } }, "auth.FinishPasskeyLogin": { - "desc": "", - "params": {} + "desc": "{schema}", + "params": { + "credential": "", + "flags": "Flags, see TL conditional fields", + "from_auth_key_id": "", + "from_dc_id": "" + } }, "auth.ImportAuthorization": { "desc": "Logs in a user using a key transmitted from his native data-center.", @@ -13215,8 +13496,11 @@ } }, "auth.InitPasskeyLogin": { - "desc": "", - "params": {} + "desc": "{schema}", + "params": { + "api_hash": "", + "api_id": "" + } }, "auth.LogOut": { "desc": "Logs out the user.", @@ -13691,8 +13975,10 @@ } }, "channels.GetFutureCreatorAfterLeave": { - "desc": "", - "params": {} + "desc": "{schema}", + "params": { + "channel": "" + } }, "channels.GetGroupsForDiscussion": { "desc": "Get all groups that can be used as discussion groups.", @@ -13743,6 +14029,7 @@ "desc": "Obtains a list of peers that can be used to send messages in a specific group", "params": { "flags": "Flags, see TL conditional fields", + "for_live_stories": "", "for_paid_reactions": "If set, fetches the list of peers that can be used to send paid reactions to messages of a specific peer.", "peer": "The group where we intend to send messages" } @@ -14061,6 +14348,7 @@ "flags": "Flags, see TL conditional fields", "id": "Telegram ID of the other user", "last_name": "Last name", + "note": "", "phone": "User's phone number, may be omitted to simply add the user to the contact list, without a phone number." } }, @@ -14170,10 +14458,6 @@ "phone_calls": "Most frequently called users" } }, - "contacts.ImportCard": { - "desc": "Returns general information on a user using his previously exported card as input.The app may use it to open a conversation without knowing the user's phone number.", - "params": {} - }, "contacts.ImportContactToken": { "desc": "Obtain user info from a temporary profile link.", "params": { @@ -14242,13 +14526,10 @@ } }, "contacts.UpdateContactNote": { - "desc": "", - "params": {} - }, - "folders.DeleteFolder": { - "desc": "Delete a peer folder", + "desc": "{schema}", "params": { - "folder_id": "Peer folder ID, for more info click here" + "id": "", + "note": "" } }, "folders.EditPeerFolders": { @@ -14451,6 +14732,7 @@ "flags": "Flags, see TL conditional fields", "msg_id": "Message ID of the message with the login button", "peer": "The location of the message", + "share_phone_number": "", "url": "URL used for link URL authorization, click here for more info \u00bb", "write_allowed": "Set this flag to allow the bot to send messages to you (if requested)" } @@ -14519,10 +14801,6 @@ "random_id": "The ad's unique ID." } }, - "messages.CraftStarGift": { - "desc": "", - "params": {} - }, "messages.CreateChat": { "desc": "Creates a new chat.", "params": { @@ -14533,8 +14811,17 @@ } }, "messages.CreateForumTopic": { - "desc": "", - "params": {} + "desc": "{schema}", + "params": { + "flags": "Flags, see TL conditional fields", + "icon_color": "", + "icon_emoji_id": "", + "peer": "", + "random_id": "", + "send_as": "", + "title": "", + "title_missing": "" + } }, "messages.DeleteChat": { "desc": "Delete a chat", @@ -14631,8 +14918,11 @@ } }, "messages.DeleteTopicHistory": { - "desc": "", - "params": {} + "desc": "{schema}", + "params": { + "peer": "", + "top_msg_id": "" + } }, "messages.DiscardEncryption": { "desc": "Cancels a request for creation and/or delete info on secret chat.", @@ -14700,8 +14990,16 @@ } }, "messages.EditForumTopic": { - "desc": "", - "params": {} + "desc": "{schema}", + "params": { + "closed": "", + "flags": "Flags, see TL conditional fields", + "hidden": "", + "icon_emoji_id": "", + "peer": "", + "title": "", + "topic_id": "" + } }, "messages.EditInlineBotMessage": { "desc": "Edit an inline bot message", @@ -14729,7 +15027,8 @@ "peer": "Where was the message sent", "quick_reply_shortcut_id": "If specified, edits a quick reply shortcut message, instead \u00bb.", "reply_markup": "Reply markup for inline keyboards", - "schedule_date": "Scheduled message date for scheduled messages" + "schedule_date": "Scheduled message date for scheduled messages", + "schedule_repeat_period": "" } }, "messages.EditQuickReplyShortcut": { @@ -14759,14 +15058,6 @@ "unfave": "Whether to add or remove a sticker from favorites" } }, - "messages.ForwardMessage": { - "desc": "Forwards single messages.", - "params": { - "id": "Forwarded message ID", - "peer": "User or chat where a message will be forwarded", - "random_id": "Unique client message ID required to prevent message resending" - } - }, "messages.ForwardMessages": { "desc": "Forwards messages by their IDs.", "params": { @@ -14775,6 +15066,7 @@ "background": "Whether to send the message in background", "drop_author": "Whether to forward messages without quoting the original author", "drop_media_captions": "Whether to strip captions from media", + "effect": "", "flags": "Flags, see TL conditional fields", "from_peer": "Source of messages", "id": "IDs of messages", @@ -14783,6 +15075,7 @@ "random_id": "Random ID to prevent resending of messages", "reply_to": "Can only contain an inputReplyToMonoForum, to forward messages to a monoforum topic (mutually exclusive with top_msg_id).", "schedule_date": "Scheduled message date for scheduled messages", + "schedule_repeat_period": "", "send_as": "Forward the messages as the specified peer", "silent": "Whether to send messages silently (no notification will be triggered on the destination clients)", "suggested_post": "Used to suggest a post to a channel, see here \u00bb for more info on the full flow.", @@ -14798,10 +15091,6 @@ "peer": "Chat" } }, - "messages.GetAllChats": { - "desc": "Get all chats, channels and supergroups", - "params": {} - }, "messages.GetAllDrafts": { "desc": "Return all message drafts.\nReturns all the latest updateDraftMessage updates related to all chats with drafts.", "params": {} @@ -14898,10 +15187,6 @@ "user_id": "User ID" } }, - "messages.GetCraftStarGifts": { - "desc": "", - "params": {} - }, "messages.GetCustomEmojiDocuments": { "desc": "Fetch custom emoji stickers \u00bb.", "params": { @@ -14965,7 +15250,7 @@ } }, "messages.GetEmojiGameInfo": { - "desc": "", + "desc": "{schema}", "params": {} }, "messages.GetEmojiGroups": { @@ -15075,12 +15360,23 @@ } }, "messages.GetForumTopics": { - "desc": "", - "params": {} + "desc": "{schema}", + "params": { + "flags": "Flags, see TL conditional fields", + "limit": "Maximum number of results to return, see pagination", + "offset_date": "Offsets for pagination, for more info click here", + "offset_id": "Offsets for pagination, for more info click here", + "offset_topic": "", + "peer": "", + "q": "" + } }, "messages.GetForumTopicsByID": { - "desc": "", - "params": {} + "desc": "{schema}", + "params": { + "peer": "", + "topics": "" + } }, "messages.GetFullChat": { "desc": "Get full info about a basic group.", @@ -15418,15 +15714,6 @@ "peer": "The currently open channel/bot." } }, - "messages.GetStatsURL": { - "desc": "Returns URL with the chat statistics. Currently this method can be used only for channels", - "params": { - "dark": "Pass true if a URL with the dark theme must be returned", - "flags": "Flags, see TL conditional fields", - "params": "Parameters from tg://statsrefresh?params=****** link", - "peer": "Chat identifier" - } - }, "messages.GetStickerSet": { "desc": "Get info about a stickerset", "params": { @@ -15494,10 +15781,6 @@ "message": "Message from which to extract the preview" } }, - "messages.GetWebViewResult": { - "desc": "", - "params": {} - }, "messages.HideAllChatJoinRequests": { "desc": "Dismiss or approve all join requests related to a specific chat or channel.", "params": { @@ -15660,8 +15943,13 @@ } }, "messages.ReorderPinnedForumTopics": { - "desc": "", - "params": {} + "desc": "{schema}", + "params": { + "flags": "Flags, see TL conditional fields", + "force": "", + "order": "", + "peer": "" + } }, "messages.ReorderPinnedSavedDialogs": { "desc": "Reorder pinned saved message dialogs \u00bb.", @@ -16018,6 +16306,7 @@ "reply_markup": "Reply markup for bot keyboards", "reply_to": "If set, indicates that the message should be sent in reply to the specified message or story.", "schedule_date": "Scheduled message date for scheduled messages", + "schedule_repeat_period": "", "send_as": "Send this message as the specified peer", "silent": "Send message silently (no notification should be triggered)", "suggested_post": "Used to suggest a post to a channel, see here \u00bb for more info on the full flow.", @@ -16044,6 +16333,7 @@ "reply_markup": "Reply markup for sending bot buttons", "reply_to": "If set, indicates that the message should be sent in reply to the specified message or story. Also used to quote other messages.", "schedule_date": "Scheduled message date for scheduled messages", + "schedule_repeat_period": "", "send_as": "Send this message as the specified peer", "silent": "Send this message silently (no notifications for the receivers)", "suggested_post": "Used to suggest a post to a channel, see here \u00bb for more info on the full flow.", @@ -16271,10 +16561,6 @@ "top_msg_id": "Topic ID" } }, - "messages.SetWebViewResult": { - "desc": "", - "params": {} - }, "messages.StartBot": { "desc": "Start a conversation with a bot using a deep linking parameter", "params": { @@ -16292,8 +16578,13 @@ } }, "messages.SummarizeText": { - "desc": "", - "params": {} + "desc": "{schema}", + "params": { + "flags": "Flags, see TL conditional fields", + "id": "", + "peer": "", + "to_lang": "" + } }, "messages.ToggleBotInAttachMenu": { "desc": "Enable or disable web bot attachment menu \u00bb", @@ -16426,8 +16717,12 @@ } }, "messages.UpdatePinnedForumTopic": { - "desc": "", - "params": {} + "desc": "{schema}", + "params": { + "peer": "", + "pinned": "", + "topic_id": "" + } }, "messages.UpdatePinnedMessage": { "desc": "Pin a message", @@ -16556,6 +16851,12 @@ "stargift": "The gift to convert." } }, + "payments.CraftStarGift": { + "desc": "{schema}", + "params": { + "stargift": "" + } + }, "payments.CreateStarGiftCollection": { "desc": "Create a star gift collection \u00bb.", "params": { @@ -16616,6 +16917,14 @@ "peer": "The affiliated peer" } }, + "payments.GetCraftStarGifts": { + "desc": "{schema}", + "params": { + "gift_id": "", + "limit": "Maximum number of results to return, see pagination", + "offset": "" + } + }, "payments.GetGiveawayInfo": { "desc": "Obtain information about a Telegram Premium giveaway \u00bb.", "params": { @@ -16651,6 +16960,7 @@ "attributes": "Optionally filter gifts with the specified attributes. If no attributes of a specific type are specified, all attributes of that type are allowed.", "attributes_hash": "If a previous call to the method was made and payments.resaleStarGifts.attributes_hash was set, pass it here to avoid returning any results if they haven't changed. Otherwise, set this flag and pass 0 to return payments.resaleStarGifts.attributes_hash and payments.resaleStarGifts.attributes, these two fields will not be set if this flag is not set.", "flags": "Flags, see TL conditional fields", + "for_craft": "", "gift_id": "Mandatory identifier of the base gift from which the collectible gift was upgraded.", "limit": "Maximum number of results to return, see pagination", "offset": "Offset for pagination. If not equal to an empty string, payments.resaleStarGifts.counters will not be set to avoid returning the counters every time a new page is fetched.", @@ -16672,6 +16982,7 @@ "desc": "Fetch the full list of gifts owned by a peer.", "params": { "collection_id": "Only returns gifts within the specified collection \u00bb.", + "exclude_hosted": "", "exclude_saved": "Exclude gifts pinned on the profile.", "exclude_unique": "Exclude collectible gifts \u00bb.", "exclude_unlimited": "Exclude gifts that do not have the starGift.limited flag set.", @@ -16682,20 +16993,28 @@ "limit": "Maximum number of results to return, see pagination", "offset": "Offset for pagination.", "peer": "Fetch only gifts owned by the specified peer, such as: a user, with peer=inputPeerUser; a channel, with peer=inputPeerChannel; a connected business user (when executing the method as a bot, over the business connection), with peer=inputPeerUser.", + "peer_color_available": "", "sort_by_value": "If set, sorts the gifts by price instead of reception date." } }, "payments.GetStarGiftActiveAuctions": { - "desc": "", - "params": {} + "desc": "{schema}", + "params": { + "hash": "" + } }, "payments.GetStarGiftAuctionAcquiredGifts": { - "desc": "", - "params": {} + "desc": "{schema}", + "params": { + "gift_id": "" + } }, "payments.GetStarGiftAuctionState": { - "desc": "", - "params": {} + "desc": "{schema}", + "params": { + "auction": "", + "version": "" + } }, "payments.GetStarGiftCollections": { "desc": "Fetches all star gift collections \u00bb of a peer.", @@ -16705,8 +17024,10 @@ } }, "payments.GetStarGiftUpgradeAttributes": { - "desc": "", - "params": {} + "desc": "{schema}", + "params": { + "gift_id": "" + } }, "payments.GetStarGiftUpgradePreview": { "desc": "Obtain a preview of the possible attributes (chosen randomly) a gift \u00bb can receive after upgrading it to a collectible gift \u00bb, see here \u00bb for more info.", @@ -16852,18 +17173,14 @@ "peer": "The owned peer." } }, - "payments.RequestRecurringPayment": { + "payments.ResolveStarGiftOffer": { "desc": "{schema}", "params": { - "invoice_media": "", - "recurring_init_charge": "", - "user_id": "" + "decline": "", + "flags": "Flags, see TL conditional fields", + "offer_msg_id": "" } }, - "payments.ResolveStarGiftOffer": { - "desc": "", - "params": {} - }, "payments.SaveStarGift": { "desc": "Display or remove a received gift \u00bb from our profile.", "params": { @@ -16885,8 +17202,16 @@ } }, "payments.SendStarGiftOffer": { - "desc": "", - "params": {} + "desc": "{schema}", + "params": { + "allow_paid_stars": "", + "duration": "", + "flags": "Flags, see TL conditional fields", + "peer": "", + "price": "", + "random_id": "", + "slug": "" + } }, "payments.SendStarsForm": { "desc": "Make a payment using Telegram Stars, see here \u00bb for more info.", @@ -17019,12 +17344,22 @@ } }, "phone.DeleteGroupCallMessages": { - "desc": "", - "params": {} + "desc": "{schema}", + "params": { + "call": "", + "flags": "Flags, see TL conditional fields", + "messages": "", + "report_spam": "" + } }, "phone.DeleteGroupCallParticipantMessages": { - "desc": "", - "params": {} + "desc": "{schema}", + "params": { + "call": "", + "flags": "Flags, see TL conditional fields", + "participant": "", + "report_spam": "" + } }, "phone.DiscardCall": { "desc": "Refuse or end running call", @@ -17099,8 +17434,10 @@ } }, "phone.GetGroupCallStars": { - "desc": "", - "params": {} + "desc": "{schema}", + "params": { + "call": "" + } }, "phone.GetGroupCallStreamChannels": { "desc": "Get info about RTMP streams in a group call or livestream.\nThis method should be invoked to the same group/channel-related DC used for downloading livestream chunks.\nAs usual, the media DC is preferred, if available.", @@ -17111,6 +17448,8 @@ "phone.GetGroupCallStreamRtmpUrl": { "desc": "Get RTMP URL and stream key for RTMP livestreams. Can be used even before creating the actual RTMP livestream with phone.createGroupCall (the rtmp_stream flag must be set).", "params": { + "flags": "Flags, see TL conditional fields", + "live_story": "", "peer": "Peer to livestream into", "revoke": "Whether to revoke the previous stream key or simply return the existing one" } @@ -17214,8 +17553,11 @@ } }, "phone.SaveDefaultSendAs": { - "desc": "", - "params": {} + "desc": "{schema}", + "params": { + "call": "", + "send_as": "" + } }, "phone.SendConferenceCallBroadcast": { "desc": "Broadcast a blockchain block to all members of a conference call, see here \u00bb for more info.", @@ -17225,12 +17567,22 @@ } }, "phone.SendGroupCallEncryptedMessage": { - "desc": "", - "params": {} + "desc": "{schema}", + "params": { + "call": "", + "encrypted_message": "" + } }, "phone.SendGroupCallMessage": { - "desc": "", - "params": {} + "desc": "{schema}", + "params": { + "allow_paid_stars": "", + "call": "", + "flags": "Flags, see TL conditional fields", + "message": "", + "random_id": "", + "send_as": "" + } }, "phone.SendSignalingData": { "desc": "Send VoIP signaling data", @@ -17272,7 +17624,9 @@ "call": "Group call", "flags": "Flags, see TL conditional fields", "join_muted": "Whether all users will that join this group call are muted by default upon joining the group call", - "reset_invite_hash": "Invalidate existing invite links" + "messages_enabled": "", + "reset_invite_hash": "Invalidate existing invite links", + "send_paid_messages_stars": "" } }, "phone.ToggleGroupCallStartSubscription": { @@ -17778,8 +18132,20 @@ } }, "stories.StartLive": { - "desc": "", - "params": {} + "desc": "{schema}", + "params": { + "caption": "", + "entities": "Message entities for styled text", + "flags": "Flags, see TL conditional fields", + "messages_enabled": "", + "noforwards": "", + "peer": "", + "pinned": "", + "privacy_rules": "", + "random_id": "", + "rtmp_stream": "", + "send_paid_messages_stars": "" + } }, "stories.ToggleAllStoriesHidden": { "desc": "Hide the active stories of a specific peer, preventing them from being displayed on the action bar on the homescreen.", @@ -17955,8 +18321,11 @@ } }, "users.SuggestBirthday": { - "desc": "", - "params": {} + "desc": "{schema}", + "params": { + "birthday": "", + "id": "" + } } }, "type": { @@ -18719,9 +19088,6 @@ "PremiumGiftCodeOption": { "desc": "Giveaway option." }, - "PremiumGiftOption": { - "desc": "Telegram Premium gift option" - }, "PremiumSubscriptionOption": { "desc": "Telegram Premium subscription option" }, @@ -19433,9 +19799,6 @@ "messages.MessageEditData": { "desc": "Message edit data for media" }, - "messages.MessageEmpty": { - "desc": "" - }, "messages.MessageReactionsList": { "desc": "List of peers that reacted to a specific message" }, @@ -19514,9 +19877,6 @@ "messages.WebPagePreview": { "desc": "Represents a webpage preview." }, - "messages.WebViewResult": { - "desc": "" - }, "payments.BankCardData": { "desc": "Credit card info, provided by the card's bank(s)" }, diff --git a/compiler/api/source/main_api.tl b/compiler/api/source/main_api.tl index 903f6f3b..29d711d9 100644 --- a/compiler/api/source/main_api.tl +++ b/compiler/api/source/main_api.tl @@ -115,9 +115,9 @@ channelForbidden#17d493d5 flags:# broadcast:flags.5?true megagroup:flags.8?true chatFull#2633421b flags:# can_set_username:flags.7?true has_scheduled:flags.8?true translations_disabled:flags.19?true id:long about:string participants:ChatParticipants chat_photo:flags.2?Photo notify_settings:PeerNotifySettings exported_invite:flags.13?ExportedChatInvite bot_info:flags.3?Vector pinned_msg_id:flags.6?int folder_id:flags.11?int call:flags.12?InputGroupCall ttl_period:flags.14?int groupcall_default_join_as:flags.15?Peer theme_emoticon:flags.16?string requests_pending:flags.17?int recent_requesters:flags.17?Vector available_reactions:flags.18?ChatReactions reactions_limit:flags.20?int = ChatFull; channelFull#e4e0b29d flags:# can_view_participants:flags.3?true can_set_username:flags.6?true can_set_stickers:flags.7?true hidden_prehistory:flags.10?true can_set_location:flags.16?true has_scheduled:flags.19?true can_view_stats:flags.20?true blocked:flags.22?true flags2:# can_delete_channel:flags2.0?true antispam:flags2.1?true participants_hidden:flags2.2?true translations_disabled:flags2.3?true stories_pinned_available:flags2.5?true view_forum_as_messages:flags2.6?true restricted_sponsored:flags2.11?true can_view_revenue:flags2.12?true paid_media_allowed:flags2.14?true can_view_stars_revenue:flags2.15?true paid_reactions_available:flags2.16?true stargifts_available:flags2.19?true paid_messages_available:flags2.20?true id:long about:string participants_count:flags.0?int admins_count:flags.1?int kicked_count:flags.2?int banned_count:flags.2?int online_count:flags.13?int read_inbox_max_id:int read_outbox_max_id:int unread_count:int chat_photo:Photo notify_settings:PeerNotifySettings exported_invite:flags.23?ExportedChatInvite bot_info:Vector migrated_from_chat_id:flags.4?long migrated_from_max_id:flags.4?int pinned_msg_id:flags.5?int stickerset:flags.8?StickerSet available_min_id:flags.9?int folder_id:flags.11?int linked_chat_id:flags.14?long location:flags.15?ChannelLocation slowmode_seconds:flags.17?int slowmode_next_send_date:flags.18?int stats_dc:flags.12?int pts:int call:flags.21?InputGroupCall ttl_period:flags.24?int pending_suggestions:flags.25?Vector groupcall_default_join_as:flags.26?Peer theme_emoticon:flags.27?string requests_pending:flags.28?int recent_requesters:flags.28?Vector default_send_as:flags.29?Peer available_reactions:flags.30?ChatReactions reactions_limit:flags2.13?int stories:flags2.4?PeerStories wallpaper:flags2.7?WallPaper boosts_applied:flags2.8?int boosts_unrestrict:flags2.9?int emojiset:flags2.10?StickerSet bot_verification:flags2.17?BotVerification stargifts_count:flags2.18?int send_paid_messages_stars:flags2.21?long main_tab:flags2.22?ProfileTab = ChatFull; -chatParticipant#c02d4007 user_id:long inviter_id:long date:int = ChatParticipant; -chatParticipantCreator#e46bcee4 user_id:long = ChatParticipant; -chatParticipantAdmin#a0933f5b user_id:long inviter_id:long date:int = ChatParticipant; +chatParticipant#38e79fde flags:# user_id:long inviter_id:long date:int rank:flags.0?string = ChatParticipant; +chatParticipantCreator#e1f867b8 flags:# user_id:long rank:flags.0?string = ChatParticipant; +chatParticipantAdmin#360d5d2 flags:# user_id:long inviter_id:long date:int rank:flags.0?string = ChatParticipant; chatParticipantsForbidden#8763d3e1 flags:# chat_id:long self_participant:flags.0?ChatParticipant = ChatParticipants; chatParticipants#3cbc93f8 chat_id:long participants:Vector version:int = ChatParticipants; @@ -126,7 +126,7 @@ chatPhotoEmpty#37c1011c = ChatPhoto; chatPhoto#1c6e1c11 flags:# has_video:flags.0?true photo_id:long stripped_thumb:flags.1?bytes dc_id:int = ChatPhoto; messageEmpty#90a6ca84 flags:# id:int peer_id:flags.0?Peer = Message; -message#9cb490e9 flags:# out:flags.1?true mentioned:flags.4?true media_unread:flags.5?true silent:flags.13?true post:flags.14?true from_scheduled:flags.18?true legacy:flags.19?true edit_hide:flags.21?true pinned:flags.24?true noforwards:flags.26?true invert_media:flags.27?true flags2:# offline:flags2.1?true video_processing_pending:flags2.4?true paid_suggested_post_stars:flags2.8?true paid_suggested_post_ton:flags2.9?true id:int from_id:flags.8?Peer from_boosts_applied:flags.29?int peer_id:Peer saved_peer_id:flags.28?Peer fwd_from:flags.2?MessageFwdHeader via_bot_id:flags.11?long via_business_bot_id:flags2.0?long reply_to:flags.3?MessageReplyHeader date:int message:string media:flags.9?MessageMedia reply_markup:flags.6?ReplyMarkup entities:flags.7?Vector views:flags.10?int forwards:flags.10?int replies:flags.23?MessageReplies edit_date:flags.15?int post_author:flags.16?string grouped_id:flags.17?long reactions:flags.20?MessageReactions restriction_reason:flags.22?Vector ttl_period:flags.25?int quick_reply_shortcut_id:flags.30?int effect:flags2.2?long factcheck:flags2.3?FactCheck report_delivery_until_date:flags2.5?int paid_message_stars:flags2.6?long suggested_post:flags2.7?SuggestedPost schedule_repeat_period:flags2.10?int summary_from_language:flags2.11?string = Message; +message#3ae56482 flags:# out:flags.1?true mentioned:flags.4?true media_unread:flags.5?true silent:flags.13?true post:flags.14?true from_scheduled:flags.18?true legacy:flags.19?true edit_hide:flags.21?true pinned:flags.24?true noforwards:flags.26?true invert_media:flags.27?true flags2:# offline:flags2.1?true video_processing_pending:flags2.4?true paid_suggested_post_stars:flags2.8?true paid_suggested_post_ton:flags2.9?true id:int from_id:flags.8?Peer from_boosts_applied:flags.29?int from_rank:flags2.12?string peer_id:Peer saved_peer_id:flags.28?Peer fwd_from:flags.2?MessageFwdHeader via_bot_id:flags.11?long via_business_bot_id:flags2.0?long reply_to:flags.3?MessageReplyHeader date:int message:string media:flags.9?MessageMedia reply_markup:flags.6?ReplyMarkup entities:flags.7?Vector views:flags.10?int forwards:flags.10?int replies:flags.23?MessageReplies edit_date:flags.15?int post_author:flags.16?string grouped_id:flags.17?long reactions:flags.20?MessageReactions restriction_reason:flags.22?Vector ttl_period:flags.25?int quick_reply_shortcut_id:flags.30?int effect:flags2.2?long factcheck:flags2.3?FactCheck report_delivery_until_date:flags2.5?int paid_message_stars:flags2.6?long suggested_post:flags2.7?SuggestedPost schedule_repeat_period:flags2.10?int summary_from_language:flags2.11?string = Message; messageService#7a800e0a flags:# out:flags.1?true mentioned:flags.4?true media_unread:flags.5?true reactions_are_possible:flags.9?true silent:flags.13?true post:flags.14?true legacy:flags.19?true id:int from_id:flags.8?Peer peer_id:Peer saved_peer_id:flags.28?Peer reply_to:flags.3?MessageReplyHeader date:int action:MessageAction reactions:flags.20?MessageReactions ttl_period:flags.25?int = Message; messageMediaEmpty#3ded6320 = MessageMedia; @@ -211,6 +211,8 @@ messageActionStarGiftPurchaseOffer#774278d4 flags:# accepted:flags.0?true declin messageActionStarGiftPurchaseOfferDeclined#73ada76b flags:# expired:flags.0?true gift:StarGift price:StarsAmount = MessageAction; messageActionNewCreatorPending#b07ed085 new_creator_id:long = MessageAction; messageActionChangeCreator#e188503b new_creator_id:long = MessageAction; +messageActionNoForwardsToggle#bf7d6572 prev_value:Bool new_value:Bool = MessageAction; +messageActionNoForwardsRequest#3e2793ba flags:# expired:flags.0?true prev_value:Bool new_value:Bool = 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; 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; @@ -263,7 +265,7 @@ inputReportReasonFake#f5ddd6e7 = ReportReason; inputReportReasonIllegalDrugs#a8eb2be = ReportReason; inputReportReasonPersonalDetails#9ec7863d = ReportReason; -userFull#a02bc13e 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:flags.15?ChatTheme 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 stars_rating:flags2.17?StarsRating stars_my_pending_rating:flags2.18?StarsRating stars_my_pending_rating_date:flags2.18?int main_tab:flags2.20?ProfileTab saved_music:flags2.21?Document note:flags2.22?TextWithEntities = UserFull; +userFull#a02bc13e 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 noforwards_my_enabled:flags2.23?true noforwards_peer_enabled:flags2.24?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:flags.15?ChatTheme 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 stars_rating:flags2.17?StarsRating stars_my_pending_rating:flags2.18?StarsRating stars_my_pending_rating_date:flags2.18?int main_tab:flags2.20?ProfileTab saved_music:flags2.21?Document note:flags2.22?TextWithEntities = UserFull; contact#145ade0b user_id:long mutual:Bool = Contact; @@ -465,6 +467,7 @@ updateStarGiftAuctionState#48e246c2 gift_id:long state:StarGiftAuctionState = Up updateStarGiftAuctionUserState#dc58f31e gift_id:long user_state:StarGiftAuctionUserState = Update; updateEmojiGameInfo#fb9c547a info:messages.EmojiGameInfo = Update; updateStarGiftCraftFail#ac072444 = Update; +updateChatParticipantRank#bd8367b9 chat_id:long user_id:long rank:string version:int = Update; updates.state#a56c2a3e pts:int qts:int date:int seq:int unread_count:int = updates.State; @@ -735,6 +738,7 @@ messageEntityBankCard#761e6af4 offset:int length:int = MessageEntity; messageEntitySpoiler#32ca960f offset:int length:int = MessageEntity; messageEntityCustomEmoji#c8cf05f8 offset:int length:int document_id:long = MessageEntity; messageEntityBlockquote#f1ccaaac flags:# collapsed:flags.0?true offset:int length:int = MessageEntity; +messageEntityFormattedDate#904ac7c7 flags:# relative:flags.0?true short_time:flags.1?true long_time:flags.2?true short_date:flags.3?true long_date:flags.4?true day_of_week:flags.5?true offset:int length:int date:int = MessageEntity; inputChannelEmpty#ee8c1e86 = InputChannel; inputChannel#f35aec28 channel_id:long access_hash:long = InputChannel; @@ -751,11 +755,11 @@ updates.channelDifference#2064674e flags:# final:flags.0?true pts:int timeout:fl channelMessagesFilterEmpty#94d42ee7 = ChannelMessagesFilter; channelMessagesFilter#cd77d957 flags:# exclude_new_messages:flags.1?true ranges:Vector = ChannelMessagesFilter; -channelParticipant#cb397619 flags:# user_id:long date:int subscription_until_date:flags.0?int = ChannelParticipant; -channelParticipantSelf#4f607bef flags:# via_request:flags.0?true user_id:long inviter_id:long date:int subscription_until_date:flags.1?int = ChannelParticipant; +channelParticipant#1bd54456 flags:# user_id:long date:int subscription_until_date:flags.0?int rank:flags.2?string = ChannelParticipant; +channelParticipantSelf#a9478a1a flags:# via_request:flags.0?true user_id:long inviter_id:long date:int subscription_until_date:flags.1?int rank:flags.2?string = ChannelParticipant; channelParticipantCreator#2fe601d3 flags:# user_id:long admin_rights:ChatAdminRights rank:flags.0?string = ChannelParticipant; channelParticipantAdmin#34c3bb53 flags:# can_edit:flags.0?true self:flags.1?true user_id:long inviter_id:flags.1?long promoted_by:long date:int admin_rights:ChatAdminRights rank:flags.2?string = ChannelParticipant; -channelParticipantBanned#6df8014e flags:# left:flags.0?true peer:Peer kicked_by:long date:int banned_rights:ChatBannedRights = ChannelParticipant; +channelParticipantBanned#d5f0ad91 flags:# left:flags.0?true peer:Peer kicked_by:long date:int banned_rights:ChatBannedRights rank:flags.2?string = ChannelParticipant; channelParticipantLeft#1b03f006 peer:Peer = ChannelParticipant; channelParticipantsRecent#de3f3c79 = ChannelParticipantsFilter; @@ -1073,12 +1077,13 @@ channelAdminLogEventActionChangeEmojiStickerSet#46d840ab prev_stickerset:InputSt channelAdminLogEventActionToggleSignatureProfiles#60a79c79 new_value:Bool = ChannelAdminLogEventAction; channelAdminLogEventActionParticipantSubExtend#64642db3 prev_participant:ChannelParticipant new_participant:ChannelParticipant = ChannelAdminLogEventAction; channelAdminLogEventActionToggleAutotranslation#c517f77e new_value:Bool = ChannelAdminLogEventAction; +channelAdminLogEventActionParticipantEditRank#5806b4ec user_id:long prev_rank:string new_rank:string = ChannelAdminLogEventAction; channelAdminLogEvent#1fad68cd id:long date:int user_id:long action:ChannelAdminLogEventAction = ChannelAdminLogEvent; channels.adminLogResults#ed8af74d events:Vector chats:Vector users:Vector = channels.AdminLogResults; -channelAdminLogEventsFilter#ea107ae4 flags:# join:flags.0?true leave:flags.1?true invite:flags.2?true ban:flags.3?true unban:flags.4?true kick:flags.5?true unkick:flags.6?true promote:flags.7?true demote:flags.8?true info:flags.9?true settings:flags.10?true pinned:flags.11?true edit:flags.12?true delete:flags.13?true group_call:flags.14?true invites:flags.15?true send:flags.16?true forums:flags.17?true sub_extend:flags.18?true = ChannelAdminLogEventsFilter; +channelAdminLogEventsFilter#ea107ae4 flags:# join:flags.0?true leave:flags.1?true invite:flags.2?true ban:flags.3?true unban:flags.4?true kick:flags.5?true unkick:flags.6?true promote:flags.7?true demote:flags.8?true info:flags.9?true settings:flags.10?true pinned:flags.11?true edit:flags.12?true delete:flags.13?true group_call:flags.14?true invites:flags.15?true send:flags.16?true forums:flags.17?true sub_extend:flags.18?true edit_rank:flags.19?true = ChannelAdminLogEventsFilter; popularContact#5ce14175 client_id:long importers:int = PopularContact; @@ -1236,9 +1241,9 @@ chatOnlines#f041e250 onlines:int = ChatOnlines; statsURL#47a971e0 url:string = StatsURL; -chatAdminRights#5fb224d5 flags:# change_info:flags.0?true post_messages:flags.1?true edit_messages:flags.2?true delete_messages:flags.3?true ban_users:flags.4?true invite_users:flags.5?true pin_messages:flags.7?true add_admins:flags.9?true anonymous:flags.10?true manage_call:flags.11?true other:flags.12?true manage_topics:flags.13?true post_stories:flags.14?true edit_stories:flags.15?true delete_stories:flags.16?true manage_direct_messages:flags.17?true = ChatAdminRights; +chatAdminRights#5fb224d5 flags:# change_info:flags.0?true post_messages:flags.1?true edit_messages:flags.2?true delete_messages:flags.3?true ban_users:flags.4?true invite_users:flags.5?true pin_messages:flags.7?true add_admins:flags.9?true anonymous:flags.10?true manage_call:flags.11?true other:flags.12?true manage_topics:flags.13?true post_stories:flags.14?true edit_stories:flags.15?true delete_stories:flags.16?true manage_direct_messages:flags.17?true manage_ranks:flags.18?true = ChatAdminRights; -chatBannedRights#9f120418 flags:# view_messages:flags.0?true send_messages:flags.1?true send_media:flags.2?true send_stickers:flags.3?true send_gifs:flags.4?true send_games:flags.5?true send_inline:flags.6?true embed_links:flags.7?true send_polls:flags.8?true change_info:flags.10?true invite_users:flags.15?true pin_messages:flags.17?true manage_topics:flags.18?true send_photos:flags.19?true send_videos:flags.20?true send_roundvideos:flags.21?true send_audios:flags.22?true send_voices:flags.23?true send_docs:flags.24?true send_plain:flags.25?true until_date:int = ChatBannedRights; +chatBannedRights#9f120418 flags:# view_messages:flags.0?true send_messages:flags.1?true send_media:flags.2?true send_stickers:flags.3?true send_gifs:flags.4?true send_games:flags.5?true send_inline:flags.6?true embed_links:flags.7?true send_polls:flags.8?true change_info:flags.10?true invite_users:flags.15?true pin_messages:flags.17?true manage_topics:flags.18?true send_photos:flags.19?true send_videos:flags.20?true send_roundvideos:flags.21?true send_audios:flags.22?true send_voices:flags.23?true send_docs:flags.24?true send_plain:flags.25?true edit_rank:flags.26?true until_date:int = ChatBannedRights; inputWallPaper#e630b979 id:long access_hash:long = InputWallPaper; inputWallPaperSlug#72091c80 slug:string = InputWallPaper; @@ -1272,7 +1277,7 @@ folderPeer#e9baa668 peer:Peer folder_id:int = FolderPeer; messages.searchCounter#e844ebff flags:# inexact:flags.1?true filter:MessagesFilter count:int = messages.SearchCounter; -urlAuthResultRequest#32fabf1a flags:# request_write_access:flags.0?true request_phone_number:flags.1?true bot:User domain:string browser:flags.2?string platform:flags.2?string ip:flags.2?string region:flags.2?string = UrlAuthResult; +urlAuthResultRequest#f8f8eb1e flags:# request_write_access:flags.0?true request_phone_number:flags.1?true match_codes_first:flags.5?true bot:User domain:string browser:flags.2?string platform:flags.2?string ip:flags.2?string region:flags.2?string match_codes:flags.3?Vector user_id_hint:flags.4?long = UrlAuthResult; urlAuthResultAccepted#623a8fa0 flags:# url:flags.0?string = UrlAuthResult; urlAuthResultDefault#a9d6db1f = UrlAuthResult; @@ -2441,8 +2446,8 @@ messages.getEmojiKeywordsDifference#1508b6af lang_code:string from_version:int = messages.getEmojiKeywordsLanguages#4e9963b2 lang_codes:Vector = Vector; messages.getEmojiURL#d5b10c26 lang_code:string = EmojiURL; messages.getSearchCounters#1bbcf300 flags:# peer:InputPeer saved_peer_id:flags.2?InputPeer top_msg_id:flags.0?int filters:Vector = Vector; -messages.requestUrlAuth#198fb446 flags:# peer:flags.1?InputPeer msg_id:flags.1?int button_id:flags.1?int url:flags.2?string = UrlAuthResult; -messages.acceptUrlAuth#b12c7125 flags:# write_allowed:flags.0?true share_phone_number:flags.3?true peer:flags.1?InputPeer msg_id:flags.1?int button_id:flags.1?int url:flags.2?string = UrlAuthResult; +messages.requestUrlAuth#894cc99c flags:# peer:flags.1?InputPeer msg_id:flags.1?int button_id:flags.1?int url:flags.2?string in_app_origin:flags.3?string = UrlAuthResult; +messages.acceptUrlAuth#67a3f0de flags:# write_allowed:flags.0?true share_phone_number:flags.3?true peer:flags.1?InputPeer msg_id:flags.1?int button_id:flags.1?int url:flags.2?string match_code:flags.4?string = UrlAuthResult; messages.hidePeerSettingsBar#4facb138 peer:InputPeer = Bool; messages.getScheduledHistory#f516760b peer:InputPeer hash:long = messages.Messages; messages.getScheduledMessages#bdbb0464 peer:InputPeer id:Vector = messages.Messages; @@ -2480,7 +2485,7 @@ messages.getSearchResultsCalendar#6aa3f6bd flags:# peer:InputPeer saved_peer_id: messages.getSearchResultsPositions#9c7f2f10 flags:# peer:InputPeer saved_peer_id:flags.2?InputPeer filter:MessagesFilter offset_id:int limit:int = messages.SearchResultsPositions; messages.hideChatJoinRequest#7fe7e815 flags:# approved:flags.0?true peer:InputPeer user_id:InputUser = Updates; messages.hideAllChatJoinRequests#e085f4ea flags:# approved:flags.0?true peer:InputPeer link:flags.1?string = Updates; -messages.toggleNoForwards#b11eafa2 peer:InputPeer enabled:Bool = Updates; +messages.toggleNoForwards#b2081a35 flags:# peer:InputPeer enabled:Bool request_msg_id:flags.0?int = Updates; messages.saveDefaultSendAs#ccfddf96 peer:InputPeer send_as:InputPeer = Bool; messages.sendReaction#d30d78d4 flags:# big:flags.1?true add_to_recent:flags.2?true peer:InputPeer msg_id:int reaction:flags.0?Vector = Updates; messages.getMessagesReactions#8bba90e6 peer:InputPeer id:Vector = Updates; @@ -2573,6 +2578,11 @@ messages.createForumTopic#2f98c3d5 flags:# title_missing:flags.4?true peer:Input messages.deleteTopicHistory#d2816f10 peer:InputPeer top_msg_id:int = messages.AffectedHistory; messages.getEmojiGameInfo#fb7e8ca7 = messages.EmojiGameInfo; messages.summarizeText#9d4104e2 flags:# peer:InputPeer id:int to_lang:flags.0?string = TextWithEntities; +messages.editChatCreator#f743b857 peer:InputPeer user_id:InputUser password:InputCheckPasswordSRP = Updates; +messages.getFutureChatCreatorAfterLeave#3b7d0ea6 peer:InputPeer = User; +messages.editChatParticipantRank#a00f32b0 peer:InputPeer participant:InputPeer rank:string = Updates; +messages.declineUrlAuth#35436bbc url:string = Bool; +messages.checkUrlAuthMatchCode#c9a47b0b url:string match_code:string = Bool; updates.getState#edd4882a = updates.State; updates.getDifference#19c2f763 flags:# pts:int pts_limit:flags.1?int pts_total_limit:flags.0?int date:int qts:int qts_limit:flags.2?int = updates.Difference; @@ -2628,7 +2638,7 @@ channels.getParticipant#a0ab6cc6 channel:InputChannel participant:InputPeer = ch channels.getChannels#a7f6bbb id:Vector = messages.Chats; channels.getFullChannel#8736a09 channel:InputChannel = messages.ChatFull; channels.createChannel#91006707 flags:# broadcast:flags.0?true megagroup:flags.1?true for_import:flags.3?true forum:flags.5?true title:string about:string geo_point:flags.2?InputGeoPoint address:flags.2?string ttl_period:flags.4?int = Updates; -channels.editAdmin#d33c8902 channel:InputChannel user_id:InputUser admin_rights:ChatAdminRights rank:string = Updates; +channels.editAdmin#9a98ad68 flags:# channel:InputChannel user_id:InputUser admin_rights:ChatAdminRights rank:flags.0?string = Updates; channels.editTitle#566decd0 channel:InputChannel title:string = Updates; channels.editPhoto#f12e57c9 channel:InputChannel photo:InputChatPhoto = Updates; channels.checkUsername#10e6bd2c channel:InputChannel username:string = Bool; @@ -2649,7 +2659,6 @@ channels.togglePreHistoryHidden#eabbb94c channel:InputChannel enabled:Bool = Upd channels.getLeftChannels#8341ecc0 offset:int = messages.Chats; channels.getGroupsForDiscussion#f5dad378 = messages.Chats; channels.setDiscussionGroup#40582bb2 broadcast:InputChannel group:InputChannel = Bool; -channels.editCreator#8f38cd1f channel:InputChannel user_id:InputUser password:InputCheckPasswordSRP = Updates; channels.editLocation#58e63f6d channel:InputChannel geo_point:InputGeoPoint address:string = Bool; channels.toggleSlowMode#edd49ef0 channel:InputChannel seconds:int = Updates; channels.getInactiveChannels#11e831ee = messages.InactiveChats; @@ -2678,7 +2687,6 @@ channels.toggleAutotranslation#167fc0a1 channel:InputChannel enabled:Bool = Upda channels.getMessageAuthor#ece2a0e6 channel:InputChannel id:int = User; channels.checkSearchPostsFlood#22567115 flags:# query:flags.0?string = SearchPostsFlood; channels.setMainProfileTab#3583fcb1 channel:InputChannel tab:ProfileTab = Bool; -channels.getFutureCreatorAfterLeave#a00918af channel:InputChannel = User; bots.sendCustomRequest#aa2769ed custom_method:string params:DataJSON = DataJSON; bots.answerWebhookJSONQuery#e6213f4d query_id:long data:DataJSON = Bool; @@ -2911,4 +2919,4 @@ smsjobs.finishJob#4f1ebf24 flags:# job_id:string error:flags.0?string = Bool; fragment.getCollectibleInfo#be1e85ba collectible:InputCollectible = fragment.CollectibleInfo; -// LAYER 222 +// LAYER 223 diff --git a/compiler/api/template/combinator.txt b/compiler/api/template/combinator.txt index 9e938771..973e8b48 100644 --- a/compiler/api/template/combinator.txt +++ b/compiler/api/template/combinator.txt @@ -10,7 +10,7 @@ from typing import Any {warning} -class {name}({base}): # type: ignore +class {name}({base}): """{docstring} """ diff --git a/pyrogram/__init__.py b/pyrogram/__init__.py index 24c21ea6..2103a722 100644 --- a/pyrogram/__init__.py +++ b/pyrogram/__init__.py @@ -1,6 +1,6 @@ from __future__ import annotations -__version__ = "v0.3.222" +__version__ = "v0.3.223" __license__ = "MIT License" from concurrent.futures.thread import ThreadPoolExecutor diff --git a/pyrogram/methods/bots/send_game.py b/pyrogram/methods/bots/send_game.py index c5d4510b..faafa91c 100644 --- a/pyrogram/methods/bots/send_game.py +++ b/pyrogram/methods/bots/send_game.py @@ -1,7 +1,12 @@ from __future__ import annotations +from typing import TYPE_CHECKING + import pyrogram -from pyrogram import raw, types, utils +from pyrogram import enums, raw, types, utils + +if TYPE_CHECKING: + from datetime import datetime class SendGame: @@ -13,9 +18,23 @@ async def send_game( message_thread_id: int | None = None, business_connection_id: str | None = None, reply_to_message_id: int | None = None, + reply_to_story_id: int | None = None, + reply_to_chat_id: int | str | None = None, + quote_text: str | None = None, + quote_entities: list[types.MessageEntity] | None = None, + parse_mode: enums.ParseMode | None = None, + schedule_date: datetime | None = None, + schedule_repeat_period: int | None = None, protect_content: bool | None = None, allow_paid_broadcast: bool | None = None, + allow_paid_stars: int | None = None, message_effect_id: int | None = None, + quick_reply_shortcut: str | int | None = None, + send_as: int | str | None = None, + background: bool | None = None, + clear_draft: bool | None = None, + update_stickersets_order: bool | None = None, + suggested_post: types.SuggestedPost | None = None, reply_markup: types.InlineKeyboardMarkup | types.ReplyKeyboardMarkup | types.ReplyKeyboardRemove @@ -60,6 +79,49 @@ async def send_game( message_effect_id (``int`` ``64-bit``, *optional*): Unique identifier of the message effect to be added to the message; for private chats only. + reply_to_story_id (``int``, *optional*): + If the message is a reply, ID of the target story. + + reply_to_chat_id (``int`` | ``str``, *optional*): + Unique identifier for the origin chat. + for reply to message from another chat. + You can also use chat public link in form of *t.me/* (str). + + quote_text (``str``, *optional*): + Text to quote. + for reply_to_message only. + + quote_entities (List of :obj:`~pyrogram.types.MessageEntity`, *optional*): + List of special entities that appear in quote_text, which can be specified instead of *parse_mode*. + for reply_to_message only. + + schedule_date (:py:obj:`~datetime.datetime`, *optional*): + Date when the message will be automatically sent. + + schedule_repeat_period (``int``, *optional*): + Repeat period of the scheduled message. + + allow_paid_stars (``int``, *optional*): + Amount of stars to pay for the message; for bots only. + + quick_reply_shortcut (``str`` | ``int``, *optional*): + Quick reply shortcut identifier or name. + + send_as (``int`` | ``str``, *optional*): + Unique identifier (int) or username (str) of the chat to send the message as. + + background (``bool``, *optional*): + Pass True to send the message in the background. + + clear_draft (``bool``, *optional*): + Pass True to clear the draft. + + update_stickersets_order (``bool``, *optional*): + Pass True to update the stickersets order. + + suggested_post (:obj:`~pyrogram.types.SuggestedPost`, *optional*): + Suggested post information. + reply_markup (:obj:`~pyrogram.types.InlineKeyboardMarkup`, *optional*): An object for an inline keyboard. If empty, one ‘Play game_title’ button will be shown automatically. If not empty, the first button must launch the game. @@ -76,7 +138,11 @@ async def send_game( client=self, chat_id=chat_id, reply_to_message_id=reply_to_message_id, + reply_to_story_id=reply_to_story_id, message_thread_id=message_thread_id, + reply_to_chat_id=reply_to_chat_id, + quote_text=quote_text, + quote_entities=quote_entities, ) peer = utils.get_input_peer(await self.resolve_peer(chat_id)) @@ -96,9 +162,24 @@ async def send_game( silent=disable_notification or None, reply_to=reply_to, random_id=self.rnd_id(), + schedule_date=utils.datetime_to_timestamp(schedule_date), noforwards=protect_content, allow_paid_floodskip=allow_paid_broadcast, effect=message_effect_id, + background=background, + clear_draft=clear_draft, + update_stickersets_order=update_stickersets_order, + schedule_repeat_period=schedule_repeat_period, + send_as=utils.get_input_peer(await self.resolve_peer(send_as)) + if send_as + else None, + quick_reply_shortcut=await utils.get_input_quick_reply_shortcut( + quick_reply_shortcut, + ) + if quick_reply_shortcut + else None, + allow_paid_stars=allow_paid_stars, + suggested_post=await suggested_post.write() if suggested_post else None, reply_markup=await reply_markup.write(self) if reply_markup else None, ) if business_connection_id is not None: diff --git a/pyrogram/methods/messages/delete_messages.py b/pyrogram/methods/messages/delete_messages.py index c87ce3d4..e25327cc 100644 --- a/pyrogram/methods/messages/delete_messages.py +++ b/pyrogram/methods/messages/delete_messages.py @@ -1,6 +1,6 @@ from __future__ import annotations -from typing import TYPE_CHECKING +from typing import TYPE_CHECKING, cast import pyrogram from pyrogram import raw, utils @@ -61,7 +61,7 @@ async def delete_messages( r = await self.invoke( raw.functions.channels.DeleteMessages( channel=cast( - raw.base.InputChannel, utils.get_input_channel(peer) + "raw.base.InputChannel", utils.get_input_channel(peer) ), id=message_ids, ), diff --git a/pyrogram/methods/messages/delete_scheduled_messages.py b/pyrogram/methods/messages/delete_scheduled_messages.py index ca8f5ba7..5cda2d66 100644 --- a/pyrogram/methods/messages/delete_scheduled_messages.py +++ b/pyrogram/methods/messages/delete_scheduled_messages.py @@ -51,7 +51,7 @@ async def delete_scheduled_messages( await self.invoke( raw.functions.messages.DeleteScheduledMessages( - peer=peer, # type: ignore + peer=peer, id=ids, ), ) diff --git a/pyrogram/methods/messages/forward_messages.py b/pyrogram/methods/messages/forward_messages.py index f006b9de..5e7be666 100644 --- a/pyrogram/methods/messages/forward_messages.py +++ b/pyrogram/methods/messages/forward_messages.py @@ -19,9 +19,19 @@ async def forward_messages( message_thread_id: int | None = None, disable_notification: bool | None = None, schedule_date: datetime | None = None, + schedule_repeat_period: int | None = None, protect_content: bool | None = None, allow_paid_broadcast: bool | None = None, + allow_paid_stars: int | None = None, drop_author: bool | None = None, + drop_media_captions: bool | None = None, + background: bool | None = None, + with_my_score: bool | None = None, + message_effect_id: int | None = None, + video_timestamp: int | None = None, + quick_reply_shortcut: str | int | None = None, + send_as: int | str | None = None, + suggested_post: types.SuggestedPost | None = None, ) -> types.Message | list[types.Message]: """Forward messages of any kind. @@ -54,15 +64,45 @@ async def forward_messages( schedule_date (:py:obj:`~datetime.datetime`, *optional*): Date when the message will be automatically sent. + schedule_repeat_period (``int``, *optional*): + Repeat period of the scheduled message. + protect_content (``bool``, *optional*): Protects the contents of the sent message from forwarding and saving. allow_paid_broadcast (``bool``, *optional*): Pass True to allow the message to ignore regular broadcast limits for a small fee; for bots only. + allow_paid_stars (``int``, *optional*): + Amount of stars to pay for the message; for bots only. + drop_author (``bool``, *optional*): Forwards messages without quoting the original author + drop_media_captions (``bool``, *optional*): + Forwards messages without media captions. + + background (``bool``, *optional*): + Pass True to send the message in the background. + + with_my_score (``bool``, *optional*): + Forwards games with the user's score. + + message_effect_id (``int`` ``64-bit``, *optional*): + Unique identifier of the message effect to be added to the message; for private chats only. + + video_timestamp (``int``, *optional*): + Timestamp for the video. + + quick_reply_shortcut (``str`` | ``int``, *optional*): + Quick reply shortcut identifier or name. + + send_as (``int`` | ``str``, *optional*): + Unique identifier (int) or username (str) of the chat to send the message as. + + suggested_post (:obj:`~pyrogram.types.SuggestedPost`, *optional*): + Suggested post information. + Returns: :obj:`~pyrogram.types.Message` | List of :obj:`~pyrogram.types.Message`: In case *message_ids* was not a list, a single message is returned, otherwise a list of messages is returned. @@ -93,11 +133,29 @@ async def forward_messages( id=ids, top_msg_id=message_thread_id, silent=disable_notification or None, + background=background, random_id=[self.rnd_id() for _ in ids], schedule_date=utils.datetime_to_timestamp(schedule_date), noforwards=protect_content, allow_paid_floodskip=allow_paid_broadcast, drop_author=drop_author, + drop_media_captions=drop_media_captions, + with_my_score=with_my_score, + effect=message_effect_id, + video_timestamp=video_timestamp, + quick_reply_shortcut=await utils.get_input_quick_reply_shortcut( + quick_reply_shortcut, + ) + if quick_reply_shortcut + else None, + send_as=utils.get_input_peer(await self.resolve_peer(send_as)) + if send_as + else None, + allow_paid_stars=allow_paid_stars, + suggested_post=await suggested_post.write() + if suggested_post + else None, + schedule_repeat_period=schedule_repeat_period, ), ) @@ -111,7 +169,8 @@ async def forward_messages( i, raw.types.UpdateNewMessage | raw.types.UpdateNewChannelMessage - | raw.types.UpdateNewScheduledMessage, + | raw.types.UpdateNewScheduledMessage + | raw.types.UpdateBotNewBusinessMessage, ) ] diff --git a/pyrogram/methods/messages/send_contact.py b/pyrogram/methods/messages/send_contact.py index 4b673f1c..6b51f38b 100644 --- a/pyrogram/methods/messages/send_contact.py +++ b/pyrogram/methods/messages/send_contact.py @@ -28,7 +28,16 @@ async def send_contact( schedule_date: datetime | None = None, protect_content: bool | None = None, allow_paid_broadcast: bool | None = None, + allow_paid_stars: int | None = None, + schedule_repeat_period: int | None = None, message_effect_id: int | None = None, + invert_media: bool | None = None, + quick_reply_shortcut: str | int | None = None, + send_as: int | str | None = None, + background: bool | None = None, + clear_draft: bool | None = None, + update_stickersets_order: bool | None = None, + suggested_post: types.SuggestedPost | None = None, reply_markup: types.InlineKeyboardMarkup | None | types.ReplyKeyboardMarkup @@ -100,9 +109,36 @@ async def send_contact( allow_paid_broadcast (``bool``, *optional*): Pass True to allow the message to ignore regular broadcast limits for a small fee; for bots only + allow_paid_stars (``int``, *optional*): + Amount of stars to pay for the message; for bots only. + + invert_media (``bool``, *optional*): + Inverts the position of the media and caption. + message_effect_id (``int`` ``64-bit``, *optional*): Unique identifier of the message effect to be added to the message; for private chats only. + quick_reply_shortcut (``str`` | ``int``, *optional*): + Quick reply shortcut identifier or name. + + send_as (``int`` | ``str``, *optional*): + Unique identifier (int) or username (str) of the chat to send the message as. + + background (``bool``, *optional*): + Pass True to send the message in the background. + + clear_draft (``bool``, *optional*): + Pass True to clear the draft. + + update_stickersets_order (``bool``, *optional*): + Pass True to update the stickersets order. + + suggested_post (:obj:`~pyrogram.types.SuggestedPost`, *optional*): + Suggested post information. + + schedule_repeat_period (``int``, *optional*): + Repeat period of the scheduled message. + reply_markup (:obj:`~pyrogram.types.InlineKeyboardMarkup` | :obj:`~pyrogram.types.ReplyKeyboardMarkup` | :obj:`~pyrogram.types.ReplyKeyboardRemove` | :obj:`~pyrogram.types.ForceReply`, *optional*): Additional interface options. An object for an inline keyboard, custom reply keyboard, instructions to remove reply keyboard or to force a reply from the user. @@ -142,6 +178,21 @@ async def send_contact( schedule_date=utils.datetime_to_timestamp(schedule_date), noforwards=protect_content, allow_paid_floodskip=allow_paid_broadcast, + background=background, + clear_draft=clear_draft, + update_stickersets_order=update_stickersets_order, + invert_media=invert_media, + schedule_repeat_period=schedule_repeat_period, + send_as=utils.get_input_peer(await self.resolve_peer(send_as)) + if send_as + else None, + quick_reply_shortcut=await utils.get_input_quick_reply_shortcut( + quick_reply_shortcut, + ) + if quick_reply_shortcut + else None, + allow_paid_stars=allow_paid_stars, + suggested_post=await suggested_post.write() if suggested_post else None, reply_markup=await reply_markup.write(self) if reply_markup else None, effect=message_effect_id, ) diff --git a/pyrogram/methods/messages/send_location.py b/pyrogram/methods/messages/send_location.py index 612198fc..370b027a 100644 --- a/pyrogram/methods/messages/send_location.py +++ b/pyrogram/methods/messages/send_location.py @@ -28,7 +28,15 @@ async def send_location( schedule_date: datetime | None = None, protect_content: bool | None = None, allow_paid_broadcast: bool | None = None, + allow_paid_stars: int | None = None, + schedule_repeat_period: int | None = None, message_effect_id: int | None = None, + quick_reply_shortcut: str | int | None = None, + send_as: int | str | None = None, + background: bool | None = None, + clear_draft: bool | None = None, + update_stickersets_order: bool | None = None, + suggested_post: types.SuggestedPost | None = None, reply_markup: types.InlineKeyboardMarkup | None | types.ReplyKeyboardMarkup @@ -97,9 +105,30 @@ async def send_location( allow_paid_broadcast (``bool``, *optional*): Pass True to allow the message to ignore regular broadcast limits for a small fee; for bots only + allow_paid_stars (``int``, *optional*): + Amount of stars to pay for the message; for bots only. + message_effect_id (``int`` ``64-bit``, *optional*): Unique identifier of the message effect to be added to the message; for private chats only. + quick_reply_shortcut (``str`` | ``int``, *optional*): + Quick reply shortcut identifier or name. + + send_as (``int`` | ``str``, *optional*): + Unique identifier (int) or username (str) of the chat to send the message as. + + background (``bool``, *optional*): + Pass True to send the message in the background. + + clear_draft (``bool``, *optional*): + Pass True to clear the draft. + + update_stickersets_order (``bool``, *optional*): + Pass True to update the stickersets order. + + suggested_post (:obj:`~pyrogram.types.SuggestedPost`, *optional*): + Suggested post information. + reply_markup (:obj:`~pyrogram.types.InlineKeyboardMarkup` | :obj:`~pyrogram.types.ReplyKeyboardMarkup` | :obj:`~pyrogram.types.ReplyKeyboardRemove` | :obj:`~pyrogram.types.ForceReply`, *optional*): Additional interface options. An object for an inline keyboard, custom reply keyboard, instructions to remove reply keyboard or to force a reply from the user. @@ -142,6 +171,20 @@ async def send_location( schedule_date=utils.datetime_to_timestamp(schedule_date), noforwards=protect_content, allow_paid_floodskip=allow_paid_broadcast, + background=background, + clear_draft=clear_draft, + update_stickersets_order=update_stickersets_order, + schedule_repeat_period=schedule_repeat_period, + send_as=utils.get_input_peer(await self.resolve_peer(send_as)) + if send_as + else None, + quick_reply_shortcut=await utils.get_input_quick_reply_shortcut( + quick_reply_shortcut, + ) + if quick_reply_shortcut + else None, + allow_paid_stars=allow_paid_stars, + suggested_post=await suggested_post.write() if suggested_post else None, reply_markup=await reply_markup.write(self) if reply_markup else None, effect=message_effect_id, ) diff --git a/pyrogram/methods/messages/send_poll.py b/pyrogram/methods/messages/send_poll.py index 5ef0e40e..d06cf3f3 100644 --- a/pyrogram/methods/messages/send_poll.py +++ b/pyrogram/methods/messages/send_poll.py @@ -29,6 +29,7 @@ async def send_poll( disable_notification: bool | None = None, protect_content: bool | None = None, allow_paid_broadcast: bool | None = None, + allow_paid_stars: int | None = None, message_thread_id: int | None = None, business_connection_id: str | None = None, reply_to_message_id: int | None = None, @@ -37,7 +38,14 @@ async def send_poll( quote_entities: list[types.MessageEntity] | None = None, parse_mode: enums.ParseMode | None = None, schedule_date: datetime | None = None, + schedule_repeat_period: int | None = None, message_effect_id: int | None = None, + quick_reply_shortcut: str | int | None = None, + send_as: int | str | None = None, + background: bool | None = None, + clear_draft: bool | None = None, + update_stickersets_order: bool | None = None, + suggested_post: types.SuggestedPost | None = None, reply_markup: types.InlineKeyboardMarkup | None | types.ReplyKeyboardMarkup @@ -114,6 +122,9 @@ async def send_poll( allow_paid_broadcast (``bool``, *optional*): Pass True to allow the message to ignore regular broadcast limits for a small fee; for bots only + allow_paid_stars (``int``, *optional*): + Amount of stars to pay for the message; for bots only. + message_thread_id (``int``, *optional*): Unique identifier for the target message thread (topic) of the forum. for forum supergroups only. @@ -146,9 +157,30 @@ async def send_poll( schedule_date (:py:obj:`~datetime.datetime`, *optional*): Date when the message will be automatically sent. + schedule_repeat_period (``int``, *optional*): + Repeat period of the scheduled message. + message_effect_id (``int`` ``64-bit``, *optional*): Unique identifier of the message effect to be added to the message; for private chats only. + quick_reply_shortcut (``str`` | ``int``, *optional*): + Quick reply shortcut identifier or name. + + send_as (``int`` | ``str``, *optional*): + Unique identifier (int) or username (str) of the chat to send the message as. + + background (``bool``, *optional*): + Pass True to send the message in the background. + + clear_draft (``bool``, *optional*): + Pass True to clear the draft. + + update_stickersets_order (``bool``, *optional*): + Pass True to update the stickersets order. + + suggested_post (:obj:`~pyrogram.types.SuggestedPost`, *optional*): + Suggested post information. + reply_markup (:obj:`~pyrogram.types.InlineKeyboardMarkup` | :obj:`~pyrogram.types.ReplyKeyboardMarkup` | :obj:`~pyrogram.types.ReplyKeyboardRemove` | :obj:`~pyrogram.types.ForceReply`, *optional*): Additional interface options. An object for an inline keyboard, custom reply keyboard, instructions to remove reply keyboard or to force a reply from the user. @@ -236,6 +268,20 @@ async def send_poll( schedule_date=utils.datetime_to_timestamp(schedule_date), noforwards=protect_content, allow_paid_floodskip=allow_paid_broadcast, + background=background, + clear_draft=clear_draft, + update_stickersets_order=update_stickersets_order, + schedule_repeat_period=schedule_repeat_period, + send_as=utils.get_input_peer(await self.resolve_peer(send_as)) + if send_as + else None, + quick_reply_shortcut=await utils.get_input_quick_reply_shortcut( + quick_reply_shortcut, + ) + if quick_reply_shortcut + else None, + allow_paid_stars=allow_paid_stars, + suggested_post=await suggested_post.write() if suggested_post else None, reply_markup=await reply_markup.write(self) if reply_markup else None, effect=message_effect_id, ) diff --git a/pyrogram/methods/messages/send_venue.py b/pyrogram/methods/messages/send_venue.py index 9a2f72aa..021a97a2 100644 --- a/pyrogram/methods/messages/send_venue.py +++ b/pyrogram/methods/messages/send_venue.py @@ -30,7 +30,15 @@ async def send_venue( schedule_date: datetime | None = None, protect_content: bool | None = None, allow_paid_broadcast: bool | None = None, + allow_paid_stars: int | None = None, + schedule_repeat_period: int | None = None, message_effect_id: int | None = None, + quick_reply_shortcut: str | int | None = None, + send_as: int | str | None = None, + background: bool | None = None, + clear_draft: bool | None = None, + update_stickersets_order: bool | None = None, + suggested_post: types.SuggestedPost | None = None, reply_markup: types.InlineKeyboardMarkup | None | types.ReplyKeyboardMarkup @@ -109,9 +117,30 @@ async def send_venue( allow_paid_broadcast (``bool``, *optional*): Pass True to allow the message to ignore regular broadcast limits for a small fee; for bots only + allow_paid_stars (``int``, *optional*): + Amount of stars to pay for the message; for bots only. + message_effect_id (``int`` ``64-bit``, *optional*): Unique identifier of the message effect to be added to the message; for private chats only. + quick_reply_shortcut (``str`` | ``int``, *optional*): + Quick reply shortcut identifier or name. + + send_as (``int`` | ``str``, *optional*): + Unique identifier (int) or username (str) of the chat to send the message as. + + background (``bool``, *optional*): + Pass True to send the message in the background. + + clear_draft (``bool``, *optional*): + Pass True to clear the draft. + + update_stickersets_order (``bool``, *optional*): + Pass True to update the stickersets order. + + suggested_post (:obj:`~pyrogram.types.SuggestedPost`, *optional*): + Suggested post information. + reply_markup (:obj:`~pyrogram.types.InlineKeyboardMarkup` | :obj:`~pyrogram.types.ReplyKeyboardMarkup` | :obj:`~pyrogram.types.ReplyKeyboardRemove` | :obj:`~pyrogram.types.ForceReply`, *optional*): Additional interface options. An object for an inline keyboard, custom reply keyboard, instructions to remove reply keyboard or to force a reply from the user. @@ -155,6 +184,20 @@ async def send_venue( schedule_date=utils.datetime_to_timestamp(schedule_date), noforwards=protect_content, allow_paid_floodskip=allow_paid_broadcast, + background=background, + clear_draft=clear_draft, + update_stickersets_order=update_stickersets_order, + schedule_repeat_period=schedule_repeat_period, + send_as=utils.get_input_peer(await self.resolve_peer(send_as)) + if send_as + else None, + quick_reply_shortcut=await utils.get_input_quick_reply_shortcut( + quick_reply_shortcut, + ) + if quick_reply_shortcut + else None, + allow_paid_stars=allow_paid_stars, + suggested_post=await suggested_post.write() if suggested_post else None, reply_markup=await reply_markup.write(self) if reply_markup else None, effect=message_effect_id, ) diff --git a/pyrogram/methods/stories/edit_story.py b/pyrogram/methods/stories/edit_story.py index 4b052dc0..c941d064 100644 --- a/pyrogram/methods/stories/edit_story.py +++ b/pyrogram/methods/stories/edit_story.py @@ -2,7 +2,7 @@ from __future__ import annotations import re -from typing import cast +from typing import BinaryIO, cast from anyio import Path as AsyncPath @@ -24,9 +24,9 @@ async def edit_story( denied_users: list[int] | None = None, # allowed_chats: list[int] = None, # denied_chats: list[int] = None, - animation: str | None = None, - photo: str | None = None, - video: str | None = None, + animation: str | BinaryIO | None = None, + photo: str | BinaryIO | None = None, + video: str | BinaryIO | None = None, caption: str | None = None, parse_mode: enums.ParseMode | None = None, caption_entities: list[types.MessageEntity] | None = None, @@ -139,7 +139,8 @@ async def edit_story( else: file = await self.save_file(animation) media = raw.types.InputMediaUploadedDocument( - mime_type=self.guess_mime_type(animation) or "video/mp4", + mime_type=self.guess_mime_type(getattr(animation, "name", None)) + or "video/mp4", file=cast("raw.base.InputFile", file), attributes=[ raw.types.DocumentAttributeVideo( @@ -190,7 +191,8 @@ async def edit_story( else: file = await self.save_file(video) media = raw.types.InputMediaUploadedDocument( - mime_type=self.guess_mime_type(video) or "video/mp4", + mime_type=self.guess_mime_type(getattr(video, "name", None)) + or "video/mp4", file=cast("raw.base.InputFile", file), attributes=[ raw.types.DocumentAttributeVideo( diff --git a/pyrogram/parser/html.py b/pyrogram/parser/html.py index b8e2dfad..6da4a048 100644 --- a/pyrogram/parser/html.py +++ b/pyrogram/parser/html.py @@ -18,7 +18,7 @@ class Parser(HTMLParser): MENTION_RE = re.compile(r"tg://user\?id=(\d+)") - def __init__(self, client: pyrogram.Client) -> None: + def __init__(self, client: pyrogram.Client | None) -> None: super().__init__() self.client = client @@ -62,7 +62,7 @@ def handle_starttag(self, tag, attrs) -> None: extra["url"] = url elif tag == "emoji": entity = raw.types.MessageEntityCustomEmoji - custom_emoji_id = int(attrs.get("id")) + custom_emoji_id = int(attrs.get("id", 0)) extra["document_id"] = custom_emoji_id else: return diff --git a/pyrogram/parser/parser.py b/pyrogram/parser/parser.py index ed118c50..c219c41b 100644 --- a/pyrogram/parser/parser.py +++ b/pyrogram/parser/parser.py @@ -19,20 +19,20 @@ def __init__(self, client: pyrogram.Client | None) -> None: async def parse( self, text: str, - mode: enums.ParseMode | None = None, + mode: enums.ParseMode | str | None = None, ) -> dict[str, str | list[pyrogram.raw.base.MessageEntity] | None]: ... @overload async def parse( self, text: None, - mode: enums.ParseMode | None = None, + mode: enums.ParseMode | str | None = None, ) -> dict[str, str | list[pyrogram.raw.base.MessageEntity] | None]: ... async def parse( self, text: str | None, - mode: enums.ParseMode | None = None, + mode: enums.ParseMode | str | None = None, ) -> dict[str, str | list[pyrogram.raw.base.MessageEntity] | None]: text = str(text or "").strip() diff --git a/pyrogram/raw/core/primitives/vector.py b/pyrogram/raw/core/primitives/vector.py index 675ab840..1feac2e3 100644 --- a/pyrogram/raw/core/primitives/vector.py +++ b/pyrogram/raw/core/primitives/vector.py @@ -36,7 +36,7 @@ def read(cls, b: BytesIO, *args: Any) -> Any: t = args[0] if args else None count = Int.read(b) left = len(b.read()) - size = (left / count) if count else 0 + size = (left // count) if count else 0 b.seek(-left, 1) return List( diff --git a/pyrogram/session/auth.py b/pyrogram/session/auth.py index 5834cf7d..8bf50e9d 100644 --- a/pyrogram/session/auth.py +++ b/pyrogram/session/auth.py @@ -6,7 +6,7 @@ from hashlib import sha1 from io import BytesIO from os import urandom -from typing import TYPE_CHECKING +from typing import TYPE_CHECKING, cast import pyrogram from pyrogram import raw @@ -18,6 +18,7 @@ if TYPE_CHECKING: from pyrogram.connection import Connection + from pyrogram.connection.transport import Proxy log = logging.getLogger(__name__) @@ -48,9 +49,12 @@ def unpack(b: BytesIO): async def invoke(self, data: TLObject): packed_data = self.pack(data) await self.connection.send(packed_data) - response = BytesIO(await self.connection.recv()) + response = await self.connection.recv() - return self.unpack(response) + if response is None: + raise ConnectionError("Disconnected while receiving") + + return self.unpack(BytesIO(response)) async def create(self): """ @@ -65,7 +69,7 @@ async def create(self): test_mode=self.test_mode, ipv6=self.ipv6, alt_port=self.alt_port, - proxy=self.proxy, + proxy=cast("Proxy", self.proxy), media=False, protocol_factory=self.protocol_factory, ) diff --git a/pyrogram/session/session.py b/pyrogram/session/session.py index 76aad115..f91560ef 100644 --- a/pyrogram/session/session.py +++ b/pyrogram/session/session.py @@ -9,7 +9,7 @@ from hashlib import sha1 from io import BytesIO from time import time -from typing import ClassVar +from typing import TYPE_CHECKING, ClassVar, cast import pyrogram from pyrogram import raw @@ -30,6 +30,9 @@ from .internals import MsgFactory, MsgId +if TYPE_CHECKING: + from pyrogram.connection.transport import Proxy + log = logging.getLogger(__name__) @@ -102,7 +105,7 @@ async def start(self) -> None: dc_id=self.dc_id, test_mode=self.test_mode, ipv6=self.client.ipv6, - proxy=self.client.proxy, + proxy=cast("Proxy", self.client.proxy), alt_port=self.client.alt_port, media=self.is_media, protocol_factory=self.client.protocol_factory, diff --git a/pyrogram/types/bots/bot_app.py b/pyrogram/types/bots/bot_app.py index b2812740..6a0189d7 100644 --- a/pyrogram/types/bots/bot_app.py +++ b/pyrogram/types/bots/bot_app.py @@ -34,7 +34,7 @@ def __init__( short_name: str, title: str, description: str, - photo: types.Photo, + photo: types.Photo | None = None, document: types.Document | None = None, ) -> None: super().__init__() @@ -47,7 +47,7 @@ def __init__( self.document = document @staticmethod - def _parse(client: pyrogram.Client, bot_app: raw.types.BotApp) -> BotApp: + def _parse(client: pyrogram.Client, bot_app: raw.types.BotApp) -> BotApp | None: document = None if isinstance(bot_app.document, raw.types.Document): attributes = {type(i): i for i in bot_app.document.attributes} diff --git a/pyrogram/types/bots/bot_business_connection.py b/pyrogram/types/bots/bot_business_connection.py index 7133bbd8..68f921f8 100644 --- a/pyrogram/types/bots/bot_business_connection.py +++ b/pyrogram/types/bots/bot_business_connection.py @@ -1,6 +1,6 @@ from __future__ import annotations -from typing import TYPE_CHECKING +from typing import TYPE_CHECKING, cast import pyrogram from pyrogram import raw, utils @@ -60,7 +60,9 @@ async def _parse( ) -> BotBusinessConnection: return BotBusinessConnection( bot_connection_id=bot_connection.connection_id, - user=await client.get_users(bot_connection.user_id), + user=cast( + "pyrogram.types.User", await client.get_users(bot_connection.user_id) + ), dc_id=bot_connection.dc_id, date=utils.timestamp_to_datetime(bot_connection.date), can_reply=bot_connection.can_reply, diff --git a/pyrogram/types/bots_and_keyboards/callback_query.py b/pyrogram/types/bots_and_keyboards/callback_query.py index 9e89dccd..ff0b22fa 100644 --- a/pyrogram/types/bots_and_keyboards/callback_query.py +++ b/pyrogram/types/bots_and_keyboards/callback_query.py @@ -1,7 +1,7 @@ from __future__ import annotations from contextlib import suppress -from typing import TYPE_CHECKING +from typing import TYPE_CHECKING, cast import pyrogram from pyrogram import enums, raw, types, utils @@ -43,6 +43,12 @@ class CallbackQuery(Object, Update): game_short_name (``str``, *optional*): Short name of a Game to be returned, serves as the unique identifier for the game. + business_connection_id (``str``, *optional*): + The business connection identifier. + + reply_to_message (:obj:`~pyrogram.types.Message`, *optional*): + For business callback queries, the message that this message replies to. + matches (List of regex Matches, *optional*): A list containing all `Match Objects `_ that match the data of this callback query. Only applicable when using :obj:`Filters.regex `. @@ -59,6 +65,8 @@ def __init__( inline_message_id: str | None = None, data: str | bytes | None = None, game_short_name: str | None = None, + business_connection_id: str | None = None, + reply_to_message: types.Message | None = None, matches: list[Match] | None = None, ) -> None: super().__init__(client) @@ -70,6 +78,8 @@ def __init__( self.inline_message_id = inline_message_id self.data = data self.game_short_name = game_short_name + self.business_connection_id = business_connection_id + self.reply_to_message = reply_to_message self.matches = matches @staticmethod @@ -80,6 +90,7 @@ async def _parse( ) -> CallbackQuery: message = None inline_message_id = None + reply_to_message = None if isinstance(callback_query, raw.types.UpdateBotCallbackQuery): chat_id = utils.get_peer_id(callback_query.peer) @@ -88,7 +99,9 @@ async def _parse( message = client.message_cache[(chat_id, message_id)] if not message: - message = await client.get_messages(chat_id, message_id) + message = cast( + "types.Message", await client.get_messages(chat_id, message_id) + ) elif isinstance(callback_query, raw.types.UpdateInlineBotCallbackQuery): inline_message_id = utils.pack_inline_message_id(callback_query.msg_id) elif isinstance(callback_query, raw.types.UpdateBusinessBotCallbackQuery): @@ -101,6 +114,17 @@ async def _parse( replies=0, business_connection_id=callback_query.connection_id, ) + + if callback_query.reply_to_message: + reply_to_message = await types.Message._parse( + client, + callback_query.reply_to_message, + users, + {}, + is_scheduled=False, + replies=0, + business_connection_id=callback_query.connection_id, + ) # Try to decode callback query data into string. If that fails, fallback to bytes instead of decoding by # ignoring/replacing errors, this way, button clicks will still work. data = getattr(callback_query, "data", None) @@ -116,6 +140,10 @@ async def _parse( chat_instance=str(callback_query.chat_instance), data=data, game_short_name=getattr(callback_query, "game_short_name", None), + business_connection_id=getattr(callback_query, "connection_id", None), + reply_to_message=reply_to_message + if isinstance(callback_query, raw.types.UpdateBusinessBotCallbackQuery) + else None, client=client, ) diff --git a/pyrogram/types/bots_and_keyboards/game_high_score.py b/pyrogram/types/bots_and_keyboards/game_high_score.py index d2049748..4d5dd45c 100644 --- a/pyrogram/types/bots_and_keyboards/game_high_score.py +++ b/pyrogram/types/bots_and_keyboards/game_high_score.py @@ -23,7 +23,7 @@ def __init__( self, *, client: pyrogram.Client | None = None, - user: types.User, + user: types.User | None = None, score: int, position: int | None = None, ) -> None: diff --git a/pyrogram/types/business/extended_media_preview.py b/pyrogram/types/business/extended_media_preview.py index f00af72e..24c0dbde 100644 --- a/pyrogram/types/business/extended_media_preview.py +++ b/pyrogram/types/business/extended_media_preview.py @@ -26,7 +26,7 @@ def __init__( *, width: int | None = None, height: int | None = None, - thumb: types.Thumbnail | None = None, + thumb: types.Thumbnail | types.StrippedThumbnail | None = None, video_duration: int | None = None, ) -> None: super().__init__() diff --git a/pyrogram/types/business/pre_checkout_query.py b/pyrogram/types/business/pre_checkout_query.py index 85b2af14..08daf889 100644 --- a/pyrogram/types/business/pre_checkout_query.py +++ b/pyrogram/types/business/pre_checkout_query.py @@ -46,7 +46,7 @@ def __init__( *, client: pyrogram.Client | None = None, id: str, - from_user: types.User, + from_user: types.User | None = None, currency: str, total_amount: int, payload: str, diff --git a/pyrogram/types/business/shipping_query.py b/pyrogram/types/business/shipping_query.py index 18540163..df32dfd6 100644 --- a/pyrogram/types/business/shipping_query.py +++ b/pyrogram/types/business/shipping_query.py @@ -29,7 +29,7 @@ def __init__( *, client: pyrogram.Client | None = None, id: str, - from_user: types.User, + from_user: types.User | None = None, invoice_payload: str, shipping_address: types.ShippingAddress | None = None, ) -> None: diff --git a/pyrogram/types/input_media/input_media.py b/pyrogram/types/input_media/input_media.py index 9aa88c1f..f9aa9ab6 100644 --- a/pyrogram/types/input_media/input_media.py +++ b/pyrogram/types/input_media/input_media.py @@ -5,6 +5,7 @@ from pyrogram.types.object import Object if TYPE_CHECKING: + from pyrogram import enums from pyrogram.types.messages_and_media import MessageEntity @@ -24,7 +25,7 @@ def __init__( self, media: str | BinaryIO, caption: str = "", - parse_mode: str | None = None, + parse_mode: enums.ParseMode | str | None = None, caption_entities: list[MessageEntity] | None = None, ) -> None: super().__init__() diff --git a/pyrogram/types/list.py b/pyrogram/types/list.py index 58053940..6169227a 100644 --- a/pyrogram/types/list.py +++ b/pyrogram/types/list.py @@ -1,5 +1,7 @@ from __future__ import annotations +from typing import cast + from .object import Object @@ -7,8 +9,7 @@ class List(list): __slots__ = [] def __str__(self) -> str: - # noinspection PyCallByClass - return Object.__str__(self) + return Object.__str__(cast("Object", self)) def __repr__(self) -> str: - return f"pyrogram.types.List([{','.join(Object.__repr__(i) for i in self)}])" + return f"pyrogram.types.List([{','.join(repr(i) for i in self)}])" diff --git a/pyrogram/types/messages_and_media/alternative_video.py b/pyrogram/types/messages_and_media/alternative_video.py index 132d8be5..420985b9 100644 --- a/pyrogram/types/messages_and_media/alternative_video.py +++ b/pyrogram/types/messages_and_media/alternative_video.py @@ -63,8 +63,8 @@ def __init__( self, *, client: pyrogram.Client | None = None, - file_id: str, - file_unique_id: str, + file_id: str | None = None, + file_unique_id: str | None = None, width: int, height: int, codec: str, diff --git a/pyrogram/types/messages_and_media/exported_story_link.py b/pyrogram/types/messages_and_media/exported_story_link.py index 618e7d04..287aac64 100644 --- a/pyrogram/types/messages_and_media/exported_story_link.py +++ b/pyrogram/types/messages_and_media/exported_story_link.py @@ -17,7 +17,7 @@ class ExportedStoryLink(Object): The link of the story. """ - def __init__(self, *, link: str) -> None: + def __init__(self, *, link: str | None = None) -> None: super().__init__() self.link = link diff --git a/pyrogram/types/messages_and_media/game.py b/pyrogram/types/messages_and_media/game.py index 0e8e6d0e..37c8ed5f 100644 --- a/pyrogram/types/messages_and_media/game.py +++ b/pyrogram/types/messages_and_media/game.py @@ -38,7 +38,7 @@ def __init__( title: str, short_name: str, description: str, - photo: types.Photo, + photo: types.Photo | None = None, animation: types.Animation | None = None, ) -> None: super().__init__(client) diff --git a/pyrogram/types/messages_and_media/message.py b/pyrogram/types/messages_and_media/message.py index e296e85e..db9b7937 100644 --- a/pyrogram/types/messages_and_media/message.py +++ b/pyrogram/types/messages_and_media/message.py @@ -4876,9 +4876,19 @@ async def forward( message_thread_id: int | None = None, disable_notification: bool | None = None, schedule_date: datetime | None = None, + schedule_repeat_period: int | None = None, protect_content: bool | None = None, allow_paid_broadcast: bool | None = None, + allow_paid_stars: int | None = None, drop_author: bool | None = None, + drop_media_captions: bool | None = None, + background: bool | None = None, + with_my_score: bool | None = None, + message_effect_id: int | None = None, + video_timestamp: int | None = None, + quick_reply_shortcut: str | int | None = None, + send_as: int | str | None = None, + suggested_post: types.SuggestedPost | None = None, ) -> types.Message | list[types.Message]: """Bound method *forward* of :obj:`~pyrogram.types.Message`. @@ -4920,9 +4930,39 @@ async def forward( allow_paid_broadcast (``bool``, *optional*): Pass True to allow the message to ignore regular broadcast limits for a small fee; for bots + allow_paid_stars (``int``, *optional*): + Amount of stars to pay for the message; for bots only. + drop_author (``bool``, *optional*): Forwards messages without quoting the original author + drop_media_captions (``bool``, *optional*): + Forwards messages without media captions. + + background (``bool``, *optional*): + Pass True to send the message in the background. + + with_my_score (``bool``, *optional*): + Forwards games with the user's score. + + message_effect_id (``int`` ``64-bit``, *optional*): + Unique identifier of the message effect to be added to the message; for private chats only. + + video_timestamp (``int``, *optional*): + Timestamp for the video. + + quick_reply_shortcut (``str`` | ``int``, *optional*): + Quick reply shortcut identifier or name. + + send_as (``int`` | ``str``, *optional*): + Unique identifier (int) or username (str) of the chat to send the message as. + + suggested_post (:obj:`~pyrogram.types.SuggestedPost`, *optional*): + Suggested post information. + + schedule_repeat_period (``int``, *optional*): + Repeat period of the scheduled message. + Returns: On success, the forwarded Message is returned. @@ -4936,9 +4976,19 @@ async def forward( message_thread_id=message_thread_id, disable_notification=disable_notification, schedule_date=schedule_date, + schedule_repeat_period=schedule_repeat_period, protect_content=protect_content, allow_paid_broadcast=allow_paid_broadcast, + allow_paid_stars=allow_paid_stars, drop_author=drop_author, + drop_media_captions=drop_media_captions, + background=background, + with_my_score=with_my_score, + message_effect_id=message_effect_id, + video_timestamp=video_timestamp, + quick_reply_shortcut=quick_reply_shortcut, + send_as=send_as, + suggested_post=suggested_post, ) async def copy( @@ -4955,9 +5005,18 @@ async def copy( reply_to_message_id: int | None = None, reply_to_chat_id: int | None = None, schedule_date: datetime | None = None, + schedule_repeat_period: int | None = None, protect_content: bool | None = None, allow_paid_broadcast: bool | None = None, + allow_paid_stars: int | None = None, + message_effect_id: int | None = None, invert_media: bool | None = None, + quick_reply_shortcut: str | int | None = None, + send_as: int | str | None = None, + background: bool | None = None, + clear_draft: bool | None = None, + update_stickersets_order: bool | None = None, + suggested_post: types.SuggestedPost | None = None, reply_markup: types.InlineKeyboardMarkup | types.ReplyKeyboardMarkup | types.ReplyKeyboardRemove @@ -5030,12 +5089,39 @@ async def copy( schedule_date (:py:obj:`~datetime.datetime`, *optional*): Date when the message will be automatically sent. + schedule_repeat_period (``int``, *optional*): + Repeat period of the scheduled message. + protect_content (``bool``, *optional*): Protects the contents of the sent message from forwarding and saving. allow_paid_broadcast (``bool``, *optional*): Pass True to allow the message to ignore regular broadcast limits for a small fee; for bots + allow_paid_stars (``int``, *optional*): + Amount of stars to pay for the message; for bots only. + + message_effect_id (``int`` ``64-bit``, *optional*): + Unique identifier of the message effect to be added to the message; for private chats only. + + quick_reply_shortcut (``str`` | ``int``, *optional*): + Quick reply shortcut identifier or name. + + send_as (``int`` | ``str``, *optional*): + Unique identifier (int) or username (str) of the chat to send the message as. + + background (``bool``, *optional*): + Pass True to send the message in the background. + + clear_draft (``bool``, *optional*): + Pass True to clear the draft. + + update_stickersets_order (``bool``, *optional*): + Pass True to update the stickersets order. + + suggested_post (:obj:`~pyrogram.types.SuggestedPost`, *optional*): + Suggested post information. + invert_media (``bool``, *optional*): Inverts the position of the media and caption. @@ -5082,8 +5168,17 @@ async def copy( quote_text=quote_text, quote_entities=quote_entities, schedule_date=schedule_date, + schedule_repeat_period=schedule_repeat_period, protect_content=protect_content, allow_paid_broadcast=allow_paid_broadcast, + allow_paid_stars=allow_paid_stars, + message_effect_id=message_effect_id, + quick_reply_shortcut=quick_reply_shortcut, + send_as=send_as, + background=background, + clear_draft=clear_draft, + update_stickersets_order=update_stickersets_order, + suggested_post=suggested_post, reply_markup=cast( "Any", self.reply_markup if reply_markup is object else reply_markup, @@ -5098,10 +5193,19 @@ async def copy( reply_to_message_id=reply_to_message_id, reply_to_chat_id=reply_to_chat_id, schedule_date=schedule_date, + schedule_repeat_period=schedule_repeat_period, has_spoiler=has_spoiler, protect_content=protect_content, allow_paid_broadcast=allow_paid_broadcast, + allow_paid_stars=allow_paid_stars, + message_effect_id=message_effect_id, invert_media=invert_media, + quick_reply_shortcut=quick_reply_shortcut, + send_as=send_as, + background=background, + clear_draft=clear_draft, + update_stickersets_order=update_stickersets_order, + suggested_post=suggested_post, reply_markup=cast( "Any", self.reply_markup if reply_markup is object else reply_markup, @@ -5134,7 +5238,17 @@ async def copy( disable_notification=disable_notification, message_thread_id=message_thread_id, schedule_date=schedule_date, + schedule_repeat_period=schedule_repeat_period, allow_paid_broadcast=allow_paid_broadcast, + allow_paid_stars=allow_paid_stars, + message_effect_id=message_effect_id, + quick_reply_shortcut=quick_reply_shortcut, + send_as=send_as, + background=background, + clear_draft=clear_draft, + update_stickersets_order=update_stickersets_order, + invert_media=invert_media, + suggested_post=suggested_post, ) elif self.location: return await self._client.send_location( @@ -5144,7 +5258,16 @@ async def copy( disable_notification=disable_notification, message_thread_id=message_thread_id, schedule_date=schedule_date, + schedule_repeat_period=schedule_repeat_period, allow_paid_broadcast=allow_paid_broadcast, + allow_paid_stars=allow_paid_stars, + message_effect_id=message_effect_id, + quick_reply_shortcut=quick_reply_shortcut, + send_as=send_as, + background=background, + clear_draft=clear_draft, + update_stickersets_order=update_stickersets_order, + suggested_post=suggested_post, ) elif self.venue: return await self._client.send_venue( @@ -5158,7 +5281,16 @@ async def copy( disable_notification=disable_notification, message_thread_id=message_thread_id, schedule_date=schedule_date, + schedule_repeat_period=schedule_repeat_period, allow_paid_broadcast=allow_paid_broadcast, + allow_paid_stars=allow_paid_stars, + message_effect_id=message_effect_id, + quick_reply_shortcut=quick_reply_shortcut, + send_as=send_as, + background=background, + clear_draft=clear_draft, + update_stickersets_order=update_stickersets_order, + suggested_post=suggested_post, ) elif self.poll: return await self._client.send_poll( @@ -5171,7 +5303,16 @@ async def copy( disable_notification=disable_notification, message_thread_id=message_thread_id, schedule_date=schedule_date, + schedule_repeat_period=schedule_repeat_period, allow_paid_broadcast=allow_paid_broadcast, + allow_paid_stars=allow_paid_stars, + message_effect_id=message_effect_id, + quick_reply_shortcut=quick_reply_shortcut, + send_as=send_as, + background=background, + clear_draft=clear_draft, + update_stickersets_order=update_stickersets_order, + suggested_post=suggested_post, ) elif self.game: return await self._client.send_game( @@ -5179,7 +5320,17 @@ async def copy( game_short_name=self.game.short_name, disable_notification=disable_notification, message_thread_id=message_thread_id, + schedule_date=schedule_date, + schedule_repeat_period=schedule_repeat_period, allow_paid_broadcast=allow_paid_broadcast, + allow_paid_stars=allow_paid_stars, + message_effect_id=message_effect_id, + quick_reply_shortcut=quick_reply_shortcut, + send_as=send_as, + background=background, + clear_draft=clear_draft, + update_stickersets_order=update_stickersets_order, + suggested_post=suggested_post, ) elif self.web_page_preview: return await self._client.send_web_page( @@ -5214,6 +5365,13 @@ async def copy( file_id=file_id, message_thread_id=message_thread_id, allow_paid_broadcast=allow_paid_broadcast, + allow_paid_stars=allow_paid_stars, + quick_reply_shortcut=quick_reply_shortcut, + send_as=send_as, + background=background, + clear_draft=clear_draft, + update_stickersets_order=update_stickersets_order, + suggested_post=suggested_post, ) if caption is None: caption = self.caption or "" @@ -5227,6 +5385,13 @@ async def copy( has_spoiler=has_spoiler, message_thread_id=message_thread_id, allow_paid_broadcast=allow_paid_broadcast, + allow_paid_stars=allow_paid_stars, + quick_reply_shortcut=quick_reply_shortcut, + send_as=send_as, + background=background, + clear_draft=clear_draft, + update_stickersets_order=update_stickersets_order, + suggested_post=suggested_post, ) raise ValueError("Can't copy this message") diff --git a/pyrogram/types/messages_and_media/message_reaction_count_updated.py b/pyrogram/types/messages_and_media/message_reaction_count_updated.py index 69b92f28..2710b673 100644 --- a/pyrogram/types/messages_and_media/message_reaction_count_updated.py +++ b/pyrogram/types/messages_and_media/message_reaction_count_updated.py @@ -1,6 +1,6 @@ from __future__ import annotations -from typing import TYPE_CHECKING +from typing import TYPE_CHECKING, cast import pyrogram from pyrogram import raw, types, utils @@ -66,12 +66,16 @@ def _parse( if chat is None: return None + reactions = [ + types.ReactionCount._parse(client, rt) for rt in update.reactions + ] + return MessageReactionCountUpdated( client=client, chat=chat, message_id=update.msg_id, date=utils.timestamp_to_datetime(update.date), - reactions=[ - types.ReactionCount._parse(client, rt) for rt in update.reactions - ], + reactions=cast( + "list[types.ReactionCount]", [r for r in reactions if r is not None] + ), ) diff --git a/pyrogram/types/messages_and_media/message_reaction_updated.py b/pyrogram/types/messages_and_media/message_reaction_updated.py index 0bf96fb0..79786075 100644 --- a/pyrogram/types/messages_and_media/message_reaction_updated.py +++ b/pyrogram/types/messages_and_media/message_reaction_updated.py @@ -1,6 +1,6 @@ from __future__ import annotations -from typing import TYPE_CHECKING +from typing import TYPE_CHECKING, cast import pyrogram from pyrogram import raw, types, utils @@ -99,6 +99,13 @@ def _parse( chats[raw_actor_peer_id], ) + old_reaction = [ + types.ReactionType._parse(client, rt) for rt in update.old_reactions + ] + new_reaction = [ + types.ReactionType._parse(client, rt) for rt in update.new_reactions + ] + return MessageReactionUpdated( client=client, id=update.msg_id, @@ -106,10 +113,12 @@ def _parse( date=utils.timestamp_to_datetime(update.date), chat=chat, actor_chat=actor_chat, - old_reaction=[ - types.ReactionType._parse(client, rt) for rt in update.old_reactions - ], - new_reaction=[ - types.ReactionType._parse(client, rt) for rt in update.new_reactions - ], + old_reaction=cast( + "list[types.ReactionType]", + [r for r in old_reaction if r is not None], + ), + new_reaction=cast( + "list[types.ReactionType]", + [r for r in new_reaction if r is not None], + ), ) diff --git a/pyrogram/types/messages_and_media/message_reactions.py b/pyrogram/types/messages_and_media/message_reactions.py index b58ee945..32a5ac5f 100644 --- a/pyrogram/types/messages_and_media/message_reactions.py +++ b/pyrogram/types/messages_and_media/message_reactions.py @@ -1,5 +1,7 @@ from __future__ import annotations +from typing import cast + import pyrogram from pyrogram import raw, types from pyrogram.types.object import Object @@ -37,14 +39,22 @@ def _parse( if not message_reactions: return None + reactions = [ + types.Reaction._parse_count(client, reaction) + for reaction in message_reactions.results + ] + top_reactors = [ + types.MessageReactor._parse(client, reactor, users) + for reactor in message_reactions.top_reactors + ] + return MessageReactions( client=client, - reactions=[ - types.Reaction._parse_count(client, reaction) - for reaction in message_reactions.results - ], - top_reactors=[ - types.MessageReactor._parse(client, reactor, users) - for reactor in message_reactions.top_reactors - ], + reactions=cast( + "list[types.Reaction]", [r for r in reactions if r is not None] + ), + top_reactors=cast( + "list[types.MessageReactor]", + [r for r in top_reactors if r is not None], + ), ) diff --git a/pyrogram/types/messages_and_media/message_story.py b/pyrogram/types/messages_and_media/message_story.py index 6503397b..398ee295 100644 --- a/pyrogram/types/messages_and_media/message_story.py +++ b/pyrogram/types/messages_and_media/message_story.py @@ -1,5 +1,7 @@ from __future__ import annotations +from typing import cast + import pyrogram from pyrogram import raw, types, utils from pyrogram.types.object import Object @@ -58,9 +60,11 @@ async def _parse( sender_chat = types.Chat._parse_chat(client, chat.chats[0]) else: user_id = message_story.peer.user_id - from_user = await client.get_users(user_id) + from_user = cast("types.User", await client.get_users(user_id)) if not client.me.is_bot: - return await client.get_stories(user_id or chat_id, message_story.id) + return await client.get_stories( + cast("int", user_id or chat_id), message_story.id + ) return MessageStory( from_user=from_user, sender_chat=sender_chat, diff --git a/pyrogram/types/messages_and_media/payment_form.py b/pyrogram/types/messages_and_media/payment_form.py index a2b795fe..45f93126 100644 --- a/pyrogram/types/messages_and_media/payment_form.py +++ b/pyrogram/types/messages_and_media/payment_form.py @@ -50,10 +50,10 @@ def __init__( *, client: pyrogram.Client | None = None, id: int, - bot: types.User, + bot: types.User | None = None, title: str, description: str, - invoice: types.Invoice, + invoice: types.Invoice | None = None, provider: types.User | None = None, url: str | None = None, can_save_credentials: bool | None = None, diff --git a/pyrogram/types/messages_and_media/poll.py b/pyrogram/types/messages_and_media/poll.py index 57e7cfe2..5dd5545a 100644 --- a/pyrogram/types/messages_and_media/poll.py +++ b/pyrogram/types/messages_and_media/poll.py @@ -63,6 +63,9 @@ class Poll(Object, Update): close_date (:py:obj:`~datetime.datetime`, *optional*): Point in time when the poll will be automatically closed. + min (``bool``, *optional*): + True, if the poll is min poll. + recent_voters (List of :obj:`~pyrogram.types.User`, *optional*): List of user whos recently vote. """ @@ -86,6 +89,7 @@ def __init__( explanation_entities: list[types.MessageEntity] | None = None, open_period: int | None = None, close_date: datetime | None = None, + min: bool | None = None, recent_voters: list[types.User] | None = None, ) -> None: super().__init__(client) @@ -105,6 +109,7 @@ def __init__( self.explanation_entities = explanation_entities self.open_period = open_period self.close_date = close_date + self.min = min self.recent_voters = recent_voters self.chat: types.Chat | None = None @@ -200,6 +205,7 @@ async def _parse( else None, open_period=poll.close_period, close_date=utils.timestamp_to_datetime(poll.close_date), + min=poll_results.min, recent_voters=[ await client.get_users(utils.get_raw_peer_id(user)) for user in poll_results.recent_voters @@ -254,6 +260,7 @@ async def _parse_update( is_closed=False, chosen_option_id=chosen_option_id, correct_option_id=correct_option_id, + min=poll_results.min, recent_voters=cast( "list[types.User]", [ diff --git a/pyrogram/types/messages_and_media/reaction.py b/pyrogram/types/messages_and_media/reaction.py index e5fa7c5a..0f17c852 100644 --- a/pyrogram/types/messages_and_media/reaction.py +++ b/pyrogram/types/messages_and_media/reaction.py @@ -152,7 +152,9 @@ def write( self, client: pyrogram.Client, # noqa: ARG002 ) -> raw.base.Reaction: - return raw.types.ReactionCustomEmoji(document_id=int(self.custom_emoji_id)) + return raw.types.ReactionCustomEmoji( + document_id=int(self.custom_emoji_id) if self.custom_emoji_id else 0 + ) class ReactionTypePaid(ReactionType): diff --git a/pyrogram/types/messages_and_media/sticker.py b/pyrogram/types/messages_and_media/sticker.py index 332dbad5..d5389b63 100644 --- a/pyrogram/types/messages_and_media/sticker.py +++ b/pyrogram/types/messages_and_media/sticker.py @@ -81,7 +81,7 @@ def __init__( height: int | None = None, is_animated: bool | None = None, is_video: bool | None = None, - needs_repainting: bool = False, + needs_repainting: bool | None = None, file_name: str | None = None, mime_type: str | None = None, file_size: int | None = None, diff --git a/pyrogram/types/messages_and_media/translated_text.py b/pyrogram/types/messages_and_media/translated_text.py index df51eced..c5b3f080 100644 --- a/pyrogram/types/messages_and_media/translated_text.py +++ b/pyrogram/types/messages_and_media/translated_text.py @@ -20,7 +20,7 @@ class TranslatedText(Object): def __init__( self, *, - text: str, + text: str | None = None, entities: list[types.MessageEntity] | None = None, ) -> None: self.text = text diff --git a/pyrogram/types/messages_and_media/venue.py b/pyrogram/types/messages_and_media/venue.py index 6a00e364..630bc0d8 100644 --- a/pyrogram/types/messages_and_media/venue.py +++ b/pyrogram/types/messages_and_media/venue.py @@ -46,9 +46,14 @@ def __init__( self.foursquare_type = foursquare_type @staticmethod - def _parse(client, venue: raw.types.MessageMediaVenue): + def _parse(client, venue: raw.types.MessageMediaVenue) -> Venue | None: + location = types.Location._parse(client, venue.geo) + + if not location: + return None + return Venue( - location=types.Location._parse(client, venue.geo), + location=location, title=venue.title, address=venue.address, foursquare_id=venue.venue_id or None, diff --git a/pyrogram/types/object.py b/pyrogram/types/object.py index a595720d..7f2f25fc 100644 --- a/pyrogram/types/object.py +++ b/pyrogram/types/object.py @@ -11,7 +11,7 @@ class Object: def __init__(self, client: pyrogram.Client | None = None) -> None: - self._client: pyrogram.Client = client + self._client: pyrogram.Client | None = client def bind(self, client: pyrogram.Client) -> None: """Bind a Client instance to this and to all nested Pyrogram objects. diff --git a/pyrogram/types/stories/media_area_channel_post.py b/pyrogram/types/stories/media_area_channel_post.py index a50b76eb..1bd5c675 100644 --- a/pyrogram/types/stories/media_area_channel_post.py +++ b/pyrogram/types/stories/media_area_channel_post.py @@ -35,7 +35,7 @@ def __init__( async def _parse( self: pyrogram.Client, media_area: raw.base.MediaArea, - ) -> MediaAreaChannelPost: + ) -> MediaAreaChannelPost | None: assert isinstance(media_area, raw.types.MediaAreaChannelPost) channel_id = utils.get_channel_id(media_area.channel_id) chat = types.Chat._parse_chat( @@ -48,6 +48,9 @@ async def _parse( ) ).chats[0], ) + if not chat: + return None + return MediaAreaChannelPost( coordinates=types.MediaAreaCoordinates._parse(media_area.coordinates), chat=chat, diff --git a/pyrogram/types/stories/story.py b/pyrogram/types/stories/story.py index 09b4b427..21ddcc5e 100644 --- a/pyrogram/types/stories/story.py +++ b/pyrogram/types/stories/story.py @@ -91,6 +91,18 @@ class Story(Object, Update): media_areas (List of :obj:`~pyrogram.types.MediaArea`, *optional*): List of :obj:`~pyrogram.types.MediaArea` object in story. + out (``bool``, *optional*): + True, if the story is outgoing. + + min (``bool``, *optional*): + True, if the story is min story. + + sent_reaction (:obj:`~pyrogram.types.Reaction`, *optional*): + Reaction sent by the current user. + + albums (List of ``int``, *optional*): + List of album identifiers. + link (``str``, *property*): Generate a link to this story, only for Telegram Premium chats having usernames. Can be None if the story cannot have a link. @@ -108,7 +120,7 @@ def __init__( sender_chat: types.Chat | None = None, date: datetime, expire_date: datetime, - media: enums.MessageMediaType, + media: enums.MessageMediaType | None = None, has_protected_content: bool | None = None, animation: types.Animation | None = None, photo: types.Photo | None = None, @@ -127,6 +139,10 @@ def __init__( allowed_users: list[int] | None = None, denied_users: list[int] | None = None, media_areas: list[types.MediaArea] | None = None, + out: bool | None = None, + min: bool | None = None, + sent_reaction: types.Reaction | None = None, + albums: list[int] | None = None, raw: raw.types.StoryItem | None = None, ) -> None: super().__init__(client) @@ -156,6 +172,10 @@ def __init__( self.allowed_users = allowed_users self.denied_users = denied_users self.media_areas = media_areas + self.out = out + self.min = min + self.sent_reaction = sent_reaction + self.albums = albums self.raw = raw @staticmethod @@ -183,6 +203,7 @@ async def _parse( forward_from = None allowed_users: list[int] | None = None denied_users: list[int] | None = None + media_type = None if stories.media: if isinstance(stories.media, raw.types.MessageMediaPhoto): photo = types.Photo._parse( @@ -332,12 +353,16 @@ async def _parse( selected_contacts=stories.selected_contacts, caption=stories.caption, caption_entities=entities or None, - views=types.StoryViews._parse(stories.views), + views=types.StoryViews._parse(client, stories.views), privacy=privacy, forward_from=forward_from, allowed_users=allowed_users, denied_users=denied_users, media_areas=media_areas, + out=stories.out, + min=stories.min, + sent_reaction=types.Reaction._parse(client, stories.sent_reaction), + albums=stories.albums, raw=stories, client=client, ) @@ -858,6 +883,7 @@ async def reply_media_group( | types.InputMediaVideo | types.InputMediaAudio | types.InputMediaDocument + | types.InputMediaAnimation ], disable_notification: bool | None = None, reply_to_story_id: int | None = None, diff --git a/pyrogram/types/stories/story_views.py b/pyrogram/types/stories/story_views.py index 4bde701e..5521eddf 100644 --- a/pyrogram/types/stories/story_views.py +++ b/pyrogram/types/stories/story_views.py @@ -1,7 +1,11 @@ from __future__ import annotations +import typing from typing import TYPE_CHECKING +if TYPE_CHECKING: + from pyrogram import types + from pyrogram.types.object import Object if TYPE_CHECKING: @@ -16,7 +20,16 @@ class StoryViews(Object): view_count (``int``): The count of stories viewers. - recent_viewers (List of ``int``): + forward_count (``int``, *optional*): + The count of stories forwards. + + reactions (List of :obj:`~pyrogram.types.Reaction`, *optional*): + List of reactions. + + reactions_count (``int``, *optional*): + The count of stories reactions. + + recent_viewers (List of ``int``, *optional*): List of user_id of recent stories viewers. """ @@ -24,16 +37,34 @@ def __init__( self, *, view_count: int, + forward_count: int | None = None, + reactions: list[types.Reaction] | None = None, + reactions_count: int | None = None, recent_viewers: list[int] | None = None, ) -> None: super().__init__() self.view_count = view_count + self.forward_count = forward_count + self.reactions = reactions + self.reactions_count = reactions_count self.recent_viewers = recent_viewers @staticmethod - def _parse(storyviews: raw.types.StoryViews) -> StoryViews: + def _parse(client, storyviews: raw.types.StoryViews) -> StoryViews: + from pyrogram import types + + reactions = [ + types.Reaction._parse_count(client, reaction) + for reaction in getattr(storyviews, "reactions", []) + ] return StoryViews( - view_count=getattr(storyviews, "view_count", 0), + view_count=getattr(storyviews, "views_count", 0), + forward_count=getattr(storyviews, "forwards_count", None), + reactions=typing.cast( + "list[types.Reaction]", [r for r in reactions if r is not None] + ) + or None, + reactions_count=getattr(storyviews, "reactions_count", None), recent_viewers=getattr(storyviews, "recent_viewers", None), ) diff --git a/uv.lock b/uv.lock index 203b1bb0..f8c51bf0 100644 --- a/uv.lock +++ b/uv.lock @@ -706,11 +706,11 @@ wheels = [ [[package]] name = "filelock" -version = "3.24.3" +version = "3.25.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/73/92/a8e2479937ff39185d20dd6a851c1a63e55849e447a55e798cc2e1f49c65/filelock-3.24.3.tar.gz", hash = "sha256:011a5644dc937c22699943ebbfc46e969cdde3e171470a6e40b9533e5a72affa", size = 37935, upload-time = "2026-02-19T00:48:20.543Z" } +sdist = { url = "https://files.pythonhosted.org/packages/77/18/a1fd2231c679dcb9726204645721b12498aeac28e1ad0601038f94b42556/filelock-3.25.0.tar.gz", hash = "sha256:8f00faf3abf9dc730a1ffe9c354ae5c04e079ab7d3a683b7c32da5dd05f26af3", size = 40158, upload-time = "2026-03-01T15:08:45.916Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/9c/0f/5d0c71a1aefeb08efff26272149e07ab922b64f46c63363756224bd6872e/filelock-3.24.3-py3-none-any.whl", hash = "sha256:426e9a4660391f7f8a810d71b0555bce9008b0a1cc342ab1f6947d37639e002d", size = 24331, upload-time = "2026-02-19T00:48:18.465Z" }, + { url = "https://files.pythonhosted.org/packages/f9/0b/de6f54d4a8bedfe8645c41497f3c18d749f0bd3218170c667bf4b81d0cdd/filelock-3.25.0-py3-none-any.whl", hash = "sha256:5ccf8069f7948f494968fc0713c10e5c182a9c9d9eef3a636307a20c2490f047", size = 26427, upload-time = "2026-03-01T15:08:44.593Z" }, ] [[package]] @@ -724,7 +724,7 @@ wheels = [ [[package]] name = "hatch" -version = "1.16.4" +version = "1.16.5" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "backports-zstd", marker = "python_full_version < '3.14'" }, @@ -737,6 +737,7 @@ dependencies = [ { name = "pexpect" }, { name = "platformdirs" }, { name = "pyproject-hooks" }, + { name = "python-discovery" }, { name = "rich" }, { name = "shellingham" }, { name = "tomli-w" }, @@ -745,9 +746,9 @@ dependencies = [ { name = "uv" }, { name = "virtualenv" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/3a/78/44051bc8b0061b523065e3f67e42fd9b3857ae1ed8b69febdde4f1dd2a3b/hatch-1.16.4.tar.gz", hash = "sha256:1539141fe014be89c4290418964cf4a79e6bee9b6b7638787aa1d1576ff448b1", size = 5220311, upload-time = "2026-02-23T22:45:51.599Z" } +sdist = { url = "https://files.pythonhosted.org/packages/d2/02/ce9c4c439fa3f195b21b4b5bb18b44d1076297c86477ef7e3d2de6064ec3/hatch-1.16.5.tar.gz", hash = "sha256:57bdeeaa72577859ce37091a5449583875331c06f9cb6af9077947ad40b3a1de", size = 5220741, upload-time = "2026-02-27T18:45:31.21Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/6b/29/742010d61a7665b863a36208bfa3df93476e9a86fde45413cd13db76f7d0/hatch-1.16.4-py3-none-any.whl", hash = "sha256:0b434f522a5b1b0303ffe6195ad056b7f815403413c72561308001fde82a3b6f", size = 141355, upload-time = "2026-02-23T22:45:49.862Z" }, + { url = "https://files.pythonhosted.org/packages/e4/8a/11ae7e271870f0ad8fa0012e4265982bebe0fdc21766b161fb8b8fc3aefc/hatch-1.16.5-py3-none-any.whl", hash = "sha256:d9b8047f2cd10d3349eb6e8f278ad728a04f91495aace305c257d5c2747188fb", size = 141269, upload-time = "2026-02-27T18:45:29.573Z" }, ] [[package]] @@ -1450,6 +1451,19 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/ee/49/1377b49de7d0c1ce41292161ea0f721913fa8722c19fb9c1e3aa0367eecb/pytest_cov-7.0.0-py3-none-any.whl", hash = "sha256:3b8e9558b16cc1479da72058bdecf8073661c7f57f7d3c5f22a1c23507f2d861", size = 22424, upload-time = "2025-09-09T10:57:00.695Z" }, ] +[[package]] +name = "python-discovery" +version = "1.1.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "filelock" }, + { name = "platformdirs" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/82/bb/93a3e83bdf9322c7e21cafd092e56a4a17c4d8ef4277b6eb01af1a540a6f/python_discovery-1.1.0.tar.gz", hash = "sha256:447941ba1aed8cc2ab7ee3cb91be5fc137c5bdbb05b7e6ea62fbdcb66e50b268", size = 55674, upload-time = "2026-02-26T09:42:49.668Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/06/54/82a6e2ef37f0f23dccac604b9585bdcbd0698604feb64807dcb72853693e/python_discovery-1.1.0-py3-none-any.whl", hash = "sha256:a162893b8809727f54594a99ad2179d2ede4bf953e12d4c7abc3cc9cdbd1437b", size = 30687, upload-time = "2026-02-26T09:42:48.548Z" }, +] + [[package]] name = "pywin32-ctypes" version = "0.2.3" @@ -1962,27 +1976,27 @@ wheels = [ [[package]] name = "uv" -version = "0.10.6" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d5/53/7a4274dad70b1d17efb99e36d45fc1b5e4e1e531b43247e518604394c761/uv-0.10.6.tar.gz", hash = "sha256:de86e5e1eb264e74a20fccf56889eea2463edb5296f560958e566647c537b52e", size = 3921763, upload-time = "2026-02-25T00:26:27.066Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/4f/f9/faf599c6928dc00d941629260bef157dadb67e8ffb7f4b127b8601f41177/uv-0.10.6-py3-none-linux_armv6l.whl", hash = "sha256:2b46ad78c86d68de6ec13ffaa3a8923467f757574eeaf318e0fce0f63ff77d7a", size = 22412946, upload-time = "2026-02-25T00:26:10.826Z" }, - { url = "https://files.pythonhosted.org/packages/c4/8f/82dd6aa8acd2e1b1ba12fd49210bd19843383538e0e63e8d7a23a7d39d93/uv-0.10.6-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:a1d9873eb26cbef9138f8c52525bc3fd63be2d0695344cdcf84f0dc2838a6844", size = 21524262, upload-time = "2026-02-25T00:27:09.318Z" }, - { url = "https://files.pythonhosted.org/packages/3b/48/5767af19db6f21176e43dfde46ea04e33c49ba245ac2634e83db15d23c8f/uv-0.10.6-py3-none-macosx_11_0_arm64.whl", hash = "sha256:5a62cdf5ba356dcc792b960e744d67056b0e6d778ce7381e1d78182357bd82e8", size = 20184248, upload-time = "2026-02-25T00:26:20.281Z" }, - { url = "https://files.pythonhosted.org/packages/27/1b/13c2fcdb776ae78b5c22eb2d34931bb3ef9bd71b9578b8fa7af8dd7c11c4/uv-0.10.6-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.musllinux_1_1_aarch64.whl", hash = "sha256:b70a04d51e2239b3aee0e4d4ed9af18c910360155953017cecded5c529588e65", size = 22049300, upload-time = "2026-02-25T00:26:07.039Z" }, - { url = "https://files.pythonhosted.org/packages/6f/43/348e2c378b3733eba15f6144b35a8c84af5c884232d6bbed29e256f74b6f/uv-0.10.6-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.musllinux_1_1_armv7l.whl", hash = "sha256:2b622059a1ae287f8b995dcb6f5548de83b89b745ff112801abbf09e25fd8fa9", size = 22030505, upload-time = "2026-02-25T00:26:46.171Z" }, - { url = "https://files.pythonhosted.org/packages/a5/3f/dcec580099bc52f73036bfb09acb42616660733de1cc3f6c92287d2c7f3e/uv-0.10.6-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f43db1aa80776386646453c07d5590e1ae621f031a2afe6efba90f89c34c628c", size = 22041360, upload-time = "2026-02-25T00:26:53.725Z" }, - { url = "https://files.pythonhosted.org/packages/2c/96/f70abe813557d317998806517bb53b3caa5114591766db56ae9cc142ff39/uv-0.10.6-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4ca8a26694ba7d0ae902f11054734805741f2b080fe8397401b80c99264edab6", size = 23309916, upload-time = "2026-02-25T00:27:12.99Z" }, - { url = "https://files.pythonhosted.org/packages/db/1d/d8b955937dd0153b48fdcfd5ff70210d26e4b407188e976df620572534fd/uv-0.10.6-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6f2cddae800d14159a9ccb4ff161648b0b0d1b31690d9c17076ec00f538c52ac", size = 24191174, upload-time = "2026-02-25T00:26:30.051Z" }, - { url = "https://files.pythonhosted.org/packages/c2/3d/3d0669d65bf4a270420d70ca0670917ce5c25c976c8b0acd52465852509b/uv-0.10.6-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:153fcf5375c988b2161bf3a6a7d9cc907d6bbe38f3cb16276da01b2dae4df72c", size = 23320328, upload-time = "2026-02-25T00:26:23.82Z" }, - { url = "https://files.pythonhosted.org/packages/85/f2/f2ccc2196fd6cf1321c2e8751a96afabcbc9509b184c671ece3e804effda/uv-0.10.6-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f27f2d135d4533f88537ecd254c72dfd25311d912da8649d15804284d70adb93", size = 23229798, upload-time = "2026-02-25T00:26:50.12Z" }, - { url = "https://files.pythonhosted.org/packages/2d/b9/1008266a041e8a55430a92aef8ecc58aaaa7eb7107a26cf4f7c127d14363/uv-0.10.6-py3-none-manylinux_2_28_aarch64.whl", hash = "sha256:dd993ec2bf5303a170946342955509559763cf8dcfe334ec7bb9f115a0f86021", size = 22143661, upload-time = "2026-02-25T00:26:42.507Z" }, - { url = "https://files.pythonhosted.org/packages/93/e4/1f8de7da5f844b4c9eafa616e262749cd4e3d9c685190b7967c4681869da/uv-0.10.6-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:8529e4d4aac40b4e7588177321cb332cc3309d36d7cc482470a1f6cfe7a7e14a", size = 22888045, upload-time = "2026-02-25T00:26:15.935Z" }, - { url = "https://files.pythonhosted.org/packages/e2/2b/03b840dd0101dc69ef6e83ceb2e2970e4b4f118291266cf3332a4b64092c/uv-0.10.6-py3-none-musllinux_1_1_i686.whl", hash = "sha256:ed9e16453a5f73ee058c566392885f445d00534dc9e754e10ab9f50f05eb27a5", size = 22549404, upload-time = "2026-02-25T00:27:05.333Z" }, - { url = "https://files.pythonhosted.org/packages/4c/4e/1ee4d4301874136a4b3bbd9eeba88da39f4bafa6f633b62aef77d8195c56/uv-0.10.6-py3-none-musllinux_1_1_x86_64.whl", hash = "sha256:33e5362039bfa91599df0b7487854440ffef1386ac681ec392d9748177fb1d43", size = 23426872, upload-time = "2026-02-25T00:26:35.01Z" }, - { url = "https://files.pythonhosted.org/packages/d3/e3/e000030118ff1a82ecfc6bd5af70949821edac739975a027994f5b17258f/uv-0.10.6-py3-none-win32.whl", hash = "sha256:fa7c504a1e16713b845d457421b07dd9c40f40d911ffca6897f97388de49df5a", size = 21501863, upload-time = "2026-02-25T00:26:57.182Z" }, - { url = "https://files.pythonhosted.org/packages/1c/cc/dd88c9f20c054ef0aea84ad1dd9f8b547463824857e4376463a948983bed/uv-0.10.6-py3-none-win_amd64.whl", hash = "sha256:ecded4d21834b21002bc6e9a2628d21f5c8417fd77a5db14250f1101bcb69dac", size = 23981891, upload-time = "2026-02-25T00:26:38.773Z" }, - { url = "https://files.pythonhosted.org/packages/cf/06/ca117002cd64f6701359253d8566ec7a0edcf61715b4969f07ee41d06f61/uv-0.10.6-py3-none-win_arm64.whl", hash = "sha256:4b5688625fc48565418c56a5cd6c8c32020dbb7c6fb7d10864c2d2c93c508302", size = 22339889, upload-time = "2026-02-25T00:27:00.818Z" }, +version = "0.10.7" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/7c/ec/b324a43b55fe59577505478a396cb1d2758487a2e2270c81ccfa4ac6c96d/uv-0.10.7.tar.gz", hash = "sha256:7c3b0133c2d6bd725d5a35ec5e109ebf0d75389943abe826f3d9ea6d6667a375", size = 3922193, upload-time = "2026-02-27T12:33:58.525Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f3/1b/decff24553325561850d70b75c737076e6fcbcfbf233011a27a33f06e4d9/uv-0.10.7-py3-none-linux_armv6l.whl", hash = "sha256:6a0af6c7a90fd2053edfa2c8ee719078ea906a2d9f4798d3fb3c03378726209a", size = 22497542, upload-time = "2026-02-27T12:33:39.425Z" }, + { url = "https://files.pythonhosted.org/packages/fc/b5/51152c87921bc2576fecb982df4a02ac9cfd7fc934e28114a1232b99eed4/uv-0.10.7-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:3b7db0cab77232a7c8856062904fc3b9db22383f1dec7e97a9588fb6c8470f6a", size = 21558860, upload-time = "2026-02-27T12:34:03.362Z" }, + { url = "https://files.pythonhosted.org/packages/5e/15/8365dc2ded350a4ee5fcbbf9b15195cb2b45855114f2a154b5effb6fa791/uv-0.10.7-py3-none-macosx_11_0_arm64.whl", hash = "sha256:d872d2ff9c9dfba989b5f05f599715bc0f19b94cd0dbf8ae4ad22f8879a66c8c", size = 20212775, upload-time = "2026-02-27T12:33:55.365Z" }, + { url = "https://files.pythonhosted.org/packages/53/a0/ccf25e897f3907b5a6fd899007ff9a80b5bbf151b3a75a375881005611fd/uv-0.10.7-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.musllinux_1_1_aarch64.whl", hash = "sha256:d9b40d03693efda80a41e5d18ac997efdf1094b27fb75471c1a8f51a9ebeffb3", size = 22015584, upload-time = "2026-02-27T12:33:47.374Z" }, + { url = "https://files.pythonhosted.org/packages/fa/3a/5099747954e7774768572d30917bb6bda6b8d465d7a3c49c9bbf7af2a812/uv-0.10.7-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.musllinux_1_1_armv7l.whl", hash = "sha256:e74fe4df9cf31fe84f20b84a0054874635077d31ce20e7de35ff0dd64d498d7b", size = 22100376, upload-time = "2026-02-27T12:34:06.169Z" }, + { url = "https://files.pythonhosted.org/packages/0c/1a/75897fd966b871803cf78019fa31757ced0d54af5ffd7f57bce8b01d64f3/uv-0.10.7-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9c76659fc8bb618dd35cd83b2f479c6f880555a16630a454a251045c4c118ea4", size = 22105202, upload-time = "2026-02-27T12:34:16.972Z" }, + { url = "https://files.pythonhosted.org/packages/b5/1e/0b8caedd66ca911533e18fd051da79a213c792404138812c66043d529b9e/uv-0.10.7-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1d160cceb9468024ca40dc57a180289dfd2024d98e42f2284b9ec44355723b0a", size = 23335601, upload-time = "2026-02-27T12:34:11.161Z" }, + { url = "https://files.pythonhosted.org/packages/69/94/b741af277e39a92e0da07fe48c338eee1429c2607e7a192e41345208bb24/uv-0.10.7-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c775975d891cb60cf10f00953e61e643fcb9a9139e94c9ef5c805fe36e90477f", size = 24152851, upload-time = "2026-02-27T12:33:33.904Z" }, + { url = "https://files.pythonhosted.org/packages/27/b2/da351ccd02f0fb1aec5f992b886bea1374cce44276a78904348e2669dd78/uv-0.10.7-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a709e75583231cc1f39567fb3d8d9b4077ff94a64046eb242726300144ed1a4a", size = 23276444, upload-time = "2026-02-27T12:33:36.891Z" }, + { url = "https://files.pythonhosted.org/packages/71/a9/2735cc9dc39457c9cf64d1ce2ba5a9a8ecbb103d0fb64b052bf33ba3d669/uv-0.10.7-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:89de2504407dcf04aece914c6ca3b9d8e60cf9ff39a13031c1df1f7c040cea81", size = 23218464, upload-time = "2026-02-27T12:34:00.904Z" }, + { url = "https://files.pythonhosted.org/packages/20/5f/5f204e9c3f04f5fc844d2f98d80a7de64b6b304af869644ab478d909f6ff/uv-0.10.7-py3-none-manylinux_2_28_aarch64.whl", hash = "sha256:9945de1d11c4a5ad77e9c4f36f8b5f9e7c9c3c32999b8bc0e7e579145c3b641c", size = 22092562, upload-time = "2026-02-27T12:34:14.155Z" }, + { url = "https://files.pythonhosted.org/packages/dd/a4/16bebf106e3289a29cc1e1482d551c49bd220983e9b4bc5960142389ad3f/uv-0.10.7-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:dbe43527f478e2ffa420516aa465f82057763936bbea56f814fd054a9b7f961f", size = 22851312, upload-time = "2026-02-27T12:34:08.651Z" }, + { url = "https://files.pythonhosted.org/packages/d1/7a/953b1da589225d98ca8668412f665c3192f6deed2a0f4bb782b0df18f611/uv-0.10.7-py3-none-musllinux_1_1_i686.whl", hash = "sha256:c0783f327631141501bdc5f31dd2b4c748df7e7f5dc5cdbfc0fbb82da86cc9ca", size = 22543775, upload-time = "2026-02-27T12:33:30.935Z" }, + { url = "https://files.pythonhosted.org/packages/8b/67/e133afdabf76e43989448be1c2ef607f13afc32aa1ee9f6897115dec8417/uv-0.10.7-py3-none-musllinux_1_1_x86_64.whl", hash = "sha256:eba438899010522812d3497af586e6eedc94fa2b0ced028f51812f0c10aafb30", size = 23431187, upload-time = "2026-02-27T12:33:42.131Z" }, + { url = "https://files.pythonhosted.org/packages/ba/40/6ffb58ec88a33d6cbe9a606966f9558807f37a50f7be7dc756824df2d04c/uv-0.10.7-py3-none-win32.whl", hash = "sha256:b56d1818aafb2701d92e94f552126fe71d30a13f28712d99345ef5cafc53d874", size = 21524397, upload-time = "2026-02-27T12:33:44.579Z" }, + { url = "https://files.pythonhosted.org/packages/e3/1f/74f4d625db838f716a555908d41777b6357bacc141ddef117a01855e5ef9/uv-0.10.7-py3-none-win_amd64.whl", hash = "sha256:ad0d0ddd9f5407ad8699e3b20fe6c18406cd606336743e246b16914801cfd8b0", size = 23999929, upload-time = "2026-02-27T12:33:49.839Z" }, + { url = "https://files.pythonhosted.org/packages/48/4e/20cbfbcb1a0f48c5c1ca94f6baa0fa00754aafda365da9160c15e3b9c277/uv-0.10.7-py3-none-win_arm64.whl", hash = "sha256:edf732de80c1a9701180ef8c7a2fa926a995712e4a34ae8c025e090f797c2e0b", size = 22353084, upload-time = "2026-02-27T12:33:52.792Z" }, ] [[package]] @@ -2001,17 +2015,18 @@ wheels = [ [[package]] name = "virtualenv" -version = "20.39.0" +version = "21.1.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "distlib" }, { name = "filelock" }, { name = "platformdirs" }, + { name = "python-discovery" }, { name = "typing-extensions", marker = "python_full_version < '3.11'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/ed/54/809199edc537dbace273495ac0884d13df26436e910a5ed4d0ec0a69806b/virtualenv-20.39.0.tar.gz", hash = "sha256:a15f0cebd00d50074fd336a169d53422436a12dfe15149efec7072cfe817df8b", size = 5869141, upload-time = "2026-02-23T18:09:13.349Z" } +sdist = { url = "https://files.pythonhosted.org/packages/2f/c9/18d4b36606d6091844daa3bd93cf7dc78e6f5da21d9f21d06c221104b684/virtualenv-21.1.0.tar.gz", hash = "sha256:1990a0188c8f16b6b9cf65c9183049007375b26aad415514d377ccacf1e4fb44", size = 5840471, upload-time = "2026-02-27T08:49:29.702Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/f7/b4/8268da45f26f4fe84f6eae80a6ca1485ffb490a926afecff75fc48f61979/virtualenv-20.39.0-py3-none-any.whl", hash = "sha256:44888bba3775990a152ea1f73f8e5f566d49f11bbd1de61d426fd7732770043e", size = 5839121, upload-time = "2026-02-23T18:09:11.173Z" }, + { url = "https://files.pythonhosted.org/packages/78/55/896b06bf93a49bec0f4ae2a6f1ed12bd05c8860744ac3a70eda041064e4d/virtualenv-21.1.0-py3-none-any.whl", hash = "sha256:164f5e14c5587d170cf98e60378eb91ea35bf037be313811905d3a24ea33cc07", size = 5825072, upload-time = "2026-02-27T08:49:27.516Z" }, ] [[package]]