diff --git a/pkg/connector/tomatrix.go b/pkg/connector/tomatrix.go index 5a322e16..a12a73d2 100644 --- a/pkg/connector/tomatrix.go +++ b/pkg/connector/tomatrix.go @@ -797,8 +797,9 @@ func convertPoll(media tg.MessageMediaClass) *bridgev2.ConvertedMessagePart { var textAnswers []string var htmlAnswers strings.Builder for i, opt := range poll.Poll.Answers { - textAnswers = append(textAnswers, fmt.Sprintf("%d. %s", i+1, opt.Text.Text)) - htmlAnswers.WriteString(fmt.Sprintf("
  • %s
  • ", opt.Text.Text)) + text := opt.GetText() + textAnswers = append(textAnswers, fmt.Sprintf("%d. %s", i+1, text.Text)) + htmlAnswers.WriteString(fmt.Sprintf("
  • %s
  • ", text.Text)) } return &bridgev2.ConvertedMessagePart{ diff --git a/pkg/gotd/_schema/tdesktop.tl b/pkg/gotd/_schema/tdesktop.tl index 48451f33..0bff5ff4 100644 --- a/pkg/gotd/_schema/tdesktop.tl +++ b/pkg/gotd/_schema/tdesktop.tl @@ -1,8 +1,8 @@ // Code generated by ./cmd/dltl, DO NOT EDIT. // // Source: https://raw.githubusercontent.com/telegramdesktop/tdesktop/dev/Telegram/SourceFiles/mtproto/scheme/api.tl -// Layer: 223 -// SHA256: efb4626bec87841fc0736a74e02bfd4e8bfbff001cab309246195af4897e6602 +// Layer: 224 +// SHA256: 44b4a8cced28a25e13fcb2bfd34983e6b906414f42dc04bbd0e3dded9253331d boolFalse#bc799737 = Bool; @@ -46,9 +46,9 @@ inputFileStoryDocument#62dc8b48 id:InputDocument = InputFile; inputMediaEmpty#9664f57f = InputMedia; -inputMediaUploadedPhoto#1e287d04 flags:# spoiler:flags.2?true file:InputFile stickers:flags.0?Vector ttl_seconds:flags.1?int = InputMedia; +inputMediaUploadedPhoto#7d8375da flags:# spoiler:flags.2?true live_photo:flags.3?true file:InputFile stickers:flags.0?Vector ttl_seconds:flags.1?int video:flags.3?InputDocument = InputMedia; -inputMediaPhoto#b3ba0635 flags:# spoiler:flags.1?true id:InputPhoto ttl_seconds:flags.0?int = InputMedia; +inputMediaPhoto#e3af4434 flags:# spoiler:flags.1?true live_photo:flags.2?true id:InputPhoto ttl_seconds:flags.0?int video:flags.2?InputDocument = InputMedia; inputMediaGeoPoint#f9c44144 geo_point:InputGeoPoint = InputMedia; @@ -70,7 +70,7 @@ inputMediaInvoice#405fef0d flags:# title:string description:string photo:flags.0 inputMediaGeoLive#971fa843 flags:# stopped:flags.0?true geo_point:InputGeoPoint heading:flags.2?int period:flags.1?int proximity_notification_radius:flags.3?int = InputMedia; -inputMediaPoll#f94e5f1 flags:# poll:Poll correct_answers:flags.0?Vector solution:flags.1?string solution_entities:flags.1?Vector = InputMedia; +inputMediaPoll#883a4108 flags:# poll:Poll correct_answers:flags.0?Vector attached_media:flags.3?InputMedia solution:flags.1?string solution_entities:flags.1?Vector solution_media:flags.2?InputMedia = InputMedia; inputMediaDice#e66fbf7b emoticon:string = InputMedia; @@ -146,7 +146,7 @@ storage.fileWebp#1081464c = storage.FileType; userEmpty#d3bc4b7a id:long = User; -user#31774388 flags:# self:flags.10?true contact:flags.11?true mutual_contact:flags.12?true deleted:flags.13?true bot:flags.14?true bot_chat_history:flags.15?true bot_nochats:flags.16?true verified:flags.17?true restricted:flags.18?true min:flags.20?true bot_inline_geo:flags.21?true support:flags.23?true scam:flags.24?true apply_min_photo:flags.25?true fake:flags.26?true bot_attach_menu:flags.27?true premium:flags.28?true attach_menu_enabled:flags.29?true flags2:# bot_can_edit:flags2.1?true close_friend:flags2.2?true stories_hidden:flags2.3?true stories_unavailable:flags2.4?true contact_require_premium:flags2.10?true bot_business:flags2.11?true bot_has_main_app:flags2.13?true bot_forum_view:flags2.16?true bot_forum_can_manage_topics:flags2.17?true id:long access_hash:flags.0?long first_name:flags.1?string last_name:flags.2?string username:flags.3?string phone:flags.4?string photo:flags.5?UserProfilePhoto status:flags.6?UserStatus bot_info_version:flags.14?int restriction_reason:flags.18?Vector bot_inline_placeholder:flags.19?string lang_code:flags.22?string emoji_status:flags.30?EmojiStatus usernames:flags2.0?Vector stories_max_id:flags2.5?RecentStory color:flags2.8?PeerColor profile_color:flags2.9?PeerColor bot_active_users:flags2.12?int bot_verification_icon:flags2.14?long send_paid_messages_stars:flags2.15?long = User; +user#31774388 flags:# self:flags.10?true contact:flags.11?true mutual_contact:flags.12?true deleted:flags.13?true bot:flags.14?true bot_chat_history:flags.15?true bot_nochats:flags.16?true verified:flags.17?true restricted:flags.18?true min:flags.20?true bot_inline_geo:flags.21?true support:flags.23?true scam:flags.24?true apply_min_photo:flags.25?true fake:flags.26?true bot_attach_menu:flags.27?true premium:flags.28?true attach_menu_enabled:flags.29?true flags2:# bot_can_edit:flags2.1?true close_friend:flags2.2?true stories_hidden:flags2.3?true stories_unavailable:flags2.4?true contact_require_premium:flags2.10?true bot_business:flags2.11?true bot_has_main_app:flags2.13?true bot_forum_view:flags2.16?true bot_forum_can_manage_topics:flags2.17?true bot_can_manage_bots:flags2.18?true id:long access_hash:flags.0?long first_name:flags.1?string last_name:flags.2?string username:flags.3?string phone:flags.4?string photo:flags.5?UserProfilePhoto status:flags.6?UserStatus bot_info_version:flags.14?int restriction_reason:flags.18?Vector bot_inline_placeholder:flags.19?string lang_code:flags.22?string emoji_status:flags.30?EmojiStatus usernames:flags2.0?Vector stories_max_id:flags2.5?RecentStory color:flags2.8?PeerColor profile_color:flags2.9?PeerColor bot_active_users:flags2.12?int bot_verification_icon:flags2.14?long send_paid_messages_stars:flags2.15?long = User; userProfilePhotoEmpty#4f11bae1 = UserProfilePhoto; @@ -200,7 +200,7 @@ messageService#7a800e0a flags:# out:flags.1?true mentioned:flags.4?true media_un messageMediaEmpty#3ded6320 = MessageMedia; -messageMediaPhoto#695150d7 flags:# spoiler:flags.3?true photo:flags.0?Photo ttl_seconds:flags.2?int = MessageMedia; +messageMediaPhoto#e216eb63 flags:# spoiler:flags.3?true live_photo:flags.4?true photo:flags.0?Photo ttl_seconds:flags.2?int video:flags.4?Document = MessageMedia; messageMediaGeo#56e0d474 geo:GeoPoint = MessageMedia; @@ -220,7 +220,7 @@ messageMediaInvoice#f6a548d3 flags:# shipping_address_requested:flags.1?true tes messageMediaGeoLive#b940c666 flags:# geo:GeoPoint heading:flags.0?int period:int proximity_notification_radius:flags.1?int = MessageMedia; -messageMediaPoll#4bd6e798 poll:Poll results:PollResults = MessageMedia; +messageMediaPoll#773f4e66 flags:# poll:Poll results:PollResults attached_media:flags.0?MessageMedia = MessageMedia; messageMediaDice#8cbec07 flags:# value:int emoticon:string game_outcome:flags.0?messages.EmojiGameOutcome = MessageMedia; @@ -364,7 +364,13 @@ messageActionNoForwardsToggle#bf7d6572 prev_value:Bool new_value:Bool = MessageA 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; +messageActionPollAppendAnswer#9da1cd6c answer:PollAnswer = MessageAction; + +messageActionPollDeleteAnswer#399674dc answer:PollAnswer = MessageAction; + +messageActionManagedBotCreated#16605e3e bot_id:long = MessageAction; + +dialog#fc89f7f3 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 unread_poll_votes_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; @@ -440,7 +446,7 @@ 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 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; +userFull#6cbe645 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 unofficial_security_risk:flags2.26?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 bot_manager_id:flags2.25?long = UserFull; contact#145ade0b user_id:long mutual:Bool = Contact; @@ -514,6 +520,8 @@ inputMessagesFilterContacts#e062db83 = MessagesFilter; inputMessagesFilterPinned#1bb00451 = MessagesFilter; +inputMessagesFilterPoll#fa2bc90a = MessagesFilter; + updateNewMessage#1f2b0afd message:Message pts:int pts_count:int = Update; updateMessageID#4e90bfd6 id:int random_id:long = Update; @@ -638,7 +646,7 @@ updateChannelAvailableMessages#b23fc698 channel_id:long available_min_id:int = U updateDialogUnreadMark#b658f23e flags:# unread:flags.0?true peer:DialogPeer saved_peer_id:flags.1?Peer = Update; -updateMessagePoll#aca1657b flags:# poll_id:long poll:flags.0?Poll results:PollResults = Update; +updateMessagePoll#d64c522b flags:# peer:flags.1?Peer msg_id:flags.1?int top_msg_id:flags.2?int poll_id:long poll:flags.0?Poll results:PollResults = Update; updateChatDefaultBannedRights#54c01850 peer:Peer default_banned_rights:ChatBannedRights version:int = Update; @@ -658,7 +666,7 @@ updateGeoLiveViewed#871fb939 peer:Peer msg_id:int = Update; updateLoginToken#564fe691 = Update; -updateMessagePollVote#24f40e77 poll_id:long peer:Peer options:Vector qts:int = Update; +updateMessagePollVote#7699f014 poll_id:long peer:Peer options:Vector positions:Vector qts:int = Update; updateDialogFilter#26ffde7d flags:# id:int filter:flags.0?DialogFilter = Update; @@ -820,6 +828,8 @@ updateStarGiftCraftFail#ac072444 = Update; updateChatParticipantRank#bd8367b9 chat_id:long user_id:long rank:string version:int = Update; +updateManagedBot#4880ed9a user_id:long bot_id:long qts:int = Update; + updates.state#a56c2a3e pts:int qts:int date:int seq:int unread_count:int = updates.State; updates.differenceEmpty#5d75a138 date:int seq:int = updates.Difference; @@ -1254,6 +1264,12 @@ messageEntityBlockquote#f1ccaaac flags:# collapsed:flags.0?true offset:int lengt 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; +messageEntityDiffInsert#71777116 offset:int length:int = MessageEntity; + +messageEntityDiffReplace#c6c1e5a7 offset:int length:int old_text:string = MessageEntity; + +messageEntityDiffDelete#652c1c5 offset:int length:int = MessageEntity; + inputChannelEmpty#ee8c1e86 = InputChannel; inputChannel#f35aec28 channel_id:long access_hash:long = InputChannel; @@ -1980,13 +1996,15 @@ help.userInfoEmpty#f3ae2eed = help.UserInfo; help.userInfo#1eb3758 message:string entities:Vector author:string date:int = help.UserInfo; -pollAnswer#ff16e2ca text:TextWithEntities option:bytes = PollAnswer; +pollAnswer#4b7d786a flags:# text:TextWithEntities option:bytes media:flags.0?MessageMedia added_by:flags.1?Peer date:flags.1?int = PollAnswer; -poll#58747131 id:long flags:# closed:flags.0?true public_voters:flags.1?true multiple_choice:flags.2?true quiz:flags.3?true question:TextWithEntities answers:Vector close_period:flags.4?int close_date:flags.5?int = Poll; +inputPollAnswer#199fed96 flags:# text:TextWithEntities media:flags.0?InputMedia = PollAnswer; -pollAnswerVoters#3b6ddad2 flags:# chosen:flags.0?true correct:flags.1?true option:bytes voters:int = PollAnswerVoters; +poll#b8425be9 id:long flags:# closed:flags.0?true public_voters:flags.1?true multiple_choice:flags.2?true quiz:flags.3?true open_answers:flags.6?true revoting_disabled:flags.7?true shuffle_answers:flags.8?true hide_results_until_close:flags.9?true creator:flags.10?true question:TextWithEntities answers:Vector close_period:flags.4?int close_date:flags.5?int hash:long = Poll; -pollResults#7adf2420 flags:# min:flags.0?true results:flags.1?Vector total_voters:flags.2?int recent_voters:flags.3?Vector solution:flags.4?string solution_entities:flags.4?Vector = PollResults; +pollAnswerVoters#3645230a flags:# chosen:flags.0?true correct:flags.1?true option:bytes voters:flags.2?int recent_voters:flags.2?Vector = PollAnswerVoters; + +pollResults#ba7bb15e flags:# min:flags.0?true has_unread_votes:flags.6?true results:flags.1?Vector total_voters:flags.2?int recent_voters:flags.3?Vector solution:flags.4?string solution_entities:flags.4?Vector solution_media:flags.5?MessageMedia = PollResults; chatOnlines#f041e250 onlines:int = ChatOnlines; @@ -2032,7 +2050,7 @@ folderPeer#e9baa668 peer:Peer folder_id:int = FolderPeer; messages.searchCounter#e844ebff flags:# inexact:flags.1?true filter:MessagesFilter count:int = messages.SearchCounter; -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; +urlAuthResultRequest#3cd623ec flags:# request_write_access:flags.0?true request_phone_number:flags.1?true match_codes_first:flags.5?true is_app:flags.6?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 verified_app_name:flags.7?string = UrlAuthResult; urlAuthResultAccepted#623a8fa0 flags:# url:flags.0?string = UrlAuthResult; @@ -2156,7 +2174,7 @@ messages.messageViews#b6c4f543 views:Vector chats:Vector use messages.discussionMessage#a6341782 flags:# messages:Vector max_id:flags.0?int read_inbox_max_id:flags.1?int read_outbox_max_id:flags.2?int unread_count:int chats:Vector users:Vector = messages.DiscussionMessage; -messageReplyHeader#6917560b flags:# reply_to_scheduled:flags.2?true forum_topic:flags.3?true quote:flags.9?true reply_to_msg_id:flags.4?int reply_to_peer_id:flags.0?Peer reply_from:flags.5?MessageFwdHeader reply_media:flags.8?MessageMedia reply_to_top_id:flags.1?int quote_text:flags.6?string quote_entities:flags.7?Vector quote_offset:flags.10?int todo_item_id:flags.11?int = MessageReplyHeader; +messageReplyHeader#1b97dd66 flags:# reply_to_scheduled:flags.2?true forum_topic:flags.3?true quote:flags.9?true reply_to_msg_id:flags.4?int reply_to_peer_id:flags.0?Peer reply_from:flags.5?MessageFwdHeader reply_media:flags.8?MessageMedia reply_to_top_id:flags.1?int quote_text:flags.6?string quote_entities:flags.7?Vector quote_offset:flags.10?int todo_item_id:flags.11?int poll_option:flags.12?bytes = MessageReplyHeader; messageReplyStoryHeader#e5af939 peer:Peer story_id:int = MessageReplyHeader; @@ -2458,7 +2476,7 @@ username#b4073647 flags:# editable:flags.0?true active:flags.1?true username:str forumTopicDeleted#23f109b id:int = ForumTopic; -forumTopic#cdff0eca flags:# my:flags.1?true closed:flags.2?true pinned:flags.3?true short:flags.5?true hidden:flags.6?true title_missing:flags.7?true id:int date:int peer:Peer title:string icon_color:int icon_emoji_id:flags.0?long top_message:int read_inbox_max_id:int read_outbox_max_id:int unread_count:int unread_mentions_count:int unread_reactions_count:int from_id:Peer notify_settings:PeerNotifySettings draft:flags.4?DraftMessage = ForumTopic; +forumTopic#fcdad815 flags:# my:flags.1?true closed:flags.2?true pinned:flags.3?true short:flags.5?true hidden:flags.6?true title_missing:flags.7?true id:int date:int peer:Peer title:string icon_color:int icon_emoji_id:flags.0?long top_message:int read_inbox_max_id:int read_outbox_max_id:int unread_count:int unread_mentions_count:int unread_reactions_count:int unread_poll_votes_count:int from_id:Peer notify_settings:PeerNotifySettings draft:flags.4?DraftMessage = ForumTopic; messages.forumTopics#367617d3 flags:# order_by_create_date:flags.0?true count:int topics:Vector messages:Vector chats:Vector users:Vector pts:int = messages.ForumTopics; @@ -2472,6 +2490,8 @@ requestPeerTypeChat#c9f06e1b flags:# creator:flags.0?true bot_participant:flags. requestPeerTypeBroadcast#339bef6c flags:# creator:flags.0?true has_username:flags.3?Bool user_admin_rights:flags.1?ChatAdminRights bot_admin_rights:flags.2?ChatAdminRights = RequestPeerType; +requestPeerTypeCreateBot#3e81e078 flags:# bot_managed:flags.0?true suggested_name:flags.1?string suggested_username:flags.2?string = RequestPeerType; + emojiListNotModified#481eadfa = EmojiList; emojiList#7a1e11d1 hash:long document_id:Vector = EmojiList; @@ -2542,7 +2562,7 @@ storyItemDeleted#51e6ee4f id:int = StoryItem; storyItemSkipped#ffadc913 flags:# close_friends:flags.8?true live:flags.9?true id:int date:int expire_date:int = StoryItem; -storyItem#edf164f1 flags:# pinned:flags.5?true public:flags.7?true close_friends:flags.8?true min:flags.9?true noforwards:flags.10?true edited:flags.11?true contacts:flags.12?true selected_contacts:flags.13?true out:flags.16?true id:int date:int from_id:flags.18?Peer fwd_from:flags.17?StoryFwdHeader expire_date:int caption:flags.0?string entities:flags.1?Vector media:MessageMedia media_areas:flags.14?Vector privacy:flags.2?Vector views:flags.3?StoryViews sent_reaction:flags.15?Reaction albums:flags.19?Vector = StoryItem; +storyItem#16a4b93c flags:# pinned:flags.5?true public:flags.7?true close_friends:flags.8?true min:flags.9?true noforwards:flags.10?true edited:flags.11?true contacts:flags.12?true selected_contacts:flags.13?true out:flags.16?true id:int date:int from_id:flags.18?Peer fwd_from:flags.17?StoryFwdHeader expire_date:int caption:flags.0?string entities:flags.1?Vector media:MessageMedia media_areas:flags.14?Vector privacy:flags.2?Vector views:flags.3?StoryViews sent_reaction:flags.15?Reaction albums:flags.19?Vector music:flags.20?Document = StoryItem; stories.allStoriesNotModified#1158fe3e flags:# state:string stealth_mode:StoriesStealthMode = stories.AllStories; @@ -2560,7 +2580,7 @@ stories.storyViewsList#59d78fc5 flags:# count:int views_count:int forwards_count stories.storyViews#de9eed1d views:Vector users:Vector = stories.StoryViews; -inputReplyToMessage#869fbe10 flags:# reply_to_msg_id:int top_msg_id:flags.0?int reply_to_peer_id:flags.1?InputPeer quote_text:flags.2?string quote_entities:flags.3?Vector quote_offset:flags.4?int monoforum_peer_id:flags.5?InputPeer todo_item_id:flags.6?int = InputReplyTo; +inputReplyToMessage#3bd4b7c2 flags:# reply_to_msg_id:int top_msg_id:flags.0?int reply_to_peer_id:flags.1?InputPeer quote_text:flags.2?string quote_entities:flags.3?Vector quote_offset:flags.4?int monoforum_peer_id:flags.5?InputPeer todo_item_id:flags.6?int poll_option:flags.7?bytes = InputReplyTo; inputReplyToStory#5881323a peer:InputPeer story_id:int = InputReplyTo; @@ -2780,7 +2800,7 @@ reactionNotificationsFromContacts#bac3a61a = ReactionNotificationsFrom; reactionNotificationsFromAll#4b9e22a0 = ReactionNotificationsFrom; -reactionsNotifySettings#56e34970 flags:# messages_notify_from:flags.0?ReactionNotificationsFrom stories_notify_from:flags.1?ReactionNotificationsFrom sound:NotificationSound show_previews:Bool = ReactionsNotifySettings; +reactionsNotifySettings#71e4ea58 flags:# messages_notify_from:flags.0?ReactionNotificationsFrom stories_notify_from:flags.1?ReactionNotificationsFrom poll_votes_notify_from:flags.2?ReactionNotificationsFrom sound:NotificationSound show_previews:Bool = ReactionsNotifySettings; availableEffect#93c3e27e flags:# premium_required:flags.2?true id:long emoticon:string static_icon_id:flags.0?long effect_sticker_id:long effect_animation_id:flags.1?long = AvailableEffect; @@ -3094,6 +3114,14 @@ starGiftAttributeRarityLegendary#cef7e7a8 = StarGiftAttributeRarity; keyboardButtonStyle#4fdd3430 flags:# bg_primary:flags.0?true bg_danger:flags.1?true bg_success:flags.2?true icon:flags.3?long = KeyboardButtonStyle; +inputMessageReadMetric#402b4495 msg_id:int view_id:long time_in_view_ms:int active_time_in_view_ms:int height_to_viewport_ratio_permille:int seen_range_ratio_permille:int = InputMessageReadMetric; + +bots.exportedBotToken#3c60b621 token:string = bots.ExportedBotToken; + +bots.requestedButton#f13bbcd7 webapp_req_id:string = bots.RequestedButton; + +messages.composedMessageWithAI#90d7adfa flags:# result_text:TextWithEntities diff_text:flags.0?TextWithEntities = messages.ComposedMessageWithAI; + ---functions--- @@ -3683,7 +3711,7 @@ messages.updatePinnedMessage#d2aaf7ec flags:# silent:flags.0?true unpin:flags.1? messages.sendVote#10ea6184 peer:InputPeer msg_id:int options:Vector = Updates; -messages.getPollResults#73bb643b peer:InputPeer msg_id:int = Updates; +messages.getPollResults#eda3e33b peer:InputPeer msg_id:int poll_hash:long = Updates; messages.getOnlines#6e2be050 peer:InputPeer = ChatOnlines; @@ -3795,7 +3823,7 @@ messages.getAvailableReactions#18dea0ac hash:int = messages.AvailableReactions; messages.setDefaultReaction#4f47a016 reaction:Reaction = Bool; -messages.translateText#63183030 flags:# peer:flags.0?InputPeer id:flags.0?Vector text:flags.1?Vector to_lang:string = messages.TranslatedText; +messages.translateText#a5eec345 flags:# peer:flags.0?InputPeer id:flags.0?Vector text:flags.1?Vector to_lang:string tone:flags.2?string = messages.TranslatedText; messages.getUnreadReactions#bd7f90ac flags:# peer:InputPeer top_msg_id:flags.0?int saved_peer_id:flags.1?InputPeer offset_id:int add_offset:int limit:int max_id:int min_id:int = messages.Messages; @@ -3843,7 +3871,7 @@ messages.setDefaultHistoryTTL#9eb51445 period:int = Bool; messages.getDefaultHistoryTTL#658b7188 = DefaultHistoryTTL; -messages.sendBotRequestedPeer#91b2d060 peer:InputPeer msg_id:int button_id:int requested_peers:Vector = Updates; +messages.sendBotRequestedPeer#6c5cf2a7 flags:# peer:InputPeer msg_id:flags.0?int webapp_req_id:flags.1?string button_id:int requested_peers:Vector = Updates; messages.getEmojiGroups#7488ce5b hash:int = messages.EmojiGroups; @@ -3963,7 +3991,7 @@ messages.deleteTopicHistory#d2816f10 peer:InputPeer top_msg_id:int = messages.Af messages.getEmojiGameInfo#fb7e8ca7 = messages.EmojiGameInfo; -messages.summarizeText#9d4104e2 flags:# peer:InputPeer id:int to_lang:flags.0?string = TextWithEntities; +messages.summarizeText#abbbd346 flags:# peer:InputPeer id:int to_lang:flags.0?string tone:flags.2?string = TextWithEntities; messages.editChatCreator#f743b857 peer:InputPeer user_id:InputUser password:InputCheckPasswordSRP = Updates; @@ -3975,6 +4003,20 @@ messages.declineUrlAuth#35436bbc url:string = Bool; messages.checkUrlAuthMatchCode#c9a47b0b url:string match_code:string = Bool; +messages.composeMessageWithAI#fd426afe flags:# proofread:flags.0?true emojify:flags.3?true text:TextWithEntities translate_to_lang:flags.1?string change_tone:flags.2?string = messages.ComposedMessageWithAI; + +messages.reportReadMetrics#4067c5e6 peer:InputPeer metrics:Vector = Bool; + +messages.reportMusicListen#ddbcd819 id:InputDocument listened_duration:int = Bool; + +messages.addPollAnswer#19bc4b6d peer:InputPeer msg_id:int answer:PollAnswer = Updates; + +messages.deletePollAnswer#ac8505a5 peer:InputPeer msg_id:int option:bytes = Updates; + +messages.getUnreadPollVotes#43286cf2 flags:# peer:InputPeer top_msg_id:flags.0?int offset_id:int add_offset:int limit:int max_id:int min_id:int = messages.Messages; + +messages.readPollVotes#1720b4d8 flags:# peer:InputPeer top_msg_id:flags.0?int = messages.AffectedHistory; + 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; @@ -4233,6 +4275,16 @@ bots.setCustomVerification#8b89dfbd flags:# enabled:flags.1?true bot:flags.0?Inp bots.getBotRecommendations#a1b70815 bot:InputUser = users.Users; +bots.checkUsername#87f2219b username:string = Bool; + +bots.createBot#e5b17f2b flags:# via_deeplink:flags.0?true name:string username:string manager_id:InputUser = User; + +bots.exportBotToken#bd0d99eb bot:InputUser revoke:Bool = bots.ExportedBotToken; + +bots.requestWebViewButton#31a2a35e user_id:InputUser button:KeyboardButton = bots.RequestedButton; + +bots.getRequestedWebViewButton#bf25b7f3 bot:InputUser webapp_req_id:string = KeyboardButton; + payments.getPaymentForm#37148dbb flags:# invoice:InputInvoice theme_params:flags.0?DataJSON = payments.PaymentForm; payments.getPaymentReceipt#2478d1cc peer:InputPeer msg_id:int = payments.PaymentReceipt; @@ -4329,7 +4381,7 @@ payments.toggleStarGiftsPinnedToTop#1513e7b0 peer:InputPeer stargift:Vector offset:string limit:int = payments.ResaleStarGifts; +payments.getResaleStarGifts#7a5fa236 flags:# sort_by_price:flags.1?true sort_by_num:flags.2?true for_craft:flags.4?true stars_only:flags.5?true attributes_hash:flags.0?long gift_id:long attributes:flags.3?Vector offset:string limit:int = payments.ResaleStarGifts; payments.updateStarGiftPrice#edbe6ccb stargift:InputSavedStarGift resell_amount:StarsAmount = Updates; @@ -4521,9 +4573,9 @@ chatlists.leaveChatlist#74fae13a chatlist:InputChatlist peers:Vector stories.canSendStory#30eb63f0 peer:InputPeer = stories.CanSendStoryCount; -stories.sendStory#737fc2ec flags:# pinned:flags.2?true noforwards:flags.4?true fwd_modified:flags.7?true peer:InputPeer media:InputMedia media_areas:flags.5?Vector caption:flags.0?string entities:flags.1?Vector privacy_rules:Vector random_id:long period:flags.3?int fwd_from_id:flags.6?InputPeer fwd_from_story:flags.6?int albums:flags.8?Vector = Updates; +stories.sendStory#8f9e6898 flags:# pinned:flags.2?true noforwards:flags.4?true fwd_modified:flags.7?true peer:InputPeer media:InputMedia media_areas:flags.5?Vector caption:flags.0?string entities:flags.1?Vector privacy_rules:Vector random_id:long period:flags.3?int fwd_from_id:flags.6?InputPeer fwd_from_story:flags.6?int albums:flags.8?Vector music:flags.9?InputDocument = Updates; -stories.editStory#b583ba46 flags:# peer:InputPeer id:int media:flags.0?InputMedia media_areas:flags.3?Vector caption:flags.1?string entities:flags.1?Vector privacy_rules:flags.2?Vector = Updates; +stories.editStory#2c63a72b flags:# peer:InputPeer id:int media:flags.0?InputMedia media_areas:flags.3?Vector caption:flags.1?string entities:flags.1?Vector privacy_rules:flags.2?Vector music:flags.4?InputDocument = Updates; stories.deleteStories#ae59db5f peer:InputPeer id:Vector = Vector; @@ -4611,4 +4663,4 @@ smsjobs.finishJob#4f1ebf24 flags:# job_id:string error:flags.0?string = Bool; fragment.getCollectibleInfo#be1e85ba collectible:InputCollectible = fragment.CollectibleInfo; -// LAYER 223 +// LAYER 224 diff --git a/pkg/gotd/_schema/telegram.tl b/pkg/gotd/_schema/telegram.tl index d0d41750..1d091e44 100644 --- a/pkg/gotd/_schema/telegram.tl +++ b/pkg/gotd/_schema/telegram.tl @@ -2,8 +2,8 @@ // // Source: https://raw.githubusercontent.com/telegramdesktop/tdesktop/dev/Telegram/SourceFiles/mtproto/scheme/api.tl // Merge: _schema/legacy.tl -// Layer: 223 -// SHA256: efb4626bec87841fc0736a74e02bfd4e8bfbff001cab309246195af4897e6602 +// Layer: 224 +// SHA256: 44b4a8cced28a25e13fcb2bfd34983e6b906414f42dc04bbd0e3dded9253331d boolFalse#bc799737 = Bool; @@ -47,9 +47,9 @@ inputFileStoryDocument#62dc8b48 id:InputDocument = InputFile; inputMediaEmpty#9664f57f = InputMedia; -inputMediaUploadedPhoto#1e287d04 flags:# spoiler:flags.2?true file:InputFile stickers:flags.0?Vector ttl_seconds:flags.1?int = InputMedia; +inputMediaUploadedPhoto#7d8375da flags:# spoiler:flags.2?true live_photo:flags.3?true file:InputFile stickers:flags.0?Vector ttl_seconds:flags.1?int video:flags.3?InputDocument = InputMedia; -inputMediaPhoto#b3ba0635 flags:# spoiler:flags.1?true id:InputPhoto ttl_seconds:flags.0?int = InputMedia; +inputMediaPhoto#e3af4434 flags:# spoiler:flags.1?true live_photo:flags.2?true id:InputPhoto ttl_seconds:flags.0?int video:flags.2?InputDocument = InputMedia; inputMediaGeoPoint#f9c44144 geo_point:InputGeoPoint = InputMedia; @@ -71,7 +71,7 @@ inputMediaInvoice#405fef0d flags:# title:string description:string photo:flags.0 inputMediaGeoLive#971fa843 flags:# stopped:flags.0?true geo_point:InputGeoPoint heading:flags.2?int period:flags.1?int proximity_notification_radius:flags.3?int = InputMedia; -inputMediaPoll#f94e5f1 flags:# poll:Poll correct_answers:flags.0?Vector solution:flags.1?string solution_entities:flags.1?Vector = InputMedia; +inputMediaPoll#883a4108 flags:# poll:Poll correct_answers:flags.0?Vector attached_media:flags.3?InputMedia solution:flags.1?string solution_entities:flags.1?Vector solution_media:flags.2?InputMedia = InputMedia; inputMediaDice#e66fbf7b emoticon:string = InputMedia; @@ -147,7 +147,7 @@ storage.fileWebp#1081464c = storage.FileType; userEmpty#d3bc4b7a id:long = User; -user#31774388 flags:# self:flags.10?true contact:flags.11?true mutual_contact:flags.12?true deleted:flags.13?true bot:flags.14?true bot_chat_history:flags.15?true bot_nochats:flags.16?true verified:flags.17?true restricted:flags.18?true min:flags.20?true bot_inline_geo:flags.21?true support:flags.23?true scam:flags.24?true apply_min_photo:flags.25?true fake:flags.26?true bot_attach_menu:flags.27?true premium:flags.28?true attach_menu_enabled:flags.29?true flags2:# bot_can_edit:flags2.1?true close_friend:flags2.2?true stories_hidden:flags2.3?true stories_unavailable:flags2.4?true contact_require_premium:flags2.10?true bot_business:flags2.11?true bot_has_main_app:flags2.13?true bot_forum_view:flags2.16?true bot_forum_can_manage_topics:flags2.17?true id:long access_hash:flags.0?long first_name:flags.1?string last_name:flags.2?string username:flags.3?string phone:flags.4?string photo:flags.5?UserProfilePhoto status:flags.6?UserStatus bot_info_version:flags.14?int restriction_reason:flags.18?Vector bot_inline_placeholder:flags.19?string lang_code:flags.22?string emoji_status:flags.30?EmojiStatus usernames:flags2.0?Vector stories_max_id:flags2.5?RecentStory color:flags2.8?PeerColor profile_color:flags2.9?PeerColor bot_active_users:flags2.12?int bot_verification_icon:flags2.14?long send_paid_messages_stars:flags2.15?long = User; +user#31774388 flags:# self:flags.10?true contact:flags.11?true mutual_contact:flags.12?true deleted:flags.13?true bot:flags.14?true bot_chat_history:flags.15?true bot_nochats:flags.16?true verified:flags.17?true restricted:flags.18?true min:flags.20?true bot_inline_geo:flags.21?true support:flags.23?true scam:flags.24?true apply_min_photo:flags.25?true fake:flags.26?true bot_attach_menu:flags.27?true premium:flags.28?true attach_menu_enabled:flags.29?true flags2:# bot_can_edit:flags2.1?true close_friend:flags2.2?true stories_hidden:flags2.3?true stories_unavailable:flags2.4?true contact_require_premium:flags2.10?true bot_business:flags2.11?true bot_has_main_app:flags2.13?true bot_forum_view:flags2.16?true bot_forum_can_manage_topics:flags2.17?true bot_can_manage_bots:flags2.18?true id:long access_hash:flags.0?long first_name:flags.1?string last_name:flags.2?string username:flags.3?string phone:flags.4?string photo:flags.5?UserProfilePhoto status:flags.6?UserStatus bot_info_version:flags.14?int restriction_reason:flags.18?Vector bot_inline_placeholder:flags.19?string lang_code:flags.22?string emoji_status:flags.30?EmojiStatus usernames:flags2.0?Vector stories_max_id:flags2.5?RecentStory color:flags2.8?PeerColor profile_color:flags2.9?PeerColor bot_active_users:flags2.12?int bot_verification_icon:flags2.14?long send_paid_messages_stars:flags2.15?long = User; userProfilePhotoEmpty#4f11bae1 = UserProfilePhoto; @@ -201,7 +201,7 @@ messageService#7a800e0a flags:# out:flags.1?true mentioned:flags.4?true media_un messageMediaEmpty#3ded6320 = MessageMedia; -messageMediaPhoto#695150d7 flags:# spoiler:flags.3?true photo:flags.0?Photo ttl_seconds:flags.2?int = MessageMedia; +messageMediaPhoto#e216eb63 flags:# spoiler:flags.3?true live_photo:flags.4?true photo:flags.0?Photo ttl_seconds:flags.2?int video:flags.4?Document = MessageMedia; messageMediaGeo#56e0d474 geo:GeoPoint = MessageMedia; @@ -221,7 +221,7 @@ messageMediaInvoice#f6a548d3 flags:# shipping_address_requested:flags.1?true tes messageMediaGeoLive#b940c666 flags:# geo:GeoPoint heading:flags.0?int period:int proximity_notification_radius:flags.1?int = MessageMedia; -messageMediaPoll#4bd6e798 poll:Poll results:PollResults = MessageMedia; +messageMediaPoll#773f4e66 flags:# poll:Poll results:PollResults attached_media:flags.0?MessageMedia = MessageMedia; messageMediaDice#8cbec07 flags:# value:int emoticon:string game_outcome:flags.0?messages.EmojiGameOutcome = MessageMedia; @@ -365,7 +365,13 @@ messageActionNoForwardsToggle#bf7d6572 prev_value:Bool new_value:Bool = MessageA 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; +messageActionPollAppendAnswer#9da1cd6c answer:PollAnswer = MessageAction; + +messageActionPollDeleteAnswer#399674dc answer:PollAnswer = MessageAction; + +messageActionManagedBotCreated#16605e3e bot_id:long = MessageAction; + +dialog#fc89f7f3 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 unread_poll_votes_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; @@ -441,7 +447,7 @@ 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 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; +userFull#6cbe645 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 unofficial_security_risk:flags2.26?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 bot_manager_id:flags2.25?long = UserFull; contact#145ade0b user_id:long mutual:Bool = Contact; @@ -515,6 +521,8 @@ inputMessagesFilterContacts#e062db83 = MessagesFilter; inputMessagesFilterPinned#1bb00451 = MessagesFilter; +inputMessagesFilterPoll#fa2bc90a = MessagesFilter; + updateNewMessage#1f2b0afd message:Message pts:int pts_count:int = Update; updateMessageID#4e90bfd6 id:int random_id:long = Update; @@ -639,7 +647,7 @@ updateChannelAvailableMessages#b23fc698 channel_id:long available_min_id:int = U updateDialogUnreadMark#b658f23e flags:# unread:flags.0?true peer:DialogPeer saved_peer_id:flags.1?Peer = Update; -updateMessagePoll#aca1657b flags:# poll_id:long poll:flags.0?Poll results:PollResults = Update; +updateMessagePoll#d64c522b flags:# peer:flags.1?Peer msg_id:flags.1?int top_msg_id:flags.2?int poll_id:long poll:flags.0?Poll results:PollResults = Update; updateChatDefaultBannedRights#54c01850 peer:Peer default_banned_rights:ChatBannedRights version:int = Update; @@ -659,7 +667,7 @@ updateGeoLiveViewed#871fb939 peer:Peer msg_id:int = Update; updateLoginToken#564fe691 = Update; -updateMessagePollVote#24f40e77 poll_id:long peer:Peer options:Vector qts:int = Update; +updateMessagePollVote#7699f014 poll_id:long peer:Peer options:Vector positions:Vector qts:int = Update; updateDialogFilter#26ffde7d flags:# id:int filter:flags.0?DialogFilter = Update; @@ -821,6 +829,8 @@ updateStarGiftCraftFail#ac072444 = Update; updateChatParticipantRank#bd8367b9 chat_id:long user_id:long rank:string version:int = Update; +updateManagedBot#4880ed9a user_id:long bot_id:long qts:int = Update; + updates.state#a56c2a3e pts:int qts:int date:int seq:int unread_count:int = updates.State; updates.differenceEmpty#5d75a138 date:int seq:int = updates.Difference; @@ -1255,6 +1265,12 @@ messageEntityBlockquote#f1ccaaac flags:# collapsed:flags.0?true offset:int lengt 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; +messageEntityDiffInsert#71777116 offset:int length:int = MessageEntity; + +messageEntityDiffReplace#c6c1e5a7 offset:int length:int old_text:string = MessageEntity; + +messageEntityDiffDelete#652c1c5 offset:int length:int = MessageEntity; + inputChannelEmpty#ee8c1e86 = InputChannel; inputChannel#f35aec28 channel_id:long access_hash:long = InputChannel; @@ -1981,13 +1997,15 @@ help.userInfoEmpty#f3ae2eed = help.UserInfo; help.userInfo#1eb3758 message:string entities:Vector author:string date:int = help.UserInfo; -pollAnswer#ff16e2ca text:TextWithEntities option:bytes = PollAnswer; +pollAnswer#4b7d786a flags:# text:TextWithEntities option:bytes media:flags.0?MessageMedia added_by:flags.1?Peer date:flags.1?int = PollAnswer; -poll#58747131 id:long flags:# closed:flags.0?true public_voters:flags.1?true multiple_choice:flags.2?true quiz:flags.3?true question:TextWithEntities answers:Vector close_period:flags.4?int close_date:flags.5?int = Poll; +inputPollAnswer#199fed96 flags:# text:TextWithEntities media:flags.0?InputMedia = PollAnswer; -pollAnswerVoters#3b6ddad2 flags:# chosen:flags.0?true correct:flags.1?true option:bytes voters:int = PollAnswerVoters; +poll#b8425be9 id:long flags:# closed:flags.0?true public_voters:flags.1?true multiple_choice:flags.2?true quiz:flags.3?true open_answers:flags.6?true revoting_disabled:flags.7?true shuffle_answers:flags.8?true hide_results_until_close:flags.9?true creator:flags.10?true question:TextWithEntities answers:Vector close_period:flags.4?int close_date:flags.5?int hash:long = Poll; -pollResults#7adf2420 flags:# min:flags.0?true results:flags.1?Vector total_voters:flags.2?int recent_voters:flags.3?Vector solution:flags.4?string solution_entities:flags.4?Vector = PollResults; +pollAnswerVoters#3645230a flags:# chosen:flags.0?true correct:flags.1?true option:bytes voters:flags.2?int recent_voters:flags.2?Vector = PollAnswerVoters; + +pollResults#ba7bb15e flags:# min:flags.0?true has_unread_votes:flags.6?true results:flags.1?Vector total_voters:flags.2?int recent_voters:flags.3?Vector solution:flags.4?string solution_entities:flags.4?Vector solution_media:flags.5?MessageMedia = PollResults; chatOnlines#f041e250 onlines:int = ChatOnlines; @@ -2033,7 +2051,7 @@ folderPeer#e9baa668 peer:Peer folder_id:int = FolderPeer; messages.searchCounter#e844ebff flags:# inexact:flags.1?true filter:MessagesFilter count:int = messages.SearchCounter; -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; +urlAuthResultRequest#3cd623ec flags:# request_write_access:flags.0?true request_phone_number:flags.1?true match_codes_first:flags.5?true is_app:flags.6?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 verified_app_name:flags.7?string = UrlAuthResult; urlAuthResultAccepted#623a8fa0 flags:# url:flags.0?string = UrlAuthResult; @@ -2157,7 +2175,7 @@ messages.messageViews#b6c4f543 views:Vector chats:Vector use messages.discussionMessage#a6341782 flags:# messages:Vector max_id:flags.0?int read_inbox_max_id:flags.1?int read_outbox_max_id:flags.2?int unread_count:int chats:Vector users:Vector = messages.DiscussionMessage; -messageReplyHeader#6917560b flags:# reply_to_scheduled:flags.2?true forum_topic:flags.3?true quote:flags.9?true reply_to_msg_id:flags.4?int reply_to_peer_id:flags.0?Peer reply_from:flags.5?MessageFwdHeader reply_media:flags.8?MessageMedia reply_to_top_id:flags.1?int quote_text:flags.6?string quote_entities:flags.7?Vector quote_offset:flags.10?int todo_item_id:flags.11?int = MessageReplyHeader; +messageReplyHeader#1b97dd66 flags:# reply_to_scheduled:flags.2?true forum_topic:flags.3?true quote:flags.9?true reply_to_msg_id:flags.4?int reply_to_peer_id:flags.0?Peer reply_from:flags.5?MessageFwdHeader reply_media:flags.8?MessageMedia reply_to_top_id:flags.1?int quote_text:flags.6?string quote_entities:flags.7?Vector quote_offset:flags.10?int todo_item_id:flags.11?int poll_option:flags.12?bytes = MessageReplyHeader; messageReplyStoryHeader#e5af939 peer:Peer story_id:int = MessageReplyHeader; @@ -2459,7 +2477,7 @@ username#b4073647 flags:# editable:flags.0?true active:flags.1?true username:str forumTopicDeleted#23f109b id:int = ForumTopic; -forumTopic#cdff0eca flags:# my:flags.1?true closed:flags.2?true pinned:flags.3?true short:flags.5?true hidden:flags.6?true title_missing:flags.7?true id:int date:int peer:Peer title:string icon_color:int icon_emoji_id:flags.0?long top_message:int read_inbox_max_id:int read_outbox_max_id:int unread_count:int unread_mentions_count:int unread_reactions_count:int from_id:Peer notify_settings:PeerNotifySettings draft:flags.4?DraftMessage = ForumTopic; +forumTopic#fcdad815 flags:# my:flags.1?true closed:flags.2?true pinned:flags.3?true short:flags.5?true hidden:flags.6?true title_missing:flags.7?true id:int date:int peer:Peer title:string icon_color:int icon_emoji_id:flags.0?long top_message:int read_inbox_max_id:int read_outbox_max_id:int unread_count:int unread_mentions_count:int unread_reactions_count:int unread_poll_votes_count:int from_id:Peer notify_settings:PeerNotifySettings draft:flags.4?DraftMessage = ForumTopic; messages.forumTopics#367617d3 flags:# order_by_create_date:flags.0?true count:int topics:Vector messages:Vector chats:Vector users:Vector pts:int = messages.ForumTopics; @@ -2473,6 +2491,8 @@ requestPeerTypeChat#c9f06e1b flags:# creator:flags.0?true bot_participant:flags. requestPeerTypeBroadcast#339bef6c flags:# creator:flags.0?true has_username:flags.3?Bool user_admin_rights:flags.1?ChatAdminRights bot_admin_rights:flags.2?ChatAdminRights = RequestPeerType; +requestPeerTypeCreateBot#3e81e078 flags:# bot_managed:flags.0?true suggested_name:flags.1?string suggested_username:flags.2?string = RequestPeerType; + emojiListNotModified#481eadfa = EmojiList; emojiList#7a1e11d1 hash:long document_id:Vector = EmojiList; @@ -2543,7 +2563,7 @@ storyItemDeleted#51e6ee4f id:int = StoryItem; storyItemSkipped#ffadc913 flags:# close_friends:flags.8?true live:flags.9?true id:int date:int expire_date:int = StoryItem; -storyItem#edf164f1 flags:# pinned:flags.5?true public:flags.7?true close_friends:flags.8?true min:flags.9?true noforwards:flags.10?true edited:flags.11?true contacts:flags.12?true selected_contacts:flags.13?true out:flags.16?true id:int date:int from_id:flags.18?Peer fwd_from:flags.17?StoryFwdHeader expire_date:int caption:flags.0?string entities:flags.1?Vector media:MessageMedia media_areas:flags.14?Vector privacy:flags.2?Vector views:flags.3?StoryViews sent_reaction:flags.15?Reaction albums:flags.19?Vector = StoryItem; +storyItem#16a4b93c flags:# pinned:flags.5?true public:flags.7?true close_friends:flags.8?true min:flags.9?true noforwards:flags.10?true edited:flags.11?true contacts:flags.12?true selected_contacts:flags.13?true out:flags.16?true id:int date:int from_id:flags.18?Peer fwd_from:flags.17?StoryFwdHeader expire_date:int caption:flags.0?string entities:flags.1?Vector media:MessageMedia media_areas:flags.14?Vector privacy:flags.2?Vector views:flags.3?StoryViews sent_reaction:flags.15?Reaction albums:flags.19?Vector music:flags.20?Document = StoryItem; stories.allStoriesNotModified#1158fe3e flags:# state:string stealth_mode:StoriesStealthMode = stories.AllStories; @@ -2561,7 +2581,7 @@ stories.storyViewsList#59d78fc5 flags:# count:int views_count:int forwards_count stories.storyViews#de9eed1d views:Vector users:Vector = stories.StoryViews; -inputReplyToMessage#869fbe10 flags:# reply_to_msg_id:int top_msg_id:flags.0?int reply_to_peer_id:flags.1?InputPeer quote_text:flags.2?string quote_entities:flags.3?Vector quote_offset:flags.4?int monoforum_peer_id:flags.5?InputPeer todo_item_id:flags.6?int = InputReplyTo; +inputReplyToMessage#3bd4b7c2 flags:# reply_to_msg_id:int top_msg_id:flags.0?int reply_to_peer_id:flags.1?InputPeer quote_text:flags.2?string quote_entities:flags.3?Vector quote_offset:flags.4?int monoforum_peer_id:flags.5?InputPeer todo_item_id:flags.6?int poll_option:flags.7?bytes = InputReplyTo; inputReplyToStory#5881323a peer:InputPeer story_id:int = InputReplyTo; @@ -2781,7 +2801,7 @@ reactionNotificationsFromContacts#bac3a61a = ReactionNotificationsFrom; reactionNotificationsFromAll#4b9e22a0 = ReactionNotificationsFrom; -reactionsNotifySettings#56e34970 flags:# messages_notify_from:flags.0?ReactionNotificationsFrom stories_notify_from:flags.1?ReactionNotificationsFrom sound:NotificationSound show_previews:Bool = ReactionsNotifySettings; +reactionsNotifySettings#71e4ea58 flags:# messages_notify_from:flags.0?ReactionNotificationsFrom stories_notify_from:flags.1?ReactionNotificationsFrom poll_votes_notify_from:flags.2?ReactionNotificationsFrom sound:NotificationSound show_previews:Bool = ReactionsNotifySettings; availableEffect#93c3e27e flags:# premium_required:flags.2?true id:long emoticon:string static_icon_id:flags.0?long effect_sticker_id:long effect_animation_id:flags.1?long = AvailableEffect; @@ -3095,6 +3115,14 @@ starGiftAttributeRarityLegendary#cef7e7a8 = StarGiftAttributeRarity; keyboardButtonStyle#4fdd3430 flags:# bg_primary:flags.0?true bg_danger:flags.1?true bg_success:flags.2?true icon:flags.3?long = KeyboardButtonStyle; +inputMessageReadMetric#402b4495 msg_id:int view_id:long time_in_view_ms:int active_time_in_view_ms:int height_to_viewport_ratio_permille:int seen_range_ratio_permille:int = InputMessageReadMetric; + +bots.exportedBotToken#3c60b621 token:string = bots.ExportedBotToken; + +bots.requestedButton#f13bbcd7 webapp_req_id:string = bots.RequestedButton; + +messages.composedMessageWithAI#90d7adfa flags:# result_text:TextWithEntities diff_text:flags.0?TextWithEntities = messages.ComposedMessageWithAI; + ---functions--- @@ -3684,7 +3712,7 @@ messages.updatePinnedMessage#d2aaf7ec flags:# silent:flags.0?true unpin:flags.1? messages.sendVote#10ea6184 peer:InputPeer msg_id:int options:Vector = Updates; -messages.getPollResults#73bb643b peer:InputPeer msg_id:int = Updates; +messages.getPollResults#eda3e33b peer:InputPeer msg_id:int poll_hash:long = Updates; messages.getOnlines#6e2be050 peer:InputPeer = ChatOnlines; @@ -3796,7 +3824,7 @@ messages.getAvailableReactions#18dea0ac hash:int = messages.AvailableReactions; messages.setDefaultReaction#4f47a016 reaction:Reaction = Bool; -messages.translateText#63183030 flags:# peer:flags.0?InputPeer id:flags.0?Vector text:flags.1?Vector to_lang:string = messages.TranslatedText; +messages.translateText#a5eec345 flags:# peer:flags.0?InputPeer id:flags.0?Vector text:flags.1?Vector to_lang:string tone:flags.2?string = messages.TranslatedText; messages.getUnreadReactions#bd7f90ac flags:# peer:InputPeer top_msg_id:flags.0?int saved_peer_id:flags.1?InputPeer offset_id:int add_offset:int limit:int max_id:int min_id:int = messages.Messages; @@ -3844,7 +3872,7 @@ messages.setDefaultHistoryTTL#9eb51445 period:int = Bool; messages.getDefaultHistoryTTL#658b7188 = DefaultHistoryTTL; -messages.sendBotRequestedPeer#91b2d060 peer:InputPeer msg_id:int button_id:int requested_peers:Vector = Updates; +messages.sendBotRequestedPeer#6c5cf2a7 flags:# peer:InputPeer msg_id:flags.0?int webapp_req_id:flags.1?string button_id:int requested_peers:Vector = Updates; messages.getEmojiGroups#7488ce5b hash:int = messages.EmojiGroups; @@ -3964,7 +3992,7 @@ messages.deleteTopicHistory#d2816f10 peer:InputPeer top_msg_id:int = messages.Af messages.getEmojiGameInfo#fb7e8ca7 = messages.EmojiGameInfo; -messages.summarizeText#9d4104e2 flags:# peer:InputPeer id:int to_lang:flags.0?string = TextWithEntities; +messages.summarizeText#abbbd346 flags:# peer:InputPeer id:int to_lang:flags.0?string tone:flags.2?string = TextWithEntities; messages.editChatCreator#f743b857 peer:InputPeer user_id:InputUser password:InputCheckPasswordSRP = Updates; @@ -3976,6 +4004,20 @@ messages.declineUrlAuth#35436bbc url:string = Bool; messages.checkUrlAuthMatchCode#c9a47b0b url:string match_code:string = Bool; +messages.composeMessageWithAI#fd426afe flags:# proofread:flags.0?true emojify:flags.3?true text:TextWithEntities translate_to_lang:flags.1?string change_tone:flags.2?string = messages.ComposedMessageWithAI; + +messages.reportReadMetrics#4067c5e6 peer:InputPeer metrics:Vector = Bool; + +messages.reportMusicListen#ddbcd819 id:InputDocument listened_duration:int = Bool; + +messages.addPollAnswer#19bc4b6d peer:InputPeer msg_id:int answer:PollAnswer = Updates; + +messages.deletePollAnswer#ac8505a5 peer:InputPeer msg_id:int option:bytes = Updates; + +messages.getUnreadPollVotes#43286cf2 flags:# peer:InputPeer top_msg_id:flags.0?int offset_id:int add_offset:int limit:int max_id:int min_id:int = messages.Messages; + +messages.readPollVotes#1720b4d8 flags:# peer:InputPeer top_msg_id:flags.0?int = messages.AffectedHistory; + 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; @@ -4234,6 +4276,16 @@ bots.setCustomVerification#8b89dfbd flags:# enabled:flags.1?true bot:flags.0?Inp bots.getBotRecommendations#a1b70815 bot:InputUser = users.Users; +bots.checkUsername#87f2219b username:string = Bool; + +bots.createBot#e5b17f2b flags:# via_deeplink:flags.0?true name:string username:string manager_id:InputUser = User; + +bots.exportBotToken#bd0d99eb bot:InputUser revoke:Bool = bots.ExportedBotToken; + +bots.requestWebViewButton#31a2a35e user_id:InputUser button:KeyboardButton = bots.RequestedButton; + +bots.getRequestedWebViewButton#bf25b7f3 bot:InputUser webapp_req_id:string = KeyboardButton; + payments.getPaymentForm#37148dbb flags:# invoice:InputInvoice theme_params:flags.0?DataJSON = payments.PaymentForm; payments.getPaymentReceipt#2478d1cc peer:InputPeer msg_id:int = payments.PaymentReceipt; @@ -4330,7 +4382,7 @@ payments.toggleStarGiftsPinnedToTop#1513e7b0 peer:InputPeer stargift:Vector offset:string limit:int = payments.ResaleStarGifts; +payments.getResaleStarGifts#7a5fa236 flags:# sort_by_price:flags.1?true sort_by_num:flags.2?true for_craft:flags.4?true stars_only:flags.5?true attributes_hash:flags.0?long gift_id:long attributes:flags.3?Vector offset:string limit:int = payments.ResaleStarGifts; payments.updateStarGiftPrice#edbe6ccb stargift:InputSavedStarGift resell_amount:StarsAmount = Updates; @@ -4522,9 +4574,9 @@ chatlists.leaveChatlist#74fae13a chatlist:InputChatlist peers:Vector stories.canSendStory#30eb63f0 peer:InputPeer = stories.CanSendStoryCount; -stories.sendStory#737fc2ec flags:# pinned:flags.2?true noforwards:flags.4?true fwd_modified:flags.7?true peer:InputPeer media:InputMedia media_areas:flags.5?Vector caption:flags.0?string entities:flags.1?Vector privacy_rules:Vector random_id:long period:flags.3?int fwd_from_id:flags.6?InputPeer fwd_from_story:flags.6?int albums:flags.8?Vector = Updates; +stories.sendStory#8f9e6898 flags:# pinned:flags.2?true noforwards:flags.4?true fwd_modified:flags.7?true peer:InputPeer media:InputMedia media_areas:flags.5?Vector caption:flags.0?string entities:flags.1?Vector privacy_rules:Vector random_id:long period:flags.3?int fwd_from_id:flags.6?InputPeer fwd_from_story:flags.6?int albums:flags.8?Vector music:flags.9?InputDocument = Updates; -stories.editStory#b583ba46 flags:# peer:InputPeer id:int media:flags.0?InputMedia media_areas:flags.3?Vector caption:flags.1?string entities:flags.1?Vector privacy_rules:flags.2?Vector = Updates; +stories.editStory#2c63a72b flags:# peer:InputPeer id:int media:flags.0?InputMedia media_areas:flags.3?Vector caption:flags.1?string entities:flags.1?Vector privacy_rules:flags.2?Vector music:flags.4?InputDocument = Updates; stories.deleteStories#ae59db5f peer:InputPeer id:Vector = Vector; @@ -4644,4 +4696,4 @@ test.useError#ee75af01 = Error; test.useConfigSimple#f9b7b23d = help.ConfigSimple; -// LAYER 223 +// LAYER 224 diff --git a/pkg/gotd/mtproto/handle_session_created_test.go b/pkg/gotd/mtproto/handle_session_created_test.go index 3b54047f..fcfd3d9f 100644 --- a/pkg/gotd/mtproto/handle_session_created_test.go +++ b/pkg/gotd/mtproto/handle_session_created_test.go @@ -50,7 +50,7 @@ func TestConn_handleSessionCreated(t *testing.T) { msgs := logs.All() a.Len(msgs, 1) - a.Equal("Local clock needs synchronization", msgs[0].Message) + a.Equal("Updated server time offset (high)", msgs[0].Message) }) t.Run("Invalid", func(t *testing.T) { conn := Conn{} diff --git a/pkg/gotd/telegram/message/entity/options.gen.go b/pkg/gotd/telegram/message/entity/options.gen.go index b9bfae31..e9e43c25 100644 --- a/pkg/gotd/telegram/message/entity/options.gen.go +++ b/pkg/gotd/telegram/message/entity/options.gen.go @@ -422,3 +422,61 @@ func FormattedDate(relative bool, shortTime bool, longTime bool, shortDate bool, func (b *Builder) FormattedDate(s string, relative bool, shortTime bool, longTime bool, shortDate bool, longDate bool, dayOfWeek bool, date int) *Builder { return b.Format(s, FormattedDate(relative, shortTime, longTime, shortDate, longDate, dayOfWeek, date)) } + +// DiffInsert creates Formatter of DiffInsert message entity. +// +// See https://core.telegram.org/constructor/messageEntityDiffInsert. +func DiffInsert() Formatter { + return func(offset, length int) tg.MessageEntityClass { + return &tg.MessageEntityDiffInsert{ + Offset: offset, + Length: length, + } + } +} + +// DiffInsert adds and formats message as DiffInsert message entity. +// +// See https://core.telegram.org/constructor/messageEntityDiffInsert. +func (b *Builder) DiffInsert(s string) *Builder { + return b.Format(s, DiffInsert()) +} + +// DiffReplace creates Formatter of DiffReplace message entity. +// +// See https://core.telegram.org/constructor/messageEntityDiffReplace. +func DiffReplace(oldText string) Formatter { + return func(offset, length int) tg.MessageEntityClass { + return &tg.MessageEntityDiffReplace{ + Offset: offset, + Length: length, + OldText: oldText, + } + } +} + +// DiffReplace adds and formats message as DiffReplace message entity. +// +// See https://core.telegram.org/constructor/messageEntityDiffReplace. +func (b *Builder) DiffReplace(s string, oldText string) *Builder { + return b.Format(s, DiffReplace(oldText)) +} + +// DiffDelete creates Formatter of DiffDelete message entity. +// +// See https://core.telegram.org/constructor/messageEntityDiffDelete. +func DiffDelete() Formatter { + return func(offset, length int) tg.MessageEntityClass { + return &tg.MessageEntityDiffDelete{ + Offset: offset, + Length: length, + } + } +} + +// DiffDelete adds and formats message as DiffDelete message entity. +// +// See https://core.telegram.org/constructor/messageEntityDiffDelete. +func (b *Builder) DiffDelete(s string) *Builder { + return b.Format(s, DiffDelete()) +} diff --git a/pkg/gotd/telegram/message/poll.go b/pkg/gotd/telegram/message/poll.go index b303dca6..c417a374 100644 --- a/pkg/gotd/telegram/message/poll.go +++ b/pkg/gotd/telegram/message/poll.go @@ -21,7 +21,7 @@ type pollAnswerBuilder struct { type PollAnswerOption func(p *pollAnswerBuilder) // RawPollAnswer creates new raw poll answer option. -func RawPollAnswer(poll tg.PollAnswer) PollAnswerOption { +func RawPollAnswer(poll *tg.PollAnswer) PollAnswerOption { return func(p *pollAnswerBuilder) { p.input.Poll.Answers = append(p.input.Poll.Answers, poll) } @@ -31,7 +31,7 @@ func RawPollAnswer(poll tg.PollAnswer) PollAnswerOption { func PollAnswer(text string, entities ...tg.MessageEntityClass) PollAnswerOption { return func(p *pollAnswerBuilder) { i := len(p.input.Poll.Answers) - p.input.Poll.Answers = append(p.input.Poll.Answers, tg.PollAnswer{ + p.input.Poll.Answers = append(p.input.Poll.Answers, &tg.PollAnswer{ Text: tg.TextWithEntities{Text: text, Entities: entities}, Option: []byte(strconv.Itoa(i)), }) @@ -44,11 +44,11 @@ func CorrectPollAnswer(text string, entities ...tg.MessageEntityClass) PollAnswe p.input.Poll.Quiz = true i := len(p.input.Poll.Answers) option := []byte(strconv.Itoa(i)) - p.input.Poll.Answers = append(p.input.Poll.Answers, tg.PollAnswer{ + p.input.Poll.Answers = append(p.input.Poll.Answers, &tg.PollAnswer{ Text: tg.TextWithEntities{Text: text, Entities: entities}, Option: option, }) - p.input.CorrectAnswers = append(p.input.CorrectAnswers, option) + p.input.CorrectAnswers = append(p.input.CorrectAnswers, i) } } diff --git a/pkg/gotd/telegram/message/poll_test.go b/pkg/gotd/telegram/message/poll_test.go index 86e24973..a70df034 100644 --- a/pkg/gotd/telegram/message/poll_test.go +++ b/pkg/gotd/telegram/message/poll_test.go @@ -26,7 +26,7 @@ func TestPoll(t *testing.T) { id = m.Poll.ID require.Len(t, m.Poll.Answers, 3) require.Len(t, m.CorrectAnswers, 1) - require.Equal(t, m.Poll.Answers[0].Option, m.CorrectAnswers[0]) + require.Equal(t, 0, m.CorrectAnswers[0]) }).ThenResult(&tg.Updates{}) mock.ExpectFunc(func(b bin.Encoder) { req, ok := b.(*tg.MessagesSendMediaRequest) diff --git a/pkg/gotd/telegram/message/styling/options.gen.go b/pkg/gotd/telegram/message/styling/options.gen.go index 309569e9..22c35b24 100644 --- a/pkg/gotd/telegram/message/styling/options.gen.go +++ b/pkg/gotd/telegram/message/styling/options.gen.go @@ -221,3 +221,33 @@ func FormattedDate(s string, relative bool, shortTime bool, longTime bool, short return nil }) } + +// DiffInsert formats text as DiffInsert entity. +// +// See https://core.telegram.org/constructor/messageEntityDiffInsert. +func DiffInsert(s string) StyledTextOption { + return styledTextOption(s, func(b *textBuilder) error { + b.DiffInsert(s) + return nil + }) +} + +// DiffReplace formats text as DiffReplace entity. +// +// See https://core.telegram.org/constructor/messageEntityDiffReplace. +func DiffReplace(s string, oldText string) StyledTextOption { + return styledTextOption(s, func(b *textBuilder) error { + b.DiffReplace(s, oldText) + return nil + }) +} + +// DiffDelete formats text as DiffDelete entity. +// +// See https://core.telegram.org/constructor/messageEntityDiffDelete. +func DiffDelete(s string) StyledTextOption { + return styledTextOption(s, func(b *textBuilder) error { + b.DiffDelete(s) + return nil + }) +} diff --git a/pkg/gotd/telegram/query/messages/queries.gen.go b/pkg/gotd/telegram/query/messages/queries.gen.go index bafce5b4..fcb081ad 100644 --- a/pkg/gotd/telegram/query/messages/queries.gen.go +++ b/pkg/gotd/telegram/query/messages/queries.gen.go @@ -692,6 +692,112 @@ func (b *GetUnreadMentionsQueryBuilder) Collect(ctx context.Context) ([]Elem, er return r, iter.Err() } +// GetUnreadPollVotesQueryBuilder is query builder of MessagesGetUnreadPollVotes. +type GetUnreadPollVotesQueryBuilder struct { + raw *tg.Client + req tg.MessagesGetUnreadPollVotesRequest + batchSize int + addOffset int + offsetID int +} + +// GetUnreadPollVotes creates query builder of MessagesGetUnreadPollVotes. +func (q *QueryBuilder) GetUnreadPollVotes(paramPeer tg.InputPeerClass) *GetUnreadPollVotesQueryBuilder { + b := &GetUnreadPollVotesQueryBuilder{ + raw: q.raw, + batchSize: 1, + req: tg.MessagesGetUnreadPollVotesRequest{ + Peer: &tg.InputPeerEmpty{}, + }, + } + + b.req.Peer = paramPeer + return b +} + +// BatchSize sets buffer of message loaded from one request. +// Be carefully, when set this limit, because Telegram does not return error if limit is too big, +// so results can be incorrect. +func (b *GetUnreadPollVotesQueryBuilder) BatchSize(batchSize int) *GetUnreadPollVotesQueryBuilder { + b.batchSize = batchSize + return b +} + +// OffsetID sets offsetID from which iterate start. +func (b *GetUnreadPollVotesQueryBuilder) OffsetID(offsetID int) *GetUnreadPollVotesQueryBuilder { + b.offsetID = offsetID + return b +} + +// Peer sets Peer field of GetUnreadPollVotes query. +func (b *GetUnreadPollVotesQueryBuilder) Peer(paramPeer tg.InputPeerClass) *GetUnreadPollVotesQueryBuilder { + b.req.Peer = paramPeer + return b +} + +// TopMsgID sets TopMsgID field of GetUnreadPollVotes query. +func (b *GetUnreadPollVotesQueryBuilder) TopMsgID(paramTopMsgID int) *GetUnreadPollVotesQueryBuilder { + b.req.TopMsgID = paramTopMsgID + return b +} + +// Query implements Query interface. +func (b *GetUnreadPollVotesQueryBuilder) Query(ctx context.Context, req Request) (tg.MessagesMessagesClass, error) { + r := &tg.MessagesGetUnreadPollVotesRequest{ + Limit: req.Limit, + } + + r.Peer = b.req.Peer + r.TopMsgID = b.req.TopMsgID + r.AddOffset = req.AddOffset + r.OffsetID = req.OffsetID + return b.raw.MessagesGetUnreadPollVotes(ctx, r) +} + +// Iter returns iterator using built query. +func (b *GetUnreadPollVotesQueryBuilder) Iter() *Iterator { + iter := NewIterator(b, b.batchSize) + iter = iter.OffsetID(b.offsetID) + return iter +} + +// ForEach calls given callback on each iterator element. +func (b *GetUnreadPollVotesQueryBuilder) ForEach(ctx context.Context, cb func(context.Context, Elem) error) error { + iter := b.Iter() + for iter.Next(ctx) { + if err := cb(ctx, iter.Value()); err != nil { + return err + } + } + return iter.Err() +} + +// Count fetches remote state to get number of elements. +func (b *GetUnreadPollVotesQueryBuilder) Count(ctx context.Context) (int, error) { + iter := b.Iter() + c, err := iter.Total(ctx) + if err != nil { + return 0, errors.Wrap(err, "get total") + } + return c, nil +} + +// Collect creates iterator and collects all elements to slice. +func (b *GetUnreadPollVotesQueryBuilder) Collect(ctx context.Context) ([]Elem, error) { + iter := b.Iter() + c, err := iter.Total(ctx) + if err != nil { + return nil, errors.Wrap(err, "get total") + } + + r := make([]Elem, 0, c) + for iter.Next(ctx) { + r = append(r, iter.Value()) + } + + return r, iter.Err() +} + // GetUnreadReactionsQueryBuilder is query builder of MessagesGetUnreadReactions. type GetUnreadReactionsQueryBuilder struct { raw *tg.Client @@ -968,6 +1074,12 @@ func (b *SearchQueryBuilder) Pinned() *SearchQueryBuilder { return b } +// Poll sets Filter field of Search query. +func (b *SearchQueryBuilder) Poll() *SearchQueryBuilder { + b.req.Filter = &tg.InputMessagesFilterPoll{} + return b +} + // RoundVideo sets Filter field of Search query. func (b *SearchQueryBuilder) RoundVideo() *SearchQueryBuilder { b.req.Filter = &tg.InputMessagesFilterRoundVideo{} @@ -1215,6 +1327,12 @@ func (b *SearchGlobalQueryBuilder) Pinned() *SearchGlobalQueryBuilder { return b } +// Poll sets Filter field of SearchGlobal query. +func (b *SearchGlobalQueryBuilder) Poll() *SearchGlobalQueryBuilder { + b.req.Filter = &tg.InputMessagesFilterPoll{} + return b +} + // RoundVideo sets Filter field of SearchGlobal query. func (b *SearchGlobalQueryBuilder) RoundVideo() *SearchGlobalQueryBuilder { b.req.Filter = &tg.InputMessagesFilterRoundVideo{} @@ -1417,6 +1535,12 @@ func (b *SearchSentMediaQueryBuilder) Pinned() *SearchSentMediaQueryBuilder { return b } +// Poll sets Filter field of SearchSentMedia query. +func (b *SearchSentMediaQueryBuilder) Poll() *SearchSentMediaQueryBuilder { + b.req.Filter = &tg.InputMessagesFilterPoll{} + return b +} + // RoundVideo sets Filter field of SearchSentMedia query. func (b *SearchSentMediaQueryBuilder) RoundVideo() *SearchSentMediaQueryBuilder { b.req.Filter = &tg.InputMessagesFilterRoundVideo{} diff --git a/pkg/gotd/tg/tl_bots_check_username_gen.go b/pkg/gotd/tg/tl_bots_check_username_gen.go new file mode 100644 index 00000000..1faf67a7 --- /dev/null +++ b/pkg/gotd/tg/tl_bots_check_username_gen.go @@ -0,0 +1,177 @@ +// Code generated by gotdgen, DO NOT EDIT. + +package tg + +import ( + "context" + "errors" + "fmt" + "sort" + "strings" + + "go.uber.org/multierr" + + "go.mau.fi/mautrix-telegram/pkg/gotd/bin" + "go.mau.fi/mautrix-telegram/pkg/gotd/tdjson" + "go.mau.fi/mautrix-telegram/pkg/gotd/tdp" + "go.mau.fi/mautrix-telegram/pkg/gotd/tgerr" +) + +// No-op definition for keeping imports. +var ( + _ = bin.Buffer{} + _ = context.Background() + _ = fmt.Stringer(nil) + _ = strings.Builder{} + _ = errors.Is + _ = multierr.AppendInto + _ = sort.Ints + _ = tdp.Format + _ = tgerr.Error{} + _ = tdjson.Encoder{} +) + +// BotsCheckUsernameRequest represents TL type `bots.checkUsername#87f2219b`. +// +// See https://core.telegram.org/method/bots.checkUsername for reference. +type BotsCheckUsernameRequest struct { + // Username field of BotsCheckUsernameRequest. + Username string +} + +// BotsCheckUsernameRequestTypeID is TL type id of BotsCheckUsernameRequest. +const BotsCheckUsernameRequestTypeID = 0x87f2219b + +// Ensuring interfaces in compile-time for BotsCheckUsernameRequest. +var ( + _ bin.Encoder = &BotsCheckUsernameRequest{} + _ bin.Decoder = &BotsCheckUsernameRequest{} + _ bin.BareEncoder = &BotsCheckUsernameRequest{} + _ bin.BareDecoder = &BotsCheckUsernameRequest{} +) + +func (c *BotsCheckUsernameRequest) Zero() bool { + if c == nil { + return true + } + if !(c.Username == "") { + return false + } + + return true +} + +// String implements fmt.Stringer. +func (c *BotsCheckUsernameRequest) String() string { + if c == nil { + return "BotsCheckUsernameRequest(nil)" + } + type Alias BotsCheckUsernameRequest + return fmt.Sprintf("BotsCheckUsernameRequest%+v", Alias(*c)) +} + +// FillFrom fills BotsCheckUsernameRequest from given interface. +func (c *BotsCheckUsernameRequest) FillFrom(from interface { + GetUsername() (value string) +}) { + c.Username = from.GetUsername() +} + +// TypeID returns type id in TL schema. +// +// See https://core.telegram.org/mtproto/TL-tl#remarks. +func (*BotsCheckUsernameRequest) TypeID() uint32 { + return BotsCheckUsernameRequestTypeID +} + +// TypeName returns name of type in TL schema. +func (*BotsCheckUsernameRequest) TypeName() string { + return "bots.checkUsername" +} + +// TypeInfo returns info about TL type. +func (c *BotsCheckUsernameRequest) TypeInfo() tdp.Type { + typ := tdp.Type{ + Name: "bots.checkUsername", + ID: BotsCheckUsernameRequestTypeID, + } + if c == nil { + typ.Null = true + return typ + } + typ.Fields = []tdp.Field{ + { + Name: "Username", + SchemaName: "username", + }, + } + return typ +} + +// Encode implements bin.Encoder. +func (c *BotsCheckUsernameRequest) Encode(b *bin.Buffer) error { + if c == nil { + return fmt.Errorf("can't encode bots.checkUsername#87f2219b as nil") + } + b.PutID(BotsCheckUsernameRequestTypeID) + return c.EncodeBare(b) +} + +// EncodeBare implements bin.BareEncoder. +func (c *BotsCheckUsernameRequest) EncodeBare(b *bin.Buffer) error { + if c == nil { + return fmt.Errorf("can't encode bots.checkUsername#87f2219b as nil") + } + b.PutString(c.Username) + return nil +} + +// Decode implements bin.Decoder. +func (c *BotsCheckUsernameRequest) Decode(b *bin.Buffer) error { + if c == nil { + return fmt.Errorf("can't decode bots.checkUsername#87f2219b to nil") + } + if err := b.ConsumeID(BotsCheckUsernameRequestTypeID); err != nil { + return fmt.Errorf("unable to decode bots.checkUsername#87f2219b: %w", err) + } + return c.DecodeBare(b) +} + +// DecodeBare implements bin.BareDecoder. +func (c *BotsCheckUsernameRequest) DecodeBare(b *bin.Buffer) error { + if c == nil { + return fmt.Errorf("can't decode bots.checkUsername#87f2219b to nil") + } + { + value, err := b.String() + if err != nil { + return fmt.Errorf("unable to decode bots.checkUsername#87f2219b: field username: %w", err) + } + c.Username = value + } + return nil +} + +// GetUsername returns value of Username field. +func (c *BotsCheckUsernameRequest) GetUsername() (value string) { + if c == nil { + return + } + return c.Username +} + +// BotsCheckUsername invokes method bots.checkUsername#87f2219b returning error if any. +// +// See https://core.telegram.org/method/bots.checkUsername for reference. +func (c *Client) BotsCheckUsername(ctx context.Context, username string) (bool, error) { + var result BoolBox + + request := &BotsCheckUsernameRequest{ + Username: username, + } + if err := c.rpc.Invoke(ctx, request, &result); err != nil { + return false, err + } + _, ok := result.Bool.(*BoolTrue) + return ok, nil +} diff --git a/pkg/gotd/tg/tl_bots_check_username_slices_gen.go b/pkg/gotd/tg/tl_bots_check_username_slices_gen.go new file mode 100644 index 00000000..ad362638 --- /dev/null +++ b/pkg/gotd/tg/tl_bots_check_username_slices_gen.go @@ -0,0 +1,35 @@ +//go:build !no_gotd_slices +// +build !no_gotd_slices + +// Code generated by gotdgen, DO NOT EDIT. + +package tg + +import ( + "context" + "errors" + "fmt" + "sort" + "strings" + + "go.uber.org/multierr" + + "go.mau.fi/mautrix-telegram/pkg/gotd/bin" + "go.mau.fi/mautrix-telegram/pkg/gotd/tdjson" + "go.mau.fi/mautrix-telegram/pkg/gotd/tdp" + "go.mau.fi/mautrix-telegram/pkg/gotd/tgerr" +) + +// No-op definition for keeping imports. +var ( + _ = bin.Buffer{} + _ = context.Background() + _ = fmt.Stringer(nil) + _ = strings.Builder{} + _ = errors.Is + _ = multierr.AppendInto + _ = sort.Ints + _ = tdp.Format + _ = tgerr.Error{} + _ = tdjson.Encoder{} +) diff --git a/pkg/gotd/tg/tl_bots_create_bot_gen.go b/pkg/gotd/tg/tl_bots_create_bot_gen.go new file mode 100644 index 00000000..f1e8d020 --- /dev/null +++ b/pkg/gotd/tg/tl_bots_create_bot_gen.go @@ -0,0 +1,285 @@ +// Code generated by gotdgen, DO NOT EDIT. + +package tg + +import ( + "context" + "errors" + "fmt" + "sort" + "strings" + + "go.uber.org/multierr" + + "go.mau.fi/mautrix-telegram/pkg/gotd/bin" + "go.mau.fi/mautrix-telegram/pkg/gotd/tdjson" + "go.mau.fi/mautrix-telegram/pkg/gotd/tdp" + "go.mau.fi/mautrix-telegram/pkg/gotd/tgerr" +) + +// No-op definition for keeping imports. +var ( + _ = bin.Buffer{} + _ = context.Background() + _ = fmt.Stringer(nil) + _ = strings.Builder{} + _ = errors.Is + _ = multierr.AppendInto + _ = sort.Ints + _ = tdp.Format + _ = tgerr.Error{} + _ = tdjson.Encoder{} +) + +// BotsCreateBotRequest represents TL type `bots.createBot#e5b17f2b`. +// +// See https://core.telegram.org/method/bots.createBot for reference. +type BotsCreateBotRequest struct { + // Flags field of BotsCreateBotRequest. + Flags bin.Fields + // ViaDeeplink field of BotsCreateBotRequest. + ViaDeeplink bool + // Name field of BotsCreateBotRequest. + Name string + // Username field of BotsCreateBotRequest. + Username string + // ManagerID field of BotsCreateBotRequest. + ManagerID InputUserClass +} + +// BotsCreateBotRequestTypeID is TL type id of BotsCreateBotRequest. +const BotsCreateBotRequestTypeID = 0xe5b17f2b + +// Ensuring interfaces in compile-time for BotsCreateBotRequest. +var ( + _ bin.Encoder = &BotsCreateBotRequest{} + _ bin.Decoder = &BotsCreateBotRequest{} + _ bin.BareEncoder = &BotsCreateBotRequest{} + _ bin.BareDecoder = &BotsCreateBotRequest{} +) + +func (c *BotsCreateBotRequest) Zero() bool { + if c == nil { + return true + } + if !(c.Flags.Zero()) { + return false + } + if !(c.ViaDeeplink == false) { + return false + } + if !(c.Name == "") { + return false + } + if !(c.Username == "") { + return false + } + if !(c.ManagerID == nil) { + return false + } + + return true +} + +// String implements fmt.Stringer. +func (c *BotsCreateBotRequest) String() string { + if c == nil { + return "BotsCreateBotRequest(nil)" + } + type Alias BotsCreateBotRequest + return fmt.Sprintf("BotsCreateBotRequest%+v", Alias(*c)) +} + +// FillFrom fills BotsCreateBotRequest from given interface. +func (c *BotsCreateBotRequest) FillFrom(from interface { + GetViaDeeplink() (value bool) + GetName() (value string) + GetUsername() (value string) + GetManagerID() (value InputUserClass) +}) { + c.ViaDeeplink = from.GetViaDeeplink() + c.Name = from.GetName() + c.Username = from.GetUsername() + c.ManagerID = from.GetManagerID() +} + +// TypeID returns type id in TL schema. +// +// See https://core.telegram.org/mtproto/TL-tl#remarks. +func (*BotsCreateBotRequest) TypeID() uint32 { + return BotsCreateBotRequestTypeID +} + +// TypeName returns name of type in TL schema. +func (*BotsCreateBotRequest) TypeName() string { + return "bots.createBot" +} + +// TypeInfo returns info about TL type. +func (c *BotsCreateBotRequest) TypeInfo() tdp.Type { + typ := tdp.Type{ + Name: "bots.createBot", + ID: BotsCreateBotRequestTypeID, + } + if c == nil { + typ.Null = true + return typ + } + typ.Fields = []tdp.Field{ + { + Name: "ViaDeeplink", + SchemaName: "via_deeplink", + Null: !c.Flags.Has(0), + }, + { + Name: "Name", + SchemaName: "name", + }, + { + Name: "Username", + SchemaName: "username", + }, + { + Name: "ManagerID", + SchemaName: "manager_id", + }, + } + return typ +} + +// SetFlags sets flags for non-zero fields. +func (c *BotsCreateBotRequest) SetFlags() { + if !(c.ViaDeeplink == false) { + c.Flags.Set(0) + } +} + +// Encode implements bin.Encoder. +func (c *BotsCreateBotRequest) Encode(b *bin.Buffer) error { + if c == nil { + return fmt.Errorf("can't encode bots.createBot#e5b17f2b as nil") + } + b.PutID(BotsCreateBotRequestTypeID) + return c.EncodeBare(b) +} + +// EncodeBare implements bin.BareEncoder. +func (c *BotsCreateBotRequest) EncodeBare(b *bin.Buffer) error { + if c == nil { + return fmt.Errorf("can't encode bots.createBot#e5b17f2b as nil") + } + c.SetFlags() + if err := c.Flags.Encode(b); err != nil { + return fmt.Errorf("unable to encode bots.createBot#e5b17f2b: field flags: %w", err) + } + b.PutString(c.Name) + b.PutString(c.Username) + if c.ManagerID == nil { + return fmt.Errorf("unable to encode bots.createBot#e5b17f2b: field manager_id is nil") + } + if err := c.ManagerID.Encode(b); err != nil { + return fmt.Errorf("unable to encode bots.createBot#e5b17f2b: field manager_id: %w", err) + } + return nil +} + +// Decode implements bin.Decoder. +func (c *BotsCreateBotRequest) Decode(b *bin.Buffer) error { + if c == nil { + return fmt.Errorf("can't decode bots.createBot#e5b17f2b to nil") + } + if err := b.ConsumeID(BotsCreateBotRequestTypeID); err != nil { + return fmt.Errorf("unable to decode bots.createBot#e5b17f2b: %w", err) + } + return c.DecodeBare(b) +} + +// DecodeBare implements bin.BareDecoder. +func (c *BotsCreateBotRequest) DecodeBare(b *bin.Buffer) error { + if c == nil { + return fmt.Errorf("can't decode bots.createBot#e5b17f2b to nil") + } + { + if err := c.Flags.Decode(b); err != nil { + return fmt.Errorf("unable to decode bots.createBot#e5b17f2b: field flags: %w", err) + } + } + c.ViaDeeplink = c.Flags.Has(0) + { + value, err := b.String() + if err != nil { + return fmt.Errorf("unable to decode bots.createBot#e5b17f2b: field name: %w", err) + } + c.Name = value + } + { + value, err := b.String() + if err != nil { + return fmt.Errorf("unable to decode bots.createBot#e5b17f2b: field username: %w", err) + } + c.Username = value + } + { + value, err := DecodeInputUser(b) + if err != nil { + return fmt.Errorf("unable to decode bots.createBot#e5b17f2b: field manager_id: %w", err) + } + c.ManagerID = value + } + return nil +} + +// SetViaDeeplink sets value of ViaDeeplink conditional field. +func (c *BotsCreateBotRequest) SetViaDeeplink(value bool) { + if value { + c.Flags.Set(0) + c.ViaDeeplink = true + } else { + c.Flags.Unset(0) + c.ViaDeeplink = false + } +} + +// GetViaDeeplink returns value of ViaDeeplink conditional field. +func (c *BotsCreateBotRequest) GetViaDeeplink() (value bool) { + if c == nil { + return + } + return c.Flags.Has(0) +} + +// GetName returns value of Name field. +func (c *BotsCreateBotRequest) GetName() (value string) { + if c == nil { + return + } + return c.Name +} + +// GetUsername returns value of Username field. +func (c *BotsCreateBotRequest) GetUsername() (value string) { + if c == nil { + return + } + return c.Username +} + +// GetManagerID returns value of ManagerID field. +func (c *BotsCreateBotRequest) GetManagerID() (value InputUserClass) { + if c == nil { + return + } + return c.ManagerID +} + +// BotsCreateBot invokes method bots.createBot#e5b17f2b returning error if any. +// +// See https://core.telegram.org/method/bots.createBot for reference. +func (c *Client) BotsCreateBot(ctx context.Context, request *BotsCreateBotRequest) (UserClass, error) { + var result UserBox + + if err := c.rpc.Invoke(ctx, request, &result); err != nil { + return nil, err + } + return result.User, nil +} diff --git a/pkg/gotd/tg/tl_bots_create_bot_slices_gen.go b/pkg/gotd/tg/tl_bots_create_bot_slices_gen.go new file mode 100644 index 00000000..ad362638 --- /dev/null +++ b/pkg/gotd/tg/tl_bots_create_bot_slices_gen.go @@ -0,0 +1,35 @@ +//go:build !no_gotd_slices +// +build !no_gotd_slices + +// Code generated by gotdgen, DO NOT EDIT. + +package tg + +import ( + "context" + "errors" + "fmt" + "sort" + "strings" + + "go.uber.org/multierr" + + "go.mau.fi/mautrix-telegram/pkg/gotd/bin" + "go.mau.fi/mautrix-telegram/pkg/gotd/tdjson" + "go.mau.fi/mautrix-telegram/pkg/gotd/tdp" + "go.mau.fi/mautrix-telegram/pkg/gotd/tgerr" +) + +// No-op definition for keeping imports. +var ( + _ = bin.Buffer{} + _ = context.Background() + _ = fmt.Stringer(nil) + _ = strings.Builder{} + _ = errors.Is + _ = multierr.AppendInto + _ = sort.Ints + _ = tdp.Format + _ = tgerr.Error{} + _ = tdjson.Encoder{} +) diff --git a/pkg/gotd/tg/tl_bots_export_bot_token_gen.go b/pkg/gotd/tg/tl_bots_export_bot_token_gen.go new file mode 100644 index 00000000..a795c204 --- /dev/null +++ b/pkg/gotd/tg/tl_bots_export_bot_token_gen.go @@ -0,0 +1,205 @@ +// Code generated by gotdgen, DO NOT EDIT. + +package tg + +import ( + "context" + "errors" + "fmt" + "sort" + "strings" + + "go.uber.org/multierr" + + "go.mau.fi/mautrix-telegram/pkg/gotd/bin" + "go.mau.fi/mautrix-telegram/pkg/gotd/tdjson" + "go.mau.fi/mautrix-telegram/pkg/gotd/tdp" + "go.mau.fi/mautrix-telegram/pkg/gotd/tgerr" +) + +// No-op definition for keeping imports. +var ( + _ = bin.Buffer{} + _ = context.Background() + _ = fmt.Stringer(nil) + _ = strings.Builder{} + _ = errors.Is + _ = multierr.AppendInto + _ = sort.Ints + _ = tdp.Format + _ = tgerr.Error{} + _ = tdjson.Encoder{} +) + +// BotsExportBotTokenRequest represents TL type `bots.exportBotToken#bd0d99eb`. +// +// See https://core.telegram.org/method/bots.exportBotToken for reference. +type BotsExportBotTokenRequest struct { + // Bot field of BotsExportBotTokenRequest. + Bot InputUserClass + // Revoke field of BotsExportBotTokenRequest. + Revoke bool +} + +// BotsExportBotTokenRequestTypeID is TL type id of BotsExportBotTokenRequest. +const BotsExportBotTokenRequestTypeID = 0xbd0d99eb + +// Ensuring interfaces in compile-time for BotsExportBotTokenRequest. +var ( + _ bin.Encoder = &BotsExportBotTokenRequest{} + _ bin.Decoder = &BotsExportBotTokenRequest{} + _ bin.BareEncoder = &BotsExportBotTokenRequest{} + _ bin.BareDecoder = &BotsExportBotTokenRequest{} +) + +func (e *BotsExportBotTokenRequest) Zero() bool { + if e == nil { + return true + } + if !(e.Bot == nil) { + return false + } + if !(e.Revoke == false) { + return false + } + + return true +} + +// String implements fmt.Stringer. +func (e *BotsExportBotTokenRequest) String() string { + if e == nil { + return "BotsExportBotTokenRequest(nil)" + } + type Alias BotsExportBotTokenRequest + return fmt.Sprintf("BotsExportBotTokenRequest%+v", Alias(*e)) +} + +// FillFrom fills BotsExportBotTokenRequest from given interface. +func (e *BotsExportBotTokenRequest) FillFrom(from interface { + GetBot() (value InputUserClass) + GetRevoke() (value bool) +}) { + e.Bot = from.GetBot() + e.Revoke = from.GetRevoke() +} + +// TypeID returns type id in TL schema. +// +// See https://core.telegram.org/mtproto/TL-tl#remarks. +func (*BotsExportBotTokenRequest) TypeID() uint32 { + return BotsExportBotTokenRequestTypeID +} + +// TypeName returns name of type in TL schema. +func (*BotsExportBotTokenRequest) TypeName() string { + return "bots.exportBotToken" +} + +// TypeInfo returns info about TL type. +func (e *BotsExportBotTokenRequest) TypeInfo() tdp.Type { + typ := tdp.Type{ + Name: "bots.exportBotToken", + ID: BotsExportBotTokenRequestTypeID, + } + if e == nil { + typ.Null = true + return typ + } + typ.Fields = []tdp.Field{ + { + Name: "Bot", + SchemaName: "bot", + }, + { + Name: "Revoke", + SchemaName: "revoke", + }, + } + return typ +} + +// Encode implements bin.Encoder. +func (e *BotsExportBotTokenRequest) Encode(b *bin.Buffer) error { + if e == nil { + return fmt.Errorf("can't encode bots.exportBotToken#bd0d99eb as nil") + } + b.PutID(BotsExportBotTokenRequestTypeID) + return e.EncodeBare(b) +} + +// EncodeBare implements bin.BareEncoder. +func (e *BotsExportBotTokenRequest) EncodeBare(b *bin.Buffer) error { + if e == nil { + return fmt.Errorf("can't encode bots.exportBotToken#bd0d99eb as nil") + } + if e.Bot == nil { + return fmt.Errorf("unable to encode bots.exportBotToken#bd0d99eb: field bot is nil") + } + if err := e.Bot.Encode(b); err != nil { + return fmt.Errorf("unable to encode bots.exportBotToken#bd0d99eb: field bot: %w", err) + } + b.PutBool(e.Revoke) + return nil +} + +// Decode implements bin.Decoder. +func (e *BotsExportBotTokenRequest) Decode(b *bin.Buffer) error { + if e == nil { + return fmt.Errorf("can't decode bots.exportBotToken#bd0d99eb to nil") + } + if err := b.ConsumeID(BotsExportBotTokenRequestTypeID); err != nil { + return fmt.Errorf("unable to decode bots.exportBotToken#bd0d99eb: %w", err) + } + return e.DecodeBare(b) +} + +// DecodeBare implements bin.BareDecoder. +func (e *BotsExportBotTokenRequest) DecodeBare(b *bin.Buffer) error { + if e == nil { + return fmt.Errorf("can't decode bots.exportBotToken#bd0d99eb to nil") + } + { + value, err := DecodeInputUser(b) + if err != nil { + return fmt.Errorf("unable to decode bots.exportBotToken#bd0d99eb: field bot: %w", err) + } + e.Bot = value + } + { + value, err := b.Bool() + if err != nil { + return fmt.Errorf("unable to decode bots.exportBotToken#bd0d99eb: field revoke: %w", err) + } + e.Revoke = value + } + return nil +} + +// GetBot returns value of Bot field. +func (e *BotsExportBotTokenRequest) GetBot() (value InputUserClass) { + if e == nil { + return + } + return e.Bot +} + +// GetRevoke returns value of Revoke field. +func (e *BotsExportBotTokenRequest) GetRevoke() (value bool) { + if e == nil { + return + } + return e.Revoke +} + +// BotsExportBotToken invokes method bots.exportBotToken#bd0d99eb returning error if any. +// +// See https://core.telegram.org/method/bots.exportBotToken for reference. +func (c *Client) BotsExportBotToken(ctx context.Context, request *BotsExportBotTokenRequest) (*BotsExportedBotToken, error) { + var result BotsExportedBotToken + + if err := c.rpc.Invoke(ctx, request, &result); err != nil { + return nil, err + } + return &result, nil +} diff --git a/pkg/gotd/tg/tl_bots_export_bot_token_slices_gen.go b/pkg/gotd/tg/tl_bots_export_bot_token_slices_gen.go new file mode 100644 index 00000000..ad362638 --- /dev/null +++ b/pkg/gotd/tg/tl_bots_export_bot_token_slices_gen.go @@ -0,0 +1,35 @@ +//go:build !no_gotd_slices +// +build !no_gotd_slices + +// Code generated by gotdgen, DO NOT EDIT. + +package tg + +import ( + "context" + "errors" + "fmt" + "sort" + "strings" + + "go.uber.org/multierr" + + "go.mau.fi/mautrix-telegram/pkg/gotd/bin" + "go.mau.fi/mautrix-telegram/pkg/gotd/tdjson" + "go.mau.fi/mautrix-telegram/pkg/gotd/tdp" + "go.mau.fi/mautrix-telegram/pkg/gotd/tgerr" +) + +// No-op definition for keeping imports. +var ( + _ = bin.Buffer{} + _ = context.Background() + _ = fmt.Stringer(nil) + _ = strings.Builder{} + _ = errors.Is + _ = multierr.AppendInto + _ = sort.Ints + _ = tdp.Format + _ = tgerr.Error{} + _ = tdjson.Encoder{} +) diff --git a/pkg/gotd/tg/tl_bots_exported_bot_token_gen.go b/pkg/gotd/tg/tl_bots_exported_bot_token_gen.go new file mode 100644 index 00000000..89cb4eec --- /dev/null +++ b/pkg/gotd/tg/tl_bots_exported_bot_token_gen.go @@ -0,0 +1,161 @@ +// Code generated by gotdgen, DO NOT EDIT. + +package tg + +import ( + "context" + "errors" + "fmt" + "sort" + "strings" + + "go.uber.org/multierr" + + "go.mau.fi/mautrix-telegram/pkg/gotd/bin" + "go.mau.fi/mautrix-telegram/pkg/gotd/tdjson" + "go.mau.fi/mautrix-telegram/pkg/gotd/tdp" + "go.mau.fi/mautrix-telegram/pkg/gotd/tgerr" +) + +// No-op definition for keeping imports. +var ( + _ = bin.Buffer{} + _ = context.Background() + _ = fmt.Stringer(nil) + _ = strings.Builder{} + _ = errors.Is + _ = multierr.AppendInto + _ = sort.Ints + _ = tdp.Format + _ = tgerr.Error{} + _ = tdjson.Encoder{} +) + +// BotsExportedBotToken represents TL type `bots.exportedBotToken#3c60b621`. +// +// See https://core.telegram.org/constructor/bots.exportedBotToken for reference. +type BotsExportedBotToken struct { + // Token field of BotsExportedBotToken. + Token string +} + +// BotsExportedBotTokenTypeID is TL type id of BotsExportedBotToken. +const BotsExportedBotTokenTypeID = 0x3c60b621 + +// Ensuring interfaces in compile-time for BotsExportedBotToken. +var ( + _ bin.Encoder = &BotsExportedBotToken{} + _ bin.Decoder = &BotsExportedBotToken{} + _ bin.BareEncoder = &BotsExportedBotToken{} + _ bin.BareDecoder = &BotsExportedBotToken{} +) + +func (e *BotsExportedBotToken) Zero() bool { + if e == nil { + return true + } + if !(e.Token == "") { + return false + } + + return true +} + +// String implements fmt.Stringer. +func (e *BotsExportedBotToken) String() string { + if e == nil { + return "BotsExportedBotToken(nil)" + } + type Alias BotsExportedBotToken + return fmt.Sprintf("BotsExportedBotToken%+v", Alias(*e)) +} + +// FillFrom fills BotsExportedBotToken from given interface. +func (e *BotsExportedBotToken) FillFrom(from interface { + GetToken() (value string) +}) { + e.Token = from.GetToken() +} + +// TypeID returns type id in TL schema. +// +// See https://core.telegram.org/mtproto/TL-tl#remarks. +func (*BotsExportedBotToken) TypeID() uint32 { + return BotsExportedBotTokenTypeID +} + +// TypeName returns name of type in TL schema. +func (*BotsExportedBotToken) TypeName() string { + return "bots.exportedBotToken" +} + +// TypeInfo returns info about TL type. +func (e *BotsExportedBotToken) TypeInfo() tdp.Type { + typ := tdp.Type{ + Name: "bots.exportedBotToken", + ID: BotsExportedBotTokenTypeID, + } + if e == nil { + typ.Null = true + return typ + } + typ.Fields = []tdp.Field{ + { + Name: "Token", + SchemaName: "token", + }, + } + return typ +} + +// Encode implements bin.Encoder. +func (e *BotsExportedBotToken) Encode(b *bin.Buffer) error { + if e == nil { + return fmt.Errorf("can't encode bots.exportedBotToken#3c60b621 as nil") + } + b.PutID(BotsExportedBotTokenTypeID) + return e.EncodeBare(b) +} + +// EncodeBare implements bin.BareEncoder. +func (e *BotsExportedBotToken) EncodeBare(b *bin.Buffer) error { + if e == nil { + return fmt.Errorf("can't encode bots.exportedBotToken#3c60b621 as nil") + } + b.PutString(e.Token) + return nil +} + +// Decode implements bin.Decoder. +func (e *BotsExportedBotToken) Decode(b *bin.Buffer) error { + if e == nil { + return fmt.Errorf("can't decode bots.exportedBotToken#3c60b621 to nil") + } + if err := b.ConsumeID(BotsExportedBotTokenTypeID); err != nil { + return fmt.Errorf("unable to decode bots.exportedBotToken#3c60b621: %w", err) + } + return e.DecodeBare(b) +} + +// DecodeBare implements bin.BareDecoder. +func (e *BotsExportedBotToken) DecodeBare(b *bin.Buffer) error { + if e == nil { + return fmt.Errorf("can't decode bots.exportedBotToken#3c60b621 to nil") + } + { + value, err := b.String() + if err != nil { + return fmt.Errorf("unable to decode bots.exportedBotToken#3c60b621: field token: %w", err) + } + e.Token = value + } + return nil +} + +// GetToken returns value of Token field. +func (e *BotsExportedBotToken) GetToken() (value string) { + if e == nil { + return + } + return e.Token +} diff --git a/pkg/gotd/tg/tl_bots_exported_bot_token_slices_gen.go b/pkg/gotd/tg/tl_bots_exported_bot_token_slices_gen.go new file mode 100644 index 00000000..ad362638 --- /dev/null +++ b/pkg/gotd/tg/tl_bots_exported_bot_token_slices_gen.go @@ -0,0 +1,35 @@ +//go:build !no_gotd_slices +// +build !no_gotd_slices + +// Code generated by gotdgen, DO NOT EDIT. + +package tg + +import ( + "context" + "errors" + "fmt" + "sort" + "strings" + + "go.uber.org/multierr" + + "go.mau.fi/mautrix-telegram/pkg/gotd/bin" + "go.mau.fi/mautrix-telegram/pkg/gotd/tdjson" + "go.mau.fi/mautrix-telegram/pkg/gotd/tdp" + "go.mau.fi/mautrix-telegram/pkg/gotd/tgerr" +) + +// No-op definition for keeping imports. +var ( + _ = bin.Buffer{} + _ = context.Background() + _ = fmt.Stringer(nil) + _ = strings.Builder{} + _ = errors.Is + _ = multierr.AppendInto + _ = sort.Ints + _ = tdp.Format + _ = tgerr.Error{} + _ = tdjson.Encoder{} +) diff --git a/pkg/gotd/tg/tl_bots_get_requested_web_view_button_gen.go b/pkg/gotd/tg/tl_bots_get_requested_web_view_button_gen.go new file mode 100644 index 00000000..78d9f5a7 --- /dev/null +++ b/pkg/gotd/tg/tl_bots_get_requested_web_view_button_gen.go @@ -0,0 +1,205 @@ +// Code generated by gotdgen, DO NOT EDIT. + +package tg + +import ( + "context" + "errors" + "fmt" + "sort" + "strings" + + "go.uber.org/multierr" + + "go.mau.fi/mautrix-telegram/pkg/gotd/bin" + "go.mau.fi/mautrix-telegram/pkg/gotd/tdjson" + "go.mau.fi/mautrix-telegram/pkg/gotd/tdp" + "go.mau.fi/mautrix-telegram/pkg/gotd/tgerr" +) + +// No-op definition for keeping imports. +var ( + _ = bin.Buffer{} + _ = context.Background() + _ = fmt.Stringer(nil) + _ = strings.Builder{} + _ = errors.Is + _ = multierr.AppendInto + _ = sort.Ints + _ = tdp.Format + _ = tgerr.Error{} + _ = tdjson.Encoder{} +) + +// BotsGetRequestedWebViewButtonRequest represents TL type `bots.getRequestedWebViewButton#bf25b7f3`. +// +// See https://core.telegram.org/method/bots.getRequestedWebViewButton for reference. +type BotsGetRequestedWebViewButtonRequest struct { + // Bot field of BotsGetRequestedWebViewButtonRequest. + Bot InputUserClass + // WebappReqID field of BotsGetRequestedWebViewButtonRequest. + WebappReqID string +} + +// BotsGetRequestedWebViewButtonRequestTypeID is TL type id of BotsGetRequestedWebViewButtonRequest. +const BotsGetRequestedWebViewButtonRequestTypeID = 0xbf25b7f3 + +// Ensuring interfaces in compile-time for BotsGetRequestedWebViewButtonRequest. +var ( + _ bin.Encoder = &BotsGetRequestedWebViewButtonRequest{} + _ bin.Decoder = &BotsGetRequestedWebViewButtonRequest{} + _ bin.BareEncoder = &BotsGetRequestedWebViewButtonRequest{} + _ bin.BareDecoder = &BotsGetRequestedWebViewButtonRequest{} +) + +func (g *BotsGetRequestedWebViewButtonRequest) Zero() bool { + if g == nil { + return true + } + if !(g.Bot == nil) { + return false + } + if !(g.WebappReqID == "") { + return false + } + + return true +} + +// String implements fmt.Stringer. +func (g *BotsGetRequestedWebViewButtonRequest) String() string { + if g == nil { + return "BotsGetRequestedWebViewButtonRequest(nil)" + } + type Alias BotsGetRequestedWebViewButtonRequest + return fmt.Sprintf("BotsGetRequestedWebViewButtonRequest%+v", Alias(*g)) +} + +// FillFrom fills BotsGetRequestedWebViewButtonRequest from given interface. +func (g *BotsGetRequestedWebViewButtonRequest) FillFrom(from interface { + GetBot() (value InputUserClass) + GetWebappReqID() (value string) +}) { + g.Bot = from.GetBot() + g.WebappReqID = from.GetWebappReqID() +} + +// TypeID returns type id in TL schema. +// +// See https://core.telegram.org/mtproto/TL-tl#remarks. +func (*BotsGetRequestedWebViewButtonRequest) TypeID() uint32 { + return BotsGetRequestedWebViewButtonRequestTypeID +} + +// TypeName returns name of type in TL schema. +func (*BotsGetRequestedWebViewButtonRequest) TypeName() string { + return "bots.getRequestedWebViewButton" +} + +// TypeInfo returns info about TL type. +func (g *BotsGetRequestedWebViewButtonRequest) TypeInfo() tdp.Type { + typ := tdp.Type{ + Name: "bots.getRequestedWebViewButton", + ID: BotsGetRequestedWebViewButtonRequestTypeID, + } + if g == nil { + typ.Null = true + return typ + } + typ.Fields = []tdp.Field{ + { + Name: "Bot", + SchemaName: "bot", + }, + { + Name: "WebappReqID", + SchemaName: "webapp_req_id", + }, + } + return typ +} + +// Encode implements bin.Encoder. +func (g *BotsGetRequestedWebViewButtonRequest) Encode(b *bin.Buffer) error { + if g == nil { + return fmt.Errorf("can't encode bots.getRequestedWebViewButton#bf25b7f3 as nil") + } + b.PutID(BotsGetRequestedWebViewButtonRequestTypeID) + return g.EncodeBare(b) +} + +// EncodeBare implements bin.BareEncoder. +func (g *BotsGetRequestedWebViewButtonRequest) EncodeBare(b *bin.Buffer) error { + if g == nil { + return fmt.Errorf("can't encode bots.getRequestedWebViewButton#bf25b7f3 as nil") + } + if g.Bot == nil { + return fmt.Errorf("unable to encode bots.getRequestedWebViewButton#bf25b7f3: field bot is nil") + } + if err := g.Bot.Encode(b); err != nil { + return fmt.Errorf("unable to encode bots.getRequestedWebViewButton#bf25b7f3: field bot: %w", err) + } + b.PutString(g.WebappReqID) + return nil +} + +// Decode implements bin.Decoder. +func (g *BotsGetRequestedWebViewButtonRequest) Decode(b *bin.Buffer) error { + if g == nil { + return fmt.Errorf("can't decode bots.getRequestedWebViewButton#bf25b7f3 to nil") + } + if err := b.ConsumeID(BotsGetRequestedWebViewButtonRequestTypeID); err != nil { + return fmt.Errorf("unable to decode bots.getRequestedWebViewButton#bf25b7f3: %w", err) + } + return g.DecodeBare(b) +} + +// DecodeBare implements bin.BareDecoder. +func (g *BotsGetRequestedWebViewButtonRequest) DecodeBare(b *bin.Buffer) error { + if g == nil { + return fmt.Errorf("can't decode bots.getRequestedWebViewButton#bf25b7f3 to nil") + } + { + value, err := DecodeInputUser(b) + if err != nil { + return fmt.Errorf("unable to decode bots.getRequestedWebViewButton#bf25b7f3: field bot: %w", err) + } + g.Bot = value + } + { + value, err := b.String() + if err != nil { + return fmt.Errorf("unable to decode bots.getRequestedWebViewButton#bf25b7f3: field webapp_req_id: %w", err) + } + g.WebappReqID = value + } + return nil +} + +// GetBot returns value of Bot field. +func (g *BotsGetRequestedWebViewButtonRequest) GetBot() (value InputUserClass) { + if g == nil { + return + } + return g.Bot +} + +// GetWebappReqID returns value of WebappReqID field. +func (g *BotsGetRequestedWebViewButtonRequest) GetWebappReqID() (value string) { + if g == nil { + return + } + return g.WebappReqID +} + +// BotsGetRequestedWebViewButton invokes method bots.getRequestedWebViewButton#bf25b7f3 returning error if any. +// +// See https://core.telegram.org/method/bots.getRequestedWebViewButton for reference. +func (c *Client) BotsGetRequestedWebViewButton(ctx context.Context, request *BotsGetRequestedWebViewButtonRequest) (KeyboardButtonClass, error) { + var result KeyboardButtonBox + + if err := c.rpc.Invoke(ctx, request, &result); err != nil { + return nil, err + } + return result.KeyboardButton, nil +} diff --git a/pkg/gotd/tg/tl_bots_get_requested_web_view_button_slices_gen.go b/pkg/gotd/tg/tl_bots_get_requested_web_view_button_slices_gen.go new file mode 100644 index 00000000..ad362638 --- /dev/null +++ b/pkg/gotd/tg/tl_bots_get_requested_web_view_button_slices_gen.go @@ -0,0 +1,35 @@ +//go:build !no_gotd_slices +// +build !no_gotd_slices + +// Code generated by gotdgen, DO NOT EDIT. + +package tg + +import ( + "context" + "errors" + "fmt" + "sort" + "strings" + + "go.uber.org/multierr" + + "go.mau.fi/mautrix-telegram/pkg/gotd/bin" + "go.mau.fi/mautrix-telegram/pkg/gotd/tdjson" + "go.mau.fi/mautrix-telegram/pkg/gotd/tdp" + "go.mau.fi/mautrix-telegram/pkg/gotd/tgerr" +) + +// No-op definition for keeping imports. +var ( + _ = bin.Buffer{} + _ = context.Background() + _ = fmt.Stringer(nil) + _ = strings.Builder{} + _ = errors.Is + _ = multierr.AppendInto + _ = sort.Ints + _ = tdp.Format + _ = tgerr.Error{} + _ = tdjson.Encoder{} +) diff --git a/pkg/gotd/tg/tl_bots_request_web_view_button_gen.go b/pkg/gotd/tg/tl_bots_request_web_view_button_gen.go new file mode 100644 index 00000000..c6c3631b --- /dev/null +++ b/pkg/gotd/tg/tl_bots_request_web_view_button_gen.go @@ -0,0 +1,210 @@ +// Code generated by gotdgen, DO NOT EDIT. + +package tg + +import ( + "context" + "errors" + "fmt" + "sort" + "strings" + + "go.uber.org/multierr" + + "go.mau.fi/mautrix-telegram/pkg/gotd/bin" + "go.mau.fi/mautrix-telegram/pkg/gotd/tdjson" + "go.mau.fi/mautrix-telegram/pkg/gotd/tdp" + "go.mau.fi/mautrix-telegram/pkg/gotd/tgerr" +) + +// No-op definition for keeping imports. +var ( + _ = bin.Buffer{} + _ = context.Background() + _ = fmt.Stringer(nil) + _ = strings.Builder{} + _ = errors.Is + _ = multierr.AppendInto + _ = sort.Ints + _ = tdp.Format + _ = tgerr.Error{} + _ = tdjson.Encoder{} +) + +// BotsRequestWebViewButtonRequest represents TL type `bots.requestWebViewButton#31a2a35e`. +// +// See https://core.telegram.org/method/bots.requestWebViewButton for reference. +type BotsRequestWebViewButtonRequest struct { + // UserID field of BotsRequestWebViewButtonRequest. + UserID InputUserClass + // Button field of BotsRequestWebViewButtonRequest. + Button KeyboardButtonClass +} + +// BotsRequestWebViewButtonRequestTypeID is TL type id of BotsRequestWebViewButtonRequest. +const BotsRequestWebViewButtonRequestTypeID = 0x31a2a35e + +// Ensuring interfaces in compile-time for BotsRequestWebViewButtonRequest. +var ( + _ bin.Encoder = &BotsRequestWebViewButtonRequest{} + _ bin.Decoder = &BotsRequestWebViewButtonRequest{} + _ bin.BareEncoder = &BotsRequestWebViewButtonRequest{} + _ bin.BareDecoder = &BotsRequestWebViewButtonRequest{} +) + +func (r *BotsRequestWebViewButtonRequest) Zero() bool { + if r == nil { + return true + } + if !(r.UserID == nil) { + return false + } + if !(r.Button == nil) { + return false + } + + return true +} + +// String implements fmt.Stringer. +func (r *BotsRequestWebViewButtonRequest) String() string { + if r == nil { + return "BotsRequestWebViewButtonRequest(nil)" + } + type Alias BotsRequestWebViewButtonRequest + return fmt.Sprintf("BotsRequestWebViewButtonRequest%+v", Alias(*r)) +} + +// FillFrom fills BotsRequestWebViewButtonRequest from given interface. +func (r *BotsRequestWebViewButtonRequest) FillFrom(from interface { + GetUserID() (value InputUserClass) + GetButton() (value KeyboardButtonClass) +}) { + r.UserID = from.GetUserID() + r.Button = from.GetButton() +} + +// TypeID returns type id in TL schema. +// +// See https://core.telegram.org/mtproto/TL-tl#remarks. +func (*BotsRequestWebViewButtonRequest) TypeID() uint32 { + return BotsRequestWebViewButtonRequestTypeID +} + +// TypeName returns name of type in TL schema. +func (*BotsRequestWebViewButtonRequest) TypeName() string { + return "bots.requestWebViewButton" +} + +// TypeInfo returns info about TL type. +func (r *BotsRequestWebViewButtonRequest) TypeInfo() tdp.Type { + typ := tdp.Type{ + Name: "bots.requestWebViewButton", + ID: BotsRequestWebViewButtonRequestTypeID, + } + if r == nil { + typ.Null = true + return typ + } + typ.Fields = []tdp.Field{ + { + Name: "UserID", + SchemaName: "user_id", + }, + { + Name: "Button", + SchemaName: "button", + }, + } + return typ +} + +// Encode implements bin.Encoder. +func (r *BotsRequestWebViewButtonRequest) Encode(b *bin.Buffer) error { + if r == nil { + return fmt.Errorf("can't encode bots.requestWebViewButton#31a2a35e as nil") + } + b.PutID(BotsRequestWebViewButtonRequestTypeID) + return r.EncodeBare(b) +} + +// EncodeBare implements bin.BareEncoder. +func (r *BotsRequestWebViewButtonRequest) EncodeBare(b *bin.Buffer) error { + if r == nil { + return fmt.Errorf("can't encode bots.requestWebViewButton#31a2a35e as nil") + } + if r.UserID == nil { + return fmt.Errorf("unable to encode bots.requestWebViewButton#31a2a35e: field user_id is nil") + } + if err := r.UserID.Encode(b); err != nil { + return fmt.Errorf("unable to encode bots.requestWebViewButton#31a2a35e: field user_id: %w", err) + } + if r.Button == nil { + return fmt.Errorf("unable to encode bots.requestWebViewButton#31a2a35e: field button is nil") + } + if err := r.Button.Encode(b); err != nil { + return fmt.Errorf("unable to encode bots.requestWebViewButton#31a2a35e: field button: %w", err) + } + return nil +} + +// Decode implements bin.Decoder. +func (r *BotsRequestWebViewButtonRequest) Decode(b *bin.Buffer) error { + if r == nil { + return fmt.Errorf("can't decode bots.requestWebViewButton#31a2a35e to nil") + } + if err := b.ConsumeID(BotsRequestWebViewButtonRequestTypeID); err != nil { + return fmt.Errorf("unable to decode bots.requestWebViewButton#31a2a35e: %w", err) + } + return r.DecodeBare(b) +} + +// DecodeBare implements bin.BareDecoder. +func (r *BotsRequestWebViewButtonRequest) DecodeBare(b *bin.Buffer) error { + if r == nil { + return fmt.Errorf("can't decode bots.requestWebViewButton#31a2a35e to nil") + } + { + value, err := DecodeInputUser(b) + if err != nil { + return fmt.Errorf("unable to decode bots.requestWebViewButton#31a2a35e: field user_id: %w", err) + } + r.UserID = value + } + { + value, err := DecodeKeyboardButton(b) + if err != nil { + return fmt.Errorf("unable to decode bots.requestWebViewButton#31a2a35e: field button: %w", err) + } + r.Button = value + } + return nil +} + +// GetUserID returns value of UserID field. +func (r *BotsRequestWebViewButtonRequest) GetUserID() (value InputUserClass) { + if r == nil { + return + } + return r.UserID +} + +// GetButton returns value of Button field. +func (r *BotsRequestWebViewButtonRequest) GetButton() (value KeyboardButtonClass) { + if r == nil { + return + } + return r.Button +} + +// BotsRequestWebViewButton invokes method bots.requestWebViewButton#31a2a35e returning error if any. +// +// See https://core.telegram.org/method/bots.requestWebViewButton for reference. +func (c *Client) BotsRequestWebViewButton(ctx context.Context, request *BotsRequestWebViewButtonRequest) (*BotsRequestedButton, error) { + var result BotsRequestedButton + + if err := c.rpc.Invoke(ctx, request, &result); err != nil { + return nil, err + } + return &result, nil +} diff --git a/pkg/gotd/tg/tl_bots_request_web_view_button_slices_gen.go b/pkg/gotd/tg/tl_bots_request_web_view_button_slices_gen.go new file mode 100644 index 00000000..ad362638 --- /dev/null +++ b/pkg/gotd/tg/tl_bots_request_web_view_button_slices_gen.go @@ -0,0 +1,35 @@ +//go:build !no_gotd_slices +// +build !no_gotd_slices + +// Code generated by gotdgen, DO NOT EDIT. + +package tg + +import ( + "context" + "errors" + "fmt" + "sort" + "strings" + + "go.uber.org/multierr" + + "go.mau.fi/mautrix-telegram/pkg/gotd/bin" + "go.mau.fi/mautrix-telegram/pkg/gotd/tdjson" + "go.mau.fi/mautrix-telegram/pkg/gotd/tdp" + "go.mau.fi/mautrix-telegram/pkg/gotd/tgerr" +) + +// No-op definition for keeping imports. +var ( + _ = bin.Buffer{} + _ = context.Background() + _ = fmt.Stringer(nil) + _ = strings.Builder{} + _ = errors.Is + _ = multierr.AppendInto + _ = sort.Ints + _ = tdp.Format + _ = tgerr.Error{} + _ = tdjson.Encoder{} +) diff --git a/pkg/gotd/tg/tl_bots_requested_button_gen.go b/pkg/gotd/tg/tl_bots_requested_button_gen.go new file mode 100644 index 00000000..8808ad75 --- /dev/null +++ b/pkg/gotd/tg/tl_bots_requested_button_gen.go @@ -0,0 +1,161 @@ +// Code generated by gotdgen, DO NOT EDIT. + +package tg + +import ( + "context" + "errors" + "fmt" + "sort" + "strings" + + "go.uber.org/multierr" + + "go.mau.fi/mautrix-telegram/pkg/gotd/bin" + "go.mau.fi/mautrix-telegram/pkg/gotd/tdjson" + "go.mau.fi/mautrix-telegram/pkg/gotd/tdp" + "go.mau.fi/mautrix-telegram/pkg/gotd/tgerr" +) + +// No-op definition for keeping imports. +var ( + _ = bin.Buffer{} + _ = context.Background() + _ = fmt.Stringer(nil) + _ = strings.Builder{} + _ = errors.Is + _ = multierr.AppendInto + _ = sort.Ints + _ = tdp.Format + _ = tgerr.Error{} + _ = tdjson.Encoder{} +) + +// BotsRequestedButton represents TL type `bots.requestedButton#f13bbcd7`. +// +// See https://core.telegram.org/constructor/bots.requestedButton for reference. +type BotsRequestedButton struct { + // WebappReqID field of BotsRequestedButton. + WebappReqID string +} + +// BotsRequestedButtonTypeID is TL type id of BotsRequestedButton. +const BotsRequestedButtonTypeID = 0xf13bbcd7 + +// Ensuring interfaces in compile-time for BotsRequestedButton. +var ( + _ bin.Encoder = &BotsRequestedButton{} + _ bin.Decoder = &BotsRequestedButton{} + _ bin.BareEncoder = &BotsRequestedButton{} + _ bin.BareDecoder = &BotsRequestedButton{} +) + +func (r *BotsRequestedButton) Zero() bool { + if r == nil { + return true + } + if !(r.WebappReqID == "") { + return false + } + + return true +} + +// String implements fmt.Stringer. +func (r *BotsRequestedButton) String() string { + if r == nil { + return "BotsRequestedButton(nil)" + } + type Alias BotsRequestedButton + return fmt.Sprintf("BotsRequestedButton%+v", Alias(*r)) +} + +// FillFrom fills BotsRequestedButton from given interface. +func (r *BotsRequestedButton) FillFrom(from interface { + GetWebappReqID() (value string) +}) { + r.WebappReqID = from.GetWebappReqID() +} + +// TypeID returns type id in TL schema. +// +// See https://core.telegram.org/mtproto/TL-tl#remarks. +func (*BotsRequestedButton) TypeID() uint32 { + return BotsRequestedButtonTypeID +} + +// TypeName returns name of type in TL schema. +func (*BotsRequestedButton) TypeName() string { + return "bots.requestedButton" +} + +// TypeInfo returns info about TL type. +func (r *BotsRequestedButton) TypeInfo() tdp.Type { + typ := tdp.Type{ + Name: "bots.requestedButton", + ID: BotsRequestedButtonTypeID, + } + if r == nil { + typ.Null = true + return typ + } + typ.Fields = []tdp.Field{ + { + Name: "WebappReqID", + SchemaName: "webapp_req_id", + }, + } + return typ +} + +// Encode implements bin.Encoder. +func (r *BotsRequestedButton) Encode(b *bin.Buffer) error { + if r == nil { + return fmt.Errorf("can't encode bots.requestedButton#f13bbcd7 as nil") + } + b.PutID(BotsRequestedButtonTypeID) + return r.EncodeBare(b) +} + +// EncodeBare implements bin.BareEncoder. +func (r *BotsRequestedButton) EncodeBare(b *bin.Buffer) error { + if r == nil { + return fmt.Errorf("can't encode bots.requestedButton#f13bbcd7 as nil") + } + b.PutString(r.WebappReqID) + return nil +} + +// Decode implements bin.Decoder. +func (r *BotsRequestedButton) Decode(b *bin.Buffer) error { + if r == nil { + return fmt.Errorf("can't decode bots.requestedButton#f13bbcd7 to nil") + } + if err := b.ConsumeID(BotsRequestedButtonTypeID); err != nil { + return fmt.Errorf("unable to decode bots.requestedButton#f13bbcd7: %w", err) + } + return r.DecodeBare(b) +} + +// DecodeBare implements bin.BareDecoder. +func (r *BotsRequestedButton) DecodeBare(b *bin.Buffer) error { + if r == nil { + return fmt.Errorf("can't decode bots.requestedButton#f13bbcd7 to nil") + } + { + value, err := b.String() + if err != nil { + return fmt.Errorf("unable to decode bots.requestedButton#f13bbcd7: field webapp_req_id: %w", err) + } + r.WebappReqID = value + } + return nil +} + +// GetWebappReqID returns value of WebappReqID field. +func (r *BotsRequestedButton) GetWebappReqID() (value string) { + if r == nil { + return + } + return r.WebappReqID +} diff --git a/pkg/gotd/tg/tl_bots_requested_button_slices_gen.go b/pkg/gotd/tg/tl_bots_requested_button_slices_gen.go new file mode 100644 index 00000000..ad362638 --- /dev/null +++ b/pkg/gotd/tg/tl_bots_requested_button_slices_gen.go @@ -0,0 +1,35 @@ +//go:build !no_gotd_slices +// +build !no_gotd_slices + +// Code generated by gotdgen, DO NOT EDIT. + +package tg + +import ( + "context" + "errors" + "fmt" + "sort" + "strings" + + "go.uber.org/multierr" + + "go.mau.fi/mautrix-telegram/pkg/gotd/bin" + "go.mau.fi/mautrix-telegram/pkg/gotd/tdjson" + "go.mau.fi/mautrix-telegram/pkg/gotd/tdp" + "go.mau.fi/mautrix-telegram/pkg/gotd/tgerr" +) + +// No-op definition for keeping imports. +var ( + _ = bin.Buffer{} + _ = context.Background() + _ = fmt.Stringer(nil) + _ = strings.Builder{} + _ = errors.Is + _ = multierr.AppendInto + _ = sort.Ints + _ = tdp.Format + _ = tgerr.Error{} + _ = tdjson.Encoder{} +) diff --git a/pkg/gotd/tg/tl_dialog_gen.go b/pkg/gotd/tg/tl_dialog_gen.go index 3131e03c..9b26b4f1 100644 --- a/pkg/gotd/tg/tl_dialog_gen.go +++ b/pkg/gotd/tg/tl_dialog_gen.go @@ -31,7 +31,7 @@ var ( _ = tdjson.Encoder{} ) -// Dialog represents TL type `dialog#d58a08c6`. +// Dialog represents TL type `dialog#fc89f7f3`. // Chat // // See https://core.telegram.org/constructor/dialog for reference. @@ -72,6 +72,8 @@ type Dialog struct { UnreadMentionsCount int // Number of unread reactions to messages you sent UnreadReactionsCount int + // UnreadPollVotesCount field of Dialog. + UnreadPollVotesCount int // Notification settings NotifySettings PeerNotifySettings // PTS¹ @@ -102,7 +104,7 @@ type Dialog struct { } // DialogTypeID is TL type id of Dialog. -const DialogTypeID = 0xd58a08c6 +const DialogTypeID = 0xfc89f7f3 // construct implements constructor of DialogClass. func (d Dialog) construct() DialogClass { return &d } @@ -154,6 +156,9 @@ func (d *Dialog) Zero() bool { if !(d.UnreadReactionsCount == 0) { return false } + if !(d.UnreadPollVotesCount == 0) { + return false + } if !(d.NotifySettings.Zero()) { return false } @@ -194,6 +199,7 @@ func (d *Dialog) FillFrom(from interface { GetUnreadCount() (value int) GetUnreadMentionsCount() (value int) GetUnreadReactionsCount() (value int) + GetUnreadPollVotesCount() (value int) GetNotifySettings() (value PeerNotifySettings) GetPts() (value int, ok bool) GetDraft() (value DraftMessageClass, ok bool) @@ -210,6 +216,7 @@ func (d *Dialog) FillFrom(from interface { d.UnreadCount = from.GetUnreadCount() d.UnreadMentionsCount = from.GetUnreadMentionsCount() d.UnreadReactionsCount = from.GetUnreadReactionsCount() + d.UnreadPollVotesCount = from.GetUnreadPollVotesCount() d.NotifySettings = from.GetNotifySettings() if val, ok := from.GetPts(); ok { d.Pts = val @@ -295,6 +302,10 @@ func (d *Dialog) TypeInfo() tdp.Type { Name: "UnreadReactionsCount", SchemaName: "unread_reactions_count", }, + { + Name: "UnreadPollVotesCount", + SchemaName: "unread_poll_votes_count", + }, { Name: "NotifySettings", SchemaName: "notify_settings", @@ -351,7 +362,7 @@ func (d *Dialog) SetFlags() { // Encode implements bin.Encoder. func (d *Dialog) Encode(b *bin.Buffer) error { if d == nil { - return fmt.Errorf("can't encode dialog#d58a08c6 as nil") + return fmt.Errorf("can't encode dialog#fc89f7f3 as nil") } b.PutID(DialogTypeID) return d.EncodeBare(b) @@ -360,17 +371,17 @@ func (d *Dialog) Encode(b *bin.Buffer) error { // EncodeBare implements bin.BareEncoder. func (d *Dialog) EncodeBare(b *bin.Buffer) error { if d == nil { - return fmt.Errorf("can't encode dialog#d58a08c6 as nil") + return fmt.Errorf("can't encode dialog#fc89f7f3 as nil") } d.SetFlags() if err := d.Flags.Encode(b); err != nil { - return fmt.Errorf("unable to encode dialog#d58a08c6: field flags: %w", err) + return fmt.Errorf("unable to encode dialog#fc89f7f3: field flags: %w", err) } if d.Peer == nil { - return fmt.Errorf("unable to encode dialog#d58a08c6: field peer is nil") + return fmt.Errorf("unable to encode dialog#fc89f7f3: field peer is nil") } if err := d.Peer.Encode(b); err != nil { - return fmt.Errorf("unable to encode dialog#d58a08c6: field peer: %w", err) + return fmt.Errorf("unable to encode dialog#fc89f7f3: field peer: %w", err) } b.PutInt(d.TopMessage) b.PutInt(d.ReadInboxMaxID) @@ -378,18 +389,19 @@ func (d *Dialog) EncodeBare(b *bin.Buffer) error { b.PutInt(d.UnreadCount) b.PutInt(d.UnreadMentionsCount) b.PutInt(d.UnreadReactionsCount) + b.PutInt(d.UnreadPollVotesCount) if err := d.NotifySettings.Encode(b); err != nil { - return fmt.Errorf("unable to encode dialog#d58a08c6: field notify_settings: %w", err) + return fmt.Errorf("unable to encode dialog#fc89f7f3: field notify_settings: %w", err) } if d.Flags.Has(0) { b.PutInt(d.Pts) } if d.Flags.Has(1) { if d.Draft == nil { - return fmt.Errorf("unable to encode dialog#d58a08c6: field draft is nil") + return fmt.Errorf("unable to encode dialog#fc89f7f3: field draft is nil") } if err := d.Draft.Encode(b); err != nil { - return fmt.Errorf("unable to encode dialog#d58a08c6: field draft: %w", err) + return fmt.Errorf("unable to encode dialog#fc89f7f3: field draft: %w", err) } } if d.Flags.Has(4) { @@ -404,10 +416,10 @@ func (d *Dialog) EncodeBare(b *bin.Buffer) error { // Decode implements bin.Decoder. func (d *Dialog) Decode(b *bin.Buffer) error { if d == nil { - return fmt.Errorf("can't decode dialog#d58a08c6 to nil") + return fmt.Errorf("can't decode dialog#fc89f7f3 to nil") } if err := b.ConsumeID(DialogTypeID); err != nil { - return fmt.Errorf("unable to decode dialog#d58a08c6: %w", err) + return fmt.Errorf("unable to decode dialog#fc89f7f3: %w", err) } return d.DecodeBare(b) } @@ -415,11 +427,11 @@ func (d *Dialog) Decode(b *bin.Buffer) error { // DecodeBare implements bin.BareDecoder. func (d *Dialog) DecodeBare(b *bin.Buffer) error { if d == nil { - return fmt.Errorf("can't decode dialog#d58a08c6 to nil") + return fmt.Errorf("can't decode dialog#fc89f7f3 to nil") } { if err := d.Flags.Decode(b); err != nil { - return fmt.Errorf("unable to decode dialog#d58a08c6: field flags: %w", err) + return fmt.Errorf("unable to decode dialog#fc89f7f3: field flags: %w", err) } } d.Pinned = d.Flags.Has(2) @@ -428,82 +440,89 @@ func (d *Dialog) DecodeBare(b *bin.Buffer) error { { value, err := DecodePeer(b) if err != nil { - return fmt.Errorf("unable to decode dialog#d58a08c6: field peer: %w", err) + return fmt.Errorf("unable to decode dialog#fc89f7f3: field peer: %w", err) } d.Peer = value } { value, err := b.Int() if err != nil { - return fmt.Errorf("unable to decode dialog#d58a08c6: field top_message: %w", err) + return fmt.Errorf("unable to decode dialog#fc89f7f3: field top_message: %w", err) } d.TopMessage = value } { value, err := b.Int() if err != nil { - return fmt.Errorf("unable to decode dialog#d58a08c6: field read_inbox_max_id: %w", err) + return fmt.Errorf("unable to decode dialog#fc89f7f3: field read_inbox_max_id: %w", err) } d.ReadInboxMaxID = value } { value, err := b.Int() if err != nil { - return fmt.Errorf("unable to decode dialog#d58a08c6: field read_outbox_max_id: %w", err) + return fmt.Errorf("unable to decode dialog#fc89f7f3: field read_outbox_max_id: %w", err) } d.ReadOutboxMaxID = value } { value, err := b.Int() if err != nil { - return fmt.Errorf("unable to decode dialog#d58a08c6: field unread_count: %w", err) + return fmt.Errorf("unable to decode dialog#fc89f7f3: field unread_count: %w", err) } d.UnreadCount = value } { value, err := b.Int() if err != nil { - return fmt.Errorf("unable to decode dialog#d58a08c6: field unread_mentions_count: %w", err) + return fmt.Errorf("unable to decode dialog#fc89f7f3: field unread_mentions_count: %w", err) } d.UnreadMentionsCount = value } { value, err := b.Int() if err != nil { - return fmt.Errorf("unable to decode dialog#d58a08c6: field unread_reactions_count: %w", err) + return fmt.Errorf("unable to decode dialog#fc89f7f3: field unread_reactions_count: %w", err) } d.UnreadReactionsCount = value } + { + value, err := b.Int() + if err != nil { + return fmt.Errorf("unable to decode dialog#fc89f7f3: field unread_poll_votes_count: %w", err) + } + d.UnreadPollVotesCount = value + } { if err := d.NotifySettings.Decode(b); err != nil { - return fmt.Errorf("unable to decode dialog#d58a08c6: field notify_settings: %w", err) + return fmt.Errorf("unable to decode dialog#fc89f7f3: field notify_settings: %w", err) } } if d.Flags.Has(0) { value, err := b.Int() if err != nil { - return fmt.Errorf("unable to decode dialog#d58a08c6: field pts: %w", err) + return fmt.Errorf("unable to decode dialog#fc89f7f3: field pts: %w", err) } d.Pts = value } if d.Flags.Has(1) { value, err := DecodeDraftMessage(b) if err != nil { - return fmt.Errorf("unable to decode dialog#d58a08c6: field draft: %w", err) + return fmt.Errorf("unable to decode dialog#fc89f7f3: field draft: %w", err) } d.Draft = value } if d.Flags.Has(4) { value, err := b.Int() if err != nil { - return fmt.Errorf("unable to decode dialog#d58a08c6: field folder_id: %w", err) + return fmt.Errorf("unable to decode dialog#fc89f7f3: field folder_id: %w", err) } d.FolderID = value } if d.Flags.Has(5) { value, err := b.Int() if err != nil { - return fmt.Errorf("unable to decode dialog#d58a08c6: field ttl_period: %w", err) + return fmt.Errorf("unable to decode dialog#fc89f7f3: field ttl_period: %w", err) } d.TTLPeriod = value } @@ -623,6 +642,14 @@ func (d *Dialog) GetUnreadReactionsCount() (value int) { return d.UnreadReactionsCount } +// GetUnreadPollVotesCount returns value of UnreadPollVotesCount field. +func (d *Dialog) GetUnreadPollVotesCount() (value int) { + if d == nil { + return + } + return d.UnreadPollVotesCount +} + // GetNotifySettings returns value of NotifySettings field. func (d *Dialog) GetNotifySettings() (value PeerNotifySettings) { if d == nil { @@ -1075,7 +1102,7 @@ const DialogClassName = "Dialog" // panic(err) // } // switch v := g.(type) { -// case *tg.Dialog: // dialog#d58a08c6 +// case *tg.Dialog: // dialog#fc89f7f3 // case *tg.DialogFolder: // dialogFolder#71bd134c // default: panic(v) // } @@ -1125,7 +1152,7 @@ func DecodeDialog(buf *bin.Buffer) (DialogClass, error) { } switch id { case DialogTypeID: - // Decoding dialog#d58a08c6. + // Decoding dialog#fc89f7f3. v := Dialog{} if err := v.Decode(buf); err != nil { return nil, fmt.Errorf("unable to decode DialogClass: %w", err) diff --git a/pkg/gotd/tg/tl_forum_topic_gen.go b/pkg/gotd/tg/tl_forum_topic_gen.go index 5d737015..68344cf5 100644 --- a/pkg/gotd/tg/tl_forum_topic_gen.go +++ b/pkg/gotd/tg/tl_forum_topic_gen.go @@ -166,7 +166,7 @@ func (f *ForumTopicDeleted) GetID() (value int) { return f.ID } -// ForumTopic represents TL type `forumTopic#cdff0eca`. +// ForumTopic represents TL type `forumTopic#fcdad815`. // Represents a forum topic¹. // // Links: @@ -236,6 +236,8 @@ type ForumTopic struct { UnreadMentionsCount int // Number of unread reactions to messages you sent UnreadReactionsCount int + // UnreadPollVotesCount field of ForumTopic. + UnreadPollVotesCount int // ID of the peer that created the topic FromID PeerClass // Notification settings @@ -250,7 +252,7 @@ type ForumTopic struct { } // ForumTopicTypeID is TL type id of ForumTopic. -const ForumTopicTypeID = 0xcdff0eca +const ForumTopicTypeID = 0xfcdad815 // construct implements constructor of ForumTopicClass. func (f ForumTopic) construct() ForumTopicClass { return &f } @@ -326,6 +328,9 @@ func (f *ForumTopic) Zero() bool { if !(f.UnreadReactionsCount == 0) { return false } + if !(f.UnreadPollVotesCount == 0) { + return false + } if !(f.FromID == nil) { return false } @@ -368,6 +373,7 @@ func (f *ForumTopic) FillFrom(from interface { GetUnreadCount() (value int) GetUnreadMentionsCount() (value int) GetUnreadReactionsCount() (value int) + GetUnreadPollVotesCount() (value int) GetFromID() (value PeerClass) GetNotifySettings() (value PeerNotifySettings) GetDraft() (value DraftMessageClass, ok bool) @@ -393,6 +399,7 @@ func (f *ForumTopic) FillFrom(from interface { f.UnreadCount = from.GetUnreadCount() f.UnreadMentionsCount = from.GetUnreadMentionsCount() f.UnreadReactionsCount = from.GetUnreadReactionsCount() + f.UnreadPollVotesCount = from.GetUnreadPollVotesCount() f.FromID = from.GetFromID() f.NotifySettings = from.GetNotifySettings() if val, ok := from.GetDraft(); ok { @@ -503,6 +510,10 @@ func (f *ForumTopic) TypeInfo() tdp.Type { Name: "UnreadReactionsCount", SchemaName: "unread_reactions_count", }, + { + Name: "UnreadPollVotesCount", + SchemaName: "unread_poll_votes_count", + }, { Name: "FromID", SchemaName: "from_id", @@ -551,7 +562,7 @@ func (f *ForumTopic) SetFlags() { // Encode implements bin.Encoder. func (f *ForumTopic) Encode(b *bin.Buffer) error { if f == nil { - return fmt.Errorf("can't encode forumTopic#cdff0eca as nil") + return fmt.Errorf("can't encode forumTopic#fcdad815 as nil") } b.PutID(ForumTopicTypeID) return f.EncodeBare(b) @@ -560,19 +571,19 @@ func (f *ForumTopic) Encode(b *bin.Buffer) error { // EncodeBare implements bin.BareEncoder. func (f *ForumTopic) EncodeBare(b *bin.Buffer) error { if f == nil { - return fmt.Errorf("can't encode forumTopic#cdff0eca as nil") + return fmt.Errorf("can't encode forumTopic#fcdad815 as nil") } f.SetFlags() if err := f.Flags.Encode(b); err != nil { - return fmt.Errorf("unable to encode forumTopic#cdff0eca: field flags: %w", err) + return fmt.Errorf("unable to encode forumTopic#fcdad815: field flags: %w", err) } b.PutInt(f.ID) b.PutInt(f.Date) if f.Peer == nil { - return fmt.Errorf("unable to encode forumTopic#cdff0eca: field peer is nil") + return fmt.Errorf("unable to encode forumTopic#fcdad815: field peer is nil") } if err := f.Peer.Encode(b); err != nil { - return fmt.Errorf("unable to encode forumTopic#cdff0eca: field peer: %w", err) + return fmt.Errorf("unable to encode forumTopic#fcdad815: field peer: %w", err) } b.PutString(f.Title) b.PutInt(f.IconColor) @@ -585,21 +596,22 @@ func (f *ForumTopic) EncodeBare(b *bin.Buffer) error { b.PutInt(f.UnreadCount) b.PutInt(f.UnreadMentionsCount) b.PutInt(f.UnreadReactionsCount) + b.PutInt(f.UnreadPollVotesCount) if f.FromID == nil { - return fmt.Errorf("unable to encode forumTopic#cdff0eca: field from_id is nil") + return fmt.Errorf("unable to encode forumTopic#fcdad815: field from_id is nil") } if err := f.FromID.Encode(b); err != nil { - return fmt.Errorf("unable to encode forumTopic#cdff0eca: field from_id: %w", err) + return fmt.Errorf("unable to encode forumTopic#fcdad815: field from_id: %w", err) } if err := f.NotifySettings.Encode(b); err != nil { - return fmt.Errorf("unable to encode forumTopic#cdff0eca: field notify_settings: %w", err) + return fmt.Errorf("unable to encode forumTopic#fcdad815: field notify_settings: %w", err) } if f.Flags.Has(4) { if f.Draft == nil { - return fmt.Errorf("unable to encode forumTopic#cdff0eca: field draft is nil") + return fmt.Errorf("unable to encode forumTopic#fcdad815: field draft is nil") } if err := f.Draft.Encode(b); err != nil { - return fmt.Errorf("unable to encode forumTopic#cdff0eca: field draft: %w", err) + return fmt.Errorf("unable to encode forumTopic#fcdad815: field draft: %w", err) } } return nil @@ -608,10 +620,10 @@ func (f *ForumTopic) EncodeBare(b *bin.Buffer) error { // Decode implements bin.Decoder. func (f *ForumTopic) Decode(b *bin.Buffer) error { if f == nil { - return fmt.Errorf("can't decode forumTopic#cdff0eca to nil") + return fmt.Errorf("can't decode forumTopic#fcdad815 to nil") } if err := b.ConsumeID(ForumTopicTypeID); err != nil { - return fmt.Errorf("unable to decode forumTopic#cdff0eca: %w", err) + return fmt.Errorf("unable to decode forumTopic#fcdad815: %w", err) } return f.DecodeBare(b) } @@ -619,11 +631,11 @@ func (f *ForumTopic) Decode(b *bin.Buffer) error { // DecodeBare implements bin.BareDecoder. func (f *ForumTopic) DecodeBare(b *bin.Buffer) error { if f == nil { - return fmt.Errorf("can't decode forumTopic#cdff0eca to nil") + return fmt.Errorf("can't decode forumTopic#fcdad815 to nil") } { if err := f.Flags.Decode(b); err != nil { - return fmt.Errorf("unable to decode forumTopic#cdff0eca: field flags: %w", err) + return fmt.Errorf("unable to decode forumTopic#fcdad815: field flags: %w", err) } } f.My = f.Flags.Has(1) @@ -635,103 +647,110 @@ func (f *ForumTopic) DecodeBare(b *bin.Buffer) error { { value, err := b.Int() if err != nil { - return fmt.Errorf("unable to decode forumTopic#cdff0eca: field id: %w", err) + return fmt.Errorf("unable to decode forumTopic#fcdad815: field id: %w", err) } f.ID = value } { value, err := b.Int() if err != nil { - return fmt.Errorf("unable to decode forumTopic#cdff0eca: field date: %w", err) + return fmt.Errorf("unable to decode forumTopic#fcdad815: field date: %w", err) } f.Date = value } { value, err := DecodePeer(b) if err != nil { - return fmt.Errorf("unable to decode forumTopic#cdff0eca: field peer: %w", err) + return fmt.Errorf("unable to decode forumTopic#fcdad815: field peer: %w", err) } f.Peer = value } { value, err := b.String() if err != nil { - return fmt.Errorf("unable to decode forumTopic#cdff0eca: field title: %w", err) + return fmt.Errorf("unable to decode forumTopic#fcdad815: field title: %w", err) } f.Title = value } { value, err := b.Int() if err != nil { - return fmt.Errorf("unable to decode forumTopic#cdff0eca: field icon_color: %w", err) + return fmt.Errorf("unable to decode forumTopic#fcdad815: field icon_color: %w", err) } f.IconColor = value } if f.Flags.Has(0) { value, err := b.Long() if err != nil { - return fmt.Errorf("unable to decode forumTopic#cdff0eca: field icon_emoji_id: %w", err) + return fmt.Errorf("unable to decode forumTopic#fcdad815: field icon_emoji_id: %w", err) } f.IconEmojiID = value } { value, err := b.Int() if err != nil { - return fmt.Errorf("unable to decode forumTopic#cdff0eca: field top_message: %w", err) + return fmt.Errorf("unable to decode forumTopic#fcdad815: field top_message: %w", err) } f.TopMessage = value } { value, err := b.Int() if err != nil { - return fmt.Errorf("unable to decode forumTopic#cdff0eca: field read_inbox_max_id: %w", err) + return fmt.Errorf("unable to decode forumTopic#fcdad815: field read_inbox_max_id: %w", err) } f.ReadInboxMaxID = value } { value, err := b.Int() if err != nil { - return fmt.Errorf("unable to decode forumTopic#cdff0eca: field read_outbox_max_id: %w", err) + return fmt.Errorf("unable to decode forumTopic#fcdad815: field read_outbox_max_id: %w", err) } f.ReadOutboxMaxID = value } { value, err := b.Int() if err != nil { - return fmt.Errorf("unable to decode forumTopic#cdff0eca: field unread_count: %w", err) + return fmt.Errorf("unable to decode forumTopic#fcdad815: field unread_count: %w", err) } f.UnreadCount = value } { value, err := b.Int() if err != nil { - return fmt.Errorf("unable to decode forumTopic#cdff0eca: field unread_mentions_count: %w", err) + return fmt.Errorf("unable to decode forumTopic#fcdad815: field unread_mentions_count: %w", err) } f.UnreadMentionsCount = value } { value, err := b.Int() if err != nil { - return fmt.Errorf("unable to decode forumTopic#cdff0eca: field unread_reactions_count: %w", err) + return fmt.Errorf("unable to decode forumTopic#fcdad815: field unread_reactions_count: %w", err) } f.UnreadReactionsCount = value } + { + value, err := b.Int() + if err != nil { + return fmt.Errorf("unable to decode forumTopic#fcdad815: field unread_poll_votes_count: %w", err) + } + f.UnreadPollVotesCount = value + } { value, err := DecodePeer(b) if err != nil { - return fmt.Errorf("unable to decode forumTopic#cdff0eca: field from_id: %w", err) + return fmt.Errorf("unable to decode forumTopic#fcdad815: field from_id: %w", err) } f.FromID = value } { if err := f.NotifySettings.Decode(b); err != nil { - return fmt.Errorf("unable to decode forumTopic#cdff0eca: field notify_settings: %w", err) + return fmt.Errorf("unable to decode forumTopic#fcdad815: field notify_settings: %w", err) } } if f.Flags.Has(4) { value, err := DecodeDraftMessage(b) if err != nil { - return fmt.Errorf("unable to decode forumTopic#cdff0eca: field draft: %w", err) + return fmt.Errorf("unable to decode forumTopic#fcdad815: field draft: %w", err) } f.Draft = value } @@ -958,6 +977,14 @@ func (f *ForumTopic) GetUnreadReactionsCount() (value int) { return f.UnreadReactionsCount } +// GetUnreadPollVotesCount returns value of UnreadPollVotesCount field. +func (f *ForumTopic) GetUnreadPollVotesCount() (value int) { + if f == nil { + return + } + return f.UnreadPollVotesCount +} + // GetFromID returns value of FromID field. func (f *ForumTopic) GetFromID() (value PeerClass) { if f == nil { @@ -1007,7 +1034,7 @@ const ForumTopicClassName = "ForumTopic" // } // switch v := g.(type) { // case *tg.ForumTopicDeleted: // forumTopicDeleted#23f109b -// case *tg.ForumTopic: // forumTopic#cdff0eca +// case *tg.ForumTopic: // forumTopic#fcdad815 // default: panic(v) // } type ForumTopicClass interface { @@ -1047,7 +1074,7 @@ func DecodeForumTopic(buf *bin.Buffer) (ForumTopicClass, error) { } return &v, nil case ForumTopicTypeID: - // Decoding forumTopic#cdff0eca. + // Decoding forumTopic#fcdad815. v := ForumTopic{} if err := v.Decode(buf); err != nil { return nil, fmt.Errorf("unable to decode ForumTopicClass: %w", err) diff --git a/pkg/gotd/tg/tl_handlers_gen.go b/pkg/gotd/tg/tl_handlers_gen.go index f979f2e9..c02dc8bd 100644 --- a/pkg/gotd/tg/tl_handlers_gen.go +++ b/pkg/gotd/tg/tl_handlers_gen.go @@ -1561,6 +1561,16 @@ func (u UpdateDispatcher) OnChatParticipantRank(handler ChatParticipantRankHandl } } +// ManagedBotHandler is a ManagedBot event handler. +type ManagedBotHandler func(ctx context.Context, e Entities, update *UpdateManagedBot) error + +// OnManagedBot sets ManagedBot handler. +func (u UpdateDispatcher) OnManagedBot(handler ManagedBotHandler) { + u.handlers[UpdateManagedBotTypeID] = func(ctx context.Context, e Entities, update UpdateClass) error { + return handler(ctx, e, update.(*UpdateManagedBot)) + } +} + // OnFallback sets fallback handler. func (u *UpdateDispatcher) OnFallback(handler Handler) { u.fallback = handler diff --git a/pkg/gotd/tg/tl_input_media_gen.go b/pkg/gotd/tg/tl_input_media_gen.go index 81c40cc1..5e13de33 100644 --- a/pkg/gotd/tg/tl_input_media_gen.go +++ b/pkg/gotd/tg/tl_input_media_gen.go @@ -133,7 +133,7 @@ func (i *InputMediaEmpty) DecodeBare(b *bin.Buffer) error { return nil } -// InputMediaUploadedPhoto represents TL type `inputMediaUploadedPhoto#1e287d04`. +// InputMediaUploadedPhoto represents TL type `inputMediaUploadedPhoto#7d8375da`. // Photo // // See https://core.telegram.org/constructor/inputMediaUploadedPhoto for reference. @@ -145,6 +145,8 @@ type InputMediaUploadedPhoto struct { Flags bin.Fields // Whether this media should be hidden behind a spoiler warning Spoiler bool + // LivePhoto field of InputMediaUploadedPhoto. + LivePhoto bool // The uploaded file¹ // // Links: @@ -158,10 +160,14 @@ type InputMediaUploadedPhoto struct { // // Use SetTTLSeconds and GetTTLSeconds helpers. TTLSeconds int + // Video field of InputMediaUploadedPhoto. + // + // Use SetVideo and GetVideo helpers. + Video InputDocumentClass } // InputMediaUploadedPhotoTypeID is TL type id of InputMediaUploadedPhoto. -const InputMediaUploadedPhotoTypeID = 0x1e287d04 +const InputMediaUploadedPhotoTypeID = 0x7d8375da // construct implements constructor of InputMediaClass. func (i InputMediaUploadedPhoto) construct() InputMediaClass { return &i } @@ -186,6 +192,9 @@ func (i *InputMediaUploadedPhoto) Zero() bool { if !(i.Spoiler == false) { return false } + if !(i.LivePhoto == false) { + return false + } if !(i.File == nil) { return false } @@ -195,6 +204,9 @@ func (i *InputMediaUploadedPhoto) Zero() bool { if !(i.TTLSeconds == 0) { return false } + if !(i.Video == nil) { + return false + } return true } @@ -211,11 +223,14 @@ func (i *InputMediaUploadedPhoto) String() string { // FillFrom fills InputMediaUploadedPhoto from given interface. func (i *InputMediaUploadedPhoto) FillFrom(from interface { GetSpoiler() (value bool) + GetLivePhoto() (value bool) GetFile() (value InputFileClass) GetStickers() (value []InputDocumentClass, ok bool) GetTTLSeconds() (value int, ok bool) + GetVideo() (value InputDocumentClass, ok bool) }) { i.Spoiler = from.GetSpoiler() + i.LivePhoto = from.GetLivePhoto() i.File = from.GetFile() if val, ok := from.GetStickers(); ok { i.Stickers = val @@ -225,6 +240,10 @@ func (i *InputMediaUploadedPhoto) FillFrom(from interface { i.TTLSeconds = val } + if val, ok := from.GetVideo(); ok { + i.Video = val + } + } // TypeID returns type id in TL schema. @@ -255,6 +274,11 @@ func (i *InputMediaUploadedPhoto) TypeInfo() tdp.Type { SchemaName: "spoiler", Null: !i.Flags.Has(2), }, + { + Name: "LivePhoto", + SchemaName: "live_photo", + Null: !i.Flags.Has(3), + }, { Name: "File", SchemaName: "file", @@ -269,6 +293,11 @@ func (i *InputMediaUploadedPhoto) TypeInfo() tdp.Type { SchemaName: "ttl_seconds", Null: !i.Flags.Has(1), }, + { + Name: "Video", + SchemaName: "video", + Null: !i.Flags.Has(3), + }, } return typ } @@ -278,18 +307,24 @@ func (i *InputMediaUploadedPhoto) SetFlags() { if !(i.Spoiler == false) { i.Flags.Set(2) } + if !(i.LivePhoto == false) { + i.Flags.Set(3) + } if !(i.Stickers == nil) { i.Flags.Set(0) } if !(i.TTLSeconds == 0) { i.Flags.Set(1) } + if !(i.Video == nil) { + i.Flags.Set(3) + } } // Encode implements bin.Encoder. func (i *InputMediaUploadedPhoto) Encode(b *bin.Buffer) error { if i == nil { - return fmt.Errorf("can't encode inputMediaUploadedPhoto#1e287d04 as nil") + return fmt.Errorf("can't encode inputMediaUploadedPhoto#7d8375da as nil") } b.PutID(InputMediaUploadedPhotoTypeID) return i.EncodeBare(b) @@ -298,42 +333,50 @@ func (i *InputMediaUploadedPhoto) Encode(b *bin.Buffer) error { // EncodeBare implements bin.BareEncoder. func (i *InputMediaUploadedPhoto) EncodeBare(b *bin.Buffer) error { if i == nil { - return fmt.Errorf("can't encode inputMediaUploadedPhoto#1e287d04 as nil") + return fmt.Errorf("can't encode inputMediaUploadedPhoto#7d8375da as nil") } i.SetFlags() if err := i.Flags.Encode(b); err != nil { - return fmt.Errorf("unable to encode inputMediaUploadedPhoto#1e287d04: field flags: %w", err) + return fmt.Errorf("unable to encode inputMediaUploadedPhoto#7d8375da: field flags: %w", err) } if i.File == nil { - return fmt.Errorf("unable to encode inputMediaUploadedPhoto#1e287d04: field file is nil") + return fmt.Errorf("unable to encode inputMediaUploadedPhoto#7d8375da: field file is nil") } if err := i.File.Encode(b); err != nil { - return fmt.Errorf("unable to encode inputMediaUploadedPhoto#1e287d04: field file: %w", err) + return fmt.Errorf("unable to encode inputMediaUploadedPhoto#7d8375da: field file: %w", err) } if i.Flags.Has(0) { b.PutVectorHeader(len(i.Stickers)) for idx, v := range i.Stickers { if v == nil { - return fmt.Errorf("unable to encode inputMediaUploadedPhoto#1e287d04: field stickers element with index %d is nil", idx) + return fmt.Errorf("unable to encode inputMediaUploadedPhoto#7d8375da: field stickers element with index %d is nil", idx) } if err := v.Encode(b); err != nil { - return fmt.Errorf("unable to encode inputMediaUploadedPhoto#1e287d04: field stickers element with index %d: %w", idx, err) + return fmt.Errorf("unable to encode inputMediaUploadedPhoto#7d8375da: field stickers element with index %d: %w", idx, err) } } } if i.Flags.Has(1) { b.PutInt(i.TTLSeconds) } + if i.Flags.Has(3) { + if i.Video == nil { + return fmt.Errorf("unable to encode inputMediaUploadedPhoto#7d8375da: field video is nil") + } + if err := i.Video.Encode(b); err != nil { + return fmt.Errorf("unable to encode inputMediaUploadedPhoto#7d8375da: field video: %w", err) + } + } return nil } // Decode implements bin.Decoder. func (i *InputMediaUploadedPhoto) Decode(b *bin.Buffer) error { if i == nil { - return fmt.Errorf("can't decode inputMediaUploadedPhoto#1e287d04 to nil") + return fmt.Errorf("can't decode inputMediaUploadedPhoto#7d8375da to nil") } if err := b.ConsumeID(InputMediaUploadedPhotoTypeID); err != nil { - return fmt.Errorf("unable to decode inputMediaUploadedPhoto#1e287d04: %w", err) + return fmt.Errorf("unable to decode inputMediaUploadedPhoto#7d8375da: %w", err) } return i.DecodeBare(b) } @@ -341,25 +384,26 @@ func (i *InputMediaUploadedPhoto) Decode(b *bin.Buffer) error { // DecodeBare implements bin.BareDecoder. func (i *InputMediaUploadedPhoto) DecodeBare(b *bin.Buffer) error { if i == nil { - return fmt.Errorf("can't decode inputMediaUploadedPhoto#1e287d04 to nil") + return fmt.Errorf("can't decode inputMediaUploadedPhoto#7d8375da to nil") } { if err := i.Flags.Decode(b); err != nil { - return fmt.Errorf("unable to decode inputMediaUploadedPhoto#1e287d04: field flags: %w", err) + return fmt.Errorf("unable to decode inputMediaUploadedPhoto#7d8375da: field flags: %w", err) } } i.Spoiler = i.Flags.Has(2) + i.LivePhoto = i.Flags.Has(3) { value, err := DecodeInputFile(b) if err != nil { - return fmt.Errorf("unable to decode inputMediaUploadedPhoto#1e287d04: field file: %w", err) + return fmt.Errorf("unable to decode inputMediaUploadedPhoto#7d8375da: field file: %w", err) } i.File = value } if i.Flags.Has(0) { headerLen, err := b.VectorHeader() if err != nil { - return fmt.Errorf("unable to decode inputMediaUploadedPhoto#1e287d04: field stickers: %w", err) + return fmt.Errorf("unable to decode inputMediaUploadedPhoto#7d8375da: field stickers: %w", err) } if headerLen > 0 { @@ -368,7 +412,7 @@ func (i *InputMediaUploadedPhoto) DecodeBare(b *bin.Buffer) error { for idx := 0; idx < headerLen; idx++ { value, err := DecodeInputDocument(b) if err != nil { - return fmt.Errorf("unable to decode inputMediaUploadedPhoto#1e287d04: field stickers: %w", err) + return fmt.Errorf("unable to decode inputMediaUploadedPhoto#7d8375da: field stickers: %w", err) } i.Stickers = append(i.Stickers, value) } @@ -376,10 +420,17 @@ func (i *InputMediaUploadedPhoto) DecodeBare(b *bin.Buffer) error { if i.Flags.Has(1) { value, err := b.Int() if err != nil { - return fmt.Errorf("unable to decode inputMediaUploadedPhoto#1e287d04: field ttl_seconds: %w", err) + return fmt.Errorf("unable to decode inputMediaUploadedPhoto#7d8375da: field ttl_seconds: %w", err) } i.TTLSeconds = value } + if i.Flags.Has(3) { + value, err := DecodeInputDocument(b) + if err != nil { + return fmt.Errorf("unable to decode inputMediaUploadedPhoto#7d8375da: field video: %w", err) + } + i.Video = value + } return nil } @@ -402,6 +453,25 @@ func (i *InputMediaUploadedPhoto) GetSpoiler() (value bool) { return i.Flags.Has(2) } +// SetLivePhoto sets value of LivePhoto conditional field. +func (i *InputMediaUploadedPhoto) SetLivePhoto(value bool) { + if value { + i.Flags.Set(3) + i.LivePhoto = true + } else { + i.Flags.Unset(3) + i.LivePhoto = false + } +} + +// GetLivePhoto returns value of LivePhoto conditional field. +func (i *InputMediaUploadedPhoto) GetLivePhoto() (value bool) { + if i == nil { + return + } + return i.Flags.Has(3) +} + // GetFile returns value of File field. func (i *InputMediaUploadedPhoto) GetFile() (value InputFileClass) { if i == nil { @@ -446,6 +516,24 @@ func (i *InputMediaUploadedPhoto) GetTTLSeconds() (value int, ok bool) { return i.TTLSeconds, true } +// SetVideo sets value of Video conditional field. +func (i *InputMediaUploadedPhoto) SetVideo(value InputDocumentClass) { + i.Flags.Set(3) + i.Video = value +} + +// GetVideo returns value of Video conditional field and +// boolean which is true if field was set. +func (i *InputMediaUploadedPhoto) GetVideo() (value InputDocumentClass, ok bool) { + if i == nil { + return + } + if !i.Flags.Has(3) { + return value, false + } + return i.Video, true +} + // MapStickers returns field Stickers wrapped in InputDocumentClassArray helper. func (i *InputMediaUploadedPhoto) MapStickers() (value InputDocumentClassArray, ok bool) { if !i.Flags.Has(0) { @@ -454,7 +542,7 @@ func (i *InputMediaUploadedPhoto) MapStickers() (value InputDocumentClassArray, return InputDocumentClassArray(i.Stickers), true } -// InputMediaPhoto represents TL type `inputMediaPhoto#b3ba0635`. +// InputMediaPhoto represents TL type `inputMediaPhoto#e3af4434`. // Forwarded photo // // See https://core.telegram.org/constructor/inputMediaPhoto for reference. @@ -466,16 +554,22 @@ type InputMediaPhoto struct { Flags bin.Fields // Whether this media should be hidden behind a spoiler warning Spoiler bool + // LivePhoto field of InputMediaPhoto. + LivePhoto bool // Photo to be forwarded ID InputPhotoClass // Time to live in seconds of self-destructing photo // // Use SetTTLSeconds and GetTTLSeconds helpers. TTLSeconds int + // Video field of InputMediaPhoto. + // + // Use SetVideo and GetVideo helpers. + Video InputDocumentClass } // InputMediaPhotoTypeID is TL type id of InputMediaPhoto. -const InputMediaPhotoTypeID = 0xb3ba0635 +const InputMediaPhotoTypeID = 0xe3af4434 // construct implements constructor of InputMediaClass. func (i InputMediaPhoto) construct() InputMediaClass { return &i } @@ -500,12 +594,18 @@ func (i *InputMediaPhoto) Zero() bool { if !(i.Spoiler == false) { return false } + if !(i.LivePhoto == false) { + return false + } if !(i.ID == nil) { return false } if !(i.TTLSeconds == 0) { return false } + if !(i.Video == nil) { + return false + } return true } @@ -522,15 +622,22 @@ func (i *InputMediaPhoto) String() string { // FillFrom fills InputMediaPhoto from given interface. func (i *InputMediaPhoto) FillFrom(from interface { GetSpoiler() (value bool) + GetLivePhoto() (value bool) GetID() (value InputPhotoClass) GetTTLSeconds() (value int, ok bool) + GetVideo() (value InputDocumentClass, ok bool) }) { i.Spoiler = from.GetSpoiler() + i.LivePhoto = from.GetLivePhoto() i.ID = from.GetID() if val, ok := from.GetTTLSeconds(); ok { i.TTLSeconds = val } + if val, ok := from.GetVideo(); ok { + i.Video = val + } + } // TypeID returns type id in TL schema. @@ -561,6 +668,11 @@ func (i *InputMediaPhoto) TypeInfo() tdp.Type { SchemaName: "spoiler", Null: !i.Flags.Has(1), }, + { + Name: "LivePhoto", + SchemaName: "live_photo", + Null: !i.Flags.Has(2), + }, { Name: "ID", SchemaName: "id", @@ -570,6 +682,11 @@ func (i *InputMediaPhoto) TypeInfo() tdp.Type { SchemaName: "ttl_seconds", Null: !i.Flags.Has(0), }, + { + Name: "Video", + SchemaName: "video", + Null: !i.Flags.Has(2), + }, } return typ } @@ -579,15 +696,21 @@ func (i *InputMediaPhoto) SetFlags() { if !(i.Spoiler == false) { i.Flags.Set(1) } + if !(i.LivePhoto == false) { + i.Flags.Set(2) + } if !(i.TTLSeconds == 0) { i.Flags.Set(0) } + if !(i.Video == nil) { + i.Flags.Set(2) + } } // Encode implements bin.Encoder. func (i *InputMediaPhoto) Encode(b *bin.Buffer) error { if i == nil { - return fmt.Errorf("can't encode inputMediaPhoto#b3ba0635 as nil") + return fmt.Errorf("can't encode inputMediaPhoto#e3af4434 as nil") } b.PutID(InputMediaPhotoTypeID) return i.EncodeBare(b) @@ -596,31 +719,39 @@ func (i *InputMediaPhoto) Encode(b *bin.Buffer) error { // EncodeBare implements bin.BareEncoder. func (i *InputMediaPhoto) EncodeBare(b *bin.Buffer) error { if i == nil { - return fmt.Errorf("can't encode inputMediaPhoto#b3ba0635 as nil") + return fmt.Errorf("can't encode inputMediaPhoto#e3af4434 as nil") } i.SetFlags() if err := i.Flags.Encode(b); err != nil { - return fmt.Errorf("unable to encode inputMediaPhoto#b3ba0635: field flags: %w", err) + return fmt.Errorf("unable to encode inputMediaPhoto#e3af4434: field flags: %w", err) } if i.ID == nil { - return fmt.Errorf("unable to encode inputMediaPhoto#b3ba0635: field id is nil") + return fmt.Errorf("unable to encode inputMediaPhoto#e3af4434: field id is nil") } if err := i.ID.Encode(b); err != nil { - return fmt.Errorf("unable to encode inputMediaPhoto#b3ba0635: field id: %w", err) + return fmt.Errorf("unable to encode inputMediaPhoto#e3af4434: field id: %w", err) } if i.Flags.Has(0) { b.PutInt(i.TTLSeconds) } + if i.Flags.Has(2) { + if i.Video == nil { + return fmt.Errorf("unable to encode inputMediaPhoto#e3af4434: field video is nil") + } + if err := i.Video.Encode(b); err != nil { + return fmt.Errorf("unable to encode inputMediaPhoto#e3af4434: field video: %w", err) + } + } return nil } // Decode implements bin.Decoder. func (i *InputMediaPhoto) Decode(b *bin.Buffer) error { if i == nil { - return fmt.Errorf("can't decode inputMediaPhoto#b3ba0635 to nil") + return fmt.Errorf("can't decode inputMediaPhoto#e3af4434 to nil") } if err := b.ConsumeID(InputMediaPhotoTypeID); err != nil { - return fmt.Errorf("unable to decode inputMediaPhoto#b3ba0635: %w", err) + return fmt.Errorf("unable to decode inputMediaPhoto#e3af4434: %w", err) } return i.DecodeBare(b) } @@ -628,28 +759,36 @@ func (i *InputMediaPhoto) Decode(b *bin.Buffer) error { // DecodeBare implements bin.BareDecoder. func (i *InputMediaPhoto) DecodeBare(b *bin.Buffer) error { if i == nil { - return fmt.Errorf("can't decode inputMediaPhoto#b3ba0635 to nil") + return fmt.Errorf("can't decode inputMediaPhoto#e3af4434 to nil") } { if err := i.Flags.Decode(b); err != nil { - return fmt.Errorf("unable to decode inputMediaPhoto#b3ba0635: field flags: %w", err) + return fmt.Errorf("unable to decode inputMediaPhoto#e3af4434: field flags: %w", err) } } i.Spoiler = i.Flags.Has(1) + i.LivePhoto = i.Flags.Has(2) { value, err := DecodeInputPhoto(b) if err != nil { - return fmt.Errorf("unable to decode inputMediaPhoto#b3ba0635: field id: %w", err) + return fmt.Errorf("unable to decode inputMediaPhoto#e3af4434: field id: %w", err) } i.ID = value } if i.Flags.Has(0) { value, err := b.Int() if err != nil { - return fmt.Errorf("unable to decode inputMediaPhoto#b3ba0635: field ttl_seconds: %w", err) + return fmt.Errorf("unable to decode inputMediaPhoto#e3af4434: field ttl_seconds: %w", err) } i.TTLSeconds = value } + if i.Flags.Has(2) { + value, err := DecodeInputDocument(b) + if err != nil { + return fmt.Errorf("unable to decode inputMediaPhoto#e3af4434: field video: %w", err) + } + i.Video = value + } return nil } @@ -672,6 +811,25 @@ func (i *InputMediaPhoto) GetSpoiler() (value bool) { return i.Flags.Has(1) } +// SetLivePhoto sets value of LivePhoto conditional field. +func (i *InputMediaPhoto) SetLivePhoto(value bool) { + if value { + i.Flags.Set(2) + i.LivePhoto = true + } else { + i.Flags.Unset(2) + i.LivePhoto = false + } +} + +// GetLivePhoto returns value of LivePhoto conditional field. +func (i *InputMediaPhoto) GetLivePhoto() (value bool) { + if i == nil { + return + } + return i.Flags.Has(2) +} + // GetID returns value of ID field. func (i *InputMediaPhoto) GetID() (value InputPhotoClass) { if i == nil { @@ -698,6 +856,24 @@ func (i *InputMediaPhoto) GetTTLSeconds() (value int, ok bool) { return i.TTLSeconds, true } +// SetVideo sets value of Video conditional field. +func (i *InputMediaPhoto) SetVideo(value InputDocumentClass) { + i.Flags.Set(2) + i.Video = value +} + +// GetVideo returns value of Video conditional field and +// boolean which is true if field was set. +func (i *InputMediaPhoto) GetVideo() (value InputDocumentClass, ok bool) { + if i == nil { + return + } + if !i.Flags.Has(2) { + return value, false + } + return i.Video, true +} + // InputMediaGeoPoint represents TL type `inputMediaGeoPoint#f9c44144`. // Map. // @@ -3898,7 +4074,7 @@ func (i *InputMediaGeoLive) GetProximityNotificationRadius() (value int, ok bool return i.ProximityNotificationRadius, true } -// InputMediaPoll represents TL type `inputMediaPoll#f94e5f1`. +// InputMediaPoll represents TL type `inputMediaPoll#883a4108`. // A poll // // See https://core.telegram.org/constructor/inputMediaPoll for reference. @@ -3913,7 +4089,11 @@ type InputMediaPoll struct { // Correct answer IDs (for quiz polls) // // Use SetCorrectAnswers and GetCorrectAnswers helpers. - CorrectAnswers [][]byte + CorrectAnswers []int + // AttachedMedia field of InputMediaPoll. + // + // Use SetAttachedMedia and GetAttachedMedia helpers. + AttachedMedia InputMediaClass // Explanation of quiz solution // // Use SetSolution and GetSolution helpers. @@ -3925,10 +4105,14 @@ type InputMediaPoll struct { // // Use SetSolutionEntities and GetSolutionEntities helpers. SolutionEntities []MessageEntityClass + // SolutionMedia field of InputMediaPoll. + // + // Use SetSolutionMedia and GetSolutionMedia helpers. + SolutionMedia InputMediaClass } // InputMediaPollTypeID is TL type id of InputMediaPoll. -const InputMediaPollTypeID = 0xf94e5f1 +const InputMediaPollTypeID = 0x883a4108 // construct implements constructor of InputMediaClass. func (i InputMediaPoll) construct() InputMediaClass { return &i } @@ -3956,12 +4140,18 @@ func (i *InputMediaPoll) Zero() bool { if !(i.CorrectAnswers == nil) { return false } + if !(i.AttachedMedia == nil) { + return false + } if !(i.Solution == "") { return false } if !(i.SolutionEntities == nil) { return false } + if !(i.SolutionMedia == nil) { + return false + } return true } @@ -3978,15 +4168,21 @@ func (i *InputMediaPoll) String() string { // FillFrom fills InputMediaPoll from given interface. func (i *InputMediaPoll) FillFrom(from interface { GetPoll() (value Poll) - GetCorrectAnswers() (value [][]byte, ok bool) + GetCorrectAnswers() (value []int, ok bool) + GetAttachedMedia() (value InputMediaClass, ok bool) GetSolution() (value string, ok bool) GetSolutionEntities() (value []MessageEntityClass, ok bool) + GetSolutionMedia() (value InputMediaClass, ok bool) }) { i.Poll = from.GetPoll() if val, ok := from.GetCorrectAnswers(); ok { i.CorrectAnswers = val } + if val, ok := from.GetAttachedMedia(); ok { + i.AttachedMedia = val + } + if val, ok := from.GetSolution(); ok { i.Solution = val } @@ -3995,6 +4191,10 @@ func (i *InputMediaPoll) FillFrom(from interface { i.SolutionEntities = val } + if val, ok := from.GetSolutionMedia(); ok { + i.SolutionMedia = val + } + } // TypeID returns type id in TL schema. @@ -4029,6 +4229,11 @@ func (i *InputMediaPoll) TypeInfo() tdp.Type { SchemaName: "correct_answers", Null: !i.Flags.Has(0), }, + { + Name: "AttachedMedia", + SchemaName: "attached_media", + Null: !i.Flags.Has(3), + }, { Name: "Solution", SchemaName: "solution", @@ -4039,6 +4244,11 @@ func (i *InputMediaPoll) TypeInfo() tdp.Type { SchemaName: "solution_entities", Null: !i.Flags.Has(1), }, + { + Name: "SolutionMedia", + SchemaName: "solution_media", + Null: !i.Flags.Has(2), + }, } return typ } @@ -4048,18 +4258,24 @@ func (i *InputMediaPoll) SetFlags() { if !(i.CorrectAnswers == nil) { i.Flags.Set(0) } + if !(i.AttachedMedia == nil) { + i.Flags.Set(3) + } if !(i.Solution == "") { i.Flags.Set(1) } if !(i.SolutionEntities == nil) { i.Flags.Set(1) } + if !(i.SolutionMedia == nil) { + i.Flags.Set(2) + } } // Encode implements bin.Encoder. func (i *InputMediaPoll) Encode(b *bin.Buffer) error { if i == nil { - return fmt.Errorf("can't encode inputMediaPoll#f94e5f1 as nil") + return fmt.Errorf("can't encode inputMediaPoll#883a4108 as nil") } b.PutID(InputMediaPollTypeID) return i.EncodeBare(b) @@ -4068,19 +4284,27 @@ func (i *InputMediaPoll) Encode(b *bin.Buffer) error { // EncodeBare implements bin.BareEncoder. func (i *InputMediaPoll) EncodeBare(b *bin.Buffer) error { if i == nil { - return fmt.Errorf("can't encode inputMediaPoll#f94e5f1 as nil") + return fmt.Errorf("can't encode inputMediaPoll#883a4108 as nil") } i.SetFlags() if err := i.Flags.Encode(b); err != nil { - return fmt.Errorf("unable to encode inputMediaPoll#f94e5f1: field flags: %w", err) + return fmt.Errorf("unable to encode inputMediaPoll#883a4108: field flags: %w", err) } if err := i.Poll.Encode(b); err != nil { - return fmt.Errorf("unable to encode inputMediaPoll#f94e5f1: field poll: %w", err) + return fmt.Errorf("unable to encode inputMediaPoll#883a4108: field poll: %w", err) } if i.Flags.Has(0) { b.PutVectorHeader(len(i.CorrectAnswers)) for _, v := range i.CorrectAnswers { - b.PutBytes(v) + b.PutInt(v) + } + } + if i.Flags.Has(3) { + if i.AttachedMedia == nil { + return fmt.Errorf("unable to encode inputMediaPoll#883a4108: field attached_media is nil") + } + if err := i.AttachedMedia.Encode(b); err != nil { + return fmt.Errorf("unable to encode inputMediaPoll#883a4108: field attached_media: %w", err) } } if i.Flags.Has(1) { @@ -4090,23 +4314,31 @@ func (i *InputMediaPoll) EncodeBare(b *bin.Buffer) error { b.PutVectorHeader(len(i.SolutionEntities)) for idx, v := range i.SolutionEntities { if v == nil { - return fmt.Errorf("unable to encode inputMediaPoll#f94e5f1: field solution_entities element with index %d is nil", idx) + return fmt.Errorf("unable to encode inputMediaPoll#883a4108: field solution_entities element with index %d is nil", idx) } if err := v.Encode(b); err != nil { - return fmt.Errorf("unable to encode inputMediaPoll#f94e5f1: field solution_entities element with index %d: %w", idx, err) + return fmt.Errorf("unable to encode inputMediaPoll#883a4108: field solution_entities element with index %d: %w", idx, err) } } } + if i.Flags.Has(2) { + if i.SolutionMedia == nil { + return fmt.Errorf("unable to encode inputMediaPoll#883a4108: field solution_media is nil") + } + if err := i.SolutionMedia.Encode(b); err != nil { + return fmt.Errorf("unable to encode inputMediaPoll#883a4108: field solution_media: %w", err) + } + } return nil } // Decode implements bin.Decoder. func (i *InputMediaPoll) Decode(b *bin.Buffer) error { if i == nil { - return fmt.Errorf("can't decode inputMediaPoll#f94e5f1 to nil") + return fmt.Errorf("can't decode inputMediaPoll#883a4108 to nil") } if err := b.ConsumeID(InputMediaPollTypeID); err != nil { - return fmt.Errorf("unable to decode inputMediaPoll#f94e5f1: %w", err) + return fmt.Errorf("unable to decode inputMediaPoll#883a4108: %w", err) } return i.DecodeBare(b) } @@ -4114,46 +4346,53 @@ func (i *InputMediaPoll) Decode(b *bin.Buffer) error { // DecodeBare implements bin.BareDecoder. func (i *InputMediaPoll) DecodeBare(b *bin.Buffer) error { if i == nil { - return fmt.Errorf("can't decode inputMediaPoll#f94e5f1 to nil") + return fmt.Errorf("can't decode inputMediaPoll#883a4108 to nil") } { if err := i.Flags.Decode(b); err != nil { - return fmt.Errorf("unable to decode inputMediaPoll#f94e5f1: field flags: %w", err) + return fmt.Errorf("unable to decode inputMediaPoll#883a4108: field flags: %w", err) } } { if err := i.Poll.Decode(b); err != nil { - return fmt.Errorf("unable to decode inputMediaPoll#f94e5f1: field poll: %w", err) + return fmt.Errorf("unable to decode inputMediaPoll#883a4108: field poll: %w", err) } } if i.Flags.Has(0) { headerLen, err := b.VectorHeader() if err != nil { - return fmt.Errorf("unable to decode inputMediaPoll#f94e5f1: field correct_answers: %w", err) + return fmt.Errorf("unable to decode inputMediaPoll#883a4108: field correct_answers: %w", err) } if headerLen > 0 { - i.CorrectAnswers = make([][]byte, 0, headerLen%bin.PreallocateLimit) + i.CorrectAnswers = make([]int, 0, headerLen%bin.PreallocateLimit) } for idx := 0; idx < headerLen; idx++ { - value, err := b.Bytes() + value, err := b.Int() if err != nil { - return fmt.Errorf("unable to decode inputMediaPoll#f94e5f1: field correct_answers: %w", err) + return fmt.Errorf("unable to decode inputMediaPoll#883a4108: field correct_answers: %w", err) } i.CorrectAnswers = append(i.CorrectAnswers, value) } } + if i.Flags.Has(3) { + value, err := DecodeInputMedia(b) + if err != nil { + return fmt.Errorf("unable to decode inputMediaPoll#883a4108: field attached_media: %w", err) + } + i.AttachedMedia = value + } if i.Flags.Has(1) { value, err := b.String() if err != nil { - return fmt.Errorf("unable to decode inputMediaPoll#f94e5f1: field solution: %w", err) + return fmt.Errorf("unable to decode inputMediaPoll#883a4108: field solution: %w", err) } i.Solution = value } if i.Flags.Has(1) { headerLen, err := b.VectorHeader() if err != nil { - return fmt.Errorf("unable to decode inputMediaPoll#f94e5f1: field solution_entities: %w", err) + return fmt.Errorf("unable to decode inputMediaPoll#883a4108: field solution_entities: %w", err) } if headerLen > 0 { @@ -4162,11 +4401,18 @@ func (i *InputMediaPoll) DecodeBare(b *bin.Buffer) error { for idx := 0; idx < headerLen; idx++ { value, err := DecodeMessageEntity(b) if err != nil { - return fmt.Errorf("unable to decode inputMediaPoll#f94e5f1: field solution_entities: %w", err) + return fmt.Errorf("unable to decode inputMediaPoll#883a4108: field solution_entities: %w", err) } i.SolutionEntities = append(i.SolutionEntities, value) } } + if i.Flags.Has(2) { + value, err := DecodeInputMedia(b) + if err != nil { + return fmt.Errorf("unable to decode inputMediaPoll#883a4108: field solution_media: %w", err) + } + i.SolutionMedia = value + } return nil } @@ -4179,14 +4425,14 @@ func (i *InputMediaPoll) GetPoll() (value Poll) { } // SetCorrectAnswers sets value of CorrectAnswers conditional field. -func (i *InputMediaPoll) SetCorrectAnswers(value [][]byte) { +func (i *InputMediaPoll) SetCorrectAnswers(value []int) { i.Flags.Set(0) i.CorrectAnswers = value } // GetCorrectAnswers returns value of CorrectAnswers conditional field and // boolean which is true if field was set. -func (i *InputMediaPoll) GetCorrectAnswers() (value [][]byte, ok bool) { +func (i *InputMediaPoll) GetCorrectAnswers() (value []int, ok bool) { if i == nil { return } @@ -4196,6 +4442,24 @@ func (i *InputMediaPoll) GetCorrectAnswers() (value [][]byte, ok bool) { return i.CorrectAnswers, true } +// SetAttachedMedia sets value of AttachedMedia conditional field. +func (i *InputMediaPoll) SetAttachedMedia(value InputMediaClass) { + i.Flags.Set(3) + i.AttachedMedia = value +} + +// GetAttachedMedia returns value of AttachedMedia conditional field and +// boolean which is true if field was set. +func (i *InputMediaPoll) GetAttachedMedia() (value InputMediaClass, ok bool) { + if i == nil { + return + } + if !i.Flags.Has(3) { + return value, false + } + return i.AttachedMedia, true +} + // SetSolution sets value of Solution conditional field. func (i *InputMediaPoll) SetSolution(value string) { i.Flags.Set(1) @@ -4232,6 +4496,24 @@ func (i *InputMediaPoll) GetSolutionEntities() (value []MessageEntityClass, ok b return i.SolutionEntities, true } +// SetSolutionMedia sets value of SolutionMedia conditional field. +func (i *InputMediaPoll) SetSolutionMedia(value InputMediaClass) { + i.Flags.Set(2) + i.SolutionMedia = value +} + +// GetSolutionMedia returns value of SolutionMedia conditional field and +// boolean which is true if field was set. +func (i *InputMediaPoll) GetSolutionMedia() (value InputMediaClass, ok bool) { + if i == nil { + return + } + if !i.Flags.Has(2) { + return value, false + } + return i.SolutionMedia, true +} + // MapSolutionEntities returns field SolutionEntities wrapped in MessageEntityClassArray helper. func (i *InputMediaPoll) MapSolutionEntities() (value MessageEntityClassArray, ok bool) { if !i.Flags.Has(1) { @@ -5416,8 +5698,8 @@ const InputMediaClassName = "InputMedia" // } // switch v := g.(type) { // case *tg.InputMediaEmpty: // inputMediaEmpty#9664f57f -// case *tg.InputMediaUploadedPhoto: // inputMediaUploadedPhoto#1e287d04 -// case *tg.InputMediaPhoto: // inputMediaPhoto#b3ba0635 +// case *tg.InputMediaUploadedPhoto: // inputMediaUploadedPhoto#7d8375da +// case *tg.InputMediaPhoto: // inputMediaPhoto#e3af4434 // case *tg.InputMediaGeoPoint: // inputMediaGeoPoint#f9c44144 // case *tg.InputMediaContact: // inputMediaContact#f8ab7dfb // case *tg.InputMediaUploadedDocument: // inputMediaUploadedDocument#37c9330 @@ -5428,7 +5710,7 @@ const InputMediaClassName = "InputMedia" // case *tg.InputMediaGame: // inputMediaGame#d33f43f3 // case *tg.InputMediaInvoice: // inputMediaInvoice#405fef0d // case *tg.InputMediaGeoLive: // inputMediaGeoLive#971fa843 -// case *tg.InputMediaPoll: // inputMediaPoll#f94e5f1 +// case *tg.InputMediaPoll: // inputMediaPoll#883a4108 // case *tg.InputMediaDice: // inputMediaDice#e66fbf7b // case *tg.InputMediaStory: // inputMediaStory#89fdd778 // case *tg.InputMediaWebPage: // inputMediaWebPage#c21b8849 @@ -5471,14 +5753,14 @@ func DecodeInputMedia(buf *bin.Buffer) (InputMediaClass, error) { } return &v, nil case InputMediaUploadedPhotoTypeID: - // Decoding inputMediaUploadedPhoto#1e287d04. + // Decoding inputMediaUploadedPhoto#7d8375da. v := InputMediaUploadedPhoto{} if err := v.Decode(buf); err != nil { return nil, fmt.Errorf("unable to decode InputMediaClass: %w", err) } return &v, nil case InputMediaPhotoTypeID: - // Decoding inputMediaPhoto#b3ba0635. + // Decoding inputMediaPhoto#e3af4434. v := InputMediaPhoto{} if err := v.Decode(buf); err != nil { return nil, fmt.Errorf("unable to decode InputMediaClass: %w", err) @@ -5555,7 +5837,7 @@ func DecodeInputMedia(buf *bin.Buffer) (InputMediaClass, error) { } return &v, nil case InputMediaPollTypeID: - // Decoding inputMediaPoll#f94e5f1. + // Decoding inputMediaPoll#883a4108. v := InputMediaPoll{} if err := v.Decode(buf); err != nil { return nil, fmt.Errorf("unable to decode InputMediaClass: %w", err) diff --git a/pkg/gotd/tg/tl_input_message_read_metric_gen.go b/pkg/gotd/tg/tl_input_message_read_metric_gen.go new file mode 100644 index 00000000..7e7a5ae7 --- /dev/null +++ b/pkg/gotd/tg/tl_input_message_read_metric_gen.go @@ -0,0 +1,296 @@ +// Code generated by gotdgen, DO NOT EDIT. + +package tg + +import ( + "context" + "errors" + "fmt" + "sort" + "strings" + + "go.uber.org/multierr" + + "go.mau.fi/mautrix-telegram/pkg/gotd/bin" + "go.mau.fi/mautrix-telegram/pkg/gotd/tdjson" + "go.mau.fi/mautrix-telegram/pkg/gotd/tdp" + "go.mau.fi/mautrix-telegram/pkg/gotd/tgerr" +) + +// No-op definition for keeping imports. +var ( + _ = bin.Buffer{} + _ = context.Background() + _ = fmt.Stringer(nil) + _ = strings.Builder{} + _ = errors.Is + _ = multierr.AppendInto + _ = sort.Ints + _ = tdp.Format + _ = tgerr.Error{} + _ = tdjson.Encoder{} +) + +// InputMessageReadMetric represents TL type `inputMessageReadMetric#402b4495`. +// +// See https://core.telegram.org/constructor/inputMessageReadMetric for reference. +type InputMessageReadMetric struct { + // MsgID field of InputMessageReadMetric. + MsgID int + // ViewID field of InputMessageReadMetric. + ViewID int64 + // TimeInViewMs field of InputMessageReadMetric. + TimeInViewMs int + // ActiveTimeInViewMs field of InputMessageReadMetric. + ActiveTimeInViewMs int + // HeightToViewportRatioPermille field of InputMessageReadMetric. + HeightToViewportRatioPermille int + // SeenRangeRatioPermille field of InputMessageReadMetric. + SeenRangeRatioPermille int +} + +// InputMessageReadMetricTypeID is TL type id of InputMessageReadMetric. +const InputMessageReadMetricTypeID = 0x402b4495 + +// Ensuring interfaces in compile-time for InputMessageReadMetric. +var ( + _ bin.Encoder = &InputMessageReadMetric{} + _ bin.Decoder = &InputMessageReadMetric{} + _ bin.BareEncoder = &InputMessageReadMetric{} + _ bin.BareDecoder = &InputMessageReadMetric{} +) + +func (i *InputMessageReadMetric) Zero() bool { + if i == nil { + return true + } + if !(i.MsgID == 0) { + return false + } + if !(i.ViewID == 0) { + return false + } + if !(i.TimeInViewMs == 0) { + return false + } + if !(i.ActiveTimeInViewMs == 0) { + return false + } + if !(i.HeightToViewportRatioPermille == 0) { + return false + } + if !(i.SeenRangeRatioPermille == 0) { + return false + } + + return true +} + +// String implements fmt.Stringer. +func (i *InputMessageReadMetric) String() string { + if i == nil { + return "InputMessageReadMetric(nil)" + } + type Alias InputMessageReadMetric + return fmt.Sprintf("InputMessageReadMetric%+v", Alias(*i)) +} + +// FillFrom fills InputMessageReadMetric from given interface. +func (i *InputMessageReadMetric) FillFrom(from interface { + GetMsgID() (value int) + GetViewID() (value int64) + GetTimeInViewMs() (value int) + GetActiveTimeInViewMs() (value int) + GetHeightToViewportRatioPermille() (value int) + GetSeenRangeRatioPermille() (value int) +}) { + i.MsgID = from.GetMsgID() + i.ViewID = from.GetViewID() + i.TimeInViewMs = from.GetTimeInViewMs() + i.ActiveTimeInViewMs = from.GetActiveTimeInViewMs() + i.HeightToViewportRatioPermille = from.GetHeightToViewportRatioPermille() + i.SeenRangeRatioPermille = from.GetSeenRangeRatioPermille() +} + +// TypeID returns type id in TL schema. +// +// See https://core.telegram.org/mtproto/TL-tl#remarks. +func (*InputMessageReadMetric) TypeID() uint32 { + return InputMessageReadMetricTypeID +} + +// TypeName returns name of type in TL schema. +func (*InputMessageReadMetric) TypeName() string { + return "inputMessageReadMetric" +} + +// TypeInfo returns info about TL type. +func (i *InputMessageReadMetric) TypeInfo() tdp.Type { + typ := tdp.Type{ + Name: "inputMessageReadMetric", + ID: InputMessageReadMetricTypeID, + } + if i == nil { + typ.Null = true + return typ + } + typ.Fields = []tdp.Field{ + { + Name: "MsgID", + SchemaName: "msg_id", + }, + { + Name: "ViewID", + SchemaName: "view_id", + }, + { + Name: "TimeInViewMs", + SchemaName: "time_in_view_ms", + }, + { + Name: "ActiveTimeInViewMs", + SchemaName: "active_time_in_view_ms", + }, + { + Name: "HeightToViewportRatioPermille", + SchemaName: "height_to_viewport_ratio_permille", + }, + { + Name: "SeenRangeRatioPermille", + SchemaName: "seen_range_ratio_permille", + }, + } + return typ +} + +// Encode implements bin.Encoder. +func (i *InputMessageReadMetric) Encode(b *bin.Buffer) error { + if i == nil { + return fmt.Errorf("can't encode inputMessageReadMetric#402b4495 as nil") + } + b.PutID(InputMessageReadMetricTypeID) + return i.EncodeBare(b) +} + +// EncodeBare implements bin.BareEncoder. +func (i *InputMessageReadMetric) EncodeBare(b *bin.Buffer) error { + if i == nil { + return fmt.Errorf("can't encode inputMessageReadMetric#402b4495 as nil") + } + b.PutInt(i.MsgID) + b.PutLong(i.ViewID) + b.PutInt(i.TimeInViewMs) + b.PutInt(i.ActiveTimeInViewMs) + b.PutInt(i.HeightToViewportRatioPermille) + b.PutInt(i.SeenRangeRatioPermille) + return nil +} + +// Decode implements bin.Decoder. +func (i *InputMessageReadMetric) Decode(b *bin.Buffer) error { + if i == nil { + return fmt.Errorf("can't decode inputMessageReadMetric#402b4495 to nil") + } + if err := b.ConsumeID(InputMessageReadMetricTypeID); err != nil { + return fmt.Errorf("unable to decode inputMessageReadMetric#402b4495: %w", err) + } + return i.DecodeBare(b) +} + +// DecodeBare implements bin.BareDecoder. +func (i *InputMessageReadMetric) DecodeBare(b *bin.Buffer) error { + if i == nil { + return fmt.Errorf("can't decode inputMessageReadMetric#402b4495 to nil") + } + { + value, err := b.Int() + if err != nil { + return fmt.Errorf("unable to decode inputMessageReadMetric#402b4495: field msg_id: %w", err) + } + i.MsgID = value + } + { + value, err := b.Long() + if err != nil { + return fmt.Errorf("unable to decode inputMessageReadMetric#402b4495: field view_id: %w", err) + } + i.ViewID = value + } + { + value, err := b.Int() + if err != nil { + return fmt.Errorf("unable to decode inputMessageReadMetric#402b4495: field time_in_view_ms: %w", err) + } + i.TimeInViewMs = value + } + { + value, err := b.Int() + if err != nil { + return fmt.Errorf("unable to decode inputMessageReadMetric#402b4495: field active_time_in_view_ms: %w", err) + } + i.ActiveTimeInViewMs = value + } + { + value, err := b.Int() + if err != nil { + return fmt.Errorf("unable to decode inputMessageReadMetric#402b4495: field height_to_viewport_ratio_permille: %w", err) + } + i.HeightToViewportRatioPermille = value + } + { + value, err := b.Int() + if err != nil { + return fmt.Errorf("unable to decode inputMessageReadMetric#402b4495: field seen_range_ratio_permille: %w", err) + } + i.SeenRangeRatioPermille = value + } + return nil +} + +// GetMsgID returns value of MsgID field. +func (i *InputMessageReadMetric) GetMsgID() (value int) { + if i == nil { + return + } + return i.MsgID +} + +// GetViewID returns value of ViewID field. +func (i *InputMessageReadMetric) GetViewID() (value int64) { + if i == nil { + return + } + return i.ViewID +} + +// GetTimeInViewMs returns value of TimeInViewMs field. +func (i *InputMessageReadMetric) GetTimeInViewMs() (value int) { + if i == nil { + return + } + return i.TimeInViewMs +} + +// GetActiveTimeInViewMs returns value of ActiveTimeInViewMs field. +func (i *InputMessageReadMetric) GetActiveTimeInViewMs() (value int) { + if i == nil { + return + } + return i.ActiveTimeInViewMs +} + +// GetHeightToViewportRatioPermille returns value of HeightToViewportRatioPermille field. +func (i *InputMessageReadMetric) GetHeightToViewportRatioPermille() (value int) { + if i == nil { + return + } + return i.HeightToViewportRatioPermille +} + +// GetSeenRangeRatioPermille returns value of SeenRangeRatioPermille field. +func (i *InputMessageReadMetric) GetSeenRangeRatioPermille() (value int) { + if i == nil { + return + } + return i.SeenRangeRatioPermille +} diff --git a/pkg/gotd/tg/tl_input_message_read_metric_slices_gen.go b/pkg/gotd/tg/tl_input_message_read_metric_slices_gen.go new file mode 100644 index 00000000..ad362638 --- /dev/null +++ b/pkg/gotd/tg/tl_input_message_read_metric_slices_gen.go @@ -0,0 +1,35 @@ +//go:build !no_gotd_slices +// +build !no_gotd_slices + +// Code generated by gotdgen, DO NOT EDIT. + +package tg + +import ( + "context" + "errors" + "fmt" + "sort" + "strings" + + "go.uber.org/multierr" + + "go.mau.fi/mautrix-telegram/pkg/gotd/bin" + "go.mau.fi/mautrix-telegram/pkg/gotd/tdjson" + "go.mau.fi/mautrix-telegram/pkg/gotd/tdp" + "go.mau.fi/mautrix-telegram/pkg/gotd/tgerr" +) + +// No-op definition for keeping imports. +var ( + _ = bin.Buffer{} + _ = context.Background() + _ = fmt.Stringer(nil) + _ = strings.Builder{} + _ = errors.Is + _ = multierr.AppendInto + _ = sort.Ints + _ = tdp.Format + _ = tgerr.Error{} + _ = tdjson.Encoder{} +) diff --git a/pkg/gotd/tg/tl_input_reply_to_gen.go b/pkg/gotd/tg/tl_input_reply_to_gen.go index 11647c8e..03f0054e 100644 --- a/pkg/gotd/tg/tl_input_reply_to_gen.go +++ b/pkg/gotd/tg/tl_input_reply_to_gen.go @@ -31,7 +31,7 @@ var ( _ = tdjson.Encoder{} ) -// InputReplyToMessage represents TL type `inputReplyToMessage#869fbe10`. +// InputReplyToMessage represents TL type `inputReplyToMessage#3bd4b7c2`. // Reply to a message. // // See https://core.telegram.org/constructor/inputReplyToMessage for reference. @@ -93,10 +93,14 @@ type InputReplyToMessage struct { // // Use SetTodoItemID and GetTodoItemID helpers. TodoItemID int + // PollOption field of InputReplyToMessage. + // + // Use SetPollOption and GetPollOption helpers. + PollOption []byte } // InputReplyToMessageTypeID is TL type id of InputReplyToMessage. -const InputReplyToMessageTypeID = 0x869fbe10 +const InputReplyToMessageTypeID = 0x3bd4b7c2 // construct implements constructor of InputReplyToClass. func (i InputReplyToMessage) construct() InputReplyToClass { return &i } @@ -142,6 +146,9 @@ func (i *InputReplyToMessage) Zero() bool { if !(i.TodoItemID == 0) { return false } + if !(i.PollOption == nil) { + return false + } return true } @@ -165,6 +172,7 @@ func (i *InputReplyToMessage) FillFrom(from interface { GetQuoteOffset() (value int, ok bool) GetMonoforumPeerID() (value InputPeerClass, ok bool) GetTodoItemID() (value int, ok bool) + GetPollOption() (value []byte, ok bool) }) { i.ReplyToMsgID = from.GetReplyToMsgID() if val, ok := from.GetTopMsgID(); ok { @@ -195,6 +203,10 @@ func (i *InputReplyToMessage) FillFrom(from interface { i.TodoItemID = val } + if val, ok := from.GetPollOption(); ok { + i.PollOption = val + } + } // TypeID returns type id in TL schema. @@ -259,6 +271,11 @@ func (i *InputReplyToMessage) TypeInfo() tdp.Type { SchemaName: "todo_item_id", Null: !i.Flags.Has(6), }, + { + Name: "PollOption", + SchemaName: "poll_option", + Null: !i.Flags.Has(7), + }, } return typ } @@ -286,12 +303,15 @@ func (i *InputReplyToMessage) SetFlags() { if !(i.TodoItemID == 0) { i.Flags.Set(6) } + if !(i.PollOption == nil) { + i.Flags.Set(7) + } } // Encode implements bin.Encoder. func (i *InputReplyToMessage) Encode(b *bin.Buffer) error { if i == nil { - return fmt.Errorf("can't encode inputReplyToMessage#869fbe10 as nil") + return fmt.Errorf("can't encode inputReplyToMessage#3bd4b7c2 as nil") } b.PutID(InputReplyToMessageTypeID) return i.EncodeBare(b) @@ -300,11 +320,11 @@ func (i *InputReplyToMessage) Encode(b *bin.Buffer) error { // EncodeBare implements bin.BareEncoder. func (i *InputReplyToMessage) EncodeBare(b *bin.Buffer) error { if i == nil { - return fmt.Errorf("can't encode inputReplyToMessage#869fbe10 as nil") + return fmt.Errorf("can't encode inputReplyToMessage#3bd4b7c2 as nil") } i.SetFlags() if err := i.Flags.Encode(b); err != nil { - return fmt.Errorf("unable to encode inputReplyToMessage#869fbe10: field flags: %w", err) + return fmt.Errorf("unable to encode inputReplyToMessage#3bd4b7c2: field flags: %w", err) } b.PutInt(i.ReplyToMsgID) if i.Flags.Has(0) { @@ -312,10 +332,10 @@ func (i *InputReplyToMessage) EncodeBare(b *bin.Buffer) error { } if i.Flags.Has(1) { if i.ReplyToPeerID == nil { - return fmt.Errorf("unable to encode inputReplyToMessage#869fbe10: field reply_to_peer_id is nil") + return fmt.Errorf("unable to encode inputReplyToMessage#3bd4b7c2: field reply_to_peer_id is nil") } if err := i.ReplyToPeerID.Encode(b); err != nil { - return fmt.Errorf("unable to encode inputReplyToMessage#869fbe10: field reply_to_peer_id: %w", err) + return fmt.Errorf("unable to encode inputReplyToMessage#3bd4b7c2: field reply_to_peer_id: %w", err) } } if i.Flags.Has(2) { @@ -325,10 +345,10 @@ func (i *InputReplyToMessage) EncodeBare(b *bin.Buffer) error { b.PutVectorHeader(len(i.QuoteEntities)) for idx, v := range i.QuoteEntities { if v == nil { - return fmt.Errorf("unable to encode inputReplyToMessage#869fbe10: field quote_entities element with index %d is nil", idx) + return fmt.Errorf("unable to encode inputReplyToMessage#3bd4b7c2: field quote_entities element with index %d is nil", idx) } if err := v.Encode(b); err != nil { - return fmt.Errorf("unable to encode inputReplyToMessage#869fbe10: field quote_entities element with index %d: %w", idx, err) + return fmt.Errorf("unable to encode inputReplyToMessage#3bd4b7c2: field quote_entities element with index %d: %w", idx, err) } } } @@ -337,25 +357,28 @@ func (i *InputReplyToMessage) EncodeBare(b *bin.Buffer) error { } if i.Flags.Has(5) { if i.MonoforumPeerID == nil { - return fmt.Errorf("unable to encode inputReplyToMessage#869fbe10: field monoforum_peer_id is nil") + return fmt.Errorf("unable to encode inputReplyToMessage#3bd4b7c2: field monoforum_peer_id is nil") } if err := i.MonoforumPeerID.Encode(b); err != nil { - return fmt.Errorf("unable to encode inputReplyToMessage#869fbe10: field monoforum_peer_id: %w", err) + return fmt.Errorf("unable to encode inputReplyToMessage#3bd4b7c2: field monoforum_peer_id: %w", err) } } if i.Flags.Has(6) { b.PutInt(i.TodoItemID) } + if i.Flags.Has(7) { + b.PutBytes(i.PollOption) + } return nil } // Decode implements bin.Decoder. func (i *InputReplyToMessage) Decode(b *bin.Buffer) error { if i == nil { - return fmt.Errorf("can't decode inputReplyToMessage#869fbe10 to nil") + return fmt.Errorf("can't decode inputReplyToMessage#3bd4b7c2 to nil") } if err := b.ConsumeID(InputReplyToMessageTypeID); err != nil { - return fmt.Errorf("unable to decode inputReplyToMessage#869fbe10: %w", err) + return fmt.Errorf("unable to decode inputReplyToMessage#3bd4b7c2: %w", err) } return i.DecodeBare(b) } @@ -363,45 +386,45 @@ func (i *InputReplyToMessage) Decode(b *bin.Buffer) error { // DecodeBare implements bin.BareDecoder. func (i *InputReplyToMessage) DecodeBare(b *bin.Buffer) error { if i == nil { - return fmt.Errorf("can't decode inputReplyToMessage#869fbe10 to nil") + return fmt.Errorf("can't decode inputReplyToMessage#3bd4b7c2 to nil") } { if err := i.Flags.Decode(b); err != nil { - return fmt.Errorf("unable to decode inputReplyToMessage#869fbe10: field flags: %w", err) + return fmt.Errorf("unable to decode inputReplyToMessage#3bd4b7c2: field flags: %w", err) } } { value, err := b.Int() if err != nil { - return fmt.Errorf("unable to decode inputReplyToMessage#869fbe10: field reply_to_msg_id: %w", err) + return fmt.Errorf("unable to decode inputReplyToMessage#3bd4b7c2: field reply_to_msg_id: %w", err) } i.ReplyToMsgID = value } if i.Flags.Has(0) { value, err := b.Int() if err != nil { - return fmt.Errorf("unable to decode inputReplyToMessage#869fbe10: field top_msg_id: %w", err) + return fmt.Errorf("unable to decode inputReplyToMessage#3bd4b7c2: field top_msg_id: %w", err) } i.TopMsgID = value } if i.Flags.Has(1) { value, err := DecodeInputPeer(b) if err != nil { - return fmt.Errorf("unable to decode inputReplyToMessage#869fbe10: field reply_to_peer_id: %w", err) + return fmt.Errorf("unable to decode inputReplyToMessage#3bd4b7c2: field reply_to_peer_id: %w", err) } i.ReplyToPeerID = value } if i.Flags.Has(2) { value, err := b.String() if err != nil { - return fmt.Errorf("unable to decode inputReplyToMessage#869fbe10: field quote_text: %w", err) + return fmt.Errorf("unable to decode inputReplyToMessage#3bd4b7c2: field quote_text: %w", err) } i.QuoteText = value } if i.Flags.Has(3) { headerLen, err := b.VectorHeader() if err != nil { - return fmt.Errorf("unable to decode inputReplyToMessage#869fbe10: field quote_entities: %w", err) + return fmt.Errorf("unable to decode inputReplyToMessage#3bd4b7c2: field quote_entities: %w", err) } if headerLen > 0 { @@ -410,7 +433,7 @@ func (i *InputReplyToMessage) DecodeBare(b *bin.Buffer) error { for idx := 0; idx < headerLen; idx++ { value, err := DecodeMessageEntity(b) if err != nil { - return fmt.Errorf("unable to decode inputReplyToMessage#869fbe10: field quote_entities: %w", err) + return fmt.Errorf("unable to decode inputReplyToMessage#3bd4b7c2: field quote_entities: %w", err) } i.QuoteEntities = append(i.QuoteEntities, value) } @@ -418,24 +441,31 @@ func (i *InputReplyToMessage) DecodeBare(b *bin.Buffer) error { if i.Flags.Has(4) { value, err := b.Int() if err != nil { - return fmt.Errorf("unable to decode inputReplyToMessage#869fbe10: field quote_offset: %w", err) + return fmt.Errorf("unable to decode inputReplyToMessage#3bd4b7c2: field quote_offset: %w", err) } i.QuoteOffset = value } if i.Flags.Has(5) { value, err := DecodeInputPeer(b) if err != nil { - return fmt.Errorf("unable to decode inputReplyToMessage#869fbe10: field monoforum_peer_id: %w", err) + return fmt.Errorf("unable to decode inputReplyToMessage#3bd4b7c2: field monoforum_peer_id: %w", err) } i.MonoforumPeerID = value } if i.Flags.Has(6) { value, err := b.Int() if err != nil { - return fmt.Errorf("unable to decode inputReplyToMessage#869fbe10: field todo_item_id: %w", err) + return fmt.Errorf("unable to decode inputReplyToMessage#3bd4b7c2: field todo_item_id: %w", err) } i.TodoItemID = value } + if i.Flags.Has(7) { + value, err := b.Bytes() + if err != nil { + return fmt.Errorf("unable to decode inputReplyToMessage#3bd4b7c2: field poll_option: %w", err) + } + i.PollOption = value + } return nil } @@ -573,6 +603,24 @@ func (i *InputReplyToMessage) GetTodoItemID() (value int, ok bool) { return i.TodoItemID, true } +// SetPollOption sets value of PollOption conditional field. +func (i *InputReplyToMessage) SetPollOption(value []byte) { + i.Flags.Set(7) + i.PollOption = value +} + +// GetPollOption returns value of PollOption conditional field and +// boolean which is true if field was set. +func (i *InputReplyToMessage) GetPollOption() (value []byte, ok bool) { + if i == nil { + return + } + if !i.Flags.Has(7) { + return value, false + } + return i.PollOption, true +} + // MapQuoteEntities returns field QuoteEntities wrapped in MessageEntityClassArray helper. func (i *InputReplyToMessage) MapQuoteEntities() (value MessageEntityClassArray, ok bool) { if !i.Flags.Has(3) { @@ -905,7 +953,7 @@ const InputReplyToClassName = "InputReplyTo" // panic(err) // } // switch v := g.(type) { -// case *tg.InputReplyToMessage: // inputReplyToMessage#869fbe10 +// case *tg.InputReplyToMessage: // inputReplyToMessage#3bd4b7c2 // case *tg.InputReplyToStory: // inputReplyToStory#5881323a // case *tg.InputReplyToMonoForum: // inputReplyToMonoForum#69d66c45 // default: panic(v) @@ -937,7 +985,7 @@ func DecodeInputReplyTo(buf *bin.Buffer) (InputReplyToClass, error) { } switch id { case InputReplyToMessageTypeID: - // Decoding inputReplyToMessage#869fbe10. + // Decoding inputReplyToMessage#3bd4b7c2. v := InputReplyToMessage{} if err := v.Decode(buf); err != nil { return nil, fmt.Errorf("unable to decode InputReplyToClass: %w", err) diff --git a/pkg/gotd/tg/tl_message_action_gen.go b/pkg/gotd/tg/tl_message_action_gen.go index 47fd2272..52c5af7c 100644 --- a/pkg/gotd/tg/tl_message_action_gen.go +++ b/pkg/gotd/tg/tl_message_action_gen.go @@ -14774,6 +14774,418 @@ func (m *MessageActionNoForwardsRequest) GetNewValue() (value bool) { return m.NewValue } +// MessageActionPollAppendAnswer represents TL type `messageActionPollAppendAnswer#9da1cd6c`. +// +// See https://core.telegram.org/constructor/messageActionPollAppendAnswer for reference. +type MessageActionPollAppendAnswer struct { + // Answer field of MessageActionPollAppendAnswer. + Answer PollAnswerClass +} + +// MessageActionPollAppendAnswerTypeID is TL type id of MessageActionPollAppendAnswer. +const MessageActionPollAppendAnswerTypeID = 0x9da1cd6c + +// construct implements constructor of MessageActionClass. +func (m MessageActionPollAppendAnswer) construct() MessageActionClass { return &m } + +// Ensuring interfaces in compile-time for MessageActionPollAppendAnswer. +var ( + _ bin.Encoder = &MessageActionPollAppendAnswer{} + _ bin.Decoder = &MessageActionPollAppendAnswer{} + _ bin.BareEncoder = &MessageActionPollAppendAnswer{} + _ bin.BareDecoder = &MessageActionPollAppendAnswer{} + + _ MessageActionClass = &MessageActionPollAppendAnswer{} +) + +func (m *MessageActionPollAppendAnswer) Zero() bool { + if m == nil { + return true + } + if !(m.Answer == nil) { + return false + } + + return true +} + +// String implements fmt.Stringer. +func (m *MessageActionPollAppendAnswer) String() string { + if m == nil { + return "MessageActionPollAppendAnswer(nil)" + } + type Alias MessageActionPollAppendAnswer + return fmt.Sprintf("MessageActionPollAppendAnswer%+v", Alias(*m)) +} + +// FillFrom fills MessageActionPollAppendAnswer from given interface. +func (m *MessageActionPollAppendAnswer) FillFrom(from interface { + GetAnswer() (value PollAnswerClass) +}) { + m.Answer = from.GetAnswer() +} + +// TypeID returns type id in TL schema. +// +// See https://core.telegram.org/mtproto/TL-tl#remarks. +func (*MessageActionPollAppendAnswer) TypeID() uint32 { + return MessageActionPollAppendAnswerTypeID +} + +// TypeName returns name of type in TL schema. +func (*MessageActionPollAppendAnswer) TypeName() string { + return "messageActionPollAppendAnswer" +} + +// TypeInfo returns info about TL type. +func (m *MessageActionPollAppendAnswer) TypeInfo() tdp.Type { + typ := tdp.Type{ + Name: "messageActionPollAppendAnswer", + ID: MessageActionPollAppendAnswerTypeID, + } + if m == nil { + typ.Null = true + return typ + } + typ.Fields = []tdp.Field{ + { + Name: "Answer", + SchemaName: "answer", + }, + } + return typ +} + +// Encode implements bin.Encoder. +func (m *MessageActionPollAppendAnswer) Encode(b *bin.Buffer) error { + if m == nil { + return fmt.Errorf("can't encode messageActionPollAppendAnswer#9da1cd6c as nil") + } + b.PutID(MessageActionPollAppendAnswerTypeID) + return m.EncodeBare(b) +} + +// EncodeBare implements bin.BareEncoder. +func (m *MessageActionPollAppendAnswer) EncodeBare(b *bin.Buffer) error { + if m == nil { + return fmt.Errorf("can't encode messageActionPollAppendAnswer#9da1cd6c as nil") + } + if m.Answer == nil { + return fmt.Errorf("unable to encode messageActionPollAppendAnswer#9da1cd6c: field answer is nil") + } + if err := m.Answer.Encode(b); err != nil { + return fmt.Errorf("unable to encode messageActionPollAppendAnswer#9da1cd6c: field answer: %w", err) + } + return nil +} + +// Decode implements bin.Decoder. +func (m *MessageActionPollAppendAnswer) Decode(b *bin.Buffer) error { + if m == nil { + return fmt.Errorf("can't decode messageActionPollAppendAnswer#9da1cd6c to nil") + } + if err := b.ConsumeID(MessageActionPollAppendAnswerTypeID); err != nil { + return fmt.Errorf("unable to decode messageActionPollAppendAnswer#9da1cd6c: %w", err) + } + return m.DecodeBare(b) +} + +// DecodeBare implements bin.BareDecoder. +func (m *MessageActionPollAppendAnswer) DecodeBare(b *bin.Buffer) error { + if m == nil { + return fmt.Errorf("can't decode messageActionPollAppendAnswer#9da1cd6c to nil") + } + { + value, err := DecodePollAnswer(b) + if err != nil { + return fmt.Errorf("unable to decode messageActionPollAppendAnswer#9da1cd6c: field answer: %w", err) + } + m.Answer = value + } + return nil +} + +// GetAnswer returns value of Answer field. +func (m *MessageActionPollAppendAnswer) GetAnswer() (value PollAnswerClass) { + if m == nil { + return + } + return m.Answer +} + +// MessageActionPollDeleteAnswer represents TL type `messageActionPollDeleteAnswer#399674dc`. +// +// See https://core.telegram.org/constructor/messageActionPollDeleteAnswer for reference. +type MessageActionPollDeleteAnswer struct { + // Answer field of MessageActionPollDeleteAnswer. + Answer PollAnswerClass +} + +// MessageActionPollDeleteAnswerTypeID is TL type id of MessageActionPollDeleteAnswer. +const MessageActionPollDeleteAnswerTypeID = 0x399674dc + +// construct implements constructor of MessageActionClass. +func (m MessageActionPollDeleteAnswer) construct() MessageActionClass { return &m } + +// Ensuring interfaces in compile-time for MessageActionPollDeleteAnswer. +var ( + _ bin.Encoder = &MessageActionPollDeleteAnswer{} + _ bin.Decoder = &MessageActionPollDeleteAnswer{} + _ bin.BareEncoder = &MessageActionPollDeleteAnswer{} + _ bin.BareDecoder = &MessageActionPollDeleteAnswer{} + + _ MessageActionClass = &MessageActionPollDeleteAnswer{} +) + +func (m *MessageActionPollDeleteAnswer) Zero() bool { + if m == nil { + return true + } + if !(m.Answer == nil) { + return false + } + + return true +} + +// String implements fmt.Stringer. +func (m *MessageActionPollDeleteAnswer) String() string { + if m == nil { + return "MessageActionPollDeleteAnswer(nil)" + } + type Alias MessageActionPollDeleteAnswer + return fmt.Sprintf("MessageActionPollDeleteAnswer%+v", Alias(*m)) +} + +// FillFrom fills MessageActionPollDeleteAnswer from given interface. +func (m *MessageActionPollDeleteAnswer) FillFrom(from interface { + GetAnswer() (value PollAnswerClass) +}) { + m.Answer = from.GetAnswer() +} + +// TypeID returns type id in TL schema. +// +// See https://core.telegram.org/mtproto/TL-tl#remarks. +func (*MessageActionPollDeleteAnswer) TypeID() uint32 { + return MessageActionPollDeleteAnswerTypeID +} + +// TypeName returns name of type in TL schema. +func (*MessageActionPollDeleteAnswer) TypeName() string { + return "messageActionPollDeleteAnswer" +} + +// TypeInfo returns info about TL type. +func (m *MessageActionPollDeleteAnswer) TypeInfo() tdp.Type { + typ := tdp.Type{ + Name: "messageActionPollDeleteAnswer", + ID: MessageActionPollDeleteAnswerTypeID, + } + if m == nil { + typ.Null = true + return typ + } + typ.Fields = []tdp.Field{ + { + Name: "Answer", + SchemaName: "answer", + }, + } + return typ +} + +// Encode implements bin.Encoder. +func (m *MessageActionPollDeleteAnswer) Encode(b *bin.Buffer) error { + if m == nil { + return fmt.Errorf("can't encode messageActionPollDeleteAnswer#399674dc as nil") + } + b.PutID(MessageActionPollDeleteAnswerTypeID) + return m.EncodeBare(b) +} + +// EncodeBare implements bin.BareEncoder. +func (m *MessageActionPollDeleteAnswer) EncodeBare(b *bin.Buffer) error { + if m == nil { + return fmt.Errorf("can't encode messageActionPollDeleteAnswer#399674dc as nil") + } + if m.Answer == nil { + return fmt.Errorf("unable to encode messageActionPollDeleteAnswer#399674dc: field answer is nil") + } + if err := m.Answer.Encode(b); err != nil { + return fmt.Errorf("unable to encode messageActionPollDeleteAnswer#399674dc: field answer: %w", err) + } + return nil +} + +// Decode implements bin.Decoder. +func (m *MessageActionPollDeleteAnswer) Decode(b *bin.Buffer) error { + if m == nil { + return fmt.Errorf("can't decode messageActionPollDeleteAnswer#399674dc to nil") + } + if err := b.ConsumeID(MessageActionPollDeleteAnswerTypeID); err != nil { + return fmt.Errorf("unable to decode messageActionPollDeleteAnswer#399674dc: %w", err) + } + return m.DecodeBare(b) +} + +// DecodeBare implements bin.BareDecoder. +func (m *MessageActionPollDeleteAnswer) DecodeBare(b *bin.Buffer) error { + if m == nil { + return fmt.Errorf("can't decode messageActionPollDeleteAnswer#399674dc to nil") + } + { + value, err := DecodePollAnswer(b) + if err != nil { + return fmt.Errorf("unable to decode messageActionPollDeleteAnswer#399674dc: field answer: %w", err) + } + m.Answer = value + } + return nil +} + +// GetAnswer returns value of Answer field. +func (m *MessageActionPollDeleteAnswer) GetAnswer() (value PollAnswerClass) { + if m == nil { + return + } + return m.Answer +} + +// MessageActionManagedBotCreated represents TL type `messageActionManagedBotCreated#16605e3e`. +// +// See https://core.telegram.org/constructor/messageActionManagedBotCreated for reference. +type MessageActionManagedBotCreated struct { + // BotID field of MessageActionManagedBotCreated. + BotID int64 +} + +// MessageActionManagedBotCreatedTypeID is TL type id of MessageActionManagedBotCreated. +const MessageActionManagedBotCreatedTypeID = 0x16605e3e + +// construct implements constructor of MessageActionClass. +func (m MessageActionManagedBotCreated) construct() MessageActionClass { return &m } + +// Ensuring interfaces in compile-time for MessageActionManagedBotCreated. +var ( + _ bin.Encoder = &MessageActionManagedBotCreated{} + _ bin.Decoder = &MessageActionManagedBotCreated{} + _ bin.BareEncoder = &MessageActionManagedBotCreated{} + _ bin.BareDecoder = &MessageActionManagedBotCreated{} + + _ MessageActionClass = &MessageActionManagedBotCreated{} +) + +func (m *MessageActionManagedBotCreated) Zero() bool { + if m == nil { + return true + } + if !(m.BotID == 0) { + return false + } + + return true +} + +// String implements fmt.Stringer. +func (m *MessageActionManagedBotCreated) String() string { + if m == nil { + return "MessageActionManagedBotCreated(nil)" + } + type Alias MessageActionManagedBotCreated + return fmt.Sprintf("MessageActionManagedBotCreated%+v", Alias(*m)) +} + +// FillFrom fills MessageActionManagedBotCreated from given interface. +func (m *MessageActionManagedBotCreated) FillFrom(from interface { + GetBotID() (value int64) +}) { + m.BotID = from.GetBotID() +} + +// TypeID returns type id in TL schema. +// +// See https://core.telegram.org/mtproto/TL-tl#remarks. +func (*MessageActionManagedBotCreated) TypeID() uint32 { + return MessageActionManagedBotCreatedTypeID +} + +// TypeName returns name of type in TL schema. +func (*MessageActionManagedBotCreated) TypeName() string { + return "messageActionManagedBotCreated" +} + +// TypeInfo returns info about TL type. +func (m *MessageActionManagedBotCreated) TypeInfo() tdp.Type { + typ := tdp.Type{ + Name: "messageActionManagedBotCreated", + ID: MessageActionManagedBotCreatedTypeID, + } + if m == nil { + typ.Null = true + return typ + } + typ.Fields = []tdp.Field{ + { + Name: "BotID", + SchemaName: "bot_id", + }, + } + return typ +} + +// Encode implements bin.Encoder. +func (m *MessageActionManagedBotCreated) Encode(b *bin.Buffer) error { + if m == nil { + return fmt.Errorf("can't encode messageActionManagedBotCreated#16605e3e as nil") + } + b.PutID(MessageActionManagedBotCreatedTypeID) + return m.EncodeBare(b) +} + +// EncodeBare implements bin.BareEncoder. +func (m *MessageActionManagedBotCreated) EncodeBare(b *bin.Buffer) error { + if m == nil { + return fmt.Errorf("can't encode messageActionManagedBotCreated#16605e3e as nil") + } + b.PutLong(m.BotID) + return nil +} + +// Decode implements bin.Decoder. +func (m *MessageActionManagedBotCreated) Decode(b *bin.Buffer) error { + if m == nil { + return fmt.Errorf("can't decode messageActionManagedBotCreated#16605e3e to nil") + } + if err := b.ConsumeID(MessageActionManagedBotCreatedTypeID); err != nil { + return fmt.Errorf("unable to decode messageActionManagedBotCreated#16605e3e: %w", err) + } + return m.DecodeBare(b) +} + +// DecodeBare implements bin.BareDecoder. +func (m *MessageActionManagedBotCreated) DecodeBare(b *bin.Buffer) error { + if m == nil { + return fmt.Errorf("can't decode messageActionManagedBotCreated#16605e3e to nil") + } + { + value, err := b.Long() + if err != nil { + return fmt.Errorf("unable to decode messageActionManagedBotCreated#16605e3e: field bot_id: %w", err) + } + m.BotID = value + } + return nil +} + +// GetBotID returns value of BotID field. +func (m *MessageActionManagedBotCreated) GetBotID() (value int64) { + if m == nil { + return + } + return m.BotID +} + // MessageActionClassName is schema name of MessageActionClass. const MessageActionClassName = "MessageAction" @@ -14852,6 +15264,9 @@ const MessageActionClassName = "MessageAction" // case *tg.MessageActionChangeCreator: // messageActionChangeCreator#e188503b // case *tg.MessageActionNoForwardsToggle: // messageActionNoForwardsToggle#bf7d6572 // case *tg.MessageActionNoForwardsRequest: // messageActionNoForwardsRequest#3e2793ba +// case *tg.MessageActionPollAppendAnswer: // messageActionPollAppendAnswer#9da1cd6c +// case *tg.MessageActionPollDeleteAnswer: // messageActionPollDeleteAnswer#399674dc +// case *tg.MessageActionManagedBotCreated: // messageActionManagedBotCreated#16605e3e // default: panic(v) // } type MessageActionClass interface { @@ -15328,6 +15743,27 @@ func DecodeMessageAction(buf *bin.Buffer) (MessageActionClass, error) { return nil, fmt.Errorf("unable to decode MessageActionClass: %w", err) } return &v, nil + case MessageActionPollAppendAnswerTypeID: + // Decoding messageActionPollAppendAnswer#9da1cd6c. + v := MessageActionPollAppendAnswer{} + if err := v.Decode(buf); err != nil { + return nil, fmt.Errorf("unable to decode MessageActionClass: %w", err) + } + return &v, nil + case MessageActionPollDeleteAnswerTypeID: + // Decoding messageActionPollDeleteAnswer#399674dc. + v := MessageActionPollDeleteAnswer{} + if err := v.Decode(buf); err != nil { + return nil, fmt.Errorf("unable to decode MessageActionClass: %w", err) + } + return &v, nil + case MessageActionManagedBotCreatedTypeID: + // Decoding messageActionManagedBotCreated#16605e3e. + v := MessageActionManagedBotCreated{} + if err := v.Decode(buf); err != nil { + return nil, fmt.Errorf("unable to decode MessageActionClass: %w", err) + } + return &v, nil default: return nil, fmt.Errorf("unable to decode MessageActionClass: %w", bin.NewUnexpectedID(id)) } diff --git a/pkg/gotd/tg/tl_message_action_slices_gen.go b/pkg/gotd/tg/tl_message_action_slices_gen.go index a5586e4b..186b68f2 100644 --- a/pkg/gotd/tg/tl_message_action_slices_gen.go +++ b/pkg/gotd/tg/tl_message_action_slices_gen.go @@ -857,6 +857,45 @@ func (s MessageActionClassArray) AsMessageActionNoForwardsRequest() (to MessageA return to } +// AsMessageActionPollAppendAnswer returns copy with only MessageActionPollAppendAnswer constructors. +func (s MessageActionClassArray) AsMessageActionPollAppendAnswer() (to MessageActionPollAppendAnswerArray) { + for _, elem := range s { + value, ok := elem.(*MessageActionPollAppendAnswer) + if !ok { + continue + } + to = append(to, *value) + } + + return to +} + +// AsMessageActionPollDeleteAnswer returns copy with only MessageActionPollDeleteAnswer constructors. +func (s MessageActionClassArray) AsMessageActionPollDeleteAnswer() (to MessageActionPollDeleteAnswerArray) { + for _, elem := range s { + value, ok := elem.(*MessageActionPollDeleteAnswer) + if !ok { + continue + } + to = append(to, *value) + } + + return to +} + +// AsMessageActionManagedBotCreated returns copy with only MessageActionManagedBotCreated constructors. +func (s MessageActionClassArray) AsMessageActionManagedBotCreated() (to MessageActionManagedBotCreatedArray) { + for _, elem := range s { + value, ok := elem.(*MessageActionManagedBotCreated) + if !ok { + continue + } + to = append(to, *value) + } + + return to +} + // MessageActionChatCreateArray is adapter for slice of MessageActionChatCreate. type MessageActionChatCreateArray []MessageActionChatCreate @@ -5530,3 +5569,249 @@ func (s *MessageActionNoForwardsRequestArray) Pop() (v MessageActionNoForwardsRe return v, true } + +// MessageActionPollAppendAnswerArray is adapter for slice of MessageActionPollAppendAnswer. +type MessageActionPollAppendAnswerArray []MessageActionPollAppendAnswer + +// Sort sorts slice of MessageActionPollAppendAnswer. +func (s MessageActionPollAppendAnswerArray) Sort(less func(a, b MessageActionPollAppendAnswer) bool) MessageActionPollAppendAnswerArray { + sort.Slice(s, func(i, j int) bool { + return less(s[i], s[j]) + }) + return s +} + +// SortStable sorts slice of MessageActionPollAppendAnswer. +func (s MessageActionPollAppendAnswerArray) SortStable(less func(a, b MessageActionPollAppendAnswer) bool) MessageActionPollAppendAnswerArray { + sort.SliceStable(s, func(i, j int) bool { + return less(s[i], s[j]) + }) + return s +} + +// Retain filters in-place slice of MessageActionPollAppendAnswer. +func (s MessageActionPollAppendAnswerArray) Retain(keep func(x MessageActionPollAppendAnswer) bool) MessageActionPollAppendAnswerArray { + n := 0 + for _, x := range s { + if keep(x) { + s[n] = x + n++ + } + } + s = s[:n] + + return s +} + +// First returns first element of slice (if exists). +func (s MessageActionPollAppendAnswerArray) First() (v MessageActionPollAppendAnswer, ok bool) { + if len(s) < 1 { + return + } + return s[0], true +} + +// Last returns last element of slice (if exists). +func (s MessageActionPollAppendAnswerArray) Last() (v MessageActionPollAppendAnswer, ok bool) { + if len(s) < 1 { + return + } + return s[len(s)-1], true +} + +// PopFirst returns first element of slice (if exists) and deletes it. +func (s *MessageActionPollAppendAnswerArray) PopFirst() (v MessageActionPollAppendAnswer, ok bool) { + if s == nil || len(*s) < 1 { + return + } + + a := *s + v = a[0] + + // Delete by index from SliceTricks. + copy(a[0:], a[1:]) + var zero MessageActionPollAppendAnswer + a[len(a)-1] = zero + a = a[:len(a)-1] + *s = a + + return v, true +} + +// Pop returns last element of slice (if exists) and deletes it. +func (s *MessageActionPollAppendAnswerArray) Pop() (v MessageActionPollAppendAnswer, ok bool) { + if s == nil || len(*s) < 1 { + return + } + + a := *s + v = a[len(a)-1] + a = a[:len(a)-1] + *s = a + + return v, true +} + +// MessageActionPollDeleteAnswerArray is adapter for slice of MessageActionPollDeleteAnswer. +type MessageActionPollDeleteAnswerArray []MessageActionPollDeleteAnswer + +// Sort sorts slice of MessageActionPollDeleteAnswer. +func (s MessageActionPollDeleteAnswerArray) Sort(less func(a, b MessageActionPollDeleteAnswer) bool) MessageActionPollDeleteAnswerArray { + sort.Slice(s, func(i, j int) bool { + return less(s[i], s[j]) + }) + return s +} + +// SortStable sorts slice of MessageActionPollDeleteAnswer. +func (s MessageActionPollDeleteAnswerArray) SortStable(less func(a, b MessageActionPollDeleteAnswer) bool) MessageActionPollDeleteAnswerArray { + sort.SliceStable(s, func(i, j int) bool { + return less(s[i], s[j]) + }) + return s +} + +// Retain filters in-place slice of MessageActionPollDeleteAnswer. +func (s MessageActionPollDeleteAnswerArray) Retain(keep func(x MessageActionPollDeleteAnswer) bool) MessageActionPollDeleteAnswerArray { + n := 0 + for _, x := range s { + if keep(x) { + s[n] = x + n++ + } + } + s = s[:n] + + return s +} + +// First returns first element of slice (if exists). +func (s MessageActionPollDeleteAnswerArray) First() (v MessageActionPollDeleteAnswer, ok bool) { + if len(s) < 1 { + return + } + return s[0], true +} + +// Last returns last element of slice (if exists). +func (s MessageActionPollDeleteAnswerArray) Last() (v MessageActionPollDeleteAnswer, ok bool) { + if len(s) < 1 { + return + } + return s[len(s)-1], true +} + +// PopFirst returns first element of slice (if exists) and deletes it. +func (s *MessageActionPollDeleteAnswerArray) PopFirst() (v MessageActionPollDeleteAnswer, ok bool) { + if s == nil || len(*s) < 1 { + return + } + + a := *s + v = a[0] + + // Delete by index from SliceTricks. + copy(a[0:], a[1:]) + var zero MessageActionPollDeleteAnswer + a[len(a)-1] = zero + a = a[:len(a)-1] + *s = a + + return v, true +} + +// Pop returns last element of slice (if exists) and deletes it. +func (s *MessageActionPollDeleteAnswerArray) Pop() (v MessageActionPollDeleteAnswer, ok bool) { + if s == nil || len(*s) < 1 { + return + } + + a := *s + v = a[len(a)-1] + a = a[:len(a)-1] + *s = a + + return v, true +} + +// MessageActionManagedBotCreatedArray is adapter for slice of MessageActionManagedBotCreated. +type MessageActionManagedBotCreatedArray []MessageActionManagedBotCreated + +// Sort sorts slice of MessageActionManagedBotCreated. +func (s MessageActionManagedBotCreatedArray) Sort(less func(a, b MessageActionManagedBotCreated) bool) MessageActionManagedBotCreatedArray { + sort.Slice(s, func(i, j int) bool { + return less(s[i], s[j]) + }) + return s +} + +// SortStable sorts slice of MessageActionManagedBotCreated. +func (s MessageActionManagedBotCreatedArray) SortStable(less func(a, b MessageActionManagedBotCreated) bool) MessageActionManagedBotCreatedArray { + sort.SliceStable(s, func(i, j int) bool { + return less(s[i], s[j]) + }) + return s +} + +// Retain filters in-place slice of MessageActionManagedBotCreated. +func (s MessageActionManagedBotCreatedArray) Retain(keep func(x MessageActionManagedBotCreated) bool) MessageActionManagedBotCreatedArray { + n := 0 + for _, x := range s { + if keep(x) { + s[n] = x + n++ + } + } + s = s[:n] + + return s +} + +// First returns first element of slice (if exists). +func (s MessageActionManagedBotCreatedArray) First() (v MessageActionManagedBotCreated, ok bool) { + if len(s) < 1 { + return + } + return s[0], true +} + +// Last returns last element of slice (if exists). +func (s MessageActionManagedBotCreatedArray) Last() (v MessageActionManagedBotCreated, ok bool) { + if len(s) < 1 { + return + } + return s[len(s)-1], true +} + +// PopFirst returns first element of slice (if exists) and deletes it. +func (s *MessageActionManagedBotCreatedArray) PopFirst() (v MessageActionManagedBotCreated, ok bool) { + if s == nil || len(*s) < 1 { + return + } + + a := *s + v = a[0] + + // Delete by index from SliceTricks. + copy(a[0:], a[1:]) + var zero MessageActionManagedBotCreated + a[len(a)-1] = zero + a = a[:len(a)-1] + *s = a + + return v, true +} + +// Pop returns last element of slice (if exists) and deletes it. +func (s *MessageActionManagedBotCreatedArray) Pop() (v MessageActionManagedBotCreated, ok bool) { + if s == nil || len(*s) < 1 { + return + } + + a := *s + v = a[len(a)-1] + a = a[:len(a)-1] + *s = a + + return v, true +} diff --git a/pkg/gotd/tg/tl_message_entity_gen.go b/pkg/gotd/tg/tl_message_entity_gen.go index 1ba0888b..d76657de 100644 --- a/pkg/gotd/tg/tl_message_entity_gen.go +++ b/pkg/gotd/tg/tl_message_entity_gen.go @@ -4217,6 +4217,516 @@ func (m *MessageEntityFormattedDate) GetDate() (value int) { return m.Date } +// MessageEntityDiffInsert represents TL type `messageEntityDiffInsert#71777116`. +// +// See https://core.telegram.org/constructor/messageEntityDiffInsert for reference. +type MessageEntityDiffInsert struct { + // Offset field of MessageEntityDiffInsert. + Offset int + // Length field of MessageEntityDiffInsert. + Length int +} + +// MessageEntityDiffInsertTypeID is TL type id of MessageEntityDiffInsert. +const MessageEntityDiffInsertTypeID = 0x71777116 + +// construct implements constructor of MessageEntityClass. +func (m MessageEntityDiffInsert) construct() MessageEntityClass { return &m } + +// Ensuring interfaces in compile-time for MessageEntityDiffInsert. +var ( + _ bin.Encoder = &MessageEntityDiffInsert{} + _ bin.Decoder = &MessageEntityDiffInsert{} + _ bin.BareEncoder = &MessageEntityDiffInsert{} + _ bin.BareDecoder = &MessageEntityDiffInsert{} + + _ MessageEntityClass = &MessageEntityDiffInsert{} +) + +func (m *MessageEntityDiffInsert) Zero() bool { + if m == nil { + return true + } + if !(m.Offset == 0) { + return false + } + if !(m.Length == 0) { + return false + } + + return true +} + +// String implements fmt.Stringer. +func (m *MessageEntityDiffInsert) String() string { + if m == nil { + return "MessageEntityDiffInsert(nil)" + } + type Alias MessageEntityDiffInsert + return fmt.Sprintf("MessageEntityDiffInsert%+v", Alias(*m)) +} + +// FillFrom fills MessageEntityDiffInsert from given interface. +func (m *MessageEntityDiffInsert) FillFrom(from interface { + GetOffset() (value int) + GetLength() (value int) +}) { + m.Offset = from.GetOffset() + m.Length = from.GetLength() +} + +// TypeID returns type id in TL schema. +// +// See https://core.telegram.org/mtproto/TL-tl#remarks. +func (*MessageEntityDiffInsert) TypeID() uint32 { + return MessageEntityDiffInsertTypeID +} + +// TypeName returns name of type in TL schema. +func (*MessageEntityDiffInsert) TypeName() string { + return "messageEntityDiffInsert" +} + +// TypeInfo returns info about TL type. +func (m *MessageEntityDiffInsert) TypeInfo() tdp.Type { + typ := tdp.Type{ + Name: "messageEntityDiffInsert", + ID: MessageEntityDiffInsertTypeID, + } + if m == nil { + typ.Null = true + return typ + } + typ.Fields = []tdp.Field{ + { + Name: "Offset", + SchemaName: "offset", + }, + { + Name: "Length", + SchemaName: "length", + }, + } + return typ +} + +// Encode implements bin.Encoder. +func (m *MessageEntityDiffInsert) Encode(b *bin.Buffer) error { + if m == nil { + return fmt.Errorf("can't encode messageEntityDiffInsert#71777116 as nil") + } + b.PutID(MessageEntityDiffInsertTypeID) + return m.EncodeBare(b) +} + +// EncodeBare implements bin.BareEncoder. +func (m *MessageEntityDiffInsert) EncodeBare(b *bin.Buffer) error { + if m == nil { + return fmt.Errorf("can't encode messageEntityDiffInsert#71777116 as nil") + } + b.PutInt(m.Offset) + b.PutInt(m.Length) + return nil +} + +// Decode implements bin.Decoder. +func (m *MessageEntityDiffInsert) Decode(b *bin.Buffer) error { + if m == nil { + return fmt.Errorf("can't decode messageEntityDiffInsert#71777116 to nil") + } + if err := b.ConsumeID(MessageEntityDiffInsertTypeID); err != nil { + return fmt.Errorf("unable to decode messageEntityDiffInsert#71777116: %w", err) + } + return m.DecodeBare(b) +} + +// DecodeBare implements bin.BareDecoder. +func (m *MessageEntityDiffInsert) DecodeBare(b *bin.Buffer) error { + if m == nil { + return fmt.Errorf("can't decode messageEntityDiffInsert#71777116 to nil") + } + { + value, err := b.Int() + if err != nil { + return fmt.Errorf("unable to decode messageEntityDiffInsert#71777116: field offset: %w", err) + } + m.Offset = value + } + { + value, err := b.Int() + if err != nil { + return fmt.Errorf("unable to decode messageEntityDiffInsert#71777116: field length: %w", err) + } + m.Length = value + } + return nil +} + +// GetOffset returns value of Offset field. +func (m *MessageEntityDiffInsert) GetOffset() (value int) { + if m == nil { + return + } + return m.Offset +} + +// GetLength returns value of Length field. +func (m *MessageEntityDiffInsert) GetLength() (value int) { + if m == nil { + return + } + return m.Length +} + +// MessageEntityDiffReplace represents TL type `messageEntityDiffReplace#c6c1e5a7`. +// +// See https://core.telegram.org/constructor/messageEntityDiffReplace for reference. +type MessageEntityDiffReplace struct { + // Offset field of MessageEntityDiffReplace. + Offset int + // Length field of MessageEntityDiffReplace. + Length int + // OldText field of MessageEntityDiffReplace. + OldText string +} + +// MessageEntityDiffReplaceTypeID is TL type id of MessageEntityDiffReplace. +const MessageEntityDiffReplaceTypeID = 0xc6c1e5a7 + +// construct implements constructor of MessageEntityClass. +func (m MessageEntityDiffReplace) construct() MessageEntityClass { return &m } + +// Ensuring interfaces in compile-time for MessageEntityDiffReplace. +var ( + _ bin.Encoder = &MessageEntityDiffReplace{} + _ bin.Decoder = &MessageEntityDiffReplace{} + _ bin.BareEncoder = &MessageEntityDiffReplace{} + _ bin.BareDecoder = &MessageEntityDiffReplace{} + + _ MessageEntityClass = &MessageEntityDiffReplace{} +) + +func (m *MessageEntityDiffReplace) Zero() bool { + if m == nil { + return true + } + if !(m.Offset == 0) { + return false + } + if !(m.Length == 0) { + return false + } + if !(m.OldText == "") { + return false + } + + return true +} + +// String implements fmt.Stringer. +func (m *MessageEntityDiffReplace) String() string { + if m == nil { + return "MessageEntityDiffReplace(nil)" + } + type Alias MessageEntityDiffReplace + return fmt.Sprintf("MessageEntityDiffReplace%+v", Alias(*m)) +} + +// FillFrom fills MessageEntityDiffReplace from given interface. +func (m *MessageEntityDiffReplace) FillFrom(from interface { + GetOffset() (value int) + GetLength() (value int) + GetOldText() (value string) +}) { + m.Offset = from.GetOffset() + m.Length = from.GetLength() + m.OldText = from.GetOldText() +} + +// TypeID returns type id in TL schema. +// +// See https://core.telegram.org/mtproto/TL-tl#remarks. +func (*MessageEntityDiffReplace) TypeID() uint32 { + return MessageEntityDiffReplaceTypeID +} + +// TypeName returns name of type in TL schema. +func (*MessageEntityDiffReplace) TypeName() string { + return "messageEntityDiffReplace" +} + +// TypeInfo returns info about TL type. +func (m *MessageEntityDiffReplace) TypeInfo() tdp.Type { + typ := tdp.Type{ + Name: "messageEntityDiffReplace", + ID: MessageEntityDiffReplaceTypeID, + } + if m == nil { + typ.Null = true + return typ + } + typ.Fields = []tdp.Field{ + { + Name: "Offset", + SchemaName: "offset", + }, + { + Name: "Length", + SchemaName: "length", + }, + { + Name: "OldText", + SchemaName: "old_text", + }, + } + return typ +} + +// Encode implements bin.Encoder. +func (m *MessageEntityDiffReplace) Encode(b *bin.Buffer) error { + if m == nil { + return fmt.Errorf("can't encode messageEntityDiffReplace#c6c1e5a7 as nil") + } + b.PutID(MessageEntityDiffReplaceTypeID) + return m.EncodeBare(b) +} + +// EncodeBare implements bin.BareEncoder. +func (m *MessageEntityDiffReplace) EncodeBare(b *bin.Buffer) error { + if m == nil { + return fmt.Errorf("can't encode messageEntityDiffReplace#c6c1e5a7 as nil") + } + b.PutInt(m.Offset) + b.PutInt(m.Length) + b.PutString(m.OldText) + return nil +} + +// Decode implements bin.Decoder. +func (m *MessageEntityDiffReplace) Decode(b *bin.Buffer) error { + if m == nil { + return fmt.Errorf("can't decode messageEntityDiffReplace#c6c1e5a7 to nil") + } + if err := b.ConsumeID(MessageEntityDiffReplaceTypeID); err != nil { + return fmt.Errorf("unable to decode messageEntityDiffReplace#c6c1e5a7: %w", err) + } + return m.DecodeBare(b) +} + +// DecodeBare implements bin.BareDecoder. +func (m *MessageEntityDiffReplace) DecodeBare(b *bin.Buffer) error { + if m == nil { + return fmt.Errorf("can't decode messageEntityDiffReplace#c6c1e5a7 to nil") + } + { + value, err := b.Int() + if err != nil { + return fmt.Errorf("unable to decode messageEntityDiffReplace#c6c1e5a7: field offset: %w", err) + } + m.Offset = value + } + { + value, err := b.Int() + if err != nil { + return fmt.Errorf("unable to decode messageEntityDiffReplace#c6c1e5a7: field length: %w", err) + } + m.Length = value + } + { + value, err := b.String() + if err != nil { + return fmt.Errorf("unable to decode messageEntityDiffReplace#c6c1e5a7: field old_text: %w", err) + } + m.OldText = value + } + return nil +} + +// GetOffset returns value of Offset field. +func (m *MessageEntityDiffReplace) GetOffset() (value int) { + if m == nil { + return + } + return m.Offset +} + +// GetLength returns value of Length field. +func (m *MessageEntityDiffReplace) GetLength() (value int) { + if m == nil { + return + } + return m.Length +} + +// GetOldText returns value of OldText field. +func (m *MessageEntityDiffReplace) GetOldText() (value string) { + if m == nil { + return + } + return m.OldText +} + +// MessageEntityDiffDelete represents TL type `messageEntityDiffDelete#652c1c5`. +// +// See https://core.telegram.org/constructor/messageEntityDiffDelete for reference. +type MessageEntityDiffDelete struct { + // Offset field of MessageEntityDiffDelete. + Offset int + // Length field of MessageEntityDiffDelete. + Length int +} + +// MessageEntityDiffDeleteTypeID is TL type id of MessageEntityDiffDelete. +const MessageEntityDiffDeleteTypeID = 0x652c1c5 + +// construct implements constructor of MessageEntityClass. +func (m MessageEntityDiffDelete) construct() MessageEntityClass { return &m } + +// Ensuring interfaces in compile-time for MessageEntityDiffDelete. +var ( + _ bin.Encoder = &MessageEntityDiffDelete{} + _ bin.Decoder = &MessageEntityDiffDelete{} + _ bin.BareEncoder = &MessageEntityDiffDelete{} + _ bin.BareDecoder = &MessageEntityDiffDelete{} + + _ MessageEntityClass = &MessageEntityDiffDelete{} +) + +func (m *MessageEntityDiffDelete) Zero() bool { + if m == nil { + return true + } + if !(m.Offset == 0) { + return false + } + if !(m.Length == 0) { + return false + } + + return true +} + +// String implements fmt.Stringer. +func (m *MessageEntityDiffDelete) String() string { + if m == nil { + return "MessageEntityDiffDelete(nil)" + } + type Alias MessageEntityDiffDelete + return fmt.Sprintf("MessageEntityDiffDelete%+v", Alias(*m)) +} + +// FillFrom fills MessageEntityDiffDelete from given interface. +func (m *MessageEntityDiffDelete) FillFrom(from interface { + GetOffset() (value int) + GetLength() (value int) +}) { + m.Offset = from.GetOffset() + m.Length = from.GetLength() +} + +// TypeID returns type id in TL schema. +// +// See https://core.telegram.org/mtproto/TL-tl#remarks. +func (*MessageEntityDiffDelete) TypeID() uint32 { + return MessageEntityDiffDeleteTypeID +} + +// TypeName returns name of type in TL schema. +func (*MessageEntityDiffDelete) TypeName() string { + return "messageEntityDiffDelete" +} + +// TypeInfo returns info about TL type. +func (m *MessageEntityDiffDelete) TypeInfo() tdp.Type { + typ := tdp.Type{ + Name: "messageEntityDiffDelete", + ID: MessageEntityDiffDeleteTypeID, + } + if m == nil { + typ.Null = true + return typ + } + typ.Fields = []tdp.Field{ + { + Name: "Offset", + SchemaName: "offset", + }, + { + Name: "Length", + SchemaName: "length", + }, + } + return typ +} + +// Encode implements bin.Encoder. +func (m *MessageEntityDiffDelete) Encode(b *bin.Buffer) error { + if m == nil { + return fmt.Errorf("can't encode messageEntityDiffDelete#652c1c5 as nil") + } + b.PutID(MessageEntityDiffDeleteTypeID) + return m.EncodeBare(b) +} + +// EncodeBare implements bin.BareEncoder. +func (m *MessageEntityDiffDelete) EncodeBare(b *bin.Buffer) error { + if m == nil { + return fmt.Errorf("can't encode messageEntityDiffDelete#652c1c5 as nil") + } + b.PutInt(m.Offset) + b.PutInt(m.Length) + return nil +} + +// Decode implements bin.Decoder. +func (m *MessageEntityDiffDelete) Decode(b *bin.Buffer) error { + if m == nil { + return fmt.Errorf("can't decode messageEntityDiffDelete#652c1c5 to nil") + } + if err := b.ConsumeID(MessageEntityDiffDeleteTypeID); err != nil { + return fmt.Errorf("unable to decode messageEntityDiffDelete#652c1c5: %w", err) + } + return m.DecodeBare(b) +} + +// DecodeBare implements bin.BareDecoder. +func (m *MessageEntityDiffDelete) DecodeBare(b *bin.Buffer) error { + if m == nil { + return fmt.Errorf("can't decode messageEntityDiffDelete#652c1c5 to nil") + } + { + value, err := b.Int() + if err != nil { + return fmt.Errorf("unable to decode messageEntityDiffDelete#652c1c5: field offset: %w", err) + } + m.Offset = value + } + { + value, err := b.Int() + if err != nil { + return fmt.Errorf("unable to decode messageEntityDiffDelete#652c1c5: field length: %w", err) + } + m.Length = value + } + return nil +} + +// GetOffset returns value of Offset field. +func (m *MessageEntityDiffDelete) GetOffset() (value int) { + if m == nil { + return + } + return m.Offset +} + +// GetLength returns value of Length field. +func (m *MessageEntityDiffDelete) GetLength() (value int) { + if m == nil { + return + } + return m.Length +} + // MessageEntityClassName is schema name of MessageEntityClass. const MessageEntityClassName = "MessageEntity" @@ -4253,6 +4763,9 @@ const MessageEntityClassName = "MessageEntity" // case *tg.MessageEntityCustomEmoji: // messageEntityCustomEmoji#c8cf05f8 // case *tg.MessageEntityBlockquote: // messageEntityBlockquote#f1ccaaac // case *tg.MessageEntityFormattedDate: // messageEntityFormattedDate#904ac7c7 +// case *tg.MessageEntityDiffInsert: // messageEntityDiffInsert#71777116 +// case *tg.MessageEntityDiffReplace: // messageEntityDiffReplace#c6c1e5a7 +// case *tg.MessageEntityDiffDelete: // messageEntityDiffDelete#652c1c5 // default: panic(v) // } type MessageEntityClass interface { @@ -4447,6 +4960,27 @@ func DecodeMessageEntity(buf *bin.Buffer) (MessageEntityClass, error) { return nil, fmt.Errorf("unable to decode MessageEntityClass: %w", err) } return &v, nil + case MessageEntityDiffInsertTypeID: + // Decoding messageEntityDiffInsert#71777116. + v := MessageEntityDiffInsert{} + if err := v.Decode(buf); err != nil { + return nil, fmt.Errorf("unable to decode MessageEntityClass: %w", err) + } + return &v, nil + case MessageEntityDiffReplaceTypeID: + // Decoding messageEntityDiffReplace#c6c1e5a7. + v := MessageEntityDiffReplace{} + if err := v.Decode(buf); err != nil { + return nil, fmt.Errorf("unable to decode MessageEntityClass: %w", err) + } + return &v, nil + case MessageEntityDiffDeleteTypeID: + // Decoding messageEntityDiffDelete#652c1c5. + v := MessageEntityDiffDelete{} + if err := v.Decode(buf); err != nil { + return nil, fmt.Errorf("unable to decode MessageEntityClass: %w", err) + } + return &v, nil default: return nil, fmt.Errorf("unable to decode MessageEntityClass: %w", bin.NewUnexpectedID(id)) } diff --git a/pkg/gotd/tg/tl_message_entity_slices_gen.go b/pkg/gotd/tg/tl_message_entity_slices_gen.go index 26bbc38e..01c41c78 100644 --- a/pkg/gotd/tg/tl_message_entity_slices_gen.go +++ b/pkg/gotd/tg/tl_message_entity_slices_gen.go @@ -402,6 +402,45 @@ func (s MessageEntityClassArray) AsMessageEntityFormattedDate() (to MessageEntit return to } +// AsMessageEntityDiffInsert returns copy with only MessageEntityDiffInsert constructors. +func (s MessageEntityClassArray) AsMessageEntityDiffInsert() (to MessageEntityDiffInsertArray) { + for _, elem := range s { + value, ok := elem.(*MessageEntityDiffInsert) + if !ok { + continue + } + to = append(to, *value) + } + + return to +} + +// AsMessageEntityDiffReplace returns copy with only MessageEntityDiffReplace constructors. +func (s MessageEntityClassArray) AsMessageEntityDiffReplace() (to MessageEntityDiffReplaceArray) { + for _, elem := range s { + value, ok := elem.(*MessageEntityDiffReplace) + if !ok { + continue + } + to = append(to, *value) + } + + return to +} + +// AsMessageEntityDiffDelete returns copy with only MessageEntityDiffDelete constructors. +func (s MessageEntityClassArray) AsMessageEntityDiffDelete() (to MessageEntityDiffDeleteArray) { + for _, elem := range s { + value, ok := elem.(*MessageEntityDiffDelete) + if !ok { + continue + } + to = append(to, *value) + } + + return to +} + // MessageEntityUnknownArray is adapter for slice of MessageEntityUnknown. type MessageEntityUnknownArray []MessageEntityUnknown @@ -2219,3 +2258,249 @@ func (s MessageEntityFormattedDateArray) SortStableByDate() MessageEntityFormatt return a.GetDate() < b.GetDate() }) } + +// MessageEntityDiffInsertArray is adapter for slice of MessageEntityDiffInsert. +type MessageEntityDiffInsertArray []MessageEntityDiffInsert + +// Sort sorts slice of MessageEntityDiffInsert. +func (s MessageEntityDiffInsertArray) Sort(less func(a, b MessageEntityDiffInsert) bool) MessageEntityDiffInsertArray { + sort.Slice(s, func(i, j int) bool { + return less(s[i], s[j]) + }) + return s +} + +// SortStable sorts slice of MessageEntityDiffInsert. +func (s MessageEntityDiffInsertArray) SortStable(less func(a, b MessageEntityDiffInsert) bool) MessageEntityDiffInsertArray { + sort.SliceStable(s, func(i, j int) bool { + return less(s[i], s[j]) + }) + return s +} + +// Retain filters in-place slice of MessageEntityDiffInsert. +func (s MessageEntityDiffInsertArray) Retain(keep func(x MessageEntityDiffInsert) bool) MessageEntityDiffInsertArray { + n := 0 + for _, x := range s { + if keep(x) { + s[n] = x + n++ + } + } + s = s[:n] + + return s +} + +// First returns first element of slice (if exists). +func (s MessageEntityDiffInsertArray) First() (v MessageEntityDiffInsert, ok bool) { + if len(s) < 1 { + return + } + return s[0], true +} + +// Last returns last element of slice (if exists). +func (s MessageEntityDiffInsertArray) Last() (v MessageEntityDiffInsert, ok bool) { + if len(s) < 1 { + return + } + return s[len(s)-1], true +} + +// PopFirst returns first element of slice (if exists) and deletes it. +func (s *MessageEntityDiffInsertArray) PopFirst() (v MessageEntityDiffInsert, ok bool) { + if s == nil || len(*s) < 1 { + return + } + + a := *s + v = a[0] + + // Delete by index from SliceTricks. + copy(a[0:], a[1:]) + var zero MessageEntityDiffInsert + a[len(a)-1] = zero + a = a[:len(a)-1] + *s = a + + return v, true +} + +// Pop returns last element of slice (if exists) and deletes it. +func (s *MessageEntityDiffInsertArray) Pop() (v MessageEntityDiffInsert, ok bool) { + if s == nil || len(*s) < 1 { + return + } + + a := *s + v = a[len(a)-1] + a = a[:len(a)-1] + *s = a + + return v, true +} + +// MessageEntityDiffReplaceArray is adapter for slice of MessageEntityDiffReplace. +type MessageEntityDiffReplaceArray []MessageEntityDiffReplace + +// Sort sorts slice of MessageEntityDiffReplace. +func (s MessageEntityDiffReplaceArray) Sort(less func(a, b MessageEntityDiffReplace) bool) MessageEntityDiffReplaceArray { + sort.Slice(s, func(i, j int) bool { + return less(s[i], s[j]) + }) + return s +} + +// SortStable sorts slice of MessageEntityDiffReplace. +func (s MessageEntityDiffReplaceArray) SortStable(less func(a, b MessageEntityDiffReplace) bool) MessageEntityDiffReplaceArray { + sort.SliceStable(s, func(i, j int) bool { + return less(s[i], s[j]) + }) + return s +} + +// Retain filters in-place slice of MessageEntityDiffReplace. +func (s MessageEntityDiffReplaceArray) Retain(keep func(x MessageEntityDiffReplace) bool) MessageEntityDiffReplaceArray { + n := 0 + for _, x := range s { + if keep(x) { + s[n] = x + n++ + } + } + s = s[:n] + + return s +} + +// First returns first element of slice (if exists). +func (s MessageEntityDiffReplaceArray) First() (v MessageEntityDiffReplace, ok bool) { + if len(s) < 1 { + return + } + return s[0], true +} + +// Last returns last element of slice (if exists). +func (s MessageEntityDiffReplaceArray) Last() (v MessageEntityDiffReplace, ok bool) { + if len(s) < 1 { + return + } + return s[len(s)-1], true +} + +// PopFirst returns first element of slice (if exists) and deletes it. +func (s *MessageEntityDiffReplaceArray) PopFirst() (v MessageEntityDiffReplace, ok bool) { + if s == nil || len(*s) < 1 { + return + } + + a := *s + v = a[0] + + // Delete by index from SliceTricks. + copy(a[0:], a[1:]) + var zero MessageEntityDiffReplace + a[len(a)-1] = zero + a = a[:len(a)-1] + *s = a + + return v, true +} + +// Pop returns last element of slice (if exists) and deletes it. +func (s *MessageEntityDiffReplaceArray) Pop() (v MessageEntityDiffReplace, ok bool) { + if s == nil || len(*s) < 1 { + return + } + + a := *s + v = a[len(a)-1] + a = a[:len(a)-1] + *s = a + + return v, true +} + +// MessageEntityDiffDeleteArray is adapter for slice of MessageEntityDiffDelete. +type MessageEntityDiffDeleteArray []MessageEntityDiffDelete + +// Sort sorts slice of MessageEntityDiffDelete. +func (s MessageEntityDiffDeleteArray) Sort(less func(a, b MessageEntityDiffDelete) bool) MessageEntityDiffDeleteArray { + sort.Slice(s, func(i, j int) bool { + return less(s[i], s[j]) + }) + return s +} + +// SortStable sorts slice of MessageEntityDiffDelete. +func (s MessageEntityDiffDeleteArray) SortStable(less func(a, b MessageEntityDiffDelete) bool) MessageEntityDiffDeleteArray { + sort.SliceStable(s, func(i, j int) bool { + return less(s[i], s[j]) + }) + return s +} + +// Retain filters in-place slice of MessageEntityDiffDelete. +func (s MessageEntityDiffDeleteArray) Retain(keep func(x MessageEntityDiffDelete) bool) MessageEntityDiffDeleteArray { + n := 0 + for _, x := range s { + if keep(x) { + s[n] = x + n++ + } + } + s = s[:n] + + return s +} + +// First returns first element of slice (if exists). +func (s MessageEntityDiffDeleteArray) First() (v MessageEntityDiffDelete, ok bool) { + if len(s) < 1 { + return + } + return s[0], true +} + +// Last returns last element of slice (if exists). +func (s MessageEntityDiffDeleteArray) Last() (v MessageEntityDiffDelete, ok bool) { + if len(s) < 1 { + return + } + return s[len(s)-1], true +} + +// PopFirst returns first element of slice (if exists) and deletes it. +func (s *MessageEntityDiffDeleteArray) PopFirst() (v MessageEntityDiffDelete, ok bool) { + if s == nil || len(*s) < 1 { + return + } + + a := *s + v = a[0] + + // Delete by index from SliceTricks. + copy(a[0:], a[1:]) + var zero MessageEntityDiffDelete + a[len(a)-1] = zero + a = a[:len(a)-1] + *s = a + + return v, true +} + +// Pop returns last element of slice (if exists) and deletes it. +func (s *MessageEntityDiffDeleteArray) Pop() (v MessageEntityDiffDelete, ok bool) { + if s == nil || len(*s) < 1 { + return + } + + a := *s + v = a[len(a)-1] + a = a[:len(a)-1] + *s = a + + return v, true +} diff --git a/pkg/gotd/tg/tl_message_media_gen.go b/pkg/gotd/tg/tl_message_media_gen.go index 8af3bbf6..4456f4f7 100644 --- a/pkg/gotd/tg/tl_message_media_gen.go +++ b/pkg/gotd/tg/tl_message_media_gen.go @@ -133,7 +133,7 @@ func (m *MessageMediaEmpty) DecodeBare(b *bin.Buffer) error { return nil } -// MessageMediaPhoto represents TL type `messageMediaPhoto#695150d7`. +// MessageMediaPhoto represents TL type `messageMediaPhoto#e216eb63`. // Attached photo. // // See https://core.telegram.org/constructor/messageMediaPhoto for reference. @@ -145,6 +145,8 @@ type MessageMediaPhoto struct { Flags bin.Fields // Whether this media should be hidden behind a spoiler warning Spoiler bool + // LivePhoto field of MessageMediaPhoto. + LivePhoto bool // Photo // // Use SetPhoto and GetPhoto helpers. @@ -153,10 +155,14 @@ type MessageMediaPhoto struct { // // Use SetTTLSeconds and GetTTLSeconds helpers. TTLSeconds int + // Video field of MessageMediaPhoto. + // + // Use SetVideo and GetVideo helpers. + Video DocumentClass } // MessageMediaPhotoTypeID is TL type id of MessageMediaPhoto. -const MessageMediaPhotoTypeID = 0x695150d7 +const MessageMediaPhotoTypeID = 0xe216eb63 // construct implements constructor of MessageMediaClass. func (m MessageMediaPhoto) construct() MessageMediaClass { return &m } @@ -181,12 +187,18 @@ func (m *MessageMediaPhoto) Zero() bool { if !(m.Spoiler == false) { return false } + if !(m.LivePhoto == false) { + return false + } if !(m.Photo == nil) { return false } if !(m.TTLSeconds == 0) { return false } + if !(m.Video == nil) { + return false + } return true } @@ -203,10 +215,13 @@ func (m *MessageMediaPhoto) String() string { // FillFrom fills MessageMediaPhoto from given interface. func (m *MessageMediaPhoto) FillFrom(from interface { GetSpoiler() (value bool) + GetLivePhoto() (value bool) GetPhoto() (value PhotoClass, ok bool) GetTTLSeconds() (value int, ok bool) + GetVideo() (value DocumentClass, ok bool) }) { m.Spoiler = from.GetSpoiler() + m.LivePhoto = from.GetLivePhoto() if val, ok := from.GetPhoto(); ok { m.Photo = val } @@ -215,6 +230,10 @@ func (m *MessageMediaPhoto) FillFrom(from interface { m.TTLSeconds = val } + if val, ok := from.GetVideo(); ok { + m.Video = val + } + } // TypeID returns type id in TL schema. @@ -245,6 +264,11 @@ func (m *MessageMediaPhoto) TypeInfo() tdp.Type { SchemaName: "spoiler", Null: !m.Flags.Has(3), }, + { + Name: "LivePhoto", + SchemaName: "live_photo", + Null: !m.Flags.Has(4), + }, { Name: "Photo", SchemaName: "photo", @@ -255,6 +279,11 @@ func (m *MessageMediaPhoto) TypeInfo() tdp.Type { SchemaName: "ttl_seconds", Null: !m.Flags.Has(2), }, + { + Name: "Video", + SchemaName: "video", + Null: !m.Flags.Has(4), + }, } return typ } @@ -264,18 +293,24 @@ func (m *MessageMediaPhoto) SetFlags() { if !(m.Spoiler == false) { m.Flags.Set(3) } + if !(m.LivePhoto == false) { + m.Flags.Set(4) + } if !(m.Photo == nil) { m.Flags.Set(0) } if !(m.TTLSeconds == 0) { m.Flags.Set(2) } + if !(m.Video == nil) { + m.Flags.Set(4) + } } // Encode implements bin.Encoder. func (m *MessageMediaPhoto) Encode(b *bin.Buffer) error { if m == nil { - return fmt.Errorf("can't encode messageMediaPhoto#695150d7 as nil") + return fmt.Errorf("can't encode messageMediaPhoto#e216eb63 as nil") } b.PutID(MessageMediaPhotoTypeID) return m.EncodeBare(b) @@ -284,33 +319,41 @@ func (m *MessageMediaPhoto) Encode(b *bin.Buffer) error { // EncodeBare implements bin.BareEncoder. func (m *MessageMediaPhoto) EncodeBare(b *bin.Buffer) error { if m == nil { - return fmt.Errorf("can't encode messageMediaPhoto#695150d7 as nil") + return fmt.Errorf("can't encode messageMediaPhoto#e216eb63 as nil") } m.SetFlags() if err := m.Flags.Encode(b); err != nil { - return fmt.Errorf("unable to encode messageMediaPhoto#695150d7: field flags: %w", err) + return fmt.Errorf("unable to encode messageMediaPhoto#e216eb63: field flags: %w", err) } if m.Flags.Has(0) { if m.Photo == nil { - return fmt.Errorf("unable to encode messageMediaPhoto#695150d7: field photo is nil") + return fmt.Errorf("unable to encode messageMediaPhoto#e216eb63: field photo is nil") } if err := m.Photo.Encode(b); err != nil { - return fmt.Errorf("unable to encode messageMediaPhoto#695150d7: field photo: %w", err) + return fmt.Errorf("unable to encode messageMediaPhoto#e216eb63: field photo: %w", err) } } if m.Flags.Has(2) { b.PutInt(m.TTLSeconds) } + if m.Flags.Has(4) { + if m.Video == nil { + return fmt.Errorf("unable to encode messageMediaPhoto#e216eb63: field video is nil") + } + if err := m.Video.Encode(b); err != nil { + return fmt.Errorf("unable to encode messageMediaPhoto#e216eb63: field video: %w", err) + } + } return nil } // Decode implements bin.Decoder. func (m *MessageMediaPhoto) Decode(b *bin.Buffer) error { if m == nil { - return fmt.Errorf("can't decode messageMediaPhoto#695150d7 to nil") + return fmt.Errorf("can't decode messageMediaPhoto#e216eb63 to nil") } if err := b.ConsumeID(MessageMediaPhotoTypeID); err != nil { - return fmt.Errorf("unable to decode messageMediaPhoto#695150d7: %w", err) + return fmt.Errorf("unable to decode messageMediaPhoto#e216eb63: %w", err) } return m.DecodeBare(b) } @@ -318,28 +361,36 @@ func (m *MessageMediaPhoto) Decode(b *bin.Buffer) error { // DecodeBare implements bin.BareDecoder. func (m *MessageMediaPhoto) DecodeBare(b *bin.Buffer) error { if m == nil { - return fmt.Errorf("can't decode messageMediaPhoto#695150d7 to nil") + return fmt.Errorf("can't decode messageMediaPhoto#e216eb63 to nil") } { if err := m.Flags.Decode(b); err != nil { - return fmt.Errorf("unable to decode messageMediaPhoto#695150d7: field flags: %w", err) + return fmt.Errorf("unable to decode messageMediaPhoto#e216eb63: field flags: %w", err) } } m.Spoiler = m.Flags.Has(3) + m.LivePhoto = m.Flags.Has(4) if m.Flags.Has(0) { value, err := DecodePhoto(b) if err != nil { - return fmt.Errorf("unable to decode messageMediaPhoto#695150d7: field photo: %w", err) + return fmt.Errorf("unable to decode messageMediaPhoto#e216eb63: field photo: %w", err) } m.Photo = value } if m.Flags.Has(2) { value, err := b.Int() if err != nil { - return fmt.Errorf("unable to decode messageMediaPhoto#695150d7: field ttl_seconds: %w", err) + return fmt.Errorf("unable to decode messageMediaPhoto#e216eb63: field ttl_seconds: %w", err) } m.TTLSeconds = value } + if m.Flags.Has(4) { + value, err := DecodeDocument(b) + if err != nil { + return fmt.Errorf("unable to decode messageMediaPhoto#e216eb63: field video: %w", err) + } + m.Video = value + } return nil } @@ -362,6 +413,25 @@ func (m *MessageMediaPhoto) GetSpoiler() (value bool) { return m.Flags.Has(3) } +// SetLivePhoto sets value of LivePhoto conditional field. +func (m *MessageMediaPhoto) SetLivePhoto(value bool) { + if value { + m.Flags.Set(4) + m.LivePhoto = true + } else { + m.Flags.Unset(4) + m.LivePhoto = false + } +} + +// GetLivePhoto returns value of LivePhoto conditional field. +func (m *MessageMediaPhoto) GetLivePhoto() (value bool) { + if m == nil { + return + } + return m.Flags.Has(4) +} + // SetPhoto sets value of Photo conditional field. func (m *MessageMediaPhoto) SetPhoto(value PhotoClass) { m.Flags.Set(0) @@ -398,6 +468,24 @@ func (m *MessageMediaPhoto) GetTTLSeconds() (value int, ok bool) { return m.TTLSeconds, true } +// SetVideo sets value of Video conditional field. +func (m *MessageMediaPhoto) SetVideo(value DocumentClass) { + m.Flags.Set(4) + m.Video = value +} + +// GetVideo returns value of Video conditional field and +// boolean which is true if field was set. +func (m *MessageMediaPhoto) GetVideo() (value DocumentClass, ok bool) { + if m == nil { + return + } + if !m.Flags.Has(4) { + return value, false + } + return m.Video, true +} + // MessageMediaGeo represents TL type `messageMediaGeo#56e0d474`. // Attached map. // @@ -2981,19 +3069,25 @@ func (m *MessageMediaGeoLive) GetProximityNotificationRadius() (value int, ok bo return m.ProximityNotificationRadius, true } -// MessageMediaPoll represents TL type `messageMediaPoll#4bd6e798`. +// MessageMediaPoll represents TL type `messageMediaPoll#773f4e66`. // Poll // // See https://core.telegram.org/constructor/messageMediaPoll for reference. type MessageMediaPoll struct { + // Flags field of MessageMediaPoll. + Flags bin.Fields // The poll Poll Poll // The results of the poll Results PollResults + // AttachedMedia field of MessageMediaPoll. + // + // Use SetAttachedMedia and GetAttachedMedia helpers. + AttachedMedia MessageMediaClass } // MessageMediaPollTypeID is TL type id of MessageMediaPoll. -const MessageMediaPollTypeID = 0x4bd6e798 +const MessageMediaPollTypeID = 0x773f4e66 // construct implements constructor of MessageMediaClass. func (m MessageMediaPoll) construct() MessageMediaClass { return &m } @@ -3012,12 +3106,18 @@ func (m *MessageMediaPoll) Zero() bool { if m == nil { return true } + if !(m.Flags.Zero()) { + return false + } if !(m.Poll.Zero()) { return false } if !(m.Results.Zero()) { return false } + if !(m.AttachedMedia == nil) { + return false + } return true } @@ -3035,9 +3135,14 @@ func (m *MessageMediaPoll) String() string { func (m *MessageMediaPoll) FillFrom(from interface { GetPoll() (value Poll) GetResults() (value PollResults) + GetAttachedMedia() (value MessageMediaClass, ok bool) }) { m.Poll = from.GetPoll() m.Results = from.GetResults() + if val, ok := from.GetAttachedMedia(); ok { + m.AttachedMedia = val + } + } // TypeID returns type id in TL schema. @@ -3071,14 +3176,26 @@ func (m *MessageMediaPoll) TypeInfo() tdp.Type { Name: "Results", SchemaName: "results", }, + { + Name: "AttachedMedia", + SchemaName: "attached_media", + Null: !m.Flags.Has(0), + }, } return typ } +// SetFlags sets flags for non-zero fields. +func (m *MessageMediaPoll) SetFlags() { + if !(m.AttachedMedia == nil) { + m.Flags.Set(0) + } +} + // Encode implements bin.Encoder. func (m *MessageMediaPoll) Encode(b *bin.Buffer) error { if m == nil { - return fmt.Errorf("can't encode messageMediaPoll#4bd6e798 as nil") + return fmt.Errorf("can't encode messageMediaPoll#773f4e66 as nil") } b.PutID(MessageMediaPollTypeID) return m.EncodeBare(b) @@ -3087,13 +3204,25 @@ func (m *MessageMediaPoll) Encode(b *bin.Buffer) error { // EncodeBare implements bin.BareEncoder. func (m *MessageMediaPoll) EncodeBare(b *bin.Buffer) error { if m == nil { - return fmt.Errorf("can't encode messageMediaPoll#4bd6e798 as nil") + return fmt.Errorf("can't encode messageMediaPoll#773f4e66 as nil") + } + m.SetFlags() + if err := m.Flags.Encode(b); err != nil { + return fmt.Errorf("unable to encode messageMediaPoll#773f4e66: field flags: %w", err) } if err := m.Poll.Encode(b); err != nil { - return fmt.Errorf("unable to encode messageMediaPoll#4bd6e798: field poll: %w", err) + return fmt.Errorf("unable to encode messageMediaPoll#773f4e66: field poll: %w", err) } if err := m.Results.Encode(b); err != nil { - return fmt.Errorf("unable to encode messageMediaPoll#4bd6e798: field results: %w", err) + return fmt.Errorf("unable to encode messageMediaPoll#773f4e66: field results: %w", err) + } + if m.Flags.Has(0) { + if m.AttachedMedia == nil { + return fmt.Errorf("unable to encode messageMediaPoll#773f4e66: field attached_media is nil") + } + if err := m.AttachedMedia.Encode(b); err != nil { + return fmt.Errorf("unable to encode messageMediaPoll#773f4e66: field attached_media: %w", err) + } } return nil } @@ -3101,10 +3230,10 @@ func (m *MessageMediaPoll) EncodeBare(b *bin.Buffer) error { // Decode implements bin.Decoder. func (m *MessageMediaPoll) Decode(b *bin.Buffer) error { if m == nil { - return fmt.Errorf("can't decode messageMediaPoll#4bd6e798 to nil") + return fmt.Errorf("can't decode messageMediaPoll#773f4e66 to nil") } if err := b.ConsumeID(MessageMediaPollTypeID); err != nil { - return fmt.Errorf("unable to decode messageMediaPoll#4bd6e798: %w", err) + return fmt.Errorf("unable to decode messageMediaPoll#773f4e66: %w", err) } return m.DecodeBare(b) } @@ -3112,18 +3241,30 @@ func (m *MessageMediaPoll) Decode(b *bin.Buffer) error { // DecodeBare implements bin.BareDecoder. func (m *MessageMediaPoll) DecodeBare(b *bin.Buffer) error { if m == nil { - return fmt.Errorf("can't decode messageMediaPoll#4bd6e798 to nil") + return fmt.Errorf("can't decode messageMediaPoll#773f4e66 to nil") + } + { + if err := m.Flags.Decode(b); err != nil { + return fmt.Errorf("unable to decode messageMediaPoll#773f4e66: field flags: %w", err) + } } { if err := m.Poll.Decode(b); err != nil { - return fmt.Errorf("unable to decode messageMediaPoll#4bd6e798: field poll: %w", err) + return fmt.Errorf("unable to decode messageMediaPoll#773f4e66: field poll: %w", err) } } { if err := m.Results.Decode(b); err != nil { - return fmt.Errorf("unable to decode messageMediaPoll#4bd6e798: field results: %w", err) + return fmt.Errorf("unable to decode messageMediaPoll#773f4e66: field results: %w", err) } } + if m.Flags.Has(0) { + value, err := DecodeMessageMedia(b) + if err != nil { + return fmt.Errorf("unable to decode messageMediaPoll#773f4e66: field attached_media: %w", err) + } + m.AttachedMedia = value + } return nil } @@ -3143,6 +3284,24 @@ func (m *MessageMediaPoll) GetResults() (value PollResults) { return m.Results } +// SetAttachedMedia sets value of AttachedMedia conditional field. +func (m *MessageMediaPoll) SetAttachedMedia(value MessageMediaClass) { + m.Flags.Set(0) + m.AttachedMedia = value +} + +// GetAttachedMedia returns value of AttachedMedia conditional field and +// boolean which is true if field was set. +func (m *MessageMediaPoll) GetAttachedMedia() (value MessageMediaClass, ok bool) { + if m == nil { + return + } + if !m.Flags.Has(0) { + return value, false + } + return m.AttachedMedia, true +} + // MessageMediaDice represents TL type `messageMediaDice#8cbec07`. // Dice-based animated sticker¹ // @@ -5386,7 +5545,7 @@ const MessageMediaClassName = "MessageMedia" // } // switch v := g.(type) { // case *tg.MessageMediaEmpty: // messageMediaEmpty#3ded6320 -// case *tg.MessageMediaPhoto: // messageMediaPhoto#695150d7 +// case *tg.MessageMediaPhoto: // messageMediaPhoto#e216eb63 // case *tg.MessageMediaGeo: // messageMediaGeo#56e0d474 // case *tg.MessageMediaContact: // messageMediaContact#70322949 // case *tg.MessageMediaUnsupported: // messageMediaUnsupported#9f84f49e @@ -5396,7 +5555,7 @@ const MessageMediaClassName = "MessageMedia" // case *tg.MessageMediaGame: // messageMediaGame#fdb19008 // case *tg.MessageMediaInvoice: // messageMediaInvoice#f6a548d3 // case *tg.MessageMediaGeoLive: // messageMediaGeoLive#b940c666 -// case *tg.MessageMediaPoll: // messageMediaPoll#4bd6e798 +// case *tg.MessageMediaPoll: // messageMediaPoll#773f4e66 // case *tg.MessageMediaDice: // messageMediaDice#8cbec07 // case *tg.MessageMediaStory: // messageMediaStory#68cb6283 // case *tg.MessageMediaGiveaway: // messageMediaGiveaway#aa073beb @@ -5440,7 +5599,7 @@ func DecodeMessageMedia(buf *bin.Buffer) (MessageMediaClass, error) { } return &v, nil case MessageMediaPhotoTypeID: - // Decoding messageMediaPhoto#695150d7. + // Decoding messageMediaPhoto#e216eb63. v := MessageMediaPhoto{} if err := v.Decode(buf); err != nil { return nil, fmt.Errorf("unable to decode MessageMediaClass: %w", err) @@ -5510,7 +5669,7 @@ func DecodeMessageMedia(buf *bin.Buffer) (MessageMediaClass, error) { } return &v, nil case MessageMediaPollTypeID: - // Decoding messageMediaPoll#4bd6e798. + // Decoding messageMediaPoll#773f4e66. v := MessageMediaPoll{} if err := v.Decode(buf); err != nil { return nil, fmt.Errorf("unable to decode MessageMediaClass: %w", err) diff --git a/pkg/gotd/tg/tl_message_reply_header_gen.go b/pkg/gotd/tg/tl_message_reply_header_gen.go index c9c37dc6..abb6129c 100644 --- a/pkg/gotd/tg/tl_message_reply_header_gen.go +++ b/pkg/gotd/tg/tl_message_reply_header_gen.go @@ -31,7 +31,7 @@ var ( _ = tdjson.Encoder{} ) -// MessageReplyHeader represents TL type `messageReplyHeader#6917560b`. +// MessageReplyHeader represents TL type `messageReplyHeader#1b97dd66`. // Message replies and thread¹ information // // Links: @@ -107,10 +107,14 @@ type MessageReplyHeader struct { // // Use SetTodoItemID and GetTodoItemID helpers. TodoItemID int + // PollOption field of MessageReplyHeader. + // + // Use SetPollOption and GetPollOption helpers. + PollOption []byte } // MessageReplyHeaderTypeID is TL type id of MessageReplyHeader. -const MessageReplyHeaderTypeID = 0x6917560b +const MessageReplyHeaderTypeID = 0x1b97dd66 // construct implements constructor of MessageReplyHeaderClass. func (m MessageReplyHeader) construct() MessageReplyHeaderClass { return &m } @@ -168,6 +172,9 @@ func (m *MessageReplyHeader) Zero() bool { if !(m.TodoItemID == 0) { return false } + if !(m.PollOption == nil) { + return false + } return true } @@ -195,6 +202,7 @@ func (m *MessageReplyHeader) FillFrom(from interface { GetQuoteEntities() (value []MessageEntityClass, ok bool) GetQuoteOffset() (value int, ok bool) GetTodoItemID() (value int, ok bool) + GetPollOption() (value []byte, ok bool) }) { m.ReplyToScheduled = from.GetReplyToScheduled() m.ForumTopic = from.GetForumTopic() @@ -235,6 +243,10 @@ func (m *MessageReplyHeader) FillFrom(from interface { m.TodoItemID = val } + if val, ok := from.GetPollOption(); ok { + m.PollOption = val + } + } // TypeID returns type id in TL schema. @@ -320,6 +332,11 @@ func (m *MessageReplyHeader) TypeInfo() tdp.Type { SchemaName: "todo_item_id", Null: !m.Flags.Has(11), }, + { + Name: "PollOption", + SchemaName: "poll_option", + Null: !m.Flags.Has(12), + }, } return typ } @@ -362,12 +379,15 @@ func (m *MessageReplyHeader) SetFlags() { if !(m.TodoItemID == 0) { m.Flags.Set(11) } + if !(m.PollOption == nil) { + m.Flags.Set(12) + } } // Encode implements bin.Encoder. func (m *MessageReplyHeader) Encode(b *bin.Buffer) error { if m == nil { - return fmt.Errorf("can't encode messageReplyHeader#6917560b as nil") + return fmt.Errorf("can't encode messageReplyHeader#1b97dd66 as nil") } b.PutID(MessageReplyHeaderTypeID) return m.EncodeBare(b) @@ -376,34 +396,34 @@ func (m *MessageReplyHeader) Encode(b *bin.Buffer) error { // EncodeBare implements bin.BareEncoder. func (m *MessageReplyHeader) EncodeBare(b *bin.Buffer) error { if m == nil { - return fmt.Errorf("can't encode messageReplyHeader#6917560b as nil") + return fmt.Errorf("can't encode messageReplyHeader#1b97dd66 as nil") } m.SetFlags() if err := m.Flags.Encode(b); err != nil { - return fmt.Errorf("unable to encode messageReplyHeader#6917560b: field flags: %w", err) + return fmt.Errorf("unable to encode messageReplyHeader#1b97dd66: field flags: %w", err) } if m.Flags.Has(4) { b.PutInt(m.ReplyToMsgID) } if m.Flags.Has(0) { if m.ReplyToPeerID == nil { - return fmt.Errorf("unable to encode messageReplyHeader#6917560b: field reply_to_peer_id is nil") + return fmt.Errorf("unable to encode messageReplyHeader#1b97dd66: field reply_to_peer_id is nil") } if err := m.ReplyToPeerID.Encode(b); err != nil { - return fmt.Errorf("unable to encode messageReplyHeader#6917560b: field reply_to_peer_id: %w", err) + return fmt.Errorf("unable to encode messageReplyHeader#1b97dd66: field reply_to_peer_id: %w", err) } } if m.Flags.Has(5) { if err := m.ReplyFrom.Encode(b); err != nil { - return fmt.Errorf("unable to encode messageReplyHeader#6917560b: field reply_from: %w", err) + return fmt.Errorf("unable to encode messageReplyHeader#1b97dd66: field reply_from: %w", err) } } if m.Flags.Has(8) { if m.ReplyMedia == nil { - return fmt.Errorf("unable to encode messageReplyHeader#6917560b: field reply_media is nil") + return fmt.Errorf("unable to encode messageReplyHeader#1b97dd66: field reply_media is nil") } if err := m.ReplyMedia.Encode(b); err != nil { - return fmt.Errorf("unable to encode messageReplyHeader#6917560b: field reply_media: %w", err) + return fmt.Errorf("unable to encode messageReplyHeader#1b97dd66: field reply_media: %w", err) } } if m.Flags.Has(1) { @@ -416,10 +436,10 @@ func (m *MessageReplyHeader) EncodeBare(b *bin.Buffer) error { b.PutVectorHeader(len(m.QuoteEntities)) for idx, v := range m.QuoteEntities { if v == nil { - return fmt.Errorf("unable to encode messageReplyHeader#6917560b: field quote_entities element with index %d is nil", idx) + return fmt.Errorf("unable to encode messageReplyHeader#1b97dd66: field quote_entities element with index %d is nil", idx) } if err := v.Encode(b); err != nil { - return fmt.Errorf("unable to encode messageReplyHeader#6917560b: field quote_entities element with index %d: %w", idx, err) + return fmt.Errorf("unable to encode messageReplyHeader#1b97dd66: field quote_entities element with index %d: %w", idx, err) } } } @@ -429,16 +449,19 @@ func (m *MessageReplyHeader) EncodeBare(b *bin.Buffer) error { if m.Flags.Has(11) { b.PutInt(m.TodoItemID) } + if m.Flags.Has(12) { + b.PutBytes(m.PollOption) + } return nil } // Decode implements bin.Decoder. func (m *MessageReplyHeader) Decode(b *bin.Buffer) error { if m == nil { - return fmt.Errorf("can't decode messageReplyHeader#6917560b to nil") + return fmt.Errorf("can't decode messageReplyHeader#1b97dd66 to nil") } if err := b.ConsumeID(MessageReplyHeaderTypeID); err != nil { - return fmt.Errorf("unable to decode messageReplyHeader#6917560b: %w", err) + return fmt.Errorf("unable to decode messageReplyHeader#1b97dd66: %w", err) } return m.DecodeBare(b) } @@ -446,11 +469,11 @@ func (m *MessageReplyHeader) Decode(b *bin.Buffer) error { // DecodeBare implements bin.BareDecoder. func (m *MessageReplyHeader) DecodeBare(b *bin.Buffer) error { if m == nil { - return fmt.Errorf("can't decode messageReplyHeader#6917560b to nil") + return fmt.Errorf("can't decode messageReplyHeader#1b97dd66 to nil") } { if err := m.Flags.Decode(b); err != nil { - return fmt.Errorf("unable to decode messageReplyHeader#6917560b: field flags: %w", err) + return fmt.Errorf("unable to decode messageReplyHeader#1b97dd66: field flags: %w", err) } } m.ReplyToScheduled = m.Flags.Has(2) @@ -459,47 +482,47 @@ func (m *MessageReplyHeader) DecodeBare(b *bin.Buffer) error { if m.Flags.Has(4) { value, err := b.Int() if err != nil { - return fmt.Errorf("unable to decode messageReplyHeader#6917560b: field reply_to_msg_id: %w", err) + return fmt.Errorf("unable to decode messageReplyHeader#1b97dd66: field reply_to_msg_id: %w", err) } m.ReplyToMsgID = value } if m.Flags.Has(0) { value, err := DecodePeer(b) if err != nil { - return fmt.Errorf("unable to decode messageReplyHeader#6917560b: field reply_to_peer_id: %w", err) + return fmt.Errorf("unable to decode messageReplyHeader#1b97dd66: field reply_to_peer_id: %w", err) } m.ReplyToPeerID = value } if m.Flags.Has(5) { if err := m.ReplyFrom.Decode(b); err != nil { - return fmt.Errorf("unable to decode messageReplyHeader#6917560b: field reply_from: %w", err) + return fmt.Errorf("unable to decode messageReplyHeader#1b97dd66: field reply_from: %w", err) } } if m.Flags.Has(8) { value, err := DecodeMessageMedia(b) if err != nil { - return fmt.Errorf("unable to decode messageReplyHeader#6917560b: field reply_media: %w", err) + return fmt.Errorf("unable to decode messageReplyHeader#1b97dd66: field reply_media: %w", err) } m.ReplyMedia = value } if m.Flags.Has(1) { value, err := b.Int() if err != nil { - return fmt.Errorf("unable to decode messageReplyHeader#6917560b: field reply_to_top_id: %w", err) + return fmt.Errorf("unable to decode messageReplyHeader#1b97dd66: field reply_to_top_id: %w", err) } m.ReplyToTopID = value } if m.Flags.Has(6) { value, err := b.String() if err != nil { - return fmt.Errorf("unable to decode messageReplyHeader#6917560b: field quote_text: %w", err) + return fmt.Errorf("unable to decode messageReplyHeader#1b97dd66: field quote_text: %w", err) } m.QuoteText = value } if m.Flags.Has(7) { headerLen, err := b.VectorHeader() if err != nil { - return fmt.Errorf("unable to decode messageReplyHeader#6917560b: field quote_entities: %w", err) + return fmt.Errorf("unable to decode messageReplyHeader#1b97dd66: field quote_entities: %w", err) } if headerLen > 0 { @@ -508,7 +531,7 @@ func (m *MessageReplyHeader) DecodeBare(b *bin.Buffer) error { for idx := 0; idx < headerLen; idx++ { value, err := DecodeMessageEntity(b) if err != nil { - return fmt.Errorf("unable to decode messageReplyHeader#6917560b: field quote_entities: %w", err) + return fmt.Errorf("unable to decode messageReplyHeader#1b97dd66: field quote_entities: %w", err) } m.QuoteEntities = append(m.QuoteEntities, value) } @@ -516,17 +539,24 @@ func (m *MessageReplyHeader) DecodeBare(b *bin.Buffer) error { if m.Flags.Has(10) { value, err := b.Int() if err != nil { - return fmt.Errorf("unable to decode messageReplyHeader#6917560b: field quote_offset: %w", err) + return fmt.Errorf("unable to decode messageReplyHeader#1b97dd66: field quote_offset: %w", err) } m.QuoteOffset = value } if m.Flags.Has(11) { value, err := b.Int() if err != nil { - return fmt.Errorf("unable to decode messageReplyHeader#6917560b: field todo_item_id: %w", err) + return fmt.Errorf("unable to decode messageReplyHeader#1b97dd66: field todo_item_id: %w", err) } m.TodoItemID = value } + if m.Flags.Has(12) { + value, err := b.Bytes() + if err != nil { + return fmt.Errorf("unable to decode messageReplyHeader#1b97dd66: field poll_option: %w", err) + } + m.PollOption = value + } return nil } @@ -749,6 +779,24 @@ func (m *MessageReplyHeader) GetTodoItemID() (value int, ok bool) { return m.TodoItemID, true } +// SetPollOption sets value of PollOption conditional field. +func (m *MessageReplyHeader) SetPollOption(value []byte) { + m.Flags.Set(12) + m.PollOption = value +} + +// GetPollOption returns value of PollOption conditional field and +// boolean which is true if field was set. +func (m *MessageReplyHeader) GetPollOption() (value []byte, ok bool) { + if m == nil { + return + } + if !m.Flags.Has(12) { + return value, false + } + return m.PollOption, true +} + // MapQuoteEntities returns field QuoteEntities wrapped in MessageEntityClassArray helper. func (m *MessageReplyHeader) MapQuoteEntities() (value MessageEntityClassArray, ok bool) { if !m.Flags.Has(7) { @@ -941,7 +989,7 @@ const MessageReplyHeaderClassName = "MessageReplyHeader" // panic(err) // } // switch v := g.(type) { -// case *tg.MessageReplyHeader: // messageReplyHeader#6917560b +// case *tg.MessageReplyHeader: // messageReplyHeader#1b97dd66 // case *tg.MessageReplyStoryHeader: // messageReplyStoryHeader#e5af939 // default: panic(v) // } @@ -972,7 +1020,7 @@ func DecodeMessageReplyHeader(buf *bin.Buffer) (MessageReplyHeaderClass, error) } switch id { case MessageReplyHeaderTypeID: - // Decoding messageReplyHeader#6917560b. + // Decoding messageReplyHeader#1b97dd66. v := MessageReplyHeader{} if err := v.Decode(buf); err != nil { return nil, fmt.Errorf("unable to decode MessageReplyHeaderClass: %w", err) diff --git a/pkg/gotd/tg/tl_messages_add_poll_answer_gen.go b/pkg/gotd/tg/tl_messages_add_poll_answer_gen.go new file mode 100644 index 00000000..f81af427 --- /dev/null +++ b/pkg/gotd/tg/tl_messages_add_poll_answer_gen.go @@ -0,0 +1,237 @@ +// Code generated by gotdgen, DO NOT EDIT. + +package tg + +import ( + "context" + "errors" + "fmt" + "sort" + "strings" + + "go.uber.org/multierr" + + "go.mau.fi/mautrix-telegram/pkg/gotd/bin" + "go.mau.fi/mautrix-telegram/pkg/gotd/tdjson" + "go.mau.fi/mautrix-telegram/pkg/gotd/tdp" + "go.mau.fi/mautrix-telegram/pkg/gotd/tgerr" +) + +// No-op definition for keeping imports. +var ( + _ = bin.Buffer{} + _ = context.Background() + _ = fmt.Stringer(nil) + _ = strings.Builder{} + _ = errors.Is + _ = multierr.AppendInto + _ = sort.Ints + _ = tdp.Format + _ = tgerr.Error{} + _ = tdjson.Encoder{} +) + +// MessagesAddPollAnswerRequest represents TL type `messages.addPollAnswer#19bc4b6d`. +// +// See https://core.telegram.org/method/messages.addPollAnswer for reference. +type MessagesAddPollAnswerRequest struct { + // Peer field of MessagesAddPollAnswerRequest. + Peer InputPeerClass + // MsgID field of MessagesAddPollAnswerRequest. + MsgID int + // Answer field of MessagesAddPollAnswerRequest. + Answer PollAnswerClass +} + +// MessagesAddPollAnswerRequestTypeID is TL type id of MessagesAddPollAnswerRequest. +const MessagesAddPollAnswerRequestTypeID = 0x19bc4b6d + +// Ensuring interfaces in compile-time for MessagesAddPollAnswerRequest. +var ( + _ bin.Encoder = &MessagesAddPollAnswerRequest{} + _ bin.Decoder = &MessagesAddPollAnswerRequest{} + _ bin.BareEncoder = &MessagesAddPollAnswerRequest{} + _ bin.BareDecoder = &MessagesAddPollAnswerRequest{} +) + +func (a *MessagesAddPollAnswerRequest) Zero() bool { + if a == nil { + return true + } + if !(a.Peer == nil) { + return false + } + if !(a.MsgID == 0) { + return false + } + if !(a.Answer == nil) { + return false + } + + return true +} + +// String implements fmt.Stringer. +func (a *MessagesAddPollAnswerRequest) String() string { + if a == nil { + return "MessagesAddPollAnswerRequest(nil)" + } + type Alias MessagesAddPollAnswerRequest + return fmt.Sprintf("MessagesAddPollAnswerRequest%+v", Alias(*a)) +} + +// FillFrom fills MessagesAddPollAnswerRequest from given interface. +func (a *MessagesAddPollAnswerRequest) FillFrom(from interface { + GetPeer() (value InputPeerClass) + GetMsgID() (value int) + GetAnswer() (value PollAnswerClass) +}) { + a.Peer = from.GetPeer() + a.MsgID = from.GetMsgID() + a.Answer = from.GetAnswer() +} + +// TypeID returns type id in TL schema. +// +// See https://core.telegram.org/mtproto/TL-tl#remarks. +func (*MessagesAddPollAnswerRequest) TypeID() uint32 { + return MessagesAddPollAnswerRequestTypeID +} + +// TypeName returns name of type in TL schema. +func (*MessagesAddPollAnswerRequest) TypeName() string { + return "messages.addPollAnswer" +} + +// TypeInfo returns info about TL type. +func (a *MessagesAddPollAnswerRequest) TypeInfo() tdp.Type { + typ := tdp.Type{ + Name: "messages.addPollAnswer", + ID: MessagesAddPollAnswerRequestTypeID, + } + if a == nil { + typ.Null = true + return typ + } + typ.Fields = []tdp.Field{ + { + Name: "Peer", + SchemaName: "peer", + }, + { + Name: "MsgID", + SchemaName: "msg_id", + }, + { + Name: "Answer", + SchemaName: "answer", + }, + } + return typ +} + +// Encode implements bin.Encoder. +func (a *MessagesAddPollAnswerRequest) Encode(b *bin.Buffer) error { + if a == nil { + return fmt.Errorf("can't encode messages.addPollAnswer#19bc4b6d as nil") + } + b.PutID(MessagesAddPollAnswerRequestTypeID) + return a.EncodeBare(b) +} + +// EncodeBare implements bin.BareEncoder. +func (a *MessagesAddPollAnswerRequest) EncodeBare(b *bin.Buffer) error { + if a == nil { + return fmt.Errorf("can't encode messages.addPollAnswer#19bc4b6d as nil") + } + if a.Peer == nil { + return fmt.Errorf("unable to encode messages.addPollAnswer#19bc4b6d: field peer is nil") + } + if err := a.Peer.Encode(b); err != nil { + return fmt.Errorf("unable to encode messages.addPollAnswer#19bc4b6d: field peer: %w", err) + } + b.PutInt(a.MsgID) + if a.Answer == nil { + return fmt.Errorf("unable to encode messages.addPollAnswer#19bc4b6d: field answer is nil") + } + if err := a.Answer.Encode(b); err != nil { + return fmt.Errorf("unable to encode messages.addPollAnswer#19bc4b6d: field answer: %w", err) + } + return nil +} + +// Decode implements bin.Decoder. +func (a *MessagesAddPollAnswerRequest) Decode(b *bin.Buffer) error { + if a == nil { + return fmt.Errorf("can't decode messages.addPollAnswer#19bc4b6d to nil") + } + if err := b.ConsumeID(MessagesAddPollAnswerRequestTypeID); err != nil { + return fmt.Errorf("unable to decode messages.addPollAnswer#19bc4b6d: %w", err) + } + return a.DecodeBare(b) +} + +// DecodeBare implements bin.BareDecoder. +func (a *MessagesAddPollAnswerRequest) DecodeBare(b *bin.Buffer) error { + if a == nil { + return fmt.Errorf("can't decode messages.addPollAnswer#19bc4b6d to nil") + } + { + value, err := DecodeInputPeer(b) + if err != nil { + return fmt.Errorf("unable to decode messages.addPollAnswer#19bc4b6d: field peer: %w", err) + } + a.Peer = value + } + { + value, err := b.Int() + if err != nil { + return fmt.Errorf("unable to decode messages.addPollAnswer#19bc4b6d: field msg_id: %w", err) + } + a.MsgID = value + } + { + value, err := DecodePollAnswer(b) + if err != nil { + return fmt.Errorf("unable to decode messages.addPollAnswer#19bc4b6d: field answer: %w", err) + } + a.Answer = value + } + return nil +} + +// GetPeer returns value of Peer field. +func (a *MessagesAddPollAnswerRequest) GetPeer() (value InputPeerClass) { + if a == nil { + return + } + return a.Peer +} + +// GetMsgID returns value of MsgID field. +func (a *MessagesAddPollAnswerRequest) GetMsgID() (value int) { + if a == nil { + return + } + return a.MsgID +} + +// GetAnswer returns value of Answer field. +func (a *MessagesAddPollAnswerRequest) GetAnswer() (value PollAnswerClass) { + if a == nil { + return + } + return a.Answer +} + +// MessagesAddPollAnswer invokes method messages.addPollAnswer#19bc4b6d returning error if any. +// +// See https://core.telegram.org/method/messages.addPollAnswer for reference. +func (c *Client) MessagesAddPollAnswer(ctx context.Context, request *MessagesAddPollAnswerRequest) (UpdatesClass, error) { + var result UpdatesBox + + if err := c.rpc.Invoke(ctx, request, &result); err != nil { + return nil, err + } + return result.Updates, nil +} diff --git a/pkg/gotd/tg/tl_messages_add_poll_answer_slices_gen.go b/pkg/gotd/tg/tl_messages_add_poll_answer_slices_gen.go new file mode 100644 index 00000000..ad362638 --- /dev/null +++ b/pkg/gotd/tg/tl_messages_add_poll_answer_slices_gen.go @@ -0,0 +1,35 @@ +//go:build !no_gotd_slices +// +build !no_gotd_slices + +// Code generated by gotdgen, DO NOT EDIT. + +package tg + +import ( + "context" + "errors" + "fmt" + "sort" + "strings" + + "go.uber.org/multierr" + + "go.mau.fi/mautrix-telegram/pkg/gotd/bin" + "go.mau.fi/mautrix-telegram/pkg/gotd/tdjson" + "go.mau.fi/mautrix-telegram/pkg/gotd/tdp" + "go.mau.fi/mautrix-telegram/pkg/gotd/tgerr" +) + +// No-op definition for keeping imports. +var ( + _ = bin.Buffer{} + _ = context.Background() + _ = fmt.Stringer(nil) + _ = strings.Builder{} + _ = errors.Is + _ = multierr.AppendInto + _ = sort.Ints + _ = tdp.Format + _ = tgerr.Error{} + _ = tdjson.Encoder{} +) diff --git a/pkg/gotd/tg/tl_messages_compose_message_with_a_i_gen.go b/pkg/gotd/tg/tl_messages_compose_message_with_a_i_gen.go new file mode 100644 index 00000000..4669ad68 --- /dev/null +++ b/pkg/gotd/tg/tl_messages_compose_message_with_a_i_gen.go @@ -0,0 +1,357 @@ +// Code generated by gotdgen, DO NOT EDIT. + +package tg + +import ( + "context" + "errors" + "fmt" + "sort" + "strings" + + "go.uber.org/multierr" + + "go.mau.fi/mautrix-telegram/pkg/gotd/bin" + "go.mau.fi/mautrix-telegram/pkg/gotd/tdjson" + "go.mau.fi/mautrix-telegram/pkg/gotd/tdp" + "go.mau.fi/mautrix-telegram/pkg/gotd/tgerr" +) + +// No-op definition for keeping imports. +var ( + _ = bin.Buffer{} + _ = context.Background() + _ = fmt.Stringer(nil) + _ = strings.Builder{} + _ = errors.Is + _ = multierr.AppendInto + _ = sort.Ints + _ = tdp.Format + _ = tgerr.Error{} + _ = tdjson.Encoder{} +) + +// MessagesComposeMessageWithAIRequest represents TL type `messages.composeMessageWithAI#fd426afe`. +// +// See https://core.telegram.org/method/messages.composeMessageWithAI for reference. +type MessagesComposeMessageWithAIRequest struct { + // Flags field of MessagesComposeMessageWithAIRequest. + Flags bin.Fields + // Proofread field of MessagesComposeMessageWithAIRequest. + Proofread bool + // Emojify field of MessagesComposeMessageWithAIRequest. + Emojify bool + // Text field of MessagesComposeMessageWithAIRequest. + Text TextWithEntities + // TranslateToLang field of MessagesComposeMessageWithAIRequest. + // + // Use SetTranslateToLang and GetTranslateToLang helpers. + TranslateToLang string + // ChangeTone field of MessagesComposeMessageWithAIRequest. + // + // Use SetChangeTone and GetChangeTone helpers. + ChangeTone string +} + +// MessagesComposeMessageWithAIRequestTypeID is TL type id of MessagesComposeMessageWithAIRequest. +const MessagesComposeMessageWithAIRequestTypeID = 0xfd426afe + +// Ensuring interfaces in compile-time for MessagesComposeMessageWithAIRequest. +var ( + _ bin.Encoder = &MessagesComposeMessageWithAIRequest{} + _ bin.Decoder = &MessagesComposeMessageWithAIRequest{} + _ bin.BareEncoder = &MessagesComposeMessageWithAIRequest{} + _ bin.BareDecoder = &MessagesComposeMessageWithAIRequest{} +) + +func (c *MessagesComposeMessageWithAIRequest) Zero() bool { + if c == nil { + return true + } + if !(c.Flags.Zero()) { + return false + } + if !(c.Proofread == false) { + return false + } + if !(c.Emojify == false) { + return false + } + if !(c.Text.Zero()) { + return false + } + if !(c.TranslateToLang == "") { + return false + } + if !(c.ChangeTone == "") { + return false + } + + return true +} + +// String implements fmt.Stringer. +func (c *MessagesComposeMessageWithAIRequest) String() string { + if c == nil { + return "MessagesComposeMessageWithAIRequest(nil)" + } + type Alias MessagesComposeMessageWithAIRequest + return fmt.Sprintf("MessagesComposeMessageWithAIRequest%+v", Alias(*c)) +} + +// FillFrom fills MessagesComposeMessageWithAIRequest from given interface. +func (c *MessagesComposeMessageWithAIRequest) FillFrom(from interface { + GetProofread() (value bool) + GetEmojify() (value bool) + GetText() (value TextWithEntities) + GetTranslateToLang() (value string, ok bool) + GetChangeTone() (value string, ok bool) +}) { + c.Proofread = from.GetProofread() + c.Emojify = from.GetEmojify() + c.Text = from.GetText() + if val, ok := from.GetTranslateToLang(); ok { + c.TranslateToLang = val + } + + if val, ok := from.GetChangeTone(); ok { + c.ChangeTone = val + } + +} + +// TypeID returns type id in TL schema. +// +// See https://core.telegram.org/mtproto/TL-tl#remarks. +func (*MessagesComposeMessageWithAIRequest) TypeID() uint32 { + return MessagesComposeMessageWithAIRequestTypeID +} + +// TypeName returns name of type in TL schema. +func (*MessagesComposeMessageWithAIRequest) TypeName() string { + return "messages.composeMessageWithAI" +} + +// TypeInfo returns info about TL type. +func (c *MessagesComposeMessageWithAIRequest) TypeInfo() tdp.Type { + typ := tdp.Type{ + Name: "messages.composeMessageWithAI", + ID: MessagesComposeMessageWithAIRequestTypeID, + } + if c == nil { + typ.Null = true + return typ + } + typ.Fields = []tdp.Field{ + { + Name: "Proofread", + SchemaName: "proofread", + Null: !c.Flags.Has(0), + }, + { + Name: "Emojify", + SchemaName: "emojify", + Null: !c.Flags.Has(3), + }, + { + Name: "Text", + SchemaName: "text", + }, + { + Name: "TranslateToLang", + SchemaName: "translate_to_lang", + Null: !c.Flags.Has(1), + }, + { + Name: "ChangeTone", + SchemaName: "change_tone", + Null: !c.Flags.Has(2), + }, + } + return typ +} + +// SetFlags sets flags for non-zero fields. +func (c *MessagesComposeMessageWithAIRequest) SetFlags() { + if !(c.Proofread == false) { + c.Flags.Set(0) + } + if !(c.Emojify == false) { + c.Flags.Set(3) + } + if !(c.TranslateToLang == "") { + c.Flags.Set(1) + } + if !(c.ChangeTone == "") { + c.Flags.Set(2) + } +} + +// Encode implements bin.Encoder. +func (c *MessagesComposeMessageWithAIRequest) Encode(b *bin.Buffer) error { + if c == nil { + return fmt.Errorf("can't encode messages.composeMessageWithAI#fd426afe as nil") + } + b.PutID(MessagesComposeMessageWithAIRequestTypeID) + return c.EncodeBare(b) +} + +// EncodeBare implements bin.BareEncoder. +func (c *MessagesComposeMessageWithAIRequest) EncodeBare(b *bin.Buffer) error { + if c == nil { + return fmt.Errorf("can't encode messages.composeMessageWithAI#fd426afe as nil") + } + c.SetFlags() + if err := c.Flags.Encode(b); err != nil { + return fmt.Errorf("unable to encode messages.composeMessageWithAI#fd426afe: field flags: %w", err) + } + if err := c.Text.Encode(b); err != nil { + return fmt.Errorf("unable to encode messages.composeMessageWithAI#fd426afe: field text: %w", err) + } + if c.Flags.Has(1) { + b.PutString(c.TranslateToLang) + } + if c.Flags.Has(2) { + b.PutString(c.ChangeTone) + } + return nil +} + +// Decode implements bin.Decoder. +func (c *MessagesComposeMessageWithAIRequest) Decode(b *bin.Buffer) error { + if c == nil { + return fmt.Errorf("can't decode messages.composeMessageWithAI#fd426afe to nil") + } + if err := b.ConsumeID(MessagesComposeMessageWithAIRequestTypeID); err != nil { + return fmt.Errorf("unable to decode messages.composeMessageWithAI#fd426afe: %w", err) + } + return c.DecodeBare(b) +} + +// DecodeBare implements bin.BareDecoder. +func (c *MessagesComposeMessageWithAIRequest) DecodeBare(b *bin.Buffer) error { + if c == nil { + return fmt.Errorf("can't decode messages.composeMessageWithAI#fd426afe to nil") + } + { + if err := c.Flags.Decode(b); err != nil { + return fmt.Errorf("unable to decode messages.composeMessageWithAI#fd426afe: field flags: %w", err) + } + } + c.Proofread = c.Flags.Has(0) + c.Emojify = c.Flags.Has(3) + { + if err := c.Text.Decode(b); err != nil { + return fmt.Errorf("unable to decode messages.composeMessageWithAI#fd426afe: field text: %w", err) + } + } + if c.Flags.Has(1) { + value, err := b.String() + if err != nil { + return fmt.Errorf("unable to decode messages.composeMessageWithAI#fd426afe: field translate_to_lang: %w", err) + } + c.TranslateToLang = value + } + if c.Flags.Has(2) { + value, err := b.String() + if err != nil { + return fmt.Errorf("unable to decode messages.composeMessageWithAI#fd426afe: field change_tone: %w", err) + } + c.ChangeTone = value + } + return nil +} + +// SetProofread sets value of Proofread conditional field. +func (c *MessagesComposeMessageWithAIRequest) SetProofread(value bool) { + if value { + c.Flags.Set(0) + c.Proofread = true + } else { + c.Flags.Unset(0) + c.Proofread = false + } +} + +// GetProofread returns value of Proofread conditional field. +func (c *MessagesComposeMessageWithAIRequest) GetProofread() (value bool) { + if c == nil { + return + } + return c.Flags.Has(0) +} + +// SetEmojify sets value of Emojify conditional field. +func (c *MessagesComposeMessageWithAIRequest) SetEmojify(value bool) { + if value { + c.Flags.Set(3) + c.Emojify = true + } else { + c.Flags.Unset(3) + c.Emojify = false + } +} + +// GetEmojify returns value of Emojify conditional field. +func (c *MessagesComposeMessageWithAIRequest) GetEmojify() (value bool) { + if c == nil { + return + } + return c.Flags.Has(3) +} + +// GetText returns value of Text field. +func (c *MessagesComposeMessageWithAIRequest) GetText() (value TextWithEntities) { + if c == nil { + return + } + return c.Text +} + +// SetTranslateToLang sets value of TranslateToLang conditional field. +func (c *MessagesComposeMessageWithAIRequest) SetTranslateToLang(value string) { + c.Flags.Set(1) + c.TranslateToLang = value +} + +// GetTranslateToLang returns value of TranslateToLang conditional field and +// boolean which is true if field was set. +func (c *MessagesComposeMessageWithAIRequest) GetTranslateToLang() (value string, ok bool) { + if c == nil { + return + } + if !c.Flags.Has(1) { + return value, false + } + return c.TranslateToLang, true +} + +// SetChangeTone sets value of ChangeTone conditional field. +func (c *MessagesComposeMessageWithAIRequest) SetChangeTone(value string) { + c.Flags.Set(2) + c.ChangeTone = value +} + +// GetChangeTone returns value of ChangeTone conditional field and +// boolean which is true if field was set. +func (c *MessagesComposeMessageWithAIRequest) GetChangeTone() (value string, ok bool) { + if c == nil { + return + } + if !c.Flags.Has(2) { + return value, false + } + return c.ChangeTone, true +} + +// MessagesComposeMessageWithAI invokes method messages.composeMessageWithAI#fd426afe returning error if any. +// +// See https://core.telegram.org/method/messages.composeMessageWithAI for reference. +func (c *Client) MessagesComposeMessageWithAI(ctx context.Context, request *MessagesComposeMessageWithAIRequest) (*MessagesComposedMessageWithAI, error) { + var result MessagesComposedMessageWithAI + + if err := c.rpc.Invoke(ctx, request, &result); err != nil { + return nil, err + } + return &result, nil +} diff --git a/pkg/gotd/tg/tl_messages_compose_message_with_a_i_slices_gen.go b/pkg/gotd/tg/tl_messages_compose_message_with_a_i_slices_gen.go new file mode 100644 index 00000000..ad362638 --- /dev/null +++ b/pkg/gotd/tg/tl_messages_compose_message_with_a_i_slices_gen.go @@ -0,0 +1,35 @@ +//go:build !no_gotd_slices +// +build !no_gotd_slices + +// Code generated by gotdgen, DO NOT EDIT. + +package tg + +import ( + "context" + "errors" + "fmt" + "sort" + "strings" + + "go.uber.org/multierr" + + "go.mau.fi/mautrix-telegram/pkg/gotd/bin" + "go.mau.fi/mautrix-telegram/pkg/gotd/tdjson" + "go.mau.fi/mautrix-telegram/pkg/gotd/tdp" + "go.mau.fi/mautrix-telegram/pkg/gotd/tgerr" +) + +// No-op definition for keeping imports. +var ( + _ = bin.Buffer{} + _ = context.Background() + _ = fmt.Stringer(nil) + _ = strings.Builder{} + _ = errors.Is + _ = multierr.AppendInto + _ = sort.Ints + _ = tdp.Format + _ = tgerr.Error{} + _ = tdjson.Encoder{} +) diff --git a/pkg/gotd/tg/tl_messages_composed_message_with_a_i_gen.go b/pkg/gotd/tg/tl_messages_composed_message_with_a_i_gen.go new file mode 100644 index 00000000..6451d208 --- /dev/null +++ b/pkg/gotd/tg/tl_messages_composed_message_with_a_i_gen.go @@ -0,0 +1,227 @@ +// Code generated by gotdgen, DO NOT EDIT. + +package tg + +import ( + "context" + "errors" + "fmt" + "sort" + "strings" + + "go.uber.org/multierr" + + "go.mau.fi/mautrix-telegram/pkg/gotd/bin" + "go.mau.fi/mautrix-telegram/pkg/gotd/tdjson" + "go.mau.fi/mautrix-telegram/pkg/gotd/tdp" + "go.mau.fi/mautrix-telegram/pkg/gotd/tgerr" +) + +// No-op definition for keeping imports. +var ( + _ = bin.Buffer{} + _ = context.Background() + _ = fmt.Stringer(nil) + _ = strings.Builder{} + _ = errors.Is + _ = multierr.AppendInto + _ = sort.Ints + _ = tdp.Format + _ = tgerr.Error{} + _ = tdjson.Encoder{} +) + +// MessagesComposedMessageWithAI represents TL type `messages.composedMessageWithAI#90d7adfa`. +// +// See https://core.telegram.org/constructor/messages.composedMessageWithAI for reference. +type MessagesComposedMessageWithAI struct { + // Flags field of MessagesComposedMessageWithAI. + Flags bin.Fields + // ResultText field of MessagesComposedMessageWithAI. + ResultText TextWithEntities + // DiffText field of MessagesComposedMessageWithAI. + // + // Use SetDiffText and GetDiffText helpers. + DiffText TextWithEntities +} + +// MessagesComposedMessageWithAITypeID is TL type id of MessagesComposedMessageWithAI. +const MessagesComposedMessageWithAITypeID = 0x90d7adfa + +// Ensuring interfaces in compile-time for MessagesComposedMessageWithAI. +var ( + _ bin.Encoder = &MessagesComposedMessageWithAI{} + _ bin.Decoder = &MessagesComposedMessageWithAI{} + _ bin.BareEncoder = &MessagesComposedMessageWithAI{} + _ bin.BareDecoder = &MessagesComposedMessageWithAI{} +) + +func (c *MessagesComposedMessageWithAI) Zero() bool { + if c == nil { + return true + } + if !(c.Flags.Zero()) { + return false + } + if !(c.ResultText.Zero()) { + return false + } + if !(c.DiffText.Zero()) { + return false + } + + return true +} + +// String implements fmt.Stringer. +func (c *MessagesComposedMessageWithAI) String() string { + if c == nil { + return "MessagesComposedMessageWithAI(nil)" + } + type Alias MessagesComposedMessageWithAI + return fmt.Sprintf("MessagesComposedMessageWithAI%+v", Alias(*c)) +} + +// FillFrom fills MessagesComposedMessageWithAI from given interface. +func (c *MessagesComposedMessageWithAI) FillFrom(from interface { + GetResultText() (value TextWithEntities) + GetDiffText() (value TextWithEntities, ok bool) +}) { + c.ResultText = from.GetResultText() + if val, ok := from.GetDiffText(); ok { + c.DiffText = val + } + +} + +// TypeID returns type id in TL schema. +// +// See https://core.telegram.org/mtproto/TL-tl#remarks. +func (*MessagesComposedMessageWithAI) TypeID() uint32 { + return MessagesComposedMessageWithAITypeID +} + +// TypeName returns name of type in TL schema. +func (*MessagesComposedMessageWithAI) TypeName() string { + return "messages.composedMessageWithAI" +} + +// TypeInfo returns info about TL type. +func (c *MessagesComposedMessageWithAI) TypeInfo() tdp.Type { + typ := tdp.Type{ + Name: "messages.composedMessageWithAI", + ID: MessagesComposedMessageWithAITypeID, + } + if c == nil { + typ.Null = true + return typ + } + typ.Fields = []tdp.Field{ + { + Name: "ResultText", + SchemaName: "result_text", + }, + { + Name: "DiffText", + SchemaName: "diff_text", + Null: !c.Flags.Has(0), + }, + } + return typ +} + +// SetFlags sets flags for non-zero fields. +func (c *MessagesComposedMessageWithAI) SetFlags() { + if !(c.DiffText.Zero()) { + c.Flags.Set(0) + } +} + +// Encode implements bin.Encoder. +func (c *MessagesComposedMessageWithAI) Encode(b *bin.Buffer) error { + if c == nil { + return fmt.Errorf("can't encode messages.composedMessageWithAI#90d7adfa as nil") + } + b.PutID(MessagesComposedMessageWithAITypeID) + return c.EncodeBare(b) +} + +// EncodeBare implements bin.BareEncoder. +func (c *MessagesComposedMessageWithAI) EncodeBare(b *bin.Buffer) error { + if c == nil { + return fmt.Errorf("can't encode messages.composedMessageWithAI#90d7adfa as nil") + } + c.SetFlags() + if err := c.Flags.Encode(b); err != nil { + return fmt.Errorf("unable to encode messages.composedMessageWithAI#90d7adfa: field flags: %w", err) + } + if err := c.ResultText.Encode(b); err != nil { + return fmt.Errorf("unable to encode messages.composedMessageWithAI#90d7adfa: field result_text: %w", err) + } + if c.Flags.Has(0) { + if err := c.DiffText.Encode(b); err != nil { + return fmt.Errorf("unable to encode messages.composedMessageWithAI#90d7adfa: field diff_text: %w", err) + } + } + return nil +} + +// Decode implements bin.Decoder. +func (c *MessagesComposedMessageWithAI) Decode(b *bin.Buffer) error { + if c == nil { + return fmt.Errorf("can't decode messages.composedMessageWithAI#90d7adfa to nil") + } + if err := b.ConsumeID(MessagesComposedMessageWithAITypeID); err != nil { + return fmt.Errorf("unable to decode messages.composedMessageWithAI#90d7adfa: %w", err) + } + return c.DecodeBare(b) +} + +// DecodeBare implements bin.BareDecoder. +func (c *MessagesComposedMessageWithAI) DecodeBare(b *bin.Buffer) error { + if c == nil { + return fmt.Errorf("can't decode messages.composedMessageWithAI#90d7adfa to nil") + } + { + if err := c.Flags.Decode(b); err != nil { + return fmt.Errorf("unable to decode messages.composedMessageWithAI#90d7adfa: field flags: %w", err) + } + } + { + if err := c.ResultText.Decode(b); err != nil { + return fmt.Errorf("unable to decode messages.composedMessageWithAI#90d7adfa: field result_text: %w", err) + } + } + if c.Flags.Has(0) { + if err := c.DiffText.Decode(b); err != nil { + return fmt.Errorf("unable to decode messages.composedMessageWithAI#90d7adfa: field diff_text: %w", err) + } + } + return nil +} + +// GetResultText returns value of ResultText field. +func (c *MessagesComposedMessageWithAI) GetResultText() (value TextWithEntities) { + if c == nil { + return + } + return c.ResultText +} + +// SetDiffText sets value of DiffText conditional field. +func (c *MessagesComposedMessageWithAI) SetDiffText(value TextWithEntities) { + c.Flags.Set(0) + c.DiffText = value +} + +// GetDiffText returns value of DiffText conditional field and +// boolean which is true if field was set. +func (c *MessagesComposedMessageWithAI) GetDiffText() (value TextWithEntities, ok bool) { + if c == nil { + return + } + if !c.Flags.Has(0) { + return value, false + } + return c.DiffText, true +} diff --git a/pkg/gotd/tg/tl_messages_composed_message_with_a_i_slices_gen.go b/pkg/gotd/tg/tl_messages_composed_message_with_a_i_slices_gen.go new file mode 100644 index 00000000..ad362638 --- /dev/null +++ b/pkg/gotd/tg/tl_messages_composed_message_with_a_i_slices_gen.go @@ -0,0 +1,35 @@ +//go:build !no_gotd_slices +// +build !no_gotd_slices + +// Code generated by gotdgen, DO NOT EDIT. + +package tg + +import ( + "context" + "errors" + "fmt" + "sort" + "strings" + + "go.uber.org/multierr" + + "go.mau.fi/mautrix-telegram/pkg/gotd/bin" + "go.mau.fi/mautrix-telegram/pkg/gotd/tdjson" + "go.mau.fi/mautrix-telegram/pkg/gotd/tdp" + "go.mau.fi/mautrix-telegram/pkg/gotd/tgerr" +) + +// No-op definition for keeping imports. +var ( + _ = bin.Buffer{} + _ = context.Background() + _ = fmt.Stringer(nil) + _ = strings.Builder{} + _ = errors.Is + _ = multierr.AppendInto + _ = sort.Ints + _ = tdp.Format + _ = tgerr.Error{} + _ = tdjson.Encoder{} +) diff --git a/pkg/gotd/tg/tl_messages_delete_poll_answer_gen.go b/pkg/gotd/tg/tl_messages_delete_poll_answer_gen.go new file mode 100644 index 00000000..f3574703 --- /dev/null +++ b/pkg/gotd/tg/tl_messages_delete_poll_answer_gen.go @@ -0,0 +1,232 @@ +// Code generated by gotdgen, DO NOT EDIT. + +package tg + +import ( + "context" + "errors" + "fmt" + "sort" + "strings" + + "go.uber.org/multierr" + + "go.mau.fi/mautrix-telegram/pkg/gotd/bin" + "go.mau.fi/mautrix-telegram/pkg/gotd/tdjson" + "go.mau.fi/mautrix-telegram/pkg/gotd/tdp" + "go.mau.fi/mautrix-telegram/pkg/gotd/tgerr" +) + +// No-op definition for keeping imports. +var ( + _ = bin.Buffer{} + _ = context.Background() + _ = fmt.Stringer(nil) + _ = strings.Builder{} + _ = errors.Is + _ = multierr.AppendInto + _ = sort.Ints + _ = tdp.Format + _ = tgerr.Error{} + _ = tdjson.Encoder{} +) + +// MessagesDeletePollAnswerRequest represents TL type `messages.deletePollAnswer#ac8505a5`. +// +// See https://core.telegram.org/method/messages.deletePollAnswer for reference. +type MessagesDeletePollAnswerRequest struct { + // Peer field of MessagesDeletePollAnswerRequest. + Peer InputPeerClass + // MsgID field of MessagesDeletePollAnswerRequest. + MsgID int + // Option field of MessagesDeletePollAnswerRequest. + Option []byte +} + +// MessagesDeletePollAnswerRequestTypeID is TL type id of MessagesDeletePollAnswerRequest. +const MessagesDeletePollAnswerRequestTypeID = 0xac8505a5 + +// Ensuring interfaces in compile-time for MessagesDeletePollAnswerRequest. +var ( + _ bin.Encoder = &MessagesDeletePollAnswerRequest{} + _ bin.Decoder = &MessagesDeletePollAnswerRequest{} + _ bin.BareEncoder = &MessagesDeletePollAnswerRequest{} + _ bin.BareDecoder = &MessagesDeletePollAnswerRequest{} +) + +func (d *MessagesDeletePollAnswerRequest) Zero() bool { + if d == nil { + return true + } + if !(d.Peer == nil) { + return false + } + if !(d.MsgID == 0) { + return false + } + if !(d.Option == nil) { + return false + } + + return true +} + +// String implements fmt.Stringer. +func (d *MessagesDeletePollAnswerRequest) String() string { + if d == nil { + return "MessagesDeletePollAnswerRequest(nil)" + } + type Alias MessagesDeletePollAnswerRequest + return fmt.Sprintf("MessagesDeletePollAnswerRequest%+v", Alias(*d)) +} + +// FillFrom fills MessagesDeletePollAnswerRequest from given interface. +func (d *MessagesDeletePollAnswerRequest) FillFrom(from interface { + GetPeer() (value InputPeerClass) + GetMsgID() (value int) + GetOption() (value []byte) +}) { + d.Peer = from.GetPeer() + d.MsgID = from.GetMsgID() + d.Option = from.GetOption() +} + +// TypeID returns type id in TL schema. +// +// See https://core.telegram.org/mtproto/TL-tl#remarks. +func (*MessagesDeletePollAnswerRequest) TypeID() uint32 { + return MessagesDeletePollAnswerRequestTypeID +} + +// TypeName returns name of type in TL schema. +func (*MessagesDeletePollAnswerRequest) TypeName() string { + return "messages.deletePollAnswer" +} + +// TypeInfo returns info about TL type. +func (d *MessagesDeletePollAnswerRequest) TypeInfo() tdp.Type { + typ := tdp.Type{ + Name: "messages.deletePollAnswer", + ID: MessagesDeletePollAnswerRequestTypeID, + } + if d == nil { + typ.Null = true + return typ + } + typ.Fields = []tdp.Field{ + { + Name: "Peer", + SchemaName: "peer", + }, + { + Name: "MsgID", + SchemaName: "msg_id", + }, + { + Name: "Option", + SchemaName: "option", + }, + } + return typ +} + +// Encode implements bin.Encoder. +func (d *MessagesDeletePollAnswerRequest) Encode(b *bin.Buffer) error { + if d == nil { + return fmt.Errorf("can't encode messages.deletePollAnswer#ac8505a5 as nil") + } + b.PutID(MessagesDeletePollAnswerRequestTypeID) + return d.EncodeBare(b) +} + +// EncodeBare implements bin.BareEncoder. +func (d *MessagesDeletePollAnswerRequest) EncodeBare(b *bin.Buffer) error { + if d == nil { + return fmt.Errorf("can't encode messages.deletePollAnswer#ac8505a5 as nil") + } + if d.Peer == nil { + return fmt.Errorf("unable to encode messages.deletePollAnswer#ac8505a5: field peer is nil") + } + if err := d.Peer.Encode(b); err != nil { + return fmt.Errorf("unable to encode messages.deletePollAnswer#ac8505a5: field peer: %w", err) + } + b.PutInt(d.MsgID) + b.PutBytes(d.Option) + return nil +} + +// Decode implements bin.Decoder. +func (d *MessagesDeletePollAnswerRequest) Decode(b *bin.Buffer) error { + if d == nil { + return fmt.Errorf("can't decode messages.deletePollAnswer#ac8505a5 to nil") + } + if err := b.ConsumeID(MessagesDeletePollAnswerRequestTypeID); err != nil { + return fmt.Errorf("unable to decode messages.deletePollAnswer#ac8505a5: %w", err) + } + return d.DecodeBare(b) +} + +// DecodeBare implements bin.BareDecoder. +func (d *MessagesDeletePollAnswerRequest) DecodeBare(b *bin.Buffer) error { + if d == nil { + return fmt.Errorf("can't decode messages.deletePollAnswer#ac8505a5 to nil") + } + { + value, err := DecodeInputPeer(b) + if err != nil { + return fmt.Errorf("unable to decode messages.deletePollAnswer#ac8505a5: field peer: %w", err) + } + d.Peer = value + } + { + value, err := b.Int() + if err != nil { + return fmt.Errorf("unable to decode messages.deletePollAnswer#ac8505a5: field msg_id: %w", err) + } + d.MsgID = value + } + { + value, err := b.Bytes() + if err != nil { + return fmt.Errorf("unable to decode messages.deletePollAnswer#ac8505a5: field option: %w", err) + } + d.Option = value + } + return nil +} + +// GetPeer returns value of Peer field. +func (d *MessagesDeletePollAnswerRequest) GetPeer() (value InputPeerClass) { + if d == nil { + return + } + return d.Peer +} + +// GetMsgID returns value of MsgID field. +func (d *MessagesDeletePollAnswerRequest) GetMsgID() (value int) { + if d == nil { + return + } + return d.MsgID +} + +// GetOption returns value of Option field. +func (d *MessagesDeletePollAnswerRequest) GetOption() (value []byte) { + if d == nil { + return + } + return d.Option +} + +// MessagesDeletePollAnswer invokes method messages.deletePollAnswer#ac8505a5 returning error if any. +// +// See https://core.telegram.org/method/messages.deletePollAnswer for reference. +func (c *Client) MessagesDeletePollAnswer(ctx context.Context, request *MessagesDeletePollAnswerRequest) (UpdatesClass, error) { + var result UpdatesBox + + if err := c.rpc.Invoke(ctx, request, &result); err != nil { + return nil, err + } + return result.Updates, nil +} diff --git a/pkg/gotd/tg/tl_messages_delete_poll_answer_slices_gen.go b/pkg/gotd/tg/tl_messages_delete_poll_answer_slices_gen.go new file mode 100644 index 00000000..ad362638 --- /dev/null +++ b/pkg/gotd/tg/tl_messages_delete_poll_answer_slices_gen.go @@ -0,0 +1,35 @@ +//go:build !no_gotd_slices +// +build !no_gotd_slices + +// Code generated by gotdgen, DO NOT EDIT. + +package tg + +import ( + "context" + "errors" + "fmt" + "sort" + "strings" + + "go.uber.org/multierr" + + "go.mau.fi/mautrix-telegram/pkg/gotd/bin" + "go.mau.fi/mautrix-telegram/pkg/gotd/tdjson" + "go.mau.fi/mautrix-telegram/pkg/gotd/tdp" + "go.mau.fi/mautrix-telegram/pkg/gotd/tgerr" +) + +// No-op definition for keeping imports. +var ( + _ = bin.Buffer{} + _ = context.Background() + _ = fmt.Stringer(nil) + _ = strings.Builder{} + _ = errors.Is + _ = multierr.AppendInto + _ = sort.Ints + _ = tdp.Format + _ = tgerr.Error{} + _ = tdjson.Encoder{} +) diff --git a/pkg/gotd/tg/tl_messages_filter_gen.go b/pkg/gotd/tg/tl_messages_filter_gen.go index 3aab7869..8914ac23 100644 --- a/pkg/gotd/tg/tl_messages_filter_gen.go +++ b/pkg/gotd/tg/tl_messages_filter_gen.go @@ -1830,6 +1830,107 @@ func (i *InputMessagesFilterPinned) DecodeBare(b *bin.Buffer) error { return nil } +// InputMessagesFilterPoll represents TL type `inputMessagesFilterPoll#fa2bc90a`. +// +// See https://core.telegram.org/constructor/inputMessagesFilterPoll for reference. +type InputMessagesFilterPoll struct { +} + +// InputMessagesFilterPollTypeID is TL type id of InputMessagesFilterPoll. +const InputMessagesFilterPollTypeID = 0xfa2bc90a + +// construct implements constructor of MessagesFilterClass. +func (i InputMessagesFilterPoll) construct() MessagesFilterClass { return &i } + +// Ensuring interfaces in compile-time for InputMessagesFilterPoll. +var ( + _ bin.Encoder = &InputMessagesFilterPoll{} + _ bin.Decoder = &InputMessagesFilterPoll{} + _ bin.BareEncoder = &InputMessagesFilterPoll{} + _ bin.BareDecoder = &InputMessagesFilterPoll{} + + _ MessagesFilterClass = &InputMessagesFilterPoll{} +) + +func (i *InputMessagesFilterPoll) Zero() bool { + if i == nil { + return true + } + + return true +} + +// String implements fmt.Stringer. +func (i *InputMessagesFilterPoll) String() string { + if i == nil { + return "InputMessagesFilterPoll(nil)" + } + type Alias InputMessagesFilterPoll + return fmt.Sprintf("InputMessagesFilterPoll%+v", Alias(*i)) +} + +// TypeID returns type id in TL schema. +// +// See https://core.telegram.org/mtproto/TL-tl#remarks. +func (*InputMessagesFilterPoll) TypeID() uint32 { + return InputMessagesFilterPollTypeID +} + +// TypeName returns name of type in TL schema. +func (*InputMessagesFilterPoll) TypeName() string { + return "inputMessagesFilterPoll" +} + +// TypeInfo returns info about TL type. +func (i *InputMessagesFilterPoll) TypeInfo() tdp.Type { + typ := tdp.Type{ + Name: "inputMessagesFilterPoll", + ID: InputMessagesFilterPollTypeID, + } + if i == nil { + typ.Null = true + return typ + } + typ.Fields = []tdp.Field{} + return typ +} + +// Encode implements bin.Encoder. +func (i *InputMessagesFilterPoll) Encode(b *bin.Buffer) error { + if i == nil { + return fmt.Errorf("can't encode inputMessagesFilterPoll#fa2bc90a as nil") + } + b.PutID(InputMessagesFilterPollTypeID) + return i.EncodeBare(b) +} + +// EncodeBare implements bin.BareEncoder. +func (i *InputMessagesFilterPoll) EncodeBare(b *bin.Buffer) error { + if i == nil { + return fmt.Errorf("can't encode inputMessagesFilterPoll#fa2bc90a as nil") + } + return nil +} + +// Decode implements bin.Decoder. +func (i *InputMessagesFilterPoll) Decode(b *bin.Buffer) error { + if i == nil { + return fmt.Errorf("can't decode inputMessagesFilterPoll#fa2bc90a to nil") + } + if err := b.ConsumeID(InputMessagesFilterPollTypeID); err != nil { + return fmt.Errorf("unable to decode inputMessagesFilterPoll#fa2bc90a: %w", err) + } + return i.DecodeBare(b) +} + +// DecodeBare implements bin.BareDecoder. +func (i *InputMessagesFilterPoll) DecodeBare(b *bin.Buffer) error { + if i == nil { + return fmt.Errorf("can't decode inputMessagesFilterPoll#fa2bc90a to nil") + } + return nil +} + // MessagesFilterClassName is schema name of MessagesFilterClass. const MessagesFilterClassName = "MessagesFilter" @@ -1861,6 +1962,7 @@ const MessagesFilterClassName = "MessagesFilter" // case *tg.InputMessagesFilterGeo: // inputMessagesFilterGeo#e7026d0d // case *tg.InputMessagesFilterContacts: // inputMessagesFilterContacts#e062db83 // case *tg.InputMessagesFilterPinned: // inputMessagesFilterPinned#1bb00451 +// case *tg.InputMessagesFilterPoll: // inputMessagesFilterPoll#fa2bc90a // default: panic(v) // } type MessagesFilterClass interface { @@ -2008,6 +2110,13 @@ func DecodeMessagesFilter(buf *bin.Buffer) (MessagesFilterClass, error) { return nil, fmt.Errorf("unable to decode MessagesFilterClass: %w", err) } return &v, nil + case InputMessagesFilterPollTypeID: + // Decoding inputMessagesFilterPoll#fa2bc90a. + v := InputMessagesFilterPoll{} + if err := v.Decode(buf); err != nil { + return nil, fmt.Errorf("unable to decode MessagesFilterClass: %w", err) + } + return &v, nil default: return nil, fmt.Errorf("unable to decode MessagesFilterClass: %w", bin.NewUnexpectedID(id)) } diff --git a/pkg/gotd/tg/tl_messages_get_poll_results_gen.go b/pkg/gotd/tg/tl_messages_get_poll_results_gen.go index 7073d4b9..0fbc8317 100644 --- a/pkg/gotd/tg/tl_messages_get_poll_results_gen.go +++ b/pkg/gotd/tg/tl_messages_get_poll_results_gen.go @@ -31,7 +31,7 @@ var ( _ = tdjson.Encoder{} ) -// MessagesGetPollResultsRequest represents TL type `messages.getPollResults#73bb643b`. +// MessagesGetPollResultsRequest represents TL type `messages.getPollResults#eda3e33b`. // Get poll results // // See https://core.telegram.org/method/messages.getPollResults for reference. @@ -40,10 +40,12 @@ type MessagesGetPollResultsRequest struct { Peer InputPeerClass // Message ID of poll message MsgID int + // PollHash field of MessagesGetPollResultsRequest. + PollHash int64 } // MessagesGetPollResultsRequestTypeID is TL type id of MessagesGetPollResultsRequest. -const MessagesGetPollResultsRequestTypeID = 0x73bb643b +const MessagesGetPollResultsRequestTypeID = 0xeda3e33b // Ensuring interfaces in compile-time for MessagesGetPollResultsRequest. var ( @@ -63,6 +65,9 @@ func (g *MessagesGetPollResultsRequest) Zero() bool { if !(g.MsgID == 0) { return false } + if !(g.PollHash == 0) { + return false + } return true } @@ -80,9 +85,11 @@ func (g *MessagesGetPollResultsRequest) String() string { func (g *MessagesGetPollResultsRequest) FillFrom(from interface { GetPeer() (value InputPeerClass) GetMsgID() (value int) + GetPollHash() (value int64) }) { g.Peer = from.GetPeer() g.MsgID = from.GetMsgID() + g.PollHash = from.GetPollHash() } // TypeID returns type id in TL schema. @@ -116,6 +123,10 @@ func (g *MessagesGetPollResultsRequest) TypeInfo() tdp.Type { Name: "MsgID", SchemaName: "msg_id", }, + { + Name: "PollHash", + SchemaName: "poll_hash", + }, } return typ } @@ -123,7 +134,7 @@ func (g *MessagesGetPollResultsRequest) TypeInfo() tdp.Type { // Encode implements bin.Encoder. func (g *MessagesGetPollResultsRequest) Encode(b *bin.Buffer) error { if g == nil { - return fmt.Errorf("can't encode messages.getPollResults#73bb643b as nil") + return fmt.Errorf("can't encode messages.getPollResults#eda3e33b as nil") } b.PutID(MessagesGetPollResultsRequestTypeID) return g.EncodeBare(b) @@ -132,25 +143,26 @@ func (g *MessagesGetPollResultsRequest) Encode(b *bin.Buffer) error { // EncodeBare implements bin.BareEncoder. func (g *MessagesGetPollResultsRequest) EncodeBare(b *bin.Buffer) error { if g == nil { - return fmt.Errorf("can't encode messages.getPollResults#73bb643b as nil") + return fmt.Errorf("can't encode messages.getPollResults#eda3e33b as nil") } if g.Peer == nil { - return fmt.Errorf("unable to encode messages.getPollResults#73bb643b: field peer is nil") + return fmt.Errorf("unable to encode messages.getPollResults#eda3e33b: field peer is nil") } if err := g.Peer.Encode(b); err != nil { - return fmt.Errorf("unable to encode messages.getPollResults#73bb643b: field peer: %w", err) + return fmt.Errorf("unable to encode messages.getPollResults#eda3e33b: field peer: %w", err) } b.PutInt(g.MsgID) + b.PutLong(g.PollHash) return nil } // Decode implements bin.Decoder. func (g *MessagesGetPollResultsRequest) Decode(b *bin.Buffer) error { if g == nil { - return fmt.Errorf("can't decode messages.getPollResults#73bb643b to nil") + return fmt.Errorf("can't decode messages.getPollResults#eda3e33b to nil") } if err := b.ConsumeID(MessagesGetPollResultsRequestTypeID); err != nil { - return fmt.Errorf("unable to decode messages.getPollResults#73bb643b: %w", err) + return fmt.Errorf("unable to decode messages.getPollResults#eda3e33b: %w", err) } return g.DecodeBare(b) } @@ -158,22 +170,29 @@ func (g *MessagesGetPollResultsRequest) Decode(b *bin.Buffer) error { // DecodeBare implements bin.BareDecoder. func (g *MessagesGetPollResultsRequest) DecodeBare(b *bin.Buffer) error { if g == nil { - return fmt.Errorf("can't decode messages.getPollResults#73bb643b to nil") + return fmt.Errorf("can't decode messages.getPollResults#eda3e33b to nil") } { value, err := DecodeInputPeer(b) if err != nil { - return fmt.Errorf("unable to decode messages.getPollResults#73bb643b: field peer: %w", err) + return fmt.Errorf("unable to decode messages.getPollResults#eda3e33b: field peer: %w", err) } g.Peer = value } { value, err := b.Int() if err != nil { - return fmt.Errorf("unable to decode messages.getPollResults#73bb643b: field msg_id: %w", err) + return fmt.Errorf("unable to decode messages.getPollResults#eda3e33b: field msg_id: %w", err) } g.MsgID = value } + { + value, err := b.Long() + if err != nil { + return fmt.Errorf("unable to decode messages.getPollResults#eda3e33b: field poll_hash: %w", err) + } + g.PollHash = value + } return nil } @@ -193,7 +212,15 @@ func (g *MessagesGetPollResultsRequest) GetMsgID() (value int) { return g.MsgID } -// MessagesGetPollResults invokes method messages.getPollResults#73bb643b returning error if any. +// GetPollHash returns value of PollHash field. +func (g *MessagesGetPollResultsRequest) GetPollHash() (value int64) { + if g == nil { + return + } + return g.PollHash +} + +// MessagesGetPollResults invokes method messages.getPollResults#eda3e33b returning error if any. // Get poll results // // Possible errors: diff --git a/pkg/gotd/tg/tl_messages_get_unread_poll_votes_gen.go b/pkg/gotd/tg/tl_messages_get_unread_poll_votes_gen.go new file mode 100644 index 00000000..a026e0a3 --- /dev/null +++ b/pkg/gotd/tg/tl_messages_get_unread_poll_votes_gen.go @@ -0,0 +1,379 @@ +// Code generated by gotdgen, DO NOT EDIT. + +package tg + +import ( + "context" + "errors" + "fmt" + "sort" + "strings" + + "go.uber.org/multierr" + + "go.mau.fi/mautrix-telegram/pkg/gotd/bin" + "go.mau.fi/mautrix-telegram/pkg/gotd/tdjson" + "go.mau.fi/mautrix-telegram/pkg/gotd/tdp" + "go.mau.fi/mautrix-telegram/pkg/gotd/tgerr" +) + +// No-op definition for keeping imports. +var ( + _ = bin.Buffer{} + _ = context.Background() + _ = fmt.Stringer(nil) + _ = strings.Builder{} + _ = errors.Is + _ = multierr.AppendInto + _ = sort.Ints + _ = tdp.Format + _ = tgerr.Error{} + _ = tdjson.Encoder{} +) + +// MessagesGetUnreadPollVotesRequest represents TL type `messages.getUnreadPollVotes#43286cf2`. +// +// See https://core.telegram.org/method/messages.getUnreadPollVotes for reference. +type MessagesGetUnreadPollVotesRequest struct { + // Flags field of MessagesGetUnreadPollVotesRequest. + Flags bin.Fields + // Peer field of MessagesGetUnreadPollVotesRequest. + Peer InputPeerClass + // TopMsgID field of MessagesGetUnreadPollVotesRequest. + // + // Use SetTopMsgID and GetTopMsgID helpers. + TopMsgID int + // OffsetID field of MessagesGetUnreadPollVotesRequest. + OffsetID int + // AddOffset field of MessagesGetUnreadPollVotesRequest. + AddOffset int + // Limit field of MessagesGetUnreadPollVotesRequest. + Limit int + // MaxID field of MessagesGetUnreadPollVotesRequest. + MaxID int + // MinID field of MessagesGetUnreadPollVotesRequest. + MinID int +} + +// MessagesGetUnreadPollVotesRequestTypeID is TL type id of MessagesGetUnreadPollVotesRequest. +const MessagesGetUnreadPollVotesRequestTypeID = 0x43286cf2 + +// Ensuring interfaces in compile-time for MessagesGetUnreadPollVotesRequest. +var ( + _ bin.Encoder = &MessagesGetUnreadPollVotesRequest{} + _ bin.Decoder = &MessagesGetUnreadPollVotesRequest{} + _ bin.BareEncoder = &MessagesGetUnreadPollVotesRequest{} + _ bin.BareDecoder = &MessagesGetUnreadPollVotesRequest{} +) + +func (g *MessagesGetUnreadPollVotesRequest) Zero() bool { + if g == nil { + return true + } + if !(g.Flags.Zero()) { + return false + } + if !(g.Peer == nil) { + return false + } + if !(g.TopMsgID == 0) { + return false + } + if !(g.OffsetID == 0) { + return false + } + if !(g.AddOffset == 0) { + return false + } + if !(g.Limit == 0) { + return false + } + if !(g.MaxID == 0) { + return false + } + if !(g.MinID == 0) { + return false + } + + return true +} + +// String implements fmt.Stringer. +func (g *MessagesGetUnreadPollVotesRequest) String() string { + if g == nil { + return "MessagesGetUnreadPollVotesRequest(nil)" + } + type Alias MessagesGetUnreadPollVotesRequest + return fmt.Sprintf("MessagesGetUnreadPollVotesRequest%+v", Alias(*g)) +} + +// FillFrom fills MessagesGetUnreadPollVotesRequest from given interface. +func (g *MessagesGetUnreadPollVotesRequest) FillFrom(from interface { + GetPeer() (value InputPeerClass) + GetTopMsgID() (value int, ok bool) + GetOffsetID() (value int) + GetAddOffset() (value int) + GetLimit() (value int) + GetMaxID() (value int) + GetMinID() (value int) +}) { + g.Peer = from.GetPeer() + if val, ok := from.GetTopMsgID(); ok { + g.TopMsgID = val + } + + g.OffsetID = from.GetOffsetID() + g.AddOffset = from.GetAddOffset() + g.Limit = from.GetLimit() + g.MaxID = from.GetMaxID() + g.MinID = from.GetMinID() +} + +// TypeID returns type id in TL schema. +// +// See https://core.telegram.org/mtproto/TL-tl#remarks. +func (*MessagesGetUnreadPollVotesRequest) TypeID() uint32 { + return MessagesGetUnreadPollVotesRequestTypeID +} + +// TypeName returns name of type in TL schema. +func (*MessagesGetUnreadPollVotesRequest) TypeName() string { + return "messages.getUnreadPollVotes" +} + +// TypeInfo returns info about TL type. +func (g *MessagesGetUnreadPollVotesRequest) TypeInfo() tdp.Type { + typ := tdp.Type{ + Name: "messages.getUnreadPollVotes", + ID: MessagesGetUnreadPollVotesRequestTypeID, + } + if g == nil { + typ.Null = true + return typ + } + typ.Fields = []tdp.Field{ + { + Name: "Peer", + SchemaName: "peer", + }, + { + Name: "TopMsgID", + SchemaName: "top_msg_id", + Null: !g.Flags.Has(0), + }, + { + Name: "OffsetID", + SchemaName: "offset_id", + }, + { + Name: "AddOffset", + SchemaName: "add_offset", + }, + { + Name: "Limit", + SchemaName: "limit", + }, + { + Name: "MaxID", + SchemaName: "max_id", + }, + { + Name: "MinID", + SchemaName: "min_id", + }, + } + return typ +} + +// SetFlags sets flags for non-zero fields. +func (g *MessagesGetUnreadPollVotesRequest) SetFlags() { + if !(g.TopMsgID == 0) { + g.Flags.Set(0) + } +} + +// Encode implements bin.Encoder. +func (g *MessagesGetUnreadPollVotesRequest) Encode(b *bin.Buffer) error { + if g == nil { + return fmt.Errorf("can't encode messages.getUnreadPollVotes#43286cf2 as nil") + } + b.PutID(MessagesGetUnreadPollVotesRequestTypeID) + return g.EncodeBare(b) +} + +// EncodeBare implements bin.BareEncoder. +func (g *MessagesGetUnreadPollVotesRequest) EncodeBare(b *bin.Buffer) error { + if g == nil { + return fmt.Errorf("can't encode messages.getUnreadPollVotes#43286cf2 as nil") + } + g.SetFlags() + if err := g.Flags.Encode(b); err != nil { + return fmt.Errorf("unable to encode messages.getUnreadPollVotes#43286cf2: field flags: %w", err) + } + if g.Peer == nil { + return fmt.Errorf("unable to encode messages.getUnreadPollVotes#43286cf2: field peer is nil") + } + if err := g.Peer.Encode(b); err != nil { + return fmt.Errorf("unable to encode messages.getUnreadPollVotes#43286cf2: field peer: %w", err) + } + if g.Flags.Has(0) { + b.PutInt(g.TopMsgID) + } + b.PutInt(g.OffsetID) + b.PutInt(g.AddOffset) + b.PutInt(g.Limit) + b.PutInt(g.MaxID) + b.PutInt(g.MinID) + return nil +} + +// Decode implements bin.Decoder. +func (g *MessagesGetUnreadPollVotesRequest) Decode(b *bin.Buffer) error { + if g == nil { + return fmt.Errorf("can't decode messages.getUnreadPollVotes#43286cf2 to nil") + } + if err := b.ConsumeID(MessagesGetUnreadPollVotesRequestTypeID); err != nil { + return fmt.Errorf("unable to decode messages.getUnreadPollVotes#43286cf2: %w", err) + } + return g.DecodeBare(b) +} + +// DecodeBare implements bin.BareDecoder. +func (g *MessagesGetUnreadPollVotesRequest) DecodeBare(b *bin.Buffer) error { + if g == nil { + return fmt.Errorf("can't decode messages.getUnreadPollVotes#43286cf2 to nil") + } + { + if err := g.Flags.Decode(b); err != nil { + return fmt.Errorf("unable to decode messages.getUnreadPollVotes#43286cf2: field flags: %w", err) + } + } + { + value, err := DecodeInputPeer(b) + if err != nil { + return fmt.Errorf("unable to decode messages.getUnreadPollVotes#43286cf2: field peer: %w", err) + } + g.Peer = value + } + if g.Flags.Has(0) { + value, err := b.Int() + if err != nil { + return fmt.Errorf("unable to decode messages.getUnreadPollVotes#43286cf2: field top_msg_id: %w", err) + } + g.TopMsgID = value + } + { + value, err := b.Int() + if err != nil { + return fmt.Errorf("unable to decode messages.getUnreadPollVotes#43286cf2: field offset_id: %w", err) + } + g.OffsetID = value + } + { + value, err := b.Int() + if err != nil { + return fmt.Errorf("unable to decode messages.getUnreadPollVotes#43286cf2: field add_offset: %w", err) + } + g.AddOffset = value + } + { + value, err := b.Int() + if err != nil { + return fmt.Errorf("unable to decode messages.getUnreadPollVotes#43286cf2: field limit: %w", err) + } + g.Limit = value + } + { + value, err := b.Int() + if err != nil { + return fmt.Errorf("unable to decode messages.getUnreadPollVotes#43286cf2: field max_id: %w", err) + } + g.MaxID = value + } + { + value, err := b.Int() + if err != nil { + return fmt.Errorf("unable to decode messages.getUnreadPollVotes#43286cf2: field min_id: %w", err) + } + g.MinID = value + } + return nil +} + +// GetPeer returns value of Peer field. +func (g *MessagesGetUnreadPollVotesRequest) GetPeer() (value InputPeerClass) { + if g == nil { + return + } + return g.Peer +} + +// SetTopMsgID sets value of TopMsgID conditional field. +func (g *MessagesGetUnreadPollVotesRequest) SetTopMsgID(value int) { + g.Flags.Set(0) + g.TopMsgID = value +} + +// GetTopMsgID returns value of TopMsgID conditional field and +// boolean which is true if field was set. +func (g *MessagesGetUnreadPollVotesRequest) GetTopMsgID() (value int, ok bool) { + if g == nil { + return + } + if !g.Flags.Has(0) { + return value, false + } + return g.TopMsgID, true +} + +// GetOffsetID returns value of OffsetID field. +func (g *MessagesGetUnreadPollVotesRequest) GetOffsetID() (value int) { + if g == nil { + return + } + return g.OffsetID +} + +// GetAddOffset returns value of AddOffset field. +func (g *MessagesGetUnreadPollVotesRequest) GetAddOffset() (value int) { + if g == nil { + return + } + return g.AddOffset +} + +// GetLimit returns value of Limit field. +func (g *MessagesGetUnreadPollVotesRequest) GetLimit() (value int) { + if g == nil { + return + } + return g.Limit +} + +// GetMaxID returns value of MaxID field. +func (g *MessagesGetUnreadPollVotesRequest) GetMaxID() (value int) { + if g == nil { + return + } + return g.MaxID +} + +// GetMinID returns value of MinID field. +func (g *MessagesGetUnreadPollVotesRequest) GetMinID() (value int) { + if g == nil { + return + } + return g.MinID +} + +// MessagesGetUnreadPollVotes invokes method messages.getUnreadPollVotes#43286cf2 returning error if any. +// +// See https://core.telegram.org/method/messages.getUnreadPollVotes for reference. +func (c *Client) MessagesGetUnreadPollVotes(ctx context.Context, request *MessagesGetUnreadPollVotesRequest) (MessagesMessagesClass, error) { + var result MessagesMessagesBox + + if err := c.rpc.Invoke(ctx, request, &result); err != nil { + return nil, err + } + return result.Messages, nil +} diff --git a/pkg/gotd/tg/tl_messages_get_unread_poll_votes_slices_gen.go b/pkg/gotd/tg/tl_messages_get_unread_poll_votes_slices_gen.go new file mode 100644 index 00000000..ad362638 --- /dev/null +++ b/pkg/gotd/tg/tl_messages_get_unread_poll_votes_slices_gen.go @@ -0,0 +1,35 @@ +//go:build !no_gotd_slices +// +build !no_gotd_slices + +// Code generated by gotdgen, DO NOT EDIT. + +package tg + +import ( + "context" + "errors" + "fmt" + "sort" + "strings" + + "go.uber.org/multierr" + + "go.mau.fi/mautrix-telegram/pkg/gotd/bin" + "go.mau.fi/mautrix-telegram/pkg/gotd/tdjson" + "go.mau.fi/mautrix-telegram/pkg/gotd/tdp" + "go.mau.fi/mautrix-telegram/pkg/gotd/tgerr" +) + +// No-op definition for keeping imports. +var ( + _ = bin.Buffer{} + _ = context.Background() + _ = fmt.Stringer(nil) + _ = strings.Builder{} + _ = errors.Is + _ = multierr.AppendInto + _ = sort.Ints + _ = tdp.Format + _ = tgerr.Error{} + _ = tdjson.Encoder{} +) diff --git a/pkg/gotd/tg/tl_messages_read_poll_votes_gen.go b/pkg/gotd/tg/tl_messages_read_poll_votes_gen.go new file mode 100644 index 00000000..55dbd6d2 --- /dev/null +++ b/pkg/gotd/tg/tl_messages_read_poll_votes_gen.go @@ -0,0 +1,244 @@ +// Code generated by gotdgen, DO NOT EDIT. + +package tg + +import ( + "context" + "errors" + "fmt" + "sort" + "strings" + + "go.uber.org/multierr" + + "go.mau.fi/mautrix-telegram/pkg/gotd/bin" + "go.mau.fi/mautrix-telegram/pkg/gotd/tdjson" + "go.mau.fi/mautrix-telegram/pkg/gotd/tdp" + "go.mau.fi/mautrix-telegram/pkg/gotd/tgerr" +) + +// No-op definition for keeping imports. +var ( + _ = bin.Buffer{} + _ = context.Background() + _ = fmt.Stringer(nil) + _ = strings.Builder{} + _ = errors.Is + _ = multierr.AppendInto + _ = sort.Ints + _ = tdp.Format + _ = tgerr.Error{} + _ = tdjson.Encoder{} +) + +// MessagesReadPollVotesRequest represents TL type `messages.readPollVotes#1720b4d8`. +// +// See https://core.telegram.org/method/messages.readPollVotes for reference. +type MessagesReadPollVotesRequest struct { + // Flags field of MessagesReadPollVotesRequest. + Flags bin.Fields + // Peer field of MessagesReadPollVotesRequest. + Peer InputPeerClass + // TopMsgID field of MessagesReadPollVotesRequest. + // + // Use SetTopMsgID and GetTopMsgID helpers. + TopMsgID int +} + +// MessagesReadPollVotesRequestTypeID is TL type id of MessagesReadPollVotesRequest. +const MessagesReadPollVotesRequestTypeID = 0x1720b4d8 + +// Ensuring interfaces in compile-time for MessagesReadPollVotesRequest. +var ( + _ bin.Encoder = &MessagesReadPollVotesRequest{} + _ bin.Decoder = &MessagesReadPollVotesRequest{} + _ bin.BareEncoder = &MessagesReadPollVotesRequest{} + _ bin.BareDecoder = &MessagesReadPollVotesRequest{} +) + +func (r *MessagesReadPollVotesRequest) Zero() bool { + if r == nil { + return true + } + if !(r.Flags.Zero()) { + return false + } + if !(r.Peer == nil) { + return false + } + if !(r.TopMsgID == 0) { + return false + } + + return true +} + +// String implements fmt.Stringer. +func (r *MessagesReadPollVotesRequest) String() string { + if r == nil { + return "MessagesReadPollVotesRequest(nil)" + } + type Alias MessagesReadPollVotesRequest + return fmt.Sprintf("MessagesReadPollVotesRequest%+v", Alias(*r)) +} + +// FillFrom fills MessagesReadPollVotesRequest from given interface. +func (r *MessagesReadPollVotesRequest) FillFrom(from interface { + GetPeer() (value InputPeerClass) + GetTopMsgID() (value int, ok bool) +}) { + r.Peer = from.GetPeer() + if val, ok := from.GetTopMsgID(); ok { + r.TopMsgID = val + } + +} + +// TypeID returns type id in TL schema. +// +// See https://core.telegram.org/mtproto/TL-tl#remarks. +func (*MessagesReadPollVotesRequest) TypeID() uint32 { + return MessagesReadPollVotesRequestTypeID +} + +// TypeName returns name of type in TL schema. +func (*MessagesReadPollVotesRequest) TypeName() string { + return "messages.readPollVotes" +} + +// TypeInfo returns info about TL type. +func (r *MessagesReadPollVotesRequest) TypeInfo() tdp.Type { + typ := tdp.Type{ + Name: "messages.readPollVotes", + ID: MessagesReadPollVotesRequestTypeID, + } + if r == nil { + typ.Null = true + return typ + } + typ.Fields = []tdp.Field{ + { + Name: "Peer", + SchemaName: "peer", + }, + { + Name: "TopMsgID", + SchemaName: "top_msg_id", + Null: !r.Flags.Has(0), + }, + } + return typ +} + +// SetFlags sets flags for non-zero fields. +func (r *MessagesReadPollVotesRequest) SetFlags() { + if !(r.TopMsgID == 0) { + r.Flags.Set(0) + } +} + +// Encode implements bin.Encoder. +func (r *MessagesReadPollVotesRequest) Encode(b *bin.Buffer) error { + if r == nil { + return fmt.Errorf("can't encode messages.readPollVotes#1720b4d8 as nil") + } + b.PutID(MessagesReadPollVotesRequestTypeID) + return r.EncodeBare(b) +} + +// EncodeBare implements bin.BareEncoder. +func (r *MessagesReadPollVotesRequest) EncodeBare(b *bin.Buffer) error { + if r == nil { + return fmt.Errorf("can't encode messages.readPollVotes#1720b4d8 as nil") + } + r.SetFlags() + if err := r.Flags.Encode(b); err != nil { + return fmt.Errorf("unable to encode messages.readPollVotes#1720b4d8: field flags: %w", err) + } + if r.Peer == nil { + return fmt.Errorf("unable to encode messages.readPollVotes#1720b4d8: field peer is nil") + } + if err := r.Peer.Encode(b); err != nil { + return fmt.Errorf("unable to encode messages.readPollVotes#1720b4d8: field peer: %w", err) + } + if r.Flags.Has(0) { + b.PutInt(r.TopMsgID) + } + return nil +} + +// Decode implements bin.Decoder. +func (r *MessagesReadPollVotesRequest) Decode(b *bin.Buffer) error { + if r == nil { + return fmt.Errorf("can't decode messages.readPollVotes#1720b4d8 to nil") + } + if err := b.ConsumeID(MessagesReadPollVotesRequestTypeID); err != nil { + return fmt.Errorf("unable to decode messages.readPollVotes#1720b4d8: %w", err) + } + return r.DecodeBare(b) +} + +// DecodeBare implements bin.BareDecoder. +func (r *MessagesReadPollVotesRequest) DecodeBare(b *bin.Buffer) error { + if r == nil { + return fmt.Errorf("can't decode messages.readPollVotes#1720b4d8 to nil") + } + { + if err := r.Flags.Decode(b); err != nil { + return fmt.Errorf("unable to decode messages.readPollVotes#1720b4d8: field flags: %w", err) + } + } + { + value, err := DecodeInputPeer(b) + if err != nil { + return fmt.Errorf("unable to decode messages.readPollVotes#1720b4d8: field peer: %w", err) + } + r.Peer = value + } + if r.Flags.Has(0) { + value, err := b.Int() + if err != nil { + return fmt.Errorf("unable to decode messages.readPollVotes#1720b4d8: field top_msg_id: %w", err) + } + r.TopMsgID = value + } + return nil +} + +// GetPeer returns value of Peer field. +func (r *MessagesReadPollVotesRequest) GetPeer() (value InputPeerClass) { + if r == nil { + return + } + return r.Peer +} + +// SetTopMsgID sets value of TopMsgID conditional field. +func (r *MessagesReadPollVotesRequest) SetTopMsgID(value int) { + r.Flags.Set(0) + r.TopMsgID = value +} + +// GetTopMsgID returns value of TopMsgID conditional field and +// boolean which is true if field was set. +func (r *MessagesReadPollVotesRequest) GetTopMsgID() (value int, ok bool) { + if r == nil { + return + } + if !r.Flags.Has(0) { + return value, false + } + return r.TopMsgID, true +} + +// MessagesReadPollVotes invokes method messages.readPollVotes#1720b4d8 returning error if any. +// +// See https://core.telegram.org/method/messages.readPollVotes for reference. +func (c *Client) MessagesReadPollVotes(ctx context.Context, request *MessagesReadPollVotesRequest) (*MessagesAffectedHistory, error) { + var result MessagesAffectedHistory + + if err := c.rpc.Invoke(ctx, request, &result); err != nil { + return nil, err + } + return &result, nil +} diff --git a/pkg/gotd/tg/tl_messages_read_poll_votes_slices_gen.go b/pkg/gotd/tg/tl_messages_read_poll_votes_slices_gen.go new file mode 100644 index 00000000..ad362638 --- /dev/null +++ b/pkg/gotd/tg/tl_messages_read_poll_votes_slices_gen.go @@ -0,0 +1,35 @@ +//go:build !no_gotd_slices +// +build !no_gotd_slices + +// Code generated by gotdgen, DO NOT EDIT. + +package tg + +import ( + "context" + "errors" + "fmt" + "sort" + "strings" + + "go.uber.org/multierr" + + "go.mau.fi/mautrix-telegram/pkg/gotd/bin" + "go.mau.fi/mautrix-telegram/pkg/gotd/tdjson" + "go.mau.fi/mautrix-telegram/pkg/gotd/tdp" + "go.mau.fi/mautrix-telegram/pkg/gotd/tgerr" +) + +// No-op definition for keeping imports. +var ( + _ = bin.Buffer{} + _ = context.Background() + _ = fmt.Stringer(nil) + _ = strings.Builder{} + _ = errors.Is + _ = multierr.AppendInto + _ = sort.Ints + _ = tdp.Format + _ = tgerr.Error{} + _ = tdjson.Encoder{} +) diff --git a/pkg/gotd/tg/tl_messages_report_music_listen_gen.go b/pkg/gotd/tg/tl_messages_report_music_listen_gen.go new file mode 100644 index 00000000..4fbd5c6a --- /dev/null +++ b/pkg/gotd/tg/tl_messages_report_music_listen_gen.go @@ -0,0 +1,211 @@ +// Code generated by gotdgen, DO NOT EDIT. + +package tg + +import ( + "context" + "errors" + "fmt" + "sort" + "strings" + + "go.uber.org/multierr" + + "go.mau.fi/mautrix-telegram/pkg/gotd/bin" + "go.mau.fi/mautrix-telegram/pkg/gotd/tdjson" + "go.mau.fi/mautrix-telegram/pkg/gotd/tdp" + "go.mau.fi/mautrix-telegram/pkg/gotd/tgerr" +) + +// No-op definition for keeping imports. +var ( + _ = bin.Buffer{} + _ = context.Background() + _ = fmt.Stringer(nil) + _ = strings.Builder{} + _ = errors.Is + _ = multierr.AppendInto + _ = sort.Ints + _ = tdp.Format + _ = tgerr.Error{} + _ = tdjson.Encoder{} +) + +// MessagesReportMusicListenRequest represents TL type `messages.reportMusicListen#ddbcd819`. +// +// See https://core.telegram.org/method/messages.reportMusicListen for reference. +type MessagesReportMusicListenRequest struct { + // ID field of MessagesReportMusicListenRequest. + ID InputDocumentClass + // ListenedDuration field of MessagesReportMusicListenRequest. + ListenedDuration int +} + +// MessagesReportMusicListenRequestTypeID is TL type id of MessagesReportMusicListenRequest. +const MessagesReportMusicListenRequestTypeID = 0xddbcd819 + +// Ensuring interfaces in compile-time for MessagesReportMusicListenRequest. +var ( + _ bin.Encoder = &MessagesReportMusicListenRequest{} + _ bin.Decoder = &MessagesReportMusicListenRequest{} + _ bin.BareEncoder = &MessagesReportMusicListenRequest{} + _ bin.BareDecoder = &MessagesReportMusicListenRequest{} +) + +func (r *MessagesReportMusicListenRequest) Zero() bool { + if r == nil { + return true + } + if !(r.ID == nil) { + return false + } + if !(r.ListenedDuration == 0) { + return false + } + + return true +} + +// String implements fmt.Stringer. +func (r *MessagesReportMusicListenRequest) String() string { + if r == nil { + return "MessagesReportMusicListenRequest(nil)" + } + type Alias MessagesReportMusicListenRequest + return fmt.Sprintf("MessagesReportMusicListenRequest%+v", Alias(*r)) +} + +// FillFrom fills MessagesReportMusicListenRequest from given interface. +func (r *MessagesReportMusicListenRequest) FillFrom(from interface { + GetID() (value InputDocumentClass) + GetListenedDuration() (value int) +}) { + r.ID = from.GetID() + r.ListenedDuration = from.GetListenedDuration() +} + +// TypeID returns type id in TL schema. +// +// See https://core.telegram.org/mtproto/TL-tl#remarks. +func (*MessagesReportMusicListenRequest) TypeID() uint32 { + return MessagesReportMusicListenRequestTypeID +} + +// TypeName returns name of type in TL schema. +func (*MessagesReportMusicListenRequest) TypeName() string { + return "messages.reportMusicListen" +} + +// TypeInfo returns info about TL type. +func (r *MessagesReportMusicListenRequest) TypeInfo() tdp.Type { + typ := tdp.Type{ + Name: "messages.reportMusicListen", + ID: MessagesReportMusicListenRequestTypeID, + } + if r == nil { + typ.Null = true + return typ + } + typ.Fields = []tdp.Field{ + { + Name: "ID", + SchemaName: "id", + }, + { + Name: "ListenedDuration", + SchemaName: "listened_duration", + }, + } + return typ +} + +// Encode implements bin.Encoder. +func (r *MessagesReportMusicListenRequest) Encode(b *bin.Buffer) error { + if r == nil { + return fmt.Errorf("can't encode messages.reportMusicListen#ddbcd819 as nil") + } + b.PutID(MessagesReportMusicListenRequestTypeID) + return r.EncodeBare(b) +} + +// EncodeBare implements bin.BareEncoder. +func (r *MessagesReportMusicListenRequest) EncodeBare(b *bin.Buffer) error { + if r == nil { + return fmt.Errorf("can't encode messages.reportMusicListen#ddbcd819 as nil") + } + if r.ID == nil { + return fmt.Errorf("unable to encode messages.reportMusicListen#ddbcd819: field id is nil") + } + if err := r.ID.Encode(b); err != nil { + return fmt.Errorf("unable to encode messages.reportMusicListen#ddbcd819: field id: %w", err) + } + b.PutInt(r.ListenedDuration) + return nil +} + +// Decode implements bin.Decoder. +func (r *MessagesReportMusicListenRequest) Decode(b *bin.Buffer) error { + if r == nil { + return fmt.Errorf("can't decode messages.reportMusicListen#ddbcd819 to nil") + } + if err := b.ConsumeID(MessagesReportMusicListenRequestTypeID); err != nil { + return fmt.Errorf("unable to decode messages.reportMusicListen#ddbcd819: %w", err) + } + return r.DecodeBare(b) +} + +// DecodeBare implements bin.BareDecoder. +func (r *MessagesReportMusicListenRequest) DecodeBare(b *bin.Buffer) error { + if r == nil { + return fmt.Errorf("can't decode messages.reportMusicListen#ddbcd819 to nil") + } + { + value, err := DecodeInputDocument(b) + if err != nil { + return fmt.Errorf("unable to decode messages.reportMusicListen#ddbcd819: field id: %w", err) + } + r.ID = value + } + { + value, err := b.Int() + if err != nil { + return fmt.Errorf("unable to decode messages.reportMusicListen#ddbcd819: field listened_duration: %w", err) + } + r.ListenedDuration = value + } + return nil +} + +// GetID returns value of ID field. +func (r *MessagesReportMusicListenRequest) GetID() (value InputDocumentClass) { + if r == nil { + return + } + return r.ID +} + +// GetListenedDuration returns value of ListenedDuration field. +func (r *MessagesReportMusicListenRequest) GetListenedDuration() (value int) { + if r == nil { + return + } + return r.ListenedDuration +} + +// GetIDAsNotEmpty returns mapped value of ID field. +func (r *MessagesReportMusicListenRequest) GetIDAsNotEmpty() (*InputDocument, bool) { + return r.ID.AsNotEmpty() +} + +// MessagesReportMusicListen invokes method messages.reportMusicListen#ddbcd819 returning error if any. +// +// See https://core.telegram.org/method/messages.reportMusicListen for reference. +func (c *Client) MessagesReportMusicListen(ctx context.Context, request *MessagesReportMusicListenRequest) (bool, error) { + var result BoolBox + + if err := c.rpc.Invoke(ctx, request, &result); err != nil { + return false, err + } + _, ok := result.Bool.(*BoolTrue) + return ok, nil +} diff --git a/pkg/gotd/tg/tl_messages_report_music_listen_slices_gen.go b/pkg/gotd/tg/tl_messages_report_music_listen_slices_gen.go new file mode 100644 index 00000000..ad362638 --- /dev/null +++ b/pkg/gotd/tg/tl_messages_report_music_listen_slices_gen.go @@ -0,0 +1,35 @@ +//go:build !no_gotd_slices +// +build !no_gotd_slices + +// Code generated by gotdgen, DO NOT EDIT. + +package tg + +import ( + "context" + "errors" + "fmt" + "sort" + "strings" + + "go.uber.org/multierr" + + "go.mau.fi/mautrix-telegram/pkg/gotd/bin" + "go.mau.fi/mautrix-telegram/pkg/gotd/tdjson" + "go.mau.fi/mautrix-telegram/pkg/gotd/tdp" + "go.mau.fi/mautrix-telegram/pkg/gotd/tgerr" +) + +// No-op definition for keeping imports. +var ( + _ = bin.Buffer{} + _ = context.Background() + _ = fmt.Stringer(nil) + _ = strings.Builder{} + _ = errors.Is + _ = multierr.AppendInto + _ = sort.Ints + _ = tdp.Format + _ = tgerr.Error{} + _ = tdjson.Encoder{} +) diff --git a/pkg/gotd/tg/tl_messages_report_read_metrics_gen.go b/pkg/gotd/tg/tl_messages_report_read_metrics_gen.go new file mode 100644 index 00000000..e3c5213a --- /dev/null +++ b/pkg/gotd/tg/tl_messages_report_read_metrics_gen.go @@ -0,0 +1,221 @@ +// Code generated by gotdgen, DO NOT EDIT. + +package tg + +import ( + "context" + "errors" + "fmt" + "sort" + "strings" + + "go.uber.org/multierr" + + "go.mau.fi/mautrix-telegram/pkg/gotd/bin" + "go.mau.fi/mautrix-telegram/pkg/gotd/tdjson" + "go.mau.fi/mautrix-telegram/pkg/gotd/tdp" + "go.mau.fi/mautrix-telegram/pkg/gotd/tgerr" +) + +// No-op definition for keeping imports. +var ( + _ = bin.Buffer{} + _ = context.Background() + _ = fmt.Stringer(nil) + _ = strings.Builder{} + _ = errors.Is + _ = multierr.AppendInto + _ = sort.Ints + _ = tdp.Format + _ = tgerr.Error{} + _ = tdjson.Encoder{} +) + +// MessagesReportReadMetricsRequest represents TL type `messages.reportReadMetrics#4067c5e6`. +// +// See https://core.telegram.org/method/messages.reportReadMetrics for reference. +type MessagesReportReadMetricsRequest struct { + // Peer field of MessagesReportReadMetricsRequest. + Peer InputPeerClass + // Metrics field of MessagesReportReadMetricsRequest. + Metrics []InputMessageReadMetric +} + +// MessagesReportReadMetricsRequestTypeID is TL type id of MessagesReportReadMetricsRequest. +const MessagesReportReadMetricsRequestTypeID = 0x4067c5e6 + +// Ensuring interfaces in compile-time for MessagesReportReadMetricsRequest. +var ( + _ bin.Encoder = &MessagesReportReadMetricsRequest{} + _ bin.Decoder = &MessagesReportReadMetricsRequest{} + _ bin.BareEncoder = &MessagesReportReadMetricsRequest{} + _ bin.BareDecoder = &MessagesReportReadMetricsRequest{} +) + +func (r *MessagesReportReadMetricsRequest) Zero() bool { + if r == nil { + return true + } + if !(r.Peer == nil) { + return false + } + if !(r.Metrics == nil) { + return false + } + + return true +} + +// String implements fmt.Stringer. +func (r *MessagesReportReadMetricsRequest) String() string { + if r == nil { + return "MessagesReportReadMetricsRequest(nil)" + } + type Alias MessagesReportReadMetricsRequest + return fmt.Sprintf("MessagesReportReadMetricsRequest%+v", Alias(*r)) +} + +// FillFrom fills MessagesReportReadMetricsRequest from given interface. +func (r *MessagesReportReadMetricsRequest) FillFrom(from interface { + GetPeer() (value InputPeerClass) + GetMetrics() (value []InputMessageReadMetric) +}) { + r.Peer = from.GetPeer() + r.Metrics = from.GetMetrics() +} + +// TypeID returns type id in TL schema. +// +// See https://core.telegram.org/mtproto/TL-tl#remarks. +func (*MessagesReportReadMetricsRequest) TypeID() uint32 { + return MessagesReportReadMetricsRequestTypeID +} + +// TypeName returns name of type in TL schema. +func (*MessagesReportReadMetricsRequest) TypeName() string { + return "messages.reportReadMetrics" +} + +// TypeInfo returns info about TL type. +func (r *MessagesReportReadMetricsRequest) TypeInfo() tdp.Type { + typ := tdp.Type{ + Name: "messages.reportReadMetrics", + ID: MessagesReportReadMetricsRequestTypeID, + } + if r == nil { + typ.Null = true + return typ + } + typ.Fields = []tdp.Field{ + { + Name: "Peer", + SchemaName: "peer", + }, + { + Name: "Metrics", + SchemaName: "metrics", + }, + } + return typ +} + +// Encode implements bin.Encoder. +func (r *MessagesReportReadMetricsRequest) Encode(b *bin.Buffer) error { + if r == nil { + return fmt.Errorf("can't encode messages.reportReadMetrics#4067c5e6 as nil") + } + b.PutID(MessagesReportReadMetricsRequestTypeID) + return r.EncodeBare(b) +} + +// EncodeBare implements bin.BareEncoder. +func (r *MessagesReportReadMetricsRequest) EncodeBare(b *bin.Buffer) error { + if r == nil { + return fmt.Errorf("can't encode messages.reportReadMetrics#4067c5e6 as nil") + } + if r.Peer == nil { + return fmt.Errorf("unable to encode messages.reportReadMetrics#4067c5e6: field peer is nil") + } + if err := r.Peer.Encode(b); err != nil { + return fmt.Errorf("unable to encode messages.reportReadMetrics#4067c5e6: field peer: %w", err) + } + b.PutVectorHeader(len(r.Metrics)) + for idx, v := range r.Metrics { + if err := v.Encode(b); err != nil { + return fmt.Errorf("unable to encode messages.reportReadMetrics#4067c5e6: field metrics element with index %d: %w", idx, err) + } + } + return nil +} + +// Decode implements bin.Decoder. +func (r *MessagesReportReadMetricsRequest) Decode(b *bin.Buffer) error { + if r == nil { + return fmt.Errorf("can't decode messages.reportReadMetrics#4067c5e6 to nil") + } + if err := b.ConsumeID(MessagesReportReadMetricsRequestTypeID); err != nil { + return fmt.Errorf("unable to decode messages.reportReadMetrics#4067c5e6: %w", err) + } + return r.DecodeBare(b) +} + +// DecodeBare implements bin.BareDecoder. +func (r *MessagesReportReadMetricsRequest) DecodeBare(b *bin.Buffer) error { + if r == nil { + return fmt.Errorf("can't decode messages.reportReadMetrics#4067c5e6 to nil") + } + { + value, err := DecodeInputPeer(b) + if err != nil { + return fmt.Errorf("unable to decode messages.reportReadMetrics#4067c5e6: field peer: %w", err) + } + r.Peer = value + } + { + headerLen, err := b.VectorHeader() + if err != nil { + return fmt.Errorf("unable to decode messages.reportReadMetrics#4067c5e6: field metrics: %w", err) + } + + if headerLen > 0 { + r.Metrics = make([]InputMessageReadMetric, 0, headerLen%bin.PreallocateLimit) + } + for idx := 0; idx < headerLen; idx++ { + var value InputMessageReadMetric + if err := value.Decode(b); err != nil { + return fmt.Errorf("unable to decode messages.reportReadMetrics#4067c5e6: field metrics: %w", err) + } + r.Metrics = append(r.Metrics, value) + } + } + return nil +} + +// GetPeer returns value of Peer field. +func (r *MessagesReportReadMetricsRequest) GetPeer() (value InputPeerClass) { + if r == nil { + return + } + return r.Peer +} + +// GetMetrics returns value of Metrics field. +func (r *MessagesReportReadMetricsRequest) GetMetrics() (value []InputMessageReadMetric) { + if r == nil { + return + } + return r.Metrics +} + +// MessagesReportReadMetrics invokes method messages.reportReadMetrics#4067c5e6 returning error if any. +// +// See https://core.telegram.org/method/messages.reportReadMetrics for reference. +func (c *Client) MessagesReportReadMetrics(ctx context.Context, request *MessagesReportReadMetricsRequest) (bool, error) { + var result BoolBox + + if err := c.rpc.Invoke(ctx, request, &result); err != nil { + return false, err + } + _, ok := result.Bool.(*BoolTrue) + return ok, nil +} diff --git a/pkg/gotd/tg/tl_messages_report_read_metrics_slices_gen.go b/pkg/gotd/tg/tl_messages_report_read_metrics_slices_gen.go new file mode 100644 index 00000000..ad362638 --- /dev/null +++ b/pkg/gotd/tg/tl_messages_report_read_metrics_slices_gen.go @@ -0,0 +1,35 @@ +//go:build !no_gotd_slices +// +build !no_gotd_slices + +// Code generated by gotdgen, DO NOT EDIT. + +package tg + +import ( + "context" + "errors" + "fmt" + "sort" + "strings" + + "go.uber.org/multierr" + + "go.mau.fi/mautrix-telegram/pkg/gotd/bin" + "go.mau.fi/mautrix-telegram/pkg/gotd/tdjson" + "go.mau.fi/mautrix-telegram/pkg/gotd/tdp" + "go.mau.fi/mautrix-telegram/pkg/gotd/tgerr" +) + +// No-op definition for keeping imports. +var ( + _ = bin.Buffer{} + _ = context.Background() + _ = fmt.Stringer(nil) + _ = strings.Builder{} + _ = errors.Is + _ = multierr.AppendInto + _ = sort.Ints + _ = tdp.Format + _ = tgerr.Error{} + _ = tdjson.Encoder{} +) diff --git a/pkg/gotd/tg/tl_messages_send_bot_requested_peer_gen.go b/pkg/gotd/tg/tl_messages_send_bot_requested_peer_gen.go index 24ce8246..a3fe8e3f 100644 --- a/pkg/gotd/tg/tl_messages_send_bot_requested_peer_gen.go +++ b/pkg/gotd/tg/tl_messages_send_bot_requested_peer_gen.go @@ -31,7 +31,7 @@ var ( _ = tdjson.Encoder{} ) -// MessagesSendBotRequestedPeerRequest represents TL type `messages.sendBotRequestedPeer#91b2d060`. +// MessagesSendBotRequestedPeerRequest represents TL type `messages.sendBotRequestedPeer#6c5cf2a7`. // Send one or more chosen peers, as requested by a keyboardButtonRequestPeer¹ button. // // Links: @@ -39,6 +39,8 @@ var ( // // See https://core.telegram.org/method/messages.sendBotRequestedPeer for reference. type MessagesSendBotRequestedPeerRequest struct { + // Flags field of MessagesSendBotRequestedPeerRequest. + Flags bin.Fields // The bot that sent the keyboardButtonRequestPeer¹ button. // // Links: @@ -49,7 +51,13 @@ type MessagesSendBotRequestedPeerRequest struct { // // Links: // 1) https://core.telegram.org/constructor/keyboardButtonRequestPeer + // + // Use SetMsgID and GetMsgID helpers. MsgID int + // WebappReqID field of MessagesSendBotRequestedPeerRequest. + // + // Use SetWebappReqID and GetWebappReqID helpers. + WebappReqID string // The button_id field from the keyboardButtonRequestPeer¹ constructor. // // Links: @@ -60,7 +68,7 @@ type MessagesSendBotRequestedPeerRequest struct { } // MessagesSendBotRequestedPeerRequestTypeID is TL type id of MessagesSendBotRequestedPeerRequest. -const MessagesSendBotRequestedPeerRequestTypeID = 0x91b2d060 +const MessagesSendBotRequestedPeerRequestTypeID = 0x6c5cf2a7 // Ensuring interfaces in compile-time for MessagesSendBotRequestedPeerRequest. var ( @@ -74,12 +82,18 @@ func (s *MessagesSendBotRequestedPeerRequest) Zero() bool { if s == nil { return true } + if !(s.Flags.Zero()) { + return false + } if !(s.Peer == nil) { return false } if !(s.MsgID == 0) { return false } + if !(s.WebappReqID == "") { + return false + } if !(s.ButtonID == 0) { return false } @@ -102,12 +116,20 @@ func (s *MessagesSendBotRequestedPeerRequest) String() string { // FillFrom fills MessagesSendBotRequestedPeerRequest from given interface. func (s *MessagesSendBotRequestedPeerRequest) FillFrom(from interface { GetPeer() (value InputPeerClass) - GetMsgID() (value int) + GetMsgID() (value int, ok bool) + GetWebappReqID() (value string, ok bool) GetButtonID() (value int) GetRequestedPeers() (value []InputPeerClass) }) { s.Peer = from.GetPeer() - s.MsgID = from.GetMsgID() + if val, ok := from.GetMsgID(); ok { + s.MsgID = val + } + + if val, ok := from.GetWebappReqID(); ok { + s.WebappReqID = val + } + s.ButtonID = from.GetButtonID() s.RequestedPeers = from.GetRequestedPeers() } @@ -142,6 +164,12 @@ func (s *MessagesSendBotRequestedPeerRequest) TypeInfo() tdp.Type { { Name: "MsgID", SchemaName: "msg_id", + Null: !s.Flags.Has(0), + }, + { + Name: "WebappReqID", + SchemaName: "webapp_req_id", + Null: !s.Flags.Has(1), }, { Name: "ButtonID", @@ -155,10 +183,20 @@ func (s *MessagesSendBotRequestedPeerRequest) TypeInfo() tdp.Type { return typ } +// SetFlags sets flags for non-zero fields. +func (s *MessagesSendBotRequestedPeerRequest) SetFlags() { + if !(s.MsgID == 0) { + s.Flags.Set(0) + } + if !(s.WebappReqID == "") { + s.Flags.Set(1) + } +} + // Encode implements bin.Encoder. func (s *MessagesSendBotRequestedPeerRequest) Encode(b *bin.Buffer) error { if s == nil { - return fmt.Errorf("can't encode messages.sendBotRequestedPeer#91b2d060 as nil") + return fmt.Errorf("can't encode messages.sendBotRequestedPeer#6c5cf2a7 as nil") } b.PutID(MessagesSendBotRequestedPeerRequestTypeID) return s.EncodeBare(b) @@ -167,23 +205,32 @@ func (s *MessagesSendBotRequestedPeerRequest) Encode(b *bin.Buffer) error { // EncodeBare implements bin.BareEncoder. func (s *MessagesSendBotRequestedPeerRequest) EncodeBare(b *bin.Buffer) error { if s == nil { - return fmt.Errorf("can't encode messages.sendBotRequestedPeer#91b2d060 as nil") + return fmt.Errorf("can't encode messages.sendBotRequestedPeer#6c5cf2a7 as nil") + } + s.SetFlags() + if err := s.Flags.Encode(b); err != nil { + return fmt.Errorf("unable to encode messages.sendBotRequestedPeer#6c5cf2a7: field flags: %w", err) } if s.Peer == nil { - return fmt.Errorf("unable to encode messages.sendBotRequestedPeer#91b2d060: field peer is nil") + return fmt.Errorf("unable to encode messages.sendBotRequestedPeer#6c5cf2a7: field peer is nil") } if err := s.Peer.Encode(b); err != nil { - return fmt.Errorf("unable to encode messages.sendBotRequestedPeer#91b2d060: field peer: %w", err) + return fmt.Errorf("unable to encode messages.sendBotRequestedPeer#6c5cf2a7: field peer: %w", err) + } + if s.Flags.Has(0) { + b.PutInt(s.MsgID) + } + if s.Flags.Has(1) { + b.PutString(s.WebappReqID) } - b.PutInt(s.MsgID) b.PutInt(s.ButtonID) b.PutVectorHeader(len(s.RequestedPeers)) for idx, v := range s.RequestedPeers { if v == nil { - return fmt.Errorf("unable to encode messages.sendBotRequestedPeer#91b2d060: field requested_peers element with index %d is nil", idx) + return fmt.Errorf("unable to encode messages.sendBotRequestedPeer#6c5cf2a7: field requested_peers element with index %d is nil", idx) } if err := v.Encode(b); err != nil { - return fmt.Errorf("unable to encode messages.sendBotRequestedPeer#91b2d060: field requested_peers element with index %d: %w", idx, err) + return fmt.Errorf("unable to encode messages.sendBotRequestedPeer#6c5cf2a7: field requested_peers element with index %d: %w", idx, err) } } return nil @@ -192,10 +239,10 @@ func (s *MessagesSendBotRequestedPeerRequest) EncodeBare(b *bin.Buffer) error { // Decode implements bin.Decoder. func (s *MessagesSendBotRequestedPeerRequest) Decode(b *bin.Buffer) error { if s == nil { - return fmt.Errorf("can't decode messages.sendBotRequestedPeer#91b2d060 to nil") + return fmt.Errorf("can't decode messages.sendBotRequestedPeer#6c5cf2a7 to nil") } if err := b.ConsumeID(MessagesSendBotRequestedPeerRequestTypeID); err != nil { - return fmt.Errorf("unable to decode messages.sendBotRequestedPeer#91b2d060: %w", err) + return fmt.Errorf("unable to decode messages.sendBotRequestedPeer#6c5cf2a7: %w", err) } return s.DecodeBare(b) } @@ -203,33 +250,45 @@ func (s *MessagesSendBotRequestedPeerRequest) Decode(b *bin.Buffer) error { // DecodeBare implements bin.BareDecoder. func (s *MessagesSendBotRequestedPeerRequest) DecodeBare(b *bin.Buffer) error { if s == nil { - return fmt.Errorf("can't decode messages.sendBotRequestedPeer#91b2d060 to nil") + return fmt.Errorf("can't decode messages.sendBotRequestedPeer#6c5cf2a7 to nil") + } + { + if err := s.Flags.Decode(b); err != nil { + return fmt.Errorf("unable to decode messages.sendBotRequestedPeer#6c5cf2a7: field flags: %w", err) + } } { value, err := DecodeInputPeer(b) if err != nil { - return fmt.Errorf("unable to decode messages.sendBotRequestedPeer#91b2d060: field peer: %w", err) + return fmt.Errorf("unable to decode messages.sendBotRequestedPeer#6c5cf2a7: field peer: %w", err) } s.Peer = value } - { + if s.Flags.Has(0) { value, err := b.Int() if err != nil { - return fmt.Errorf("unable to decode messages.sendBotRequestedPeer#91b2d060: field msg_id: %w", err) + return fmt.Errorf("unable to decode messages.sendBotRequestedPeer#6c5cf2a7: field msg_id: %w", err) } s.MsgID = value } + if s.Flags.Has(1) { + value, err := b.String() + if err != nil { + return fmt.Errorf("unable to decode messages.sendBotRequestedPeer#6c5cf2a7: field webapp_req_id: %w", err) + } + s.WebappReqID = value + } { value, err := b.Int() if err != nil { - return fmt.Errorf("unable to decode messages.sendBotRequestedPeer#91b2d060: field button_id: %w", err) + return fmt.Errorf("unable to decode messages.sendBotRequestedPeer#6c5cf2a7: field button_id: %w", err) } s.ButtonID = value } { headerLen, err := b.VectorHeader() if err != nil { - return fmt.Errorf("unable to decode messages.sendBotRequestedPeer#91b2d060: field requested_peers: %w", err) + return fmt.Errorf("unable to decode messages.sendBotRequestedPeer#6c5cf2a7: field requested_peers: %w", err) } if headerLen > 0 { @@ -238,7 +297,7 @@ func (s *MessagesSendBotRequestedPeerRequest) DecodeBare(b *bin.Buffer) error { for idx := 0; idx < headerLen; idx++ { value, err := DecodeInputPeer(b) if err != nil { - return fmt.Errorf("unable to decode messages.sendBotRequestedPeer#91b2d060: field requested_peers: %w", err) + return fmt.Errorf("unable to decode messages.sendBotRequestedPeer#6c5cf2a7: field requested_peers: %w", err) } s.RequestedPeers = append(s.RequestedPeers, value) } @@ -254,12 +313,40 @@ func (s *MessagesSendBotRequestedPeerRequest) GetPeer() (value InputPeerClass) { return s.Peer } -// GetMsgID returns value of MsgID field. -func (s *MessagesSendBotRequestedPeerRequest) GetMsgID() (value int) { +// SetMsgID sets value of MsgID conditional field. +func (s *MessagesSendBotRequestedPeerRequest) SetMsgID(value int) { + s.Flags.Set(0) + s.MsgID = value +} + +// GetMsgID returns value of MsgID conditional field and +// boolean which is true if field was set. +func (s *MessagesSendBotRequestedPeerRequest) GetMsgID() (value int, ok bool) { if s == nil { return } - return s.MsgID + if !s.Flags.Has(0) { + return value, false + } + return s.MsgID, true +} + +// SetWebappReqID sets value of WebappReqID conditional field. +func (s *MessagesSendBotRequestedPeerRequest) SetWebappReqID(value string) { + s.Flags.Set(1) + s.WebappReqID = value +} + +// GetWebappReqID returns value of WebappReqID conditional field and +// boolean which is true if field was set. +func (s *MessagesSendBotRequestedPeerRequest) GetWebappReqID() (value string, ok bool) { + if s == nil { + return + } + if !s.Flags.Has(1) { + return value, false + } + return s.WebappReqID, true } // GetButtonID returns value of ButtonID field. @@ -283,7 +370,7 @@ func (s *MessagesSendBotRequestedPeerRequest) MapRequestedPeers() (value InputPe return InputPeerClassArray(s.RequestedPeers) } -// MessagesSendBotRequestedPeer invokes method messages.sendBotRequestedPeer#91b2d060 returning error if any. +// MessagesSendBotRequestedPeer invokes method messages.sendBotRequestedPeer#6c5cf2a7 returning error if any. // Send one or more chosen peers, as requested by a keyboardButtonRequestPeer¹ button. // // Links: diff --git a/pkg/gotd/tg/tl_messages_summarize_text_gen.go b/pkg/gotd/tg/tl_messages_summarize_text_gen.go index a491e78c..834a9e50 100644 --- a/pkg/gotd/tg/tl_messages_summarize_text_gen.go +++ b/pkg/gotd/tg/tl_messages_summarize_text_gen.go @@ -31,7 +31,7 @@ var ( _ = tdjson.Encoder{} ) -// MessagesSummarizeTextRequest represents TL type `messages.summarizeText#9d4104e2`. +// MessagesSummarizeTextRequest represents TL type `messages.summarizeText#abbbd346`. // // See https://core.telegram.org/method/messages.summarizeText for reference. type MessagesSummarizeTextRequest struct { @@ -45,10 +45,14 @@ type MessagesSummarizeTextRequest struct { // // Use SetToLang and GetToLang helpers. ToLang string + // Tone field of MessagesSummarizeTextRequest. + // + // Use SetTone and GetTone helpers. + Tone string } // MessagesSummarizeTextRequestTypeID is TL type id of MessagesSummarizeTextRequest. -const MessagesSummarizeTextRequestTypeID = 0x9d4104e2 +const MessagesSummarizeTextRequestTypeID = 0xabbbd346 // Ensuring interfaces in compile-time for MessagesSummarizeTextRequest. var ( @@ -74,6 +78,9 @@ func (s *MessagesSummarizeTextRequest) Zero() bool { if !(s.ToLang == "") { return false } + if !(s.Tone == "") { + return false + } return true } @@ -92,6 +99,7 @@ func (s *MessagesSummarizeTextRequest) FillFrom(from interface { GetPeer() (value InputPeerClass) GetID() (value int) GetToLang() (value string, ok bool) + GetTone() (value string, ok bool) }) { s.Peer = from.GetPeer() s.ID = from.GetID() @@ -99,6 +107,10 @@ func (s *MessagesSummarizeTextRequest) FillFrom(from interface { s.ToLang = val } + if val, ok := from.GetTone(); ok { + s.Tone = val + } + } // TypeID returns type id in TL schema. @@ -137,6 +149,11 @@ func (s *MessagesSummarizeTextRequest) TypeInfo() tdp.Type { SchemaName: "to_lang", Null: !s.Flags.Has(0), }, + { + Name: "Tone", + SchemaName: "tone", + Null: !s.Flags.Has(2), + }, } return typ } @@ -146,12 +163,15 @@ func (s *MessagesSummarizeTextRequest) SetFlags() { if !(s.ToLang == "") { s.Flags.Set(0) } + if !(s.Tone == "") { + s.Flags.Set(2) + } } // Encode implements bin.Encoder. func (s *MessagesSummarizeTextRequest) Encode(b *bin.Buffer) error { if s == nil { - return fmt.Errorf("can't encode messages.summarizeText#9d4104e2 as nil") + return fmt.Errorf("can't encode messages.summarizeText#abbbd346 as nil") } b.PutID(MessagesSummarizeTextRequestTypeID) return s.EncodeBare(b) @@ -160,32 +180,35 @@ func (s *MessagesSummarizeTextRequest) Encode(b *bin.Buffer) error { // EncodeBare implements bin.BareEncoder. func (s *MessagesSummarizeTextRequest) EncodeBare(b *bin.Buffer) error { if s == nil { - return fmt.Errorf("can't encode messages.summarizeText#9d4104e2 as nil") + return fmt.Errorf("can't encode messages.summarizeText#abbbd346 as nil") } s.SetFlags() if err := s.Flags.Encode(b); err != nil { - return fmt.Errorf("unable to encode messages.summarizeText#9d4104e2: field flags: %w", err) + return fmt.Errorf("unable to encode messages.summarizeText#abbbd346: field flags: %w", err) } if s.Peer == nil { - return fmt.Errorf("unable to encode messages.summarizeText#9d4104e2: field peer is nil") + return fmt.Errorf("unable to encode messages.summarizeText#abbbd346: field peer is nil") } if err := s.Peer.Encode(b); err != nil { - return fmt.Errorf("unable to encode messages.summarizeText#9d4104e2: field peer: %w", err) + return fmt.Errorf("unable to encode messages.summarizeText#abbbd346: field peer: %w", err) } b.PutInt(s.ID) if s.Flags.Has(0) { b.PutString(s.ToLang) } + if s.Flags.Has(2) { + b.PutString(s.Tone) + } return nil } // Decode implements bin.Decoder. func (s *MessagesSummarizeTextRequest) Decode(b *bin.Buffer) error { if s == nil { - return fmt.Errorf("can't decode messages.summarizeText#9d4104e2 to nil") + return fmt.Errorf("can't decode messages.summarizeText#abbbd346 to nil") } if err := b.ConsumeID(MessagesSummarizeTextRequestTypeID); err != nil { - return fmt.Errorf("unable to decode messages.summarizeText#9d4104e2: %w", err) + return fmt.Errorf("unable to decode messages.summarizeText#abbbd346: %w", err) } return s.DecodeBare(b) } @@ -193,34 +216,41 @@ func (s *MessagesSummarizeTextRequest) Decode(b *bin.Buffer) error { // DecodeBare implements bin.BareDecoder. func (s *MessagesSummarizeTextRequest) DecodeBare(b *bin.Buffer) error { if s == nil { - return fmt.Errorf("can't decode messages.summarizeText#9d4104e2 to nil") + return fmt.Errorf("can't decode messages.summarizeText#abbbd346 to nil") } { if err := s.Flags.Decode(b); err != nil { - return fmt.Errorf("unable to decode messages.summarizeText#9d4104e2: field flags: %w", err) + return fmt.Errorf("unable to decode messages.summarizeText#abbbd346: field flags: %w", err) } } { value, err := DecodeInputPeer(b) if err != nil { - return fmt.Errorf("unable to decode messages.summarizeText#9d4104e2: field peer: %w", err) + return fmt.Errorf("unable to decode messages.summarizeText#abbbd346: field peer: %w", err) } s.Peer = value } { value, err := b.Int() if err != nil { - return fmt.Errorf("unable to decode messages.summarizeText#9d4104e2: field id: %w", err) + return fmt.Errorf("unable to decode messages.summarizeText#abbbd346: field id: %w", err) } s.ID = value } if s.Flags.Has(0) { value, err := b.String() if err != nil { - return fmt.Errorf("unable to decode messages.summarizeText#9d4104e2: field to_lang: %w", err) + return fmt.Errorf("unable to decode messages.summarizeText#abbbd346: field to_lang: %w", err) } s.ToLang = value } + if s.Flags.Has(2) { + value, err := b.String() + if err != nil { + return fmt.Errorf("unable to decode messages.summarizeText#abbbd346: field tone: %w", err) + } + s.Tone = value + } return nil } @@ -258,7 +288,25 @@ func (s *MessagesSummarizeTextRequest) GetToLang() (value string, ok bool) { return s.ToLang, true } -// MessagesSummarizeText invokes method messages.summarizeText#9d4104e2 returning error if any. +// SetTone sets value of Tone conditional field. +func (s *MessagesSummarizeTextRequest) SetTone(value string) { + s.Flags.Set(2) + s.Tone = value +} + +// GetTone returns value of Tone conditional field and +// boolean which is true if field was set. +func (s *MessagesSummarizeTextRequest) GetTone() (value string, ok bool) { + if s == nil { + return + } + if !s.Flags.Has(2) { + return value, false + } + return s.Tone, true +} + +// MessagesSummarizeText invokes method messages.summarizeText#abbbd346 returning error if any. // // See https://core.telegram.org/method/messages.summarizeText for reference. func (c *Client) MessagesSummarizeText(ctx context.Context, request *MessagesSummarizeTextRequest) (*TextWithEntities, error) { diff --git a/pkg/gotd/tg/tl_messages_translate_text_gen.go b/pkg/gotd/tg/tl_messages_translate_text_gen.go index cdb6a415..b11bddad 100644 --- a/pkg/gotd/tg/tl_messages_translate_text_gen.go +++ b/pkg/gotd/tg/tl_messages_translate_text_gen.go @@ -31,7 +31,7 @@ var ( _ = tdjson.Encoder{} ) -// MessagesTranslateTextRequest represents TL type `messages.translateText#63183030`. +// MessagesTranslateTextRequest represents TL type `messages.translateText#a5eec345`. // Translate a given text. // Styled text entities¹ will only be preserved for Telegram Premium² users. // @@ -60,10 +60,14 @@ type MessagesTranslateTextRequest struct { Text []TextWithEntities // Two-letter ISO 639-1 language code of the language to which the message is translated ToLang string + // Tone field of MessagesTranslateTextRequest. + // + // Use SetTone and GetTone helpers. + Tone string } // MessagesTranslateTextRequestTypeID is TL type id of MessagesTranslateTextRequest. -const MessagesTranslateTextRequestTypeID = 0x63183030 +const MessagesTranslateTextRequestTypeID = 0xa5eec345 // Ensuring interfaces in compile-time for MessagesTranslateTextRequest. var ( @@ -92,6 +96,9 @@ func (t *MessagesTranslateTextRequest) Zero() bool { if !(t.ToLang == "") { return false } + if !(t.Tone == "") { + return false + } return true } @@ -111,6 +118,7 @@ func (t *MessagesTranslateTextRequest) FillFrom(from interface { GetID() (value []int, ok bool) GetText() (value []TextWithEntities, ok bool) GetToLang() (value string) + GetTone() (value string, ok bool) }) { if val, ok := from.GetPeer(); ok { t.Peer = val @@ -125,6 +133,10 @@ func (t *MessagesTranslateTextRequest) FillFrom(from interface { } t.ToLang = from.GetToLang() + if val, ok := from.GetTone(); ok { + t.Tone = val + } + } // TypeID returns type id in TL schema. @@ -169,6 +181,11 @@ func (t *MessagesTranslateTextRequest) TypeInfo() tdp.Type { Name: "ToLang", SchemaName: "to_lang", }, + { + Name: "Tone", + SchemaName: "tone", + Null: !t.Flags.Has(2), + }, } return typ } @@ -184,12 +201,15 @@ func (t *MessagesTranslateTextRequest) SetFlags() { if !(t.Text == nil) { t.Flags.Set(1) } + if !(t.Tone == "") { + t.Flags.Set(2) + } } // Encode implements bin.Encoder. func (t *MessagesTranslateTextRequest) Encode(b *bin.Buffer) error { if t == nil { - return fmt.Errorf("can't encode messages.translateText#63183030 as nil") + return fmt.Errorf("can't encode messages.translateText#a5eec345 as nil") } b.PutID(MessagesTranslateTextRequestTypeID) return t.EncodeBare(b) @@ -198,18 +218,18 @@ func (t *MessagesTranslateTextRequest) Encode(b *bin.Buffer) error { // EncodeBare implements bin.BareEncoder. func (t *MessagesTranslateTextRequest) EncodeBare(b *bin.Buffer) error { if t == nil { - return fmt.Errorf("can't encode messages.translateText#63183030 as nil") + return fmt.Errorf("can't encode messages.translateText#a5eec345 as nil") } t.SetFlags() if err := t.Flags.Encode(b); err != nil { - return fmt.Errorf("unable to encode messages.translateText#63183030: field flags: %w", err) + return fmt.Errorf("unable to encode messages.translateText#a5eec345: field flags: %w", err) } if t.Flags.Has(0) { if t.Peer == nil { - return fmt.Errorf("unable to encode messages.translateText#63183030: field peer is nil") + return fmt.Errorf("unable to encode messages.translateText#a5eec345: field peer is nil") } if err := t.Peer.Encode(b); err != nil { - return fmt.Errorf("unable to encode messages.translateText#63183030: field peer: %w", err) + return fmt.Errorf("unable to encode messages.translateText#a5eec345: field peer: %w", err) } } if t.Flags.Has(0) { @@ -222,21 +242,24 @@ func (t *MessagesTranslateTextRequest) EncodeBare(b *bin.Buffer) error { b.PutVectorHeader(len(t.Text)) for idx, v := range t.Text { if err := v.Encode(b); err != nil { - return fmt.Errorf("unable to encode messages.translateText#63183030: field text element with index %d: %w", idx, err) + return fmt.Errorf("unable to encode messages.translateText#a5eec345: field text element with index %d: %w", idx, err) } } } b.PutString(t.ToLang) + if t.Flags.Has(2) { + b.PutString(t.Tone) + } return nil } // Decode implements bin.Decoder. func (t *MessagesTranslateTextRequest) Decode(b *bin.Buffer) error { if t == nil { - return fmt.Errorf("can't decode messages.translateText#63183030 to nil") + return fmt.Errorf("can't decode messages.translateText#a5eec345 to nil") } if err := b.ConsumeID(MessagesTranslateTextRequestTypeID); err != nil { - return fmt.Errorf("unable to decode messages.translateText#63183030: %w", err) + return fmt.Errorf("unable to decode messages.translateText#a5eec345: %w", err) } return t.DecodeBare(b) } @@ -244,24 +267,24 @@ func (t *MessagesTranslateTextRequest) Decode(b *bin.Buffer) error { // DecodeBare implements bin.BareDecoder. func (t *MessagesTranslateTextRequest) DecodeBare(b *bin.Buffer) error { if t == nil { - return fmt.Errorf("can't decode messages.translateText#63183030 to nil") + return fmt.Errorf("can't decode messages.translateText#a5eec345 to nil") } { if err := t.Flags.Decode(b); err != nil { - return fmt.Errorf("unable to decode messages.translateText#63183030: field flags: %w", err) + return fmt.Errorf("unable to decode messages.translateText#a5eec345: field flags: %w", err) } } if t.Flags.Has(0) { value, err := DecodeInputPeer(b) if err != nil { - return fmt.Errorf("unable to decode messages.translateText#63183030: field peer: %w", err) + return fmt.Errorf("unable to decode messages.translateText#a5eec345: field peer: %w", err) } t.Peer = value } if t.Flags.Has(0) { headerLen, err := b.VectorHeader() if err != nil { - return fmt.Errorf("unable to decode messages.translateText#63183030: field id: %w", err) + return fmt.Errorf("unable to decode messages.translateText#a5eec345: field id: %w", err) } if headerLen > 0 { @@ -270,7 +293,7 @@ func (t *MessagesTranslateTextRequest) DecodeBare(b *bin.Buffer) error { for idx := 0; idx < headerLen; idx++ { value, err := b.Int() if err != nil { - return fmt.Errorf("unable to decode messages.translateText#63183030: field id: %w", err) + return fmt.Errorf("unable to decode messages.translateText#a5eec345: field id: %w", err) } t.ID = append(t.ID, value) } @@ -278,7 +301,7 @@ func (t *MessagesTranslateTextRequest) DecodeBare(b *bin.Buffer) error { if t.Flags.Has(1) { headerLen, err := b.VectorHeader() if err != nil { - return fmt.Errorf("unable to decode messages.translateText#63183030: field text: %w", err) + return fmt.Errorf("unable to decode messages.translateText#a5eec345: field text: %w", err) } if headerLen > 0 { @@ -287,7 +310,7 @@ func (t *MessagesTranslateTextRequest) DecodeBare(b *bin.Buffer) error { for idx := 0; idx < headerLen; idx++ { var value TextWithEntities if err := value.Decode(b); err != nil { - return fmt.Errorf("unable to decode messages.translateText#63183030: field text: %w", err) + return fmt.Errorf("unable to decode messages.translateText#a5eec345: field text: %w", err) } t.Text = append(t.Text, value) } @@ -295,10 +318,17 @@ func (t *MessagesTranslateTextRequest) DecodeBare(b *bin.Buffer) error { { value, err := b.String() if err != nil { - return fmt.Errorf("unable to decode messages.translateText#63183030: field to_lang: %w", err) + return fmt.Errorf("unable to decode messages.translateText#a5eec345: field to_lang: %w", err) } t.ToLang = value } + if t.Flags.Has(2) { + value, err := b.String() + if err != nil { + return fmt.Errorf("unable to decode messages.translateText#a5eec345: field tone: %w", err) + } + t.Tone = value + } return nil } @@ -364,7 +394,25 @@ func (t *MessagesTranslateTextRequest) GetToLang() (value string) { return t.ToLang } -// MessagesTranslateText invokes method messages.translateText#63183030 returning error if any. +// SetTone sets value of Tone conditional field. +func (t *MessagesTranslateTextRequest) SetTone(value string) { + t.Flags.Set(2) + t.Tone = value +} + +// GetTone returns value of Tone conditional field and +// boolean which is true if field was set. +func (t *MessagesTranslateTextRequest) GetTone() (value string, ok bool) { + if t == nil { + return + } + if !t.Flags.Has(2) { + return value, false + } + return t.Tone, true +} + +// MessagesTranslateText invokes method messages.translateText#a5eec345 returning error if any. // Translate a given text. // Styled text entities¹ will only be preserved for Telegram Premium² users. // diff --git a/pkg/gotd/tg/tl_payments_get_resale_star_gifts_gen.go b/pkg/gotd/tg/tl_payments_get_resale_star_gifts_gen.go index edf29050..7d326e0b 100644 --- a/pkg/gotd/tg/tl_payments_get_resale_star_gifts_gen.go +++ b/pkg/gotd/tg/tl_payments_get_resale_star_gifts_gen.go @@ -56,6 +56,8 @@ type PaymentsGetResaleStarGiftsRequest struct { SortByNum bool // ForCraft field of PaymentsGetResaleStarGiftsRequest. ForCraft bool + // StarsOnly field of PaymentsGetResaleStarGiftsRequest. + StarsOnly bool // 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² @@ -117,6 +119,9 @@ func (g *PaymentsGetResaleStarGiftsRequest) Zero() bool { if !(g.ForCraft == false) { return false } + if !(g.StarsOnly == false) { + return false + } if !(g.AttributesHash == 0) { return false } @@ -150,6 +155,7 @@ func (g *PaymentsGetResaleStarGiftsRequest) FillFrom(from interface { GetSortByPrice() (value bool) GetSortByNum() (value bool) GetForCraft() (value bool) + GetStarsOnly() (value bool) GetAttributesHash() (value int64, ok bool) GetGiftID() (value int64) GetAttributes() (value []StarGiftAttributeIDClass, ok bool) @@ -159,6 +165,7 @@ func (g *PaymentsGetResaleStarGiftsRequest) FillFrom(from interface { g.SortByPrice = from.GetSortByPrice() g.SortByNum = from.GetSortByNum() g.ForCraft = from.GetForCraft() + g.StarsOnly = from.GetStarsOnly() if val, ok := from.GetAttributesHash(); ok { g.AttributesHash = val } @@ -210,6 +217,11 @@ func (g *PaymentsGetResaleStarGiftsRequest) TypeInfo() tdp.Type { SchemaName: "for_craft", Null: !g.Flags.Has(4), }, + { + Name: "StarsOnly", + SchemaName: "stars_only", + Null: !g.Flags.Has(5), + }, { Name: "AttributesHash", SchemaName: "attributes_hash", @@ -247,6 +259,9 @@ func (g *PaymentsGetResaleStarGiftsRequest) SetFlags() { if !(g.ForCraft == false) { g.Flags.Set(4) } + if !(g.StarsOnly == false) { + g.Flags.Set(5) + } if !(g.AttributesHash == 0) { g.Flags.Set(0) } @@ -317,6 +332,7 @@ func (g *PaymentsGetResaleStarGiftsRequest) DecodeBare(b *bin.Buffer) error { g.SortByPrice = g.Flags.Has(1) g.SortByNum = g.Flags.Has(2) g.ForCraft = g.Flags.Has(4) + g.StarsOnly = g.Flags.Has(5) if g.Flags.Has(0) { value, err := b.Long() if err != nil { @@ -422,6 +438,25 @@ func (g *PaymentsGetResaleStarGiftsRequest) GetForCraft() (value bool) { return g.Flags.Has(4) } +// SetStarsOnly sets value of StarsOnly conditional field. +func (g *PaymentsGetResaleStarGiftsRequest) SetStarsOnly(value bool) { + if value { + g.Flags.Set(5) + g.StarsOnly = true + } else { + g.Flags.Unset(5) + g.StarsOnly = false + } +} + +// GetStarsOnly returns value of StarsOnly conditional field. +func (g *PaymentsGetResaleStarGiftsRequest) GetStarsOnly() (value bool) { + if g == nil { + return + } + return g.Flags.Has(5) +} + // SetAttributesHash sets value of AttributesHash conditional field. func (g *PaymentsGetResaleStarGiftsRequest) SetAttributesHash(value int64) { g.Flags.Set(0) diff --git a/pkg/gotd/tg/tl_poll_answer_gen.go b/pkg/gotd/tg/tl_poll_answer_gen.go index a8664ab0..20655364 100644 --- a/pkg/gotd/tg/tl_poll_answer_gen.go +++ b/pkg/gotd/tg/tl_poll_answer_gen.go @@ -31,11 +31,13 @@ var ( _ = tdjson.Encoder{} ) -// PollAnswer represents TL type `pollAnswer#ff16e2ca`. +// PollAnswer represents TL type `pollAnswer#4b7d786a`. // A possible answer of a poll // // See https://core.telegram.org/constructor/pollAnswer for reference. type PollAnswer struct { + // Flags field of PollAnswer. + Flags bin.Fields // Textual representation of the answer (only Premium¹ users can use custom emoji // entities² here). // @@ -48,10 +50,25 @@ type PollAnswer struct { // Links: // 1) https://core.telegram.org/method/messages.sendVote Option []byte + // Media field of PollAnswer. + // + // Use SetMedia and GetMedia helpers. + Media MessageMediaClass + // AddedBy field of PollAnswer. + // + // Use SetAddedBy and GetAddedBy helpers. + AddedBy PeerClass + // Date field of PollAnswer. + // + // Use SetDate and GetDate helpers. + Date int } // PollAnswerTypeID is TL type id of PollAnswer. -const PollAnswerTypeID = 0xff16e2ca +const PollAnswerTypeID = 0x4b7d786a + +// construct implements constructor of PollAnswerClass. +func (p PollAnswer) construct() PollAnswerClass { return &p } // Ensuring interfaces in compile-time for PollAnswer. var ( @@ -59,18 +76,32 @@ var ( _ bin.Decoder = &PollAnswer{} _ bin.BareEncoder = &PollAnswer{} _ bin.BareDecoder = &PollAnswer{} + + _ PollAnswerClass = &PollAnswer{} ) func (p *PollAnswer) Zero() bool { if p == nil { return true } + if !(p.Flags.Zero()) { + return false + } if !(p.Text.Zero()) { return false } if !(p.Option == nil) { return false } + if !(p.Media == nil) { + return false + } + if !(p.AddedBy == nil) { + return false + } + if !(p.Date == 0) { + return false + } return true } @@ -88,9 +119,24 @@ func (p *PollAnswer) String() string { func (p *PollAnswer) FillFrom(from interface { GetText() (value TextWithEntities) GetOption() (value []byte) + GetMedia() (value MessageMediaClass, ok bool) + GetAddedBy() (value PeerClass, ok bool) + GetDate() (value int, ok bool) }) { p.Text = from.GetText() p.Option = from.GetOption() + if val, ok := from.GetMedia(); ok { + p.Media = val + } + + if val, ok := from.GetAddedBy(); ok { + p.AddedBy = val + } + + if val, ok := from.GetDate(); ok { + p.Date = val + } + } // TypeID returns type id in TL schema. @@ -124,14 +170,42 @@ func (p *PollAnswer) TypeInfo() tdp.Type { Name: "Option", SchemaName: "option", }, + { + Name: "Media", + SchemaName: "media", + Null: !p.Flags.Has(0), + }, + { + Name: "AddedBy", + SchemaName: "added_by", + Null: !p.Flags.Has(1), + }, + { + Name: "Date", + SchemaName: "date", + Null: !p.Flags.Has(1), + }, } return typ } +// SetFlags sets flags for non-zero fields. +func (p *PollAnswer) SetFlags() { + if !(p.Media == nil) { + p.Flags.Set(0) + } + if !(p.AddedBy == nil) { + p.Flags.Set(1) + } + if !(p.Date == 0) { + p.Flags.Set(1) + } +} + // Encode implements bin.Encoder. func (p *PollAnswer) Encode(b *bin.Buffer) error { if p == nil { - return fmt.Errorf("can't encode pollAnswer#ff16e2ca as nil") + return fmt.Errorf("can't encode pollAnswer#4b7d786a as nil") } b.PutID(PollAnswerTypeID) return p.EncodeBare(b) @@ -140,22 +214,45 @@ func (p *PollAnswer) Encode(b *bin.Buffer) error { // EncodeBare implements bin.BareEncoder. func (p *PollAnswer) EncodeBare(b *bin.Buffer) error { if p == nil { - return fmt.Errorf("can't encode pollAnswer#ff16e2ca as nil") + return fmt.Errorf("can't encode pollAnswer#4b7d786a as nil") + } + p.SetFlags() + if err := p.Flags.Encode(b); err != nil { + return fmt.Errorf("unable to encode pollAnswer#4b7d786a: field flags: %w", err) } if err := p.Text.Encode(b); err != nil { - return fmt.Errorf("unable to encode pollAnswer#ff16e2ca: field text: %w", err) + return fmt.Errorf("unable to encode pollAnswer#4b7d786a: field text: %w", err) } b.PutBytes(p.Option) + if p.Flags.Has(0) { + if p.Media == nil { + return fmt.Errorf("unable to encode pollAnswer#4b7d786a: field media is nil") + } + if err := p.Media.Encode(b); err != nil { + return fmt.Errorf("unable to encode pollAnswer#4b7d786a: field media: %w", err) + } + } + if p.Flags.Has(1) { + if p.AddedBy == nil { + return fmt.Errorf("unable to encode pollAnswer#4b7d786a: field added_by is nil") + } + if err := p.AddedBy.Encode(b); err != nil { + return fmt.Errorf("unable to encode pollAnswer#4b7d786a: field added_by: %w", err) + } + } + if p.Flags.Has(1) { + b.PutInt(p.Date) + } return nil } // Decode implements bin.Decoder. func (p *PollAnswer) Decode(b *bin.Buffer) error { if p == nil { - return fmt.Errorf("can't decode pollAnswer#ff16e2ca to nil") + return fmt.Errorf("can't decode pollAnswer#4b7d786a to nil") } if err := b.ConsumeID(PollAnswerTypeID); err != nil { - return fmt.Errorf("unable to decode pollAnswer#ff16e2ca: %w", err) + return fmt.Errorf("unable to decode pollAnswer#4b7d786a: %w", err) } return p.DecodeBare(b) } @@ -163,20 +260,46 @@ func (p *PollAnswer) Decode(b *bin.Buffer) error { // DecodeBare implements bin.BareDecoder. func (p *PollAnswer) DecodeBare(b *bin.Buffer) error { if p == nil { - return fmt.Errorf("can't decode pollAnswer#ff16e2ca to nil") + return fmt.Errorf("can't decode pollAnswer#4b7d786a to nil") + } + { + if err := p.Flags.Decode(b); err != nil { + return fmt.Errorf("unable to decode pollAnswer#4b7d786a: field flags: %w", err) + } } { if err := p.Text.Decode(b); err != nil { - return fmt.Errorf("unable to decode pollAnswer#ff16e2ca: field text: %w", err) + return fmt.Errorf("unable to decode pollAnswer#4b7d786a: field text: %w", err) } } { value, err := b.Bytes() if err != nil { - return fmt.Errorf("unable to decode pollAnswer#ff16e2ca: field option: %w", err) + return fmt.Errorf("unable to decode pollAnswer#4b7d786a: field option: %w", err) } p.Option = value } + if p.Flags.Has(0) { + value, err := DecodeMessageMedia(b) + if err != nil { + return fmt.Errorf("unable to decode pollAnswer#4b7d786a: field media: %w", err) + } + p.Media = value + } + if p.Flags.Has(1) { + value, err := DecodePeer(b) + if err != nil { + return fmt.Errorf("unable to decode pollAnswer#4b7d786a: field added_by: %w", err) + } + p.AddedBy = value + } + if p.Flags.Has(1) { + value, err := b.Int() + if err != nil { + return fmt.Errorf("unable to decode pollAnswer#4b7d786a: field date: %w", err) + } + p.Date = value + } return nil } @@ -195,3 +318,359 @@ func (p *PollAnswer) GetOption() (value []byte) { } return p.Option } + +// SetMedia sets value of Media conditional field. +func (p *PollAnswer) SetMedia(value MessageMediaClass) { + p.Flags.Set(0) + p.Media = value +} + +// GetMedia returns value of Media conditional field and +// boolean which is true if field was set. +func (p *PollAnswer) GetMedia() (value MessageMediaClass, ok bool) { + if p == nil { + return + } + if !p.Flags.Has(0) { + return value, false + } + return p.Media, true +} + +// SetAddedBy sets value of AddedBy conditional field. +func (p *PollAnswer) SetAddedBy(value PeerClass) { + p.Flags.Set(1) + p.AddedBy = value +} + +// GetAddedBy returns value of AddedBy conditional field and +// boolean which is true if field was set. +func (p *PollAnswer) GetAddedBy() (value PeerClass, ok bool) { + if p == nil { + return + } + if !p.Flags.Has(1) { + return value, false + } + return p.AddedBy, true +} + +// SetDate sets value of Date conditional field. +func (p *PollAnswer) SetDate(value int) { + p.Flags.Set(1) + p.Date = value +} + +// GetDate returns value of Date conditional field and +// boolean which is true if field was set. +func (p *PollAnswer) GetDate() (value int, ok bool) { + if p == nil { + return + } + if !p.Flags.Has(1) { + return value, false + } + return p.Date, true +} + +// InputPollAnswer represents TL type `inputPollAnswer#199fed96`. +// +// See https://core.telegram.org/constructor/inputPollAnswer for reference. +type InputPollAnswer struct { + // Flags field of InputPollAnswer. + Flags bin.Fields + // Text field of InputPollAnswer. + Text TextWithEntities + // Media field of InputPollAnswer. + // + // Use SetMedia and GetMedia helpers. + Media InputMediaClass +} + +// InputPollAnswerTypeID is TL type id of InputPollAnswer. +const InputPollAnswerTypeID = 0x199fed96 + +// construct implements constructor of PollAnswerClass. +func (i InputPollAnswer) construct() PollAnswerClass { return &i } + +// Ensuring interfaces in compile-time for InputPollAnswer. +var ( + _ bin.Encoder = &InputPollAnswer{} + _ bin.Decoder = &InputPollAnswer{} + _ bin.BareEncoder = &InputPollAnswer{} + _ bin.BareDecoder = &InputPollAnswer{} + + _ PollAnswerClass = &InputPollAnswer{} +) + +func (i *InputPollAnswer) Zero() bool { + if i == nil { + return true + } + if !(i.Flags.Zero()) { + return false + } + if !(i.Text.Zero()) { + return false + } + if !(i.Media == nil) { + return false + } + + return true +} + +// String implements fmt.Stringer. +func (i *InputPollAnswer) String() string { + if i == nil { + return "InputPollAnswer(nil)" + } + type Alias InputPollAnswer + return fmt.Sprintf("InputPollAnswer%+v", Alias(*i)) +} + +// FillFrom fills InputPollAnswer from given interface. +func (i *InputPollAnswer) FillFrom(from interface { + GetText() (value TextWithEntities) + GetMedia() (value InputMediaClass, ok bool) +}) { + i.Text = from.GetText() + if val, ok := from.GetMedia(); ok { + i.Media = val + } + +} + +// TypeID returns type id in TL schema. +// +// See https://core.telegram.org/mtproto/TL-tl#remarks. +func (*InputPollAnswer) TypeID() uint32 { + return InputPollAnswerTypeID +} + +// TypeName returns name of type in TL schema. +func (*InputPollAnswer) TypeName() string { + return "inputPollAnswer" +} + +// TypeInfo returns info about TL type. +func (i *InputPollAnswer) TypeInfo() tdp.Type { + typ := tdp.Type{ + Name: "inputPollAnswer", + ID: InputPollAnswerTypeID, + } + if i == nil { + typ.Null = true + return typ + } + typ.Fields = []tdp.Field{ + { + Name: "Text", + SchemaName: "text", + }, + { + Name: "Media", + SchemaName: "media", + Null: !i.Flags.Has(0), + }, + } + return typ +} + +// SetFlags sets flags for non-zero fields. +func (i *InputPollAnswer) SetFlags() { + if !(i.Media == nil) { + i.Flags.Set(0) + } +} + +// Encode implements bin.Encoder. +func (i *InputPollAnswer) Encode(b *bin.Buffer) error { + if i == nil { + return fmt.Errorf("can't encode inputPollAnswer#199fed96 as nil") + } + b.PutID(InputPollAnswerTypeID) + return i.EncodeBare(b) +} + +// EncodeBare implements bin.BareEncoder. +func (i *InputPollAnswer) EncodeBare(b *bin.Buffer) error { + if i == nil { + return fmt.Errorf("can't encode inputPollAnswer#199fed96 as nil") + } + i.SetFlags() + if err := i.Flags.Encode(b); err != nil { + return fmt.Errorf("unable to encode inputPollAnswer#199fed96: field flags: %w", err) + } + if err := i.Text.Encode(b); err != nil { + return fmt.Errorf("unable to encode inputPollAnswer#199fed96: field text: %w", err) + } + if i.Flags.Has(0) { + if i.Media == nil { + return fmt.Errorf("unable to encode inputPollAnswer#199fed96: field media is nil") + } + if err := i.Media.Encode(b); err != nil { + return fmt.Errorf("unable to encode inputPollAnswer#199fed96: field media: %w", err) + } + } + return nil +} + +// Decode implements bin.Decoder. +func (i *InputPollAnswer) Decode(b *bin.Buffer) error { + if i == nil { + return fmt.Errorf("can't decode inputPollAnswer#199fed96 to nil") + } + if err := b.ConsumeID(InputPollAnswerTypeID); err != nil { + return fmt.Errorf("unable to decode inputPollAnswer#199fed96: %w", err) + } + return i.DecodeBare(b) +} + +// DecodeBare implements bin.BareDecoder. +func (i *InputPollAnswer) DecodeBare(b *bin.Buffer) error { + if i == nil { + return fmt.Errorf("can't decode inputPollAnswer#199fed96 to nil") + } + { + if err := i.Flags.Decode(b); err != nil { + return fmt.Errorf("unable to decode inputPollAnswer#199fed96: field flags: %w", err) + } + } + { + if err := i.Text.Decode(b); err != nil { + return fmt.Errorf("unable to decode inputPollAnswer#199fed96: field text: %w", err) + } + } + if i.Flags.Has(0) { + value, err := DecodeInputMedia(b) + if err != nil { + return fmt.Errorf("unable to decode inputPollAnswer#199fed96: field media: %w", err) + } + i.Media = value + } + return nil +} + +// GetText returns value of Text field. +func (i *InputPollAnswer) GetText() (value TextWithEntities) { + if i == nil { + return + } + return i.Text +} + +// SetMedia sets value of Media conditional field. +func (i *InputPollAnswer) SetMedia(value InputMediaClass) { + i.Flags.Set(0) + i.Media = value +} + +// GetMedia returns value of Media conditional field and +// boolean which is true if field was set. +func (i *InputPollAnswer) GetMedia() (value InputMediaClass, ok bool) { + if i == nil { + return + } + if !i.Flags.Has(0) { + return value, false + } + return i.Media, true +} + +// PollAnswerClassName is schema name of PollAnswerClass. +const PollAnswerClassName = "PollAnswer" + +// PollAnswerClass represents PollAnswer generic type. +// +// See https://core.telegram.org/type/PollAnswer for reference. +// +// Example: +// +// g, err := tg.DecodePollAnswer(buf) +// if err != nil { +// panic(err) +// } +// switch v := g.(type) { +// case *tg.PollAnswer: // pollAnswer#4b7d786a +// case *tg.InputPollAnswer: // inputPollAnswer#199fed96 +// default: panic(v) +// } +type PollAnswerClass interface { + bin.Encoder + bin.Decoder + bin.BareEncoder + bin.BareDecoder + construct() PollAnswerClass + + // TypeID returns type id in TL schema. + // + // See https://core.telegram.org/mtproto/TL-tl#remarks. + TypeID() uint32 + // TypeName returns name of type in TL schema. + TypeName() string + // String implements fmt.Stringer. + String() string + // Zero returns true if current object has a zero value. + Zero() bool + + // Textual representation of the answer (only Premium¹ users can use custom emoji + // entities² here). + // + // Links: + // 1) https://core.telegram.org/api/premium + // 2) https://core.telegram.org/api/custom-emoji + GetText() (value TextWithEntities) +} + +// DecodePollAnswer implements binary de-serialization for PollAnswerClass. +func DecodePollAnswer(buf *bin.Buffer) (PollAnswerClass, error) { + id, err := buf.PeekID() + if err != nil { + return nil, err + } + switch id { + case PollAnswerTypeID: + // Decoding pollAnswer#4b7d786a. + v := PollAnswer{} + if err := v.Decode(buf); err != nil { + return nil, fmt.Errorf("unable to decode PollAnswerClass: %w", err) + } + return &v, nil + case InputPollAnswerTypeID: + // Decoding inputPollAnswer#199fed96. + v := InputPollAnswer{} + if err := v.Decode(buf); err != nil { + return nil, fmt.Errorf("unable to decode PollAnswerClass: %w", err) + } + return &v, nil + default: + return nil, fmt.Errorf("unable to decode PollAnswerClass: %w", bin.NewUnexpectedID(id)) + } +} + +// PollAnswer boxes the PollAnswerClass providing a helper. +type PollAnswerBox struct { + PollAnswer PollAnswerClass +} + +// Decode implements bin.Decoder for PollAnswerBox. +func (b *PollAnswerBox) Decode(buf *bin.Buffer) error { + if b == nil { + return fmt.Errorf("unable to decode PollAnswerBox to nil") + } + v, err := DecodePollAnswer(buf) + if err != nil { + return fmt.Errorf("unable to decode boxed value: %w", err) + } + b.PollAnswer = v + return nil +} + +// Encode implements bin.Encode for PollAnswerBox. +func (b *PollAnswerBox) Encode(buf *bin.Buffer) error { + if b == nil || b.PollAnswer == nil { + return fmt.Errorf("unable to encode PollAnswerClass as nil") + } + return b.PollAnswer.Encode(buf) +} diff --git a/pkg/gotd/tg/tl_poll_answer_slices_gen.go b/pkg/gotd/tg/tl_poll_answer_slices_gen.go index ad362638..11cce9e4 100644 --- a/pkg/gotd/tg/tl_poll_answer_slices_gen.go +++ b/pkg/gotd/tg/tl_poll_answer_slices_gen.go @@ -33,3 +33,275 @@ var ( _ = tgerr.Error{} _ = tdjson.Encoder{} ) + +// PollAnswerClassArray is adapter for slice of PollAnswerClass. +type PollAnswerClassArray []PollAnswerClass + +// Sort sorts slice of PollAnswerClass. +func (s PollAnswerClassArray) Sort(less func(a, b PollAnswerClass) bool) PollAnswerClassArray { + sort.Slice(s, func(i, j int) bool { + return less(s[i], s[j]) + }) + return s +} + +// SortStable sorts slice of PollAnswerClass. +func (s PollAnswerClassArray) SortStable(less func(a, b PollAnswerClass) bool) PollAnswerClassArray { + sort.SliceStable(s, func(i, j int) bool { + return less(s[i], s[j]) + }) + return s +} + +// Retain filters in-place slice of PollAnswerClass. +func (s PollAnswerClassArray) Retain(keep func(x PollAnswerClass) bool) PollAnswerClassArray { + n := 0 + for _, x := range s { + if keep(x) { + s[n] = x + n++ + } + } + s = s[:n] + + return s +} + +// First returns first element of slice (if exists). +func (s PollAnswerClassArray) First() (v PollAnswerClass, ok bool) { + if len(s) < 1 { + return + } + return s[0], true +} + +// Last returns last element of slice (if exists). +func (s PollAnswerClassArray) Last() (v PollAnswerClass, ok bool) { + if len(s) < 1 { + return + } + return s[len(s)-1], true +} + +// PopFirst returns first element of slice (if exists) and deletes it. +func (s *PollAnswerClassArray) PopFirst() (v PollAnswerClass, ok bool) { + if s == nil || len(*s) < 1 { + return + } + + a := *s + v = a[0] + + // Delete by index from SliceTricks. + copy(a[0:], a[1:]) + var zero PollAnswerClass + a[len(a)-1] = zero + a = a[:len(a)-1] + *s = a + + return v, true +} + +// Pop returns last element of slice (if exists) and deletes it. +func (s *PollAnswerClassArray) Pop() (v PollAnswerClass, ok bool) { + if s == nil || len(*s) < 1 { + return + } + + a := *s + v = a[len(a)-1] + a = a[:len(a)-1] + *s = a + + return v, true +} + +// AsPollAnswer returns copy with only PollAnswer constructors. +func (s PollAnswerClassArray) AsPollAnswer() (to PollAnswerArray) { + for _, elem := range s { + value, ok := elem.(*PollAnswer) + if !ok { + continue + } + to = append(to, *value) + } + + return to +} + +// AsInputPollAnswer returns copy with only InputPollAnswer constructors. +func (s PollAnswerClassArray) AsInputPollAnswer() (to InputPollAnswerArray) { + for _, elem := range s { + value, ok := elem.(*InputPollAnswer) + if !ok { + continue + } + to = append(to, *value) + } + + return to +} + +// PollAnswerArray is adapter for slice of PollAnswer. +type PollAnswerArray []PollAnswer + +// Sort sorts slice of PollAnswer. +func (s PollAnswerArray) Sort(less func(a, b PollAnswer) bool) PollAnswerArray { + sort.Slice(s, func(i, j int) bool { + return less(s[i], s[j]) + }) + return s +} + +// SortStable sorts slice of PollAnswer. +func (s PollAnswerArray) SortStable(less func(a, b PollAnswer) bool) PollAnswerArray { + sort.SliceStable(s, func(i, j int) bool { + return less(s[i], s[j]) + }) + return s +} + +// Retain filters in-place slice of PollAnswer. +func (s PollAnswerArray) Retain(keep func(x PollAnswer) bool) PollAnswerArray { + n := 0 + for _, x := range s { + if keep(x) { + s[n] = x + n++ + } + } + s = s[:n] + + return s +} + +// First returns first element of slice (if exists). +func (s PollAnswerArray) First() (v PollAnswer, ok bool) { + if len(s) < 1 { + return + } + return s[0], true +} + +// Last returns last element of slice (if exists). +func (s PollAnswerArray) Last() (v PollAnswer, ok bool) { + if len(s) < 1 { + return + } + return s[len(s)-1], true +} + +// PopFirst returns first element of slice (if exists) and deletes it. +func (s *PollAnswerArray) PopFirst() (v PollAnswer, ok bool) { + if s == nil || len(*s) < 1 { + return + } + + a := *s + v = a[0] + + // Delete by index from SliceTricks. + copy(a[0:], a[1:]) + var zero PollAnswer + a[len(a)-1] = zero + a = a[:len(a)-1] + *s = a + + return v, true +} + +// Pop returns last element of slice (if exists) and deletes it. +func (s *PollAnswerArray) Pop() (v PollAnswer, ok bool) { + if s == nil || len(*s) < 1 { + return + } + + a := *s + v = a[len(a)-1] + a = a[:len(a)-1] + *s = a + + return v, true +} + +// InputPollAnswerArray is adapter for slice of InputPollAnswer. +type InputPollAnswerArray []InputPollAnswer + +// Sort sorts slice of InputPollAnswer. +func (s InputPollAnswerArray) Sort(less func(a, b InputPollAnswer) bool) InputPollAnswerArray { + sort.Slice(s, func(i, j int) bool { + return less(s[i], s[j]) + }) + return s +} + +// SortStable sorts slice of InputPollAnswer. +func (s InputPollAnswerArray) SortStable(less func(a, b InputPollAnswer) bool) InputPollAnswerArray { + sort.SliceStable(s, func(i, j int) bool { + return less(s[i], s[j]) + }) + return s +} + +// Retain filters in-place slice of InputPollAnswer. +func (s InputPollAnswerArray) Retain(keep func(x InputPollAnswer) bool) InputPollAnswerArray { + n := 0 + for _, x := range s { + if keep(x) { + s[n] = x + n++ + } + } + s = s[:n] + + return s +} + +// First returns first element of slice (if exists). +func (s InputPollAnswerArray) First() (v InputPollAnswer, ok bool) { + if len(s) < 1 { + return + } + return s[0], true +} + +// Last returns last element of slice (if exists). +func (s InputPollAnswerArray) Last() (v InputPollAnswer, ok bool) { + if len(s) < 1 { + return + } + return s[len(s)-1], true +} + +// PopFirst returns first element of slice (if exists) and deletes it. +func (s *InputPollAnswerArray) PopFirst() (v InputPollAnswer, ok bool) { + if s == nil || len(*s) < 1 { + return + } + + a := *s + v = a[0] + + // Delete by index from SliceTricks. + copy(a[0:], a[1:]) + var zero InputPollAnswer + a[len(a)-1] = zero + a = a[:len(a)-1] + *s = a + + return v, true +} + +// Pop returns last element of slice (if exists) and deletes it. +func (s *InputPollAnswerArray) Pop() (v InputPollAnswer, ok bool) { + if s == nil || len(*s) < 1 { + return + } + + a := *s + v = a[len(a)-1] + a = a[:len(a)-1] + *s = a + + return v, true +} diff --git a/pkg/gotd/tg/tl_poll_answer_voters_gen.go b/pkg/gotd/tg/tl_poll_answer_voters_gen.go index eda53395..06f33149 100644 --- a/pkg/gotd/tg/tl_poll_answer_voters_gen.go +++ b/pkg/gotd/tg/tl_poll_answer_voters_gen.go @@ -31,7 +31,7 @@ var ( _ = tdjson.Encoder{} ) -// PollAnswerVoters represents TL type `pollAnswerVoters#3b6ddad2`. +// PollAnswerVoters represents TL type `pollAnswerVoters#3645230a`. // A poll answer, and how users voted on it // // See https://core.telegram.org/constructor/pollAnswerVoters for reference. @@ -51,11 +51,17 @@ type PollAnswerVoters struct { // 1) https://core.telegram.org/method/messages.sendVote Option []byte // How many users voted for this option + // + // Use SetVoters and GetVoters helpers. Voters int + // RecentVoters field of PollAnswerVoters. + // + // Use SetRecentVoters and GetRecentVoters helpers. + RecentVoters []PeerClass } // PollAnswerVotersTypeID is TL type id of PollAnswerVoters. -const PollAnswerVotersTypeID = 0x3b6ddad2 +const PollAnswerVotersTypeID = 0x3645230a // Ensuring interfaces in compile-time for PollAnswerVoters. var ( @@ -84,6 +90,9 @@ func (p *PollAnswerVoters) Zero() bool { if !(p.Voters == 0) { return false } + if !(p.RecentVoters == nil) { + return false + } return true } @@ -102,12 +111,20 @@ func (p *PollAnswerVoters) FillFrom(from interface { GetChosen() (value bool) GetCorrect() (value bool) GetOption() (value []byte) - GetVoters() (value int) + GetVoters() (value int, ok bool) + GetRecentVoters() (value []PeerClass, ok bool) }) { p.Chosen = from.GetChosen() p.Correct = from.GetCorrect() p.Option = from.GetOption() - p.Voters = from.GetVoters() + if val, ok := from.GetVoters(); ok { + p.Voters = val + } + + if val, ok := from.GetRecentVoters(); ok { + p.RecentVoters = val + } + } // TypeID returns type id in TL schema. @@ -150,6 +167,12 @@ func (p *PollAnswerVoters) TypeInfo() tdp.Type { { Name: "Voters", SchemaName: "voters", + Null: !p.Flags.Has(2), + }, + { + Name: "RecentVoters", + SchemaName: "recent_voters", + Null: !p.Flags.Has(2), }, } return typ @@ -163,12 +186,18 @@ func (p *PollAnswerVoters) SetFlags() { if !(p.Correct == false) { p.Flags.Set(1) } + if !(p.Voters == 0) { + p.Flags.Set(2) + } + if !(p.RecentVoters == nil) { + p.Flags.Set(2) + } } // Encode implements bin.Encoder. func (p *PollAnswerVoters) Encode(b *bin.Buffer) error { if p == nil { - return fmt.Errorf("can't encode pollAnswerVoters#3b6ddad2 as nil") + return fmt.Errorf("can't encode pollAnswerVoters#3645230a as nil") } b.PutID(PollAnswerVotersTypeID) return p.EncodeBare(b) @@ -177,24 +206,37 @@ func (p *PollAnswerVoters) Encode(b *bin.Buffer) error { // EncodeBare implements bin.BareEncoder. func (p *PollAnswerVoters) EncodeBare(b *bin.Buffer) error { if p == nil { - return fmt.Errorf("can't encode pollAnswerVoters#3b6ddad2 as nil") + return fmt.Errorf("can't encode pollAnswerVoters#3645230a as nil") } p.SetFlags() if err := p.Flags.Encode(b); err != nil { - return fmt.Errorf("unable to encode pollAnswerVoters#3b6ddad2: field flags: %w", err) + return fmt.Errorf("unable to encode pollAnswerVoters#3645230a: field flags: %w", err) } b.PutBytes(p.Option) - b.PutInt(p.Voters) + if p.Flags.Has(2) { + b.PutInt(p.Voters) + } + if p.Flags.Has(2) { + b.PutVectorHeader(len(p.RecentVoters)) + for idx, v := range p.RecentVoters { + if v == nil { + return fmt.Errorf("unable to encode pollAnswerVoters#3645230a: field recent_voters element with index %d is nil", idx) + } + if err := v.Encode(b); err != nil { + return fmt.Errorf("unable to encode pollAnswerVoters#3645230a: field recent_voters element with index %d: %w", idx, err) + } + } + } return nil } // Decode implements bin.Decoder. func (p *PollAnswerVoters) Decode(b *bin.Buffer) error { if p == nil { - return fmt.Errorf("can't decode pollAnswerVoters#3b6ddad2 to nil") + return fmt.Errorf("can't decode pollAnswerVoters#3645230a to nil") } if err := b.ConsumeID(PollAnswerVotersTypeID); err != nil { - return fmt.Errorf("unable to decode pollAnswerVoters#3b6ddad2: %w", err) + return fmt.Errorf("unable to decode pollAnswerVoters#3645230a: %w", err) } return p.DecodeBare(b) } @@ -202,11 +244,11 @@ func (p *PollAnswerVoters) Decode(b *bin.Buffer) error { // DecodeBare implements bin.BareDecoder. func (p *PollAnswerVoters) DecodeBare(b *bin.Buffer) error { if p == nil { - return fmt.Errorf("can't decode pollAnswerVoters#3b6ddad2 to nil") + return fmt.Errorf("can't decode pollAnswerVoters#3645230a to nil") } { if err := p.Flags.Decode(b); err != nil { - return fmt.Errorf("unable to decode pollAnswerVoters#3b6ddad2: field flags: %w", err) + return fmt.Errorf("unable to decode pollAnswerVoters#3645230a: field flags: %w", err) } } p.Chosen = p.Flags.Has(0) @@ -214,17 +256,34 @@ func (p *PollAnswerVoters) DecodeBare(b *bin.Buffer) error { { value, err := b.Bytes() if err != nil { - return fmt.Errorf("unable to decode pollAnswerVoters#3b6ddad2: field option: %w", err) + return fmt.Errorf("unable to decode pollAnswerVoters#3645230a: field option: %w", err) } p.Option = value } - { + if p.Flags.Has(2) { value, err := b.Int() if err != nil { - return fmt.Errorf("unable to decode pollAnswerVoters#3b6ddad2: field voters: %w", err) + return fmt.Errorf("unable to decode pollAnswerVoters#3645230a: field voters: %w", err) } p.Voters = value } + if p.Flags.Has(2) { + headerLen, err := b.VectorHeader() + if err != nil { + return fmt.Errorf("unable to decode pollAnswerVoters#3645230a: field recent_voters: %w", err) + } + + if headerLen > 0 { + p.RecentVoters = make([]PeerClass, 0, headerLen%bin.PreallocateLimit) + } + for idx := 0; idx < headerLen; idx++ { + value, err := DecodePeer(b) + if err != nil { + return fmt.Errorf("unable to decode pollAnswerVoters#3645230a: field recent_voters: %w", err) + } + p.RecentVoters = append(p.RecentVoters, value) + } + } return nil } @@ -274,10 +333,46 @@ func (p *PollAnswerVoters) GetOption() (value []byte) { return p.Option } -// GetVoters returns value of Voters field. -func (p *PollAnswerVoters) GetVoters() (value int) { +// SetVoters sets value of Voters conditional field. +func (p *PollAnswerVoters) SetVoters(value int) { + p.Flags.Set(2) + p.Voters = value +} + +// GetVoters returns value of Voters conditional field and +// boolean which is true if field was set. +func (p *PollAnswerVoters) GetVoters() (value int, ok bool) { if p == nil { return } - return p.Voters + if !p.Flags.Has(2) { + return value, false + } + return p.Voters, true +} + +// SetRecentVoters sets value of RecentVoters conditional field. +func (p *PollAnswerVoters) SetRecentVoters(value []PeerClass) { + p.Flags.Set(2) + p.RecentVoters = value +} + +// GetRecentVoters returns value of RecentVoters conditional field and +// boolean which is true if field was set. +func (p *PollAnswerVoters) GetRecentVoters() (value []PeerClass, ok bool) { + if p == nil { + return + } + if !p.Flags.Has(2) { + return value, false + } + return p.RecentVoters, true +} + +// MapRecentVoters returns field RecentVoters wrapped in PeerClassArray helper. +func (p *PollAnswerVoters) MapRecentVoters() (value PeerClassArray, ok bool) { + if !p.Flags.Has(2) { + return value, false + } + return PeerClassArray(p.RecentVoters), true } diff --git a/pkg/gotd/tg/tl_poll_gen.go b/pkg/gotd/tg/tl_poll_gen.go index 5b091523..551db7de 100644 --- a/pkg/gotd/tg/tl_poll_gen.go +++ b/pkg/gotd/tg/tl_poll_gen.go @@ -31,7 +31,7 @@ var ( _ = tdjson.Encoder{} ) -// Poll represents TL type `poll#58747131`. +// Poll represents TL type `poll#b8425be9`. // Poll // // See https://core.telegram.org/constructor/poll for reference. @@ -52,6 +52,16 @@ type Poll struct { // Whether this is a quiz (with wrong and correct answers, results shown in the return // type) Quiz bool + // OpenAnswers field of Poll. + OpenAnswers bool + // RevotingDisabled field of Poll. + RevotingDisabled bool + // ShuffleAnswers field of Poll. + ShuffleAnswers bool + // HideResultsUntilClose field of Poll. + HideResultsUntilClose bool + // Creator field of Poll. + Creator bool // The question of the poll (only Premium¹ users can use custom emoji entities² here). // // Links: @@ -63,7 +73,7 @@ type Poll struct { // Links: // 1) https://core.telegram.org/api/config#poll-answers-max // 2) https://core.telegram.org/method/messages.sendVote - Answers []PollAnswer + Answers []PollAnswerClass // Amount of time in seconds the poll will be active after creation, 5-600. Can't be used // together with close_date. // @@ -75,10 +85,12 @@ type Poll struct { // // Use SetCloseDate and GetCloseDate helpers. CloseDate int + // Hash field of Poll. + Hash int64 } // PollTypeID is TL type id of Poll. -const PollTypeID = 0x58747131 +const PollTypeID = 0xb8425be9 // Ensuring interfaces in compile-time for Poll. var ( @@ -110,6 +122,21 @@ func (p *Poll) Zero() bool { if !(p.Quiz == false) { return false } + if !(p.OpenAnswers == false) { + return false + } + if !(p.RevotingDisabled == false) { + return false + } + if !(p.ShuffleAnswers == false) { + return false + } + if !(p.HideResultsUntilClose == false) { + return false + } + if !(p.Creator == false) { + return false + } if !(p.Question.Zero()) { return false } @@ -122,6 +149,9 @@ func (p *Poll) Zero() bool { if !(p.CloseDate == 0) { return false } + if !(p.Hash == 0) { + return false + } return true } @@ -142,16 +172,27 @@ func (p *Poll) FillFrom(from interface { GetPublicVoters() (value bool) GetMultipleChoice() (value bool) GetQuiz() (value bool) + GetOpenAnswers() (value bool) + GetRevotingDisabled() (value bool) + GetShuffleAnswers() (value bool) + GetHideResultsUntilClose() (value bool) + GetCreator() (value bool) GetQuestion() (value TextWithEntities) - GetAnswers() (value []PollAnswer) + GetAnswers() (value []PollAnswerClass) GetClosePeriod() (value int, ok bool) GetCloseDate() (value int, ok bool) + GetHash() (value int64) }) { p.ID = from.GetID() p.Closed = from.GetClosed() p.PublicVoters = from.GetPublicVoters() p.MultipleChoice = from.GetMultipleChoice() p.Quiz = from.GetQuiz() + p.OpenAnswers = from.GetOpenAnswers() + p.RevotingDisabled = from.GetRevotingDisabled() + p.ShuffleAnswers = from.GetShuffleAnswers() + p.HideResultsUntilClose = from.GetHideResultsUntilClose() + p.Creator = from.GetCreator() p.Question = from.GetQuestion() p.Answers = from.GetAnswers() if val, ok := from.GetClosePeriod(); ok { @@ -162,6 +203,7 @@ func (p *Poll) FillFrom(from interface { p.CloseDate = val } + p.Hash = from.GetHash() } // TypeID returns type id in TL schema. @@ -211,6 +253,31 @@ func (p *Poll) TypeInfo() tdp.Type { SchemaName: "quiz", Null: !p.Flags.Has(3), }, + { + Name: "OpenAnswers", + SchemaName: "open_answers", + Null: !p.Flags.Has(6), + }, + { + Name: "RevotingDisabled", + SchemaName: "revoting_disabled", + Null: !p.Flags.Has(7), + }, + { + Name: "ShuffleAnswers", + SchemaName: "shuffle_answers", + Null: !p.Flags.Has(8), + }, + { + Name: "HideResultsUntilClose", + SchemaName: "hide_results_until_close", + Null: !p.Flags.Has(9), + }, + { + Name: "Creator", + SchemaName: "creator", + Null: !p.Flags.Has(10), + }, { Name: "Question", SchemaName: "question", @@ -229,6 +296,10 @@ func (p *Poll) TypeInfo() tdp.Type { SchemaName: "close_date", Null: !p.Flags.Has(5), }, + { + Name: "Hash", + SchemaName: "hash", + }, } return typ } @@ -247,6 +318,21 @@ func (p *Poll) SetFlags() { if !(p.Quiz == false) { p.Flags.Set(3) } + if !(p.OpenAnswers == false) { + p.Flags.Set(6) + } + if !(p.RevotingDisabled == false) { + p.Flags.Set(7) + } + if !(p.ShuffleAnswers == false) { + p.Flags.Set(8) + } + if !(p.HideResultsUntilClose == false) { + p.Flags.Set(9) + } + if !(p.Creator == false) { + p.Flags.Set(10) + } if !(p.ClosePeriod == 0) { p.Flags.Set(4) } @@ -258,7 +344,7 @@ func (p *Poll) SetFlags() { // Encode implements bin.Encoder. func (p *Poll) Encode(b *bin.Buffer) error { if p == nil { - return fmt.Errorf("can't encode poll#58747131 as nil") + return fmt.Errorf("can't encode poll#b8425be9 as nil") } b.PutID(PollTypeID) return p.EncodeBare(b) @@ -267,20 +353,23 @@ func (p *Poll) Encode(b *bin.Buffer) error { // EncodeBare implements bin.BareEncoder. func (p *Poll) EncodeBare(b *bin.Buffer) error { if p == nil { - return fmt.Errorf("can't encode poll#58747131 as nil") + return fmt.Errorf("can't encode poll#b8425be9 as nil") } p.SetFlags() b.PutLong(p.ID) if err := p.Flags.Encode(b); err != nil { - return fmt.Errorf("unable to encode poll#58747131: field flags: %w", err) + return fmt.Errorf("unable to encode poll#b8425be9: field flags: %w", err) } if err := p.Question.Encode(b); err != nil { - return fmt.Errorf("unable to encode poll#58747131: field question: %w", err) + return fmt.Errorf("unable to encode poll#b8425be9: field question: %w", err) } b.PutVectorHeader(len(p.Answers)) for idx, v := range p.Answers { + if v == nil { + return fmt.Errorf("unable to encode poll#b8425be9: field answers element with index %d is nil", idx) + } if err := v.Encode(b); err != nil { - return fmt.Errorf("unable to encode poll#58747131: field answers element with index %d: %w", idx, err) + return fmt.Errorf("unable to encode poll#b8425be9: field answers element with index %d: %w", idx, err) } } if p.Flags.Has(4) { @@ -289,16 +378,17 @@ func (p *Poll) EncodeBare(b *bin.Buffer) error { if p.Flags.Has(5) { b.PutInt(p.CloseDate) } + b.PutLong(p.Hash) return nil } // Decode implements bin.Decoder. func (p *Poll) Decode(b *bin.Buffer) error { if p == nil { - return fmt.Errorf("can't decode poll#58747131 to nil") + return fmt.Errorf("can't decode poll#b8425be9 to nil") } if err := b.ConsumeID(PollTypeID); err != nil { - return fmt.Errorf("unable to decode poll#58747131: %w", err) + return fmt.Errorf("unable to decode poll#b8425be9: %w", err) } return p.DecodeBare(b) } @@ -306,42 +396,47 @@ func (p *Poll) Decode(b *bin.Buffer) error { // DecodeBare implements bin.BareDecoder. func (p *Poll) DecodeBare(b *bin.Buffer) error { if p == nil { - return fmt.Errorf("can't decode poll#58747131 to nil") + return fmt.Errorf("can't decode poll#b8425be9 to nil") } { value, err := b.Long() if err != nil { - return fmt.Errorf("unable to decode poll#58747131: field id: %w", err) + return fmt.Errorf("unable to decode poll#b8425be9: field id: %w", err) } p.ID = value } { if err := p.Flags.Decode(b); err != nil { - return fmt.Errorf("unable to decode poll#58747131: field flags: %w", err) + return fmt.Errorf("unable to decode poll#b8425be9: field flags: %w", err) } } p.Closed = p.Flags.Has(0) p.PublicVoters = p.Flags.Has(1) p.MultipleChoice = p.Flags.Has(2) p.Quiz = p.Flags.Has(3) + p.OpenAnswers = p.Flags.Has(6) + p.RevotingDisabled = p.Flags.Has(7) + p.ShuffleAnswers = p.Flags.Has(8) + p.HideResultsUntilClose = p.Flags.Has(9) + p.Creator = p.Flags.Has(10) { if err := p.Question.Decode(b); err != nil { - return fmt.Errorf("unable to decode poll#58747131: field question: %w", err) + return fmt.Errorf("unable to decode poll#b8425be9: field question: %w", err) } } { headerLen, err := b.VectorHeader() if err != nil { - return fmt.Errorf("unable to decode poll#58747131: field answers: %w", err) + return fmt.Errorf("unable to decode poll#b8425be9: field answers: %w", err) } if headerLen > 0 { - p.Answers = make([]PollAnswer, 0, headerLen%bin.PreallocateLimit) + p.Answers = make([]PollAnswerClass, 0, headerLen%bin.PreallocateLimit) } for idx := 0; idx < headerLen; idx++ { - var value PollAnswer - if err := value.Decode(b); err != nil { - return fmt.Errorf("unable to decode poll#58747131: field answers: %w", err) + value, err := DecodePollAnswer(b) + if err != nil { + return fmt.Errorf("unable to decode poll#b8425be9: field answers: %w", err) } p.Answers = append(p.Answers, value) } @@ -349,17 +444,24 @@ func (p *Poll) DecodeBare(b *bin.Buffer) error { if p.Flags.Has(4) { value, err := b.Int() if err != nil { - return fmt.Errorf("unable to decode poll#58747131: field close_period: %w", err) + return fmt.Errorf("unable to decode poll#b8425be9: field close_period: %w", err) } p.ClosePeriod = value } if p.Flags.Has(5) { value, err := b.Int() if err != nil { - return fmt.Errorf("unable to decode poll#58747131: field close_date: %w", err) + return fmt.Errorf("unable to decode poll#b8425be9: field close_date: %w", err) } p.CloseDate = value } + { + value, err := b.Long() + if err != nil { + return fmt.Errorf("unable to decode poll#b8425be9: field hash: %w", err) + } + p.Hash = value + } return nil } @@ -447,6 +549,101 @@ func (p *Poll) GetQuiz() (value bool) { return p.Flags.Has(3) } +// SetOpenAnswers sets value of OpenAnswers conditional field. +func (p *Poll) SetOpenAnswers(value bool) { + if value { + p.Flags.Set(6) + p.OpenAnswers = true + } else { + p.Flags.Unset(6) + p.OpenAnswers = false + } +} + +// GetOpenAnswers returns value of OpenAnswers conditional field. +func (p *Poll) GetOpenAnswers() (value bool) { + if p == nil { + return + } + return p.Flags.Has(6) +} + +// SetRevotingDisabled sets value of RevotingDisabled conditional field. +func (p *Poll) SetRevotingDisabled(value bool) { + if value { + p.Flags.Set(7) + p.RevotingDisabled = true + } else { + p.Flags.Unset(7) + p.RevotingDisabled = false + } +} + +// GetRevotingDisabled returns value of RevotingDisabled conditional field. +func (p *Poll) GetRevotingDisabled() (value bool) { + if p == nil { + return + } + return p.Flags.Has(7) +} + +// SetShuffleAnswers sets value of ShuffleAnswers conditional field. +func (p *Poll) SetShuffleAnswers(value bool) { + if value { + p.Flags.Set(8) + p.ShuffleAnswers = true + } else { + p.Flags.Unset(8) + p.ShuffleAnswers = false + } +} + +// GetShuffleAnswers returns value of ShuffleAnswers conditional field. +func (p *Poll) GetShuffleAnswers() (value bool) { + if p == nil { + return + } + return p.Flags.Has(8) +} + +// SetHideResultsUntilClose sets value of HideResultsUntilClose conditional field. +func (p *Poll) SetHideResultsUntilClose(value bool) { + if value { + p.Flags.Set(9) + p.HideResultsUntilClose = true + } else { + p.Flags.Unset(9) + p.HideResultsUntilClose = false + } +} + +// GetHideResultsUntilClose returns value of HideResultsUntilClose conditional field. +func (p *Poll) GetHideResultsUntilClose() (value bool) { + if p == nil { + return + } + return p.Flags.Has(9) +} + +// SetCreator sets value of Creator conditional field. +func (p *Poll) SetCreator(value bool) { + if value { + p.Flags.Set(10) + p.Creator = true + } else { + p.Flags.Unset(10) + p.Creator = false + } +} + +// GetCreator returns value of Creator conditional field. +func (p *Poll) GetCreator() (value bool) { + if p == nil { + return + } + return p.Flags.Has(10) +} + // GetQuestion returns value of Question field. func (p *Poll) GetQuestion() (value TextWithEntities) { if p == nil { @@ -456,7 +653,7 @@ func (p *Poll) GetQuestion() (value TextWithEntities) { } // GetAnswers returns value of Answers field. -func (p *Poll) GetAnswers() (value []PollAnswer) { +func (p *Poll) GetAnswers() (value []PollAnswerClass) { if p == nil { return } @@ -498,3 +695,16 @@ func (p *Poll) GetCloseDate() (value int, ok bool) { } return p.CloseDate, true } + +// GetHash returns value of Hash field. +func (p *Poll) GetHash() (value int64) { + if p == nil { + return + } + return p.Hash +} + +// MapAnswers returns field Answers wrapped in PollAnswerClassArray helper. +func (p *Poll) MapAnswers() (value PollAnswerClassArray) { + return PollAnswerClassArray(p.Answers) +} diff --git a/pkg/gotd/tg/tl_poll_results_gen.go b/pkg/gotd/tg/tl_poll_results_gen.go index 81f48bdd..c0e603ed 100644 --- a/pkg/gotd/tg/tl_poll_results_gen.go +++ b/pkg/gotd/tg/tl_poll_results_gen.go @@ -31,7 +31,7 @@ var ( _ = tdjson.Encoder{} ) -// PollResults represents TL type `pollResults#7adf2420`. +// PollResults represents TL type `pollResults#ba7bb15e`. // Results of poll // // See https://core.telegram.org/constructor/pollResults for reference. @@ -49,6 +49,8 @@ type PollResults struct { // 1) https://core.telegram.org/api/min // 2) https://core.telegram.org/method/messages.getPollResults Min bool + // HasUnreadVotes field of PollResults. + HasUnreadVotes bool // Poll results // // Use SetResults and GetResults helpers. @@ -72,10 +74,14 @@ type PollResults struct { // // Use SetSolutionEntities and GetSolutionEntities helpers. SolutionEntities []MessageEntityClass + // SolutionMedia field of PollResults. + // + // Use SetSolutionMedia and GetSolutionMedia helpers. + SolutionMedia MessageMediaClass } // PollResultsTypeID is TL type id of PollResults. -const PollResultsTypeID = 0x7adf2420 +const PollResultsTypeID = 0xba7bb15e // Ensuring interfaces in compile-time for PollResults. var ( @@ -95,6 +101,9 @@ func (p *PollResults) Zero() bool { if !(p.Min == false) { return false } + if !(p.HasUnreadVotes == false) { + return false + } if !(p.Results == nil) { return false } @@ -110,6 +119,9 @@ func (p *PollResults) Zero() bool { if !(p.SolutionEntities == nil) { return false } + if !(p.SolutionMedia == nil) { + return false + } return true } @@ -126,13 +138,16 @@ func (p *PollResults) String() string { // FillFrom fills PollResults from given interface. func (p *PollResults) FillFrom(from interface { GetMin() (value bool) + GetHasUnreadVotes() (value bool) GetResults() (value []PollAnswerVoters, ok bool) GetTotalVoters() (value int, ok bool) GetRecentVoters() (value []PeerClass, ok bool) GetSolution() (value string, ok bool) GetSolutionEntities() (value []MessageEntityClass, ok bool) + GetSolutionMedia() (value MessageMediaClass, ok bool) }) { p.Min = from.GetMin() + p.HasUnreadVotes = from.GetHasUnreadVotes() if val, ok := from.GetResults(); ok { p.Results = val } @@ -153,6 +168,10 @@ func (p *PollResults) FillFrom(from interface { p.SolutionEntities = val } + if val, ok := from.GetSolutionMedia(); ok { + p.SolutionMedia = val + } + } // TypeID returns type id in TL schema. @@ -183,6 +202,11 @@ func (p *PollResults) TypeInfo() tdp.Type { SchemaName: "min", Null: !p.Flags.Has(0), }, + { + Name: "HasUnreadVotes", + SchemaName: "has_unread_votes", + Null: !p.Flags.Has(6), + }, { Name: "Results", SchemaName: "results", @@ -208,6 +232,11 @@ func (p *PollResults) TypeInfo() tdp.Type { SchemaName: "solution_entities", Null: !p.Flags.Has(4), }, + { + Name: "SolutionMedia", + SchemaName: "solution_media", + Null: !p.Flags.Has(5), + }, } return typ } @@ -217,6 +246,9 @@ func (p *PollResults) SetFlags() { if !(p.Min == false) { p.Flags.Set(0) } + if !(p.HasUnreadVotes == false) { + p.Flags.Set(6) + } if !(p.Results == nil) { p.Flags.Set(1) } @@ -232,12 +264,15 @@ func (p *PollResults) SetFlags() { if !(p.SolutionEntities == nil) { p.Flags.Set(4) } + if !(p.SolutionMedia == nil) { + p.Flags.Set(5) + } } // Encode implements bin.Encoder. func (p *PollResults) Encode(b *bin.Buffer) error { if p == nil { - return fmt.Errorf("can't encode pollResults#7adf2420 as nil") + return fmt.Errorf("can't encode pollResults#ba7bb15e as nil") } b.PutID(PollResultsTypeID) return p.EncodeBare(b) @@ -246,17 +281,17 @@ func (p *PollResults) Encode(b *bin.Buffer) error { // EncodeBare implements bin.BareEncoder. func (p *PollResults) EncodeBare(b *bin.Buffer) error { if p == nil { - return fmt.Errorf("can't encode pollResults#7adf2420 as nil") + return fmt.Errorf("can't encode pollResults#ba7bb15e as nil") } p.SetFlags() if err := p.Flags.Encode(b); err != nil { - return fmt.Errorf("unable to encode pollResults#7adf2420: field flags: %w", err) + return fmt.Errorf("unable to encode pollResults#ba7bb15e: field flags: %w", err) } if p.Flags.Has(1) { b.PutVectorHeader(len(p.Results)) for idx, v := range p.Results { if err := v.Encode(b); err != nil { - return fmt.Errorf("unable to encode pollResults#7adf2420: field results element with index %d: %w", idx, err) + return fmt.Errorf("unable to encode pollResults#ba7bb15e: field results element with index %d: %w", idx, err) } } } @@ -267,10 +302,10 @@ func (p *PollResults) EncodeBare(b *bin.Buffer) error { b.PutVectorHeader(len(p.RecentVoters)) for idx, v := range p.RecentVoters { if v == nil { - return fmt.Errorf("unable to encode pollResults#7adf2420: field recent_voters element with index %d is nil", idx) + return fmt.Errorf("unable to encode pollResults#ba7bb15e: field recent_voters element with index %d is nil", idx) } if err := v.Encode(b); err != nil { - return fmt.Errorf("unable to encode pollResults#7adf2420: field recent_voters element with index %d: %w", idx, err) + return fmt.Errorf("unable to encode pollResults#ba7bb15e: field recent_voters element with index %d: %w", idx, err) } } } @@ -281,23 +316,31 @@ func (p *PollResults) EncodeBare(b *bin.Buffer) error { b.PutVectorHeader(len(p.SolutionEntities)) for idx, v := range p.SolutionEntities { if v == nil { - return fmt.Errorf("unable to encode pollResults#7adf2420: field solution_entities element with index %d is nil", idx) + return fmt.Errorf("unable to encode pollResults#ba7bb15e: field solution_entities element with index %d is nil", idx) } if err := v.Encode(b); err != nil { - return fmt.Errorf("unable to encode pollResults#7adf2420: field solution_entities element with index %d: %w", idx, err) + return fmt.Errorf("unable to encode pollResults#ba7bb15e: field solution_entities element with index %d: %w", idx, err) } } } + if p.Flags.Has(5) { + if p.SolutionMedia == nil { + return fmt.Errorf("unable to encode pollResults#ba7bb15e: field solution_media is nil") + } + if err := p.SolutionMedia.Encode(b); err != nil { + return fmt.Errorf("unable to encode pollResults#ba7bb15e: field solution_media: %w", err) + } + } return nil } // Decode implements bin.Decoder. func (p *PollResults) Decode(b *bin.Buffer) error { if p == nil { - return fmt.Errorf("can't decode pollResults#7adf2420 to nil") + return fmt.Errorf("can't decode pollResults#ba7bb15e to nil") } if err := b.ConsumeID(PollResultsTypeID); err != nil { - return fmt.Errorf("unable to decode pollResults#7adf2420: %w", err) + return fmt.Errorf("unable to decode pollResults#ba7bb15e: %w", err) } return p.DecodeBare(b) } @@ -305,18 +348,19 @@ func (p *PollResults) Decode(b *bin.Buffer) error { // DecodeBare implements bin.BareDecoder. func (p *PollResults) DecodeBare(b *bin.Buffer) error { if p == nil { - return fmt.Errorf("can't decode pollResults#7adf2420 to nil") + return fmt.Errorf("can't decode pollResults#ba7bb15e to nil") } { if err := p.Flags.Decode(b); err != nil { - return fmt.Errorf("unable to decode pollResults#7adf2420: field flags: %w", err) + return fmt.Errorf("unable to decode pollResults#ba7bb15e: field flags: %w", err) } } p.Min = p.Flags.Has(0) + p.HasUnreadVotes = p.Flags.Has(6) if p.Flags.Has(1) { headerLen, err := b.VectorHeader() if err != nil { - return fmt.Errorf("unable to decode pollResults#7adf2420: field results: %w", err) + return fmt.Errorf("unable to decode pollResults#ba7bb15e: field results: %w", err) } if headerLen > 0 { @@ -325,7 +369,7 @@ func (p *PollResults) DecodeBare(b *bin.Buffer) error { for idx := 0; idx < headerLen; idx++ { var value PollAnswerVoters if err := value.Decode(b); err != nil { - return fmt.Errorf("unable to decode pollResults#7adf2420: field results: %w", err) + return fmt.Errorf("unable to decode pollResults#ba7bb15e: field results: %w", err) } p.Results = append(p.Results, value) } @@ -333,14 +377,14 @@ func (p *PollResults) DecodeBare(b *bin.Buffer) error { if p.Flags.Has(2) { value, err := b.Int() if err != nil { - return fmt.Errorf("unable to decode pollResults#7adf2420: field total_voters: %w", err) + return fmt.Errorf("unable to decode pollResults#ba7bb15e: field total_voters: %w", err) } p.TotalVoters = value } if p.Flags.Has(3) { headerLen, err := b.VectorHeader() if err != nil { - return fmt.Errorf("unable to decode pollResults#7adf2420: field recent_voters: %w", err) + return fmt.Errorf("unable to decode pollResults#ba7bb15e: field recent_voters: %w", err) } if headerLen > 0 { @@ -349,7 +393,7 @@ func (p *PollResults) DecodeBare(b *bin.Buffer) error { for idx := 0; idx < headerLen; idx++ { value, err := DecodePeer(b) if err != nil { - return fmt.Errorf("unable to decode pollResults#7adf2420: field recent_voters: %w", err) + return fmt.Errorf("unable to decode pollResults#ba7bb15e: field recent_voters: %w", err) } p.RecentVoters = append(p.RecentVoters, value) } @@ -357,14 +401,14 @@ func (p *PollResults) DecodeBare(b *bin.Buffer) error { if p.Flags.Has(4) { value, err := b.String() if err != nil { - return fmt.Errorf("unable to decode pollResults#7adf2420: field solution: %w", err) + return fmt.Errorf("unable to decode pollResults#ba7bb15e: field solution: %w", err) } p.Solution = value } if p.Flags.Has(4) { headerLen, err := b.VectorHeader() if err != nil { - return fmt.Errorf("unable to decode pollResults#7adf2420: field solution_entities: %w", err) + return fmt.Errorf("unable to decode pollResults#ba7bb15e: field solution_entities: %w", err) } if headerLen > 0 { @@ -373,11 +417,18 @@ func (p *PollResults) DecodeBare(b *bin.Buffer) error { for idx := 0; idx < headerLen; idx++ { value, err := DecodeMessageEntity(b) if err != nil { - return fmt.Errorf("unable to decode pollResults#7adf2420: field solution_entities: %w", err) + return fmt.Errorf("unable to decode pollResults#ba7bb15e: field solution_entities: %w", err) } p.SolutionEntities = append(p.SolutionEntities, value) } } + if p.Flags.Has(5) { + value, err := DecodeMessageMedia(b) + if err != nil { + return fmt.Errorf("unable to decode pollResults#ba7bb15e: field solution_media: %w", err) + } + p.SolutionMedia = value + } return nil } @@ -400,6 +451,25 @@ func (p *PollResults) GetMin() (value bool) { return p.Flags.Has(0) } +// SetHasUnreadVotes sets value of HasUnreadVotes conditional field. +func (p *PollResults) SetHasUnreadVotes(value bool) { + if value { + p.Flags.Set(6) + p.HasUnreadVotes = true + } else { + p.Flags.Unset(6) + p.HasUnreadVotes = false + } +} + +// GetHasUnreadVotes returns value of HasUnreadVotes conditional field. +func (p *PollResults) GetHasUnreadVotes() (value bool) { + if p == nil { + return + } + return p.Flags.Has(6) +} + // SetResults sets value of Results conditional field. func (p *PollResults) SetResults(value []PollAnswerVoters) { p.Flags.Set(1) @@ -490,6 +560,24 @@ func (p *PollResults) GetSolutionEntities() (value []MessageEntityClass, ok bool return p.SolutionEntities, true } +// SetSolutionMedia sets value of SolutionMedia conditional field. +func (p *PollResults) SetSolutionMedia(value MessageMediaClass) { + p.Flags.Set(5) + p.SolutionMedia = value +} + +// GetSolutionMedia returns value of SolutionMedia conditional field and +// boolean which is true if field was set. +func (p *PollResults) GetSolutionMedia() (value MessageMediaClass, ok bool) { + if p == nil { + return + } + if !p.Flags.Has(5) { + return value, false + } + return p.SolutionMedia, true +} + // MapRecentVoters returns field RecentVoters wrapped in PeerClassArray helper. func (p *PollResults) MapRecentVoters() (value PeerClassArray, ok bool) { if !p.Flags.Has(3) { diff --git a/pkg/gotd/tg/tl_reactions_notify_settings_gen.go b/pkg/gotd/tg/tl_reactions_notify_settings_gen.go index 861a7fff..9467da92 100644 --- a/pkg/gotd/tg/tl_reactions_notify_settings_gen.go +++ b/pkg/gotd/tg/tl_reactions_notify_settings_gen.go @@ -31,7 +31,7 @@ var ( _ = tdjson.Encoder{} ) -// ReactionsNotifySettings represents TL type `reactionsNotifySettings#56e34970`. +// ReactionsNotifySettings represents TL type `reactionsNotifySettings#71e4ea58`. // Reaction notification settings, see here »¹ for more info. // // Links: @@ -54,6 +54,10 @@ type ReactionsNotifySettings struct { // // Use SetStoriesNotifyFrom and GetStoriesNotifyFrom helpers. StoriesNotifyFrom ReactionNotificationsFromClass + // PollVotesNotifyFrom field of ReactionsNotifySettings. + // + // Use SetPollVotesNotifyFrom and GetPollVotesNotifyFrom helpers. + PollVotesNotifyFrom ReactionNotificationsFromClass // Notification sound for reactions »¹ // // Links: @@ -69,7 +73,7 @@ type ReactionsNotifySettings struct { } // ReactionsNotifySettingsTypeID is TL type id of ReactionsNotifySettings. -const ReactionsNotifySettingsTypeID = 0x56e34970 +const ReactionsNotifySettingsTypeID = 0x71e4ea58 // Ensuring interfaces in compile-time for ReactionsNotifySettings. var ( @@ -92,6 +96,9 @@ func (r *ReactionsNotifySettings) Zero() bool { if !(r.StoriesNotifyFrom == nil) { return false } + if !(r.PollVotesNotifyFrom == nil) { + return false + } if !(r.Sound == nil) { return false } @@ -115,6 +122,7 @@ func (r *ReactionsNotifySettings) String() string { func (r *ReactionsNotifySettings) FillFrom(from interface { GetMessagesNotifyFrom() (value ReactionNotificationsFromClass, ok bool) GetStoriesNotifyFrom() (value ReactionNotificationsFromClass, ok bool) + GetPollVotesNotifyFrom() (value ReactionNotificationsFromClass, ok bool) GetSound() (value NotificationSoundClass) GetShowPreviews() (value bool) }) { @@ -126,6 +134,10 @@ func (r *ReactionsNotifySettings) FillFrom(from interface { r.StoriesNotifyFrom = val } + if val, ok := from.GetPollVotesNotifyFrom(); ok { + r.PollVotesNotifyFrom = val + } + r.Sound = from.GetSound() r.ShowPreviews = from.GetShowPreviews() } @@ -163,6 +175,11 @@ func (r *ReactionsNotifySettings) TypeInfo() tdp.Type { SchemaName: "stories_notify_from", Null: !r.Flags.Has(1), }, + { + Name: "PollVotesNotifyFrom", + SchemaName: "poll_votes_notify_from", + Null: !r.Flags.Has(2), + }, { Name: "Sound", SchemaName: "sound", @@ -183,12 +200,15 @@ func (r *ReactionsNotifySettings) SetFlags() { if !(r.StoriesNotifyFrom == nil) { r.Flags.Set(1) } + if !(r.PollVotesNotifyFrom == nil) { + r.Flags.Set(2) + } } // Encode implements bin.Encoder. func (r *ReactionsNotifySettings) Encode(b *bin.Buffer) error { if r == nil { - return fmt.Errorf("can't encode reactionsNotifySettings#56e34970 as nil") + return fmt.Errorf("can't encode reactionsNotifySettings#71e4ea58 as nil") } b.PutID(ReactionsNotifySettingsTypeID) return r.EncodeBare(b) @@ -197,33 +217,41 @@ func (r *ReactionsNotifySettings) Encode(b *bin.Buffer) error { // EncodeBare implements bin.BareEncoder. func (r *ReactionsNotifySettings) EncodeBare(b *bin.Buffer) error { if r == nil { - return fmt.Errorf("can't encode reactionsNotifySettings#56e34970 as nil") + return fmt.Errorf("can't encode reactionsNotifySettings#71e4ea58 as nil") } r.SetFlags() if err := r.Flags.Encode(b); err != nil { - return fmt.Errorf("unable to encode reactionsNotifySettings#56e34970: field flags: %w", err) + return fmt.Errorf("unable to encode reactionsNotifySettings#71e4ea58: field flags: %w", err) } if r.Flags.Has(0) { if r.MessagesNotifyFrom == nil { - return fmt.Errorf("unable to encode reactionsNotifySettings#56e34970: field messages_notify_from is nil") + return fmt.Errorf("unable to encode reactionsNotifySettings#71e4ea58: field messages_notify_from is nil") } if err := r.MessagesNotifyFrom.Encode(b); err != nil { - return fmt.Errorf("unable to encode reactionsNotifySettings#56e34970: field messages_notify_from: %w", err) + return fmt.Errorf("unable to encode reactionsNotifySettings#71e4ea58: field messages_notify_from: %w", err) } } if r.Flags.Has(1) { if r.StoriesNotifyFrom == nil { - return fmt.Errorf("unable to encode reactionsNotifySettings#56e34970: field stories_notify_from is nil") + return fmt.Errorf("unable to encode reactionsNotifySettings#71e4ea58: field stories_notify_from is nil") } if err := r.StoriesNotifyFrom.Encode(b); err != nil { - return fmt.Errorf("unable to encode reactionsNotifySettings#56e34970: field stories_notify_from: %w", err) + return fmt.Errorf("unable to encode reactionsNotifySettings#71e4ea58: field stories_notify_from: %w", err) + } + } + if r.Flags.Has(2) { + if r.PollVotesNotifyFrom == nil { + return fmt.Errorf("unable to encode reactionsNotifySettings#71e4ea58: field poll_votes_notify_from is nil") + } + if err := r.PollVotesNotifyFrom.Encode(b); err != nil { + return fmt.Errorf("unable to encode reactionsNotifySettings#71e4ea58: field poll_votes_notify_from: %w", err) } } if r.Sound == nil { - return fmt.Errorf("unable to encode reactionsNotifySettings#56e34970: field sound is nil") + return fmt.Errorf("unable to encode reactionsNotifySettings#71e4ea58: field sound is nil") } if err := r.Sound.Encode(b); err != nil { - return fmt.Errorf("unable to encode reactionsNotifySettings#56e34970: field sound: %w", err) + return fmt.Errorf("unable to encode reactionsNotifySettings#71e4ea58: field sound: %w", err) } b.PutBool(r.ShowPreviews) return nil @@ -232,10 +260,10 @@ func (r *ReactionsNotifySettings) EncodeBare(b *bin.Buffer) error { // Decode implements bin.Decoder. func (r *ReactionsNotifySettings) Decode(b *bin.Buffer) error { if r == nil { - return fmt.Errorf("can't decode reactionsNotifySettings#56e34970 to nil") + return fmt.Errorf("can't decode reactionsNotifySettings#71e4ea58 to nil") } if err := b.ConsumeID(ReactionsNotifySettingsTypeID); err != nil { - return fmt.Errorf("unable to decode reactionsNotifySettings#56e34970: %w", err) + return fmt.Errorf("unable to decode reactionsNotifySettings#71e4ea58: %w", err) } return r.DecodeBare(b) } @@ -243,38 +271,45 @@ func (r *ReactionsNotifySettings) Decode(b *bin.Buffer) error { // DecodeBare implements bin.BareDecoder. func (r *ReactionsNotifySettings) DecodeBare(b *bin.Buffer) error { if r == nil { - return fmt.Errorf("can't decode reactionsNotifySettings#56e34970 to nil") + return fmt.Errorf("can't decode reactionsNotifySettings#71e4ea58 to nil") } { if err := r.Flags.Decode(b); err != nil { - return fmt.Errorf("unable to decode reactionsNotifySettings#56e34970: field flags: %w", err) + return fmt.Errorf("unable to decode reactionsNotifySettings#71e4ea58: field flags: %w", err) } } if r.Flags.Has(0) { value, err := DecodeReactionNotificationsFrom(b) if err != nil { - return fmt.Errorf("unable to decode reactionsNotifySettings#56e34970: field messages_notify_from: %w", err) + return fmt.Errorf("unable to decode reactionsNotifySettings#71e4ea58: field messages_notify_from: %w", err) } r.MessagesNotifyFrom = value } if r.Flags.Has(1) { value, err := DecodeReactionNotificationsFrom(b) if err != nil { - return fmt.Errorf("unable to decode reactionsNotifySettings#56e34970: field stories_notify_from: %w", err) + return fmt.Errorf("unable to decode reactionsNotifySettings#71e4ea58: field stories_notify_from: %w", err) } r.StoriesNotifyFrom = value } + if r.Flags.Has(2) { + value, err := DecodeReactionNotificationsFrom(b) + if err != nil { + return fmt.Errorf("unable to decode reactionsNotifySettings#71e4ea58: field poll_votes_notify_from: %w", err) + } + r.PollVotesNotifyFrom = value + } { value, err := DecodeNotificationSound(b) if err != nil { - return fmt.Errorf("unable to decode reactionsNotifySettings#56e34970: field sound: %w", err) + return fmt.Errorf("unable to decode reactionsNotifySettings#71e4ea58: field sound: %w", err) } r.Sound = value } { value, err := b.Bool() if err != nil { - return fmt.Errorf("unable to decode reactionsNotifySettings#56e34970: field show_previews: %w", err) + return fmt.Errorf("unable to decode reactionsNotifySettings#71e4ea58: field show_previews: %w", err) } r.ShowPreviews = value } @@ -317,6 +352,24 @@ func (r *ReactionsNotifySettings) GetStoriesNotifyFrom() (value ReactionNotifica return r.StoriesNotifyFrom, true } +// SetPollVotesNotifyFrom sets value of PollVotesNotifyFrom conditional field. +func (r *ReactionsNotifySettings) SetPollVotesNotifyFrom(value ReactionNotificationsFromClass) { + r.Flags.Set(2) + r.PollVotesNotifyFrom = value +} + +// GetPollVotesNotifyFrom returns value of PollVotesNotifyFrom conditional field and +// boolean which is true if field was set. +func (r *ReactionsNotifySettings) GetPollVotesNotifyFrom() (value ReactionNotificationsFromClass, ok bool) { + if r == nil { + return + } + if !r.Flags.Has(2) { + return value, false + } + return r.PollVotesNotifyFrom, true +} + // GetSound returns value of Sound field. func (r *ReactionsNotifySettings) GetSound() (value NotificationSoundClass) { if r == nil { diff --git a/pkg/gotd/tg/tl_registry_gen.go b/pkg/gotd/tg/tl_registry_gen.go index fa7628cc..d32a1b3a 100644 --- a/pkg/gotd/tg/tl_registry_gen.go +++ b/pkg/gotd/tg/tl_registry_gen.go @@ -32,7 +32,7 @@ var ( ) // Layer version of schema. -const Layer = 223 +const Layer = 224 // TypesMap returns mapping from type ids to TL type names. func TypesMap() map[uint32]string { @@ -58,8 +58,8 @@ func TypesMap() map[uint32]string { InputFileBigTypeID: "inputFileBig#fa4f0bb5", InputFileStoryDocumentTypeID: "inputFileStoryDocument#62dc8b48", InputMediaEmptyTypeID: "inputMediaEmpty#9664f57f", - InputMediaUploadedPhotoTypeID: "inputMediaUploadedPhoto#1e287d04", - InputMediaPhotoTypeID: "inputMediaPhoto#b3ba0635", + InputMediaUploadedPhotoTypeID: "inputMediaUploadedPhoto#7d8375da", + InputMediaPhotoTypeID: "inputMediaPhoto#e3af4434", InputMediaGeoPointTypeID: "inputMediaGeoPoint#f9c44144", InputMediaContactTypeID: "inputMediaContact#f8ab7dfb", InputMediaUploadedDocumentTypeID: "inputMediaUploadedDocument#37c9330", @@ -70,7 +70,7 @@ func TypesMap() map[uint32]string { InputMediaGameTypeID: "inputMediaGame#d33f43f3", InputMediaInvoiceTypeID: "inputMediaInvoice#405fef0d", InputMediaGeoLiveTypeID: "inputMediaGeoLive#971fa843", - InputMediaPollTypeID: "inputMediaPoll#f94e5f1", + InputMediaPollTypeID: "inputMediaPoll#883a4108", InputMediaDiceTypeID: "inputMediaDice#e66fbf7b", InputMediaStoryTypeID: "inputMediaStory#89fdd778", InputMediaWebPageTypeID: "inputMediaWebPage#c21b8849", @@ -135,7 +135,7 @@ func TypesMap() map[uint32]string { MessageTypeID: "message#3ae56482", MessageServiceTypeID: "messageService#7a800e0a", MessageMediaEmptyTypeID: "messageMediaEmpty#3ded6320", - MessageMediaPhotoTypeID: "messageMediaPhoto#695150d7", + MessageMediaPhotoTypeID: "messageMediaPhoto#e216eb63", MessageMediaGeoTypeID: "messageMediaGeo#56e0d474", MessageMediaContactTypeID: "messageMediaContact#70322949", MessageMediaUnsupportedTypeID: "messageMediaUnsupported#9f84f49e", @@ -145,7 +145,7 @@ func TypesMap() map[uint32]string { MessageMediaGameTypeID: "messageMediaGame#fdb19008", MessageMediaInvoiceTypeID: "messageMediaInvoice#f6a548d3", MessageMediaGeoLiveTypeID: "messageMediaGeoLive#b940c666", - MessageMediaPollTypeID: "messageMediaPoll#4bd6e798", + MessageMediaPollTypeID: "messageMediaPoll#773f4e66", MessageMediaDiceTypeID: "messageMediaDice#8cbec07", MessageMediaStoryTypeID: "messageMediaStory#68cb6283", MessageMediaGiveawayTypeID: "messageMediaGiveaway#aa073beb", @@ -217,7 +217,10 @@ func TypesMap() map[uint32]string { MessageActionChangeCreatorTypeID: "messageActionChangeCreator#e188503b", MessageActionNoForwardsToggleTypeID: "messageActionNoForwardsToggle#bf7d6572", MessageActionNoForwardsRequestTypeID: "messageActionNoForwardsRequest#3e2793ba", - DialogTypeID: "dialog#d58a08c6", + MessageActionPollAppendAnswerTypeID: "messageActionPollAppendAnswer#9da1cd6c", + MessageActionPollDeleteAnswerTypeID: "messageActionPollDeleteAnswer#399674dc", + MessageActionManagedBotCreatedTypeID: "messageActionManagedBotCreated#16605e3e", + DialogTypeID: "dialog#fc89f7f3", DialogFolderTypeID: "dialogFolder#71bd134c", PhotoEmptyTypeID: "photoEmpty#2331b22d", PhotoTypeID: "photo#fb197a65", @@ -255,7 +258,7 @@ func TypesMap() map[uint32]string { InputReportReasonFakeTypeID: "inputReportReasonFake#f5ddd6e7", InputReportReasonIllegalDrugsTypeID: "inputReportReasonIllegalDrugs#a8eb2be", InputReportReasonPersonalDetailsTypeID: "inputReportReasonPersonalDetails#9ec7863d", - UserFullTypeID: "userFull#a02bc13e", + UserFullTypeID: "userFull#6cbe645", ContactTypeID: "contact#145ade0b", ImportedContactTypeID: "importedContact#c13e3c50", ContactStatusTypeID: "contactStatus#16d9703b", @@ -292,6 +295,7 @@ func TypesMap() map[uint32]string { InputMessagesFilterGeoTypeID: "inputMessagesFilterGeo#e7026d0d", InputMessagesFilterContactsTypeID: "inputMessagesFilterContacts#e062db83", InputMessagesFilterPinnedTypeID: "inputMessagesFilterPinned#1bb00451", + InputMessagesFilterPollTypeID: "inputMessagesFilterPoll#fa2bc90a", UpdateNewMessageTypeID: "updateNewMessage#1f2b0afd", UpdateMessageIDTypeID: "updateMessageID#4e90bfd6", UpdateDeleteMessagesTypeID: "updateDeleteMessages#a20db0e5", @@ -354,7 +358,7 @@ func TypesMap() map[uint32]string { UpdateContactsResetTypeID: "updateContactsReset#7084a7be", UpdateChannelAvailableMessagesTypeID: "updateChannelAvailableMessages#b23fc698", UpdateDialogUnreadMarkTypeID: "updateDialogUnreadMark#b658f23e", - UpdateMessagePollTypeID: "updateMessagePoll#aca1657b", + UpdateMessagePollTypeID: "updateMessagePoll#d64c522b", UpdateChatDefaultBannedRightsTypeID: "updateChatDefaultBannedRights#54c01850", UpdateFolderPeersTypeID: "updateFolderPeers#19360dc0", UpdatePeerSettingsTypeID: "updatePeerSettings#6a7e7366", @@ -364,7 +368,7 @@ func TypesMap() map[uint32]string { UpdateThemeTypeID: "updateTheme#8216fba3", UpdateGeoLiveViewedTypeID: "updateGeoLiveViewed#871fb939", UpdateLoginTokenTypeID: "updateLoginToken#564fe691", - UpdateMessagePollVoteTypeID: "updateMessagePollVote#24f40e77", + UpdateMessagePollVoteTypeID: "updateMessagePollVote#7699f014", UpdateDialogFilterTypeID: "updateDialogFilter#26ffde7d", UpdateDialogFilterOrderTypeID: "updateDialogFilterOrder#a5d72105", UpdateDialogFiltersTypeID: "updateDialogFilters#3504914f", @@ -445,6 +449,7 @@ func TypesMap() map[uint32]string { UpdateEmojiGameInfoTypeID: "updateEmojiGameInfo#fb9c547a", UpdateStarGiftCraftFailTypeID: "updateStarGiftCraftFail#ac072444", UpdateChatParticipantRankTypeID: "updateChatParticipantRank#bd8367b9", + UpdateManagedBotTypeID: "updateManagedBot#4880ed9a", UpdatesStateTypeID: "updates.state#a56c2a3e", UpdatesDifferenceEmptyTypeID: "updates.differenceEmpty#5d75a138", UpdatesDifferenceTypeID: "updates.difference#f49ca0", @@ -662,6 +667,9 @@ func TypesMap() map[uint32]string { MessageEntityCustomEmojiTypeID: "messageEntityCustomEmoji#c8cf05f8", MessageEntityBlockquoteTypeID: "messageEntityBlockquote#f1ccaaac", MessageEntityFormattedDateTypeID: "messageEntityFormattedDate#904ac7c7", + MessageEntityDiffInsertTypeID: "messageEntityDiffInsert#71777116", + MessageEntityDiffReplaceTypeID: "messageEntityDiffReplace#c6c1e5a7", + MessageEntityDiffDeleteTypeID: "messageEntityDiffDelete#652c1c5", InputChannelEmptyTypeID: "inputChannelEmpty#ee8c1e86", InputChannelTypeID: "inputChannel#f35aec28", InputChannelFromMessageTypeID: "inputChannelFromMessage#5b934f9d", @@ -1025,10 +1033,11 @@ func TypesMap() map[uint32]string { HelpSupportNameTypeID: "help.supportName#8c05f1c9", HelpUserInfoEmptyTypeID: "help.userInfoEmpty#f3ae2eed", HelpUserInfoTypeID: "help.userInfo#1eb3758", - PollAnswerTypeID: "pollAnswer#ff16e2ca", - PollTypeID: "poll#58747131", - PollAnswerVotersTypeID: "pollAnswerVoters#3b6ddad2", - PollResultsTypeID: "pollResults#7adf2420", + PollAnswerTypeID: "pollAnswer#4b7d786a", + InputPollAnswerTypeID: "inputPollAnswer#199fed96", + PollTypeID: "poll#b8425be9", + PollAnswerVotersTypeID: "pollAnswerVoters#3645230a", + PollResultsTypeID: "pollResults#ba7bb15e", ChatOnlinesTypeID: "chatOnlines#f041e250", StatsURLTypeID: "statsURL#47a971e0", ChatAdminRightsTypeID: "chatAdminRights#5fb224d5", @@ -1051,7 +1060,7 @@ func TypesMap() map[uint32]string { InputFolderPeerTypeID: "inputFolderPeer#fbd2c296", FolderPeerTypeID: "folderPeer#e9baa668", MessagesSearchCounterTypeID: "messages.searchCounter#e844ebff", - URLAuthResultRequestTypeID: "urlAuthResultRequest#f8f8eb1e", + URLAuthResultRequestTypeID: "urlAuthResultRequest#3cd623ec", URLAuthResultAcceptedTypeID: "urlAuthResultAccepted#623a8fa0", URLAuthResultDefaultTypeID: "urlAuthResultDefault#a9d6db1f", ChannelLocationEmptyTypeID: "channelLocationEmpty#bfb5ad8b", @@ -1113,7 +1122,7 @@ func TypesMap() map[uint32]string { MessageViewsTypeID: "messageViews#455b853d", MessagesMessageViewsTypeID: "messages.messageViews#b6c4f543", MessagesDiscussionMessageTypeID: "messages.discussionMessage#a6341782", - MessageReplyHeaderTypeID: "messageReplyHeader#6917560b", + MessageReplyHeaderTypeID: "messageReplyHeader#1b97dd66", MessageReplyStoryHeaderTypeID: "messageReplyStoryHeader#e5af939", MessageRepliesTypeID: "messageReplies#83d60fc2", PeerBlockedTypeID: "peerBlocked#e8fd8014", @@ -1264,13 +1273,14 @@ func TypesMap() map[uint32]string { StickerKeywordTypeID: "stickerKeyword#fcfeb29c", UsernameTypeID: "username#b4073647", ForumTopicDeletedTypeID: "forumTopicDeleted#23f109b", - ForumTopicTypeID: "forumTopic#cdff0eca", + ForumTopicTypeID: "forumTopic#fcdad815", MessagesForumTopicsTypeID: "messages.forumTopics#367617d3", DefaultHistoryTTLTypeID: "defaultHistoryTTL#43b46b20", ExportedContactTokenTypeID: "exportedContactToken#41bf109b", RequestPeerTypeUserTypeID: "requestPeerTypeUser#5f3b8a00", RequestPeerTypeChatTypeID: "requestPeerTypeChat#c9f06e1b", RequestPeerTypeBroadcastTypeID: "requestPeerTypeBroadcast#339bef6c", + RequestPeerTypeCreateBotTypeID: "requestPeerTypeCreateBot#3e81e078", EmojiListNotModifiedTypeID: "emojiListNotModified#481eadfa", EmojiListTypeID: "emojiList#7a1e11d1", EmojiGroupTypeID: "emojiGroup#7a9abda9", @@ -1306,7 +1316,7 @@ func TypesMap() map[uint32]string { StoryViewsTypeID: "storyViews#8d595cd6", StoryItemDeletedTypeID: "storyItemDeleted#51e6ee4f", StoryItemSkippedTypeID: "storyItemSkipped#ffadc913", - StoryItemTypeID: "storyItem#edf164f1", + StoryItemTypeID: "storyItem#16a4b93c", StoriesAllStoriesNotModifiedTypeID: "stories.allStoriesNotModified#1158fe3e", StoriesAllStoriesTypeID: "stories.allStories#6efc5e81", StoriesStoriesTypeID: "stories.stories#63c3dd0a", @@ -1315,7 +1325,7 @@ func TypesMap() map[uint32]string { StoryViewPublicRepostTypeID: "storyViewPublicRepost#bd74cf49", StoriesStoryViewsListTypeID: "stories.storyViewsList#59d78fc5", StoriesStoryViewsTypeID: "stories.storyViews#de9eed1d", - InputReplyToMessageTypeID: "inputReplyToMessage#869fbe10", + InputReplyToMessageTypeID: "inputReplyToMessage#3bd4b7c2", InputReplyToStoryTypeID: "inputReplyToStory#5881323a", InputReplyToMonoForumTypeID: "inputReplyToMonoForum#69d66c45", ExportedStoryLinkTypeID: "exportedStoryLink#3fc9053b", @@ -1425,7 +1435,7 @@ func TypesMap() map[uint32]string { ChannelsSponsoredMessageReportResultReportedTypeID: "channels.sponsoredMessageReportResultReported#ad798849", ReactionNotificationsFromContactsTypeID: "reactionNotificationsFromContacts#bac3a61a", ReactionNotificationsFromAllTypeID: "reactionNotificationsFromAll#4b9e22a0", - ReactionsNotifySettingsTypeID: "reactionsNotifySettings#56e34970", + ReactionsNotifySettingsTypeID: "reactionsNotifySettings#71e4ea58", AvailableEffectTypeID: "availableEffect#93c3e27e", MessagesAvailableEffectsNotModifiedTypeID: "messages.availableEffectsNotModified#d1ed9a5b", MessagesAvailableEffectsTypeID: "messages.availableEffects#bddb616e", @@ -1582,6 +1592,10 @@ func TypesMap() map[uint32]string { StarGiftAttributeRarityEpicTypeID: "starGiftAttributeRarityEpic#78fbf3a8", StarGiftAttributeRarityLegendaryTypeID: "starGiftAttributeRarityLegendary#cef7e7a8", KeyboardButtonStyleTypeID: "keyboardButtonStyle#4fdd3430", + InputMessageReadMetricTypeID: "inputMessageReadMetric#402b4495", + BotsExportedBotTokenTypeID: "bots.exportedBotToken#3c60b621", + BotsRequestedButtonTypeID: "bots.requestedButton#f13bbcd7", + MessagesComposedMessageWithAITypeID: "messages.composedMessageWithAI#90d7adfa", InvokeAfterMsgRequestTypeID: "invokeAfterMsg#cb9f372d", InvokeAfterMsgsRequestTypeID: "invokeAfterMsgs#3dc4b4f0", InitConnectionRequestTypeID: "initConnection#c1cd5ea9", @@ -1875,7 +1889,7 @@ func TypesMap() map[uint32]string { MessagesClearAllDraftsRequestTypeID: "messages.clearAllDrafts#7e58ee9c", MessagesUpdatePinnedMessageRequestTypeID: "messages.updatePinnedMessage#d2aaf7ec", MessagesSendVoteRequestTypeID: "messages.sendVote#10ea6184", - MessagesGetPollResultsRequestTypeID: "messages.getPollResults#73bb643b", + MessagesGetPollResultsRequestTypeID: "messages.getPollResults#eda3e33b", MessagesGetOnlinesRequestTypeID: "messages.getOnlines#6e2be050", MessagesEditChatAboutRequestTypeID: "messages.editChatAbout#def60797", MessagesEditChatDefaultBannedRightsRequestTypeID: "messages.editChatDefaultBannedRights#a5866b41", @@ -1931,7 +1945,7 @@ func TypesMap() map[uint32]string { MessagesSetChatAvailableReactionsRequestTypeID: "messages.setChatAvailableReactions#864b2581", MessagesGetAvailableReactionsRequestTypeID: "messages.getAvailableReactions#18dea0ac", MessagesSetDefaultReactionRequestTypeID: "messages.setDefaultReaction#4f47a016", - MessagesTranslateTextRequestTypeID: "messages.translateText#63183030", + MessagesTranslateTextRequestTypeID: "messages.translateText#a5eec345", MessagesGetUnreadReactionsRequestTypeID: "messages.getUnreadReactions#bd7f90ac", MessagesReadReactionsRequestTypeID: "messages.readReactions#9ec44f93", MessagesSearchSentMediaRequestTypeID: "messages.searchSentMedia#107e31a0", @@ -1955,7 +1969,7 @@ func TypesMap() map[uint32]string { MessagesGetExtendedMediaRequestTypeID: "messages.getExtendedMedia#84f80814", MessagesSetDefaultHistoryTTLRequestTypeID: "messages.setDefaultHistoryTTL#9eb51445", MessagesGetDefaultHistoryTTLRequestTypeID: "messages.getDefaultHistoryTTL#658b7188", - MessagesSendBotRequestedPeerRequestTypeID: "messages.sendBotRequestedPeer#91b2d060", + MessagesSendBotRequestedPeerRequestTypeID: "messages.sendBotRequestedPeer#6c5cf2a7", MessagesGetEmojiGroupsRequestTypeID: "messages.getEmojiGroups#7488ce5b", MessagesGetEmojiStatusGroupsRequestTypeID: "messages.getEmojiStatusGroups#2ecd56cd", MessagesGetEmojiProfilePhotoGroupsRequestTypeID: "messages.getEmojiProfilePhotoGroups#21a548f3", @@ -2015,12 +2029,19 @@ func TypesMap() map[uint32]string { MessagesCreateForumTopicRequestTypeID: "messages.createForumTopic#2f98c3d5", MessagesDeleteTopicHistoryRequestTypeID: "messages.deleteTopicHistory#d2816f10", MessagesGetEmojiGameInfoRequestTypeID: "messages.getEmojiGameInfo#fb7e8ca7", - MessagesSummarizeTextRequestTypeID: "messages.summarizeText#9d4104e2", + MessagesSummarizeTextRequestTypeID: "messages.summarizeText#abbbd346", MessagesEditChatCreatorRequestTypeID: "messages.editChatCreator#f743b857", MessagesGetFutureChatCreatorAfterLeaveRequestTypeID: "messages.getFutureChatCreatorAfterLeave#3b7d0ea6", MessagesEditChatParticipantRankRequestTypeID: "messages.editChatParticipantRank#a00f32b0", MessagesDeclineURLAuthRequestTypeID: "messages.declineUrlAuth#35436bbc", MessagesCheckURLAuthMatchCodeRequestTypeID: "messages.checkUrlAuthMatchCode#c9a47b0b", + MessagesComposeMessageWithAIRequestTypeID: "messages.composeMessageWithAI#fd426afe", + MessagesReportReadMetricsRequestTypeID: "messages.reportReadMetrics#4067c5e6", + MessagesReportMusicListenRequestTypeID: "messages.reportMusicListen#ddbcd819", + MessagesAddPollAnswerRequestTypeID: "messages.addPollAnswer#19bc4b6d", + MessagesDeletePollAnswerRequestTypeID: "messages.deletePollAnswer#ac8505a5", + MessagesGetUnreadPollVotesRequestTypeID: "messages.getUnreadPollVotes#43286cf2", + MessagesReadPollVotesRequestTypeID: "messages.readPollVotes#1720b4d8", UpdatesGetStateRequestTypeID: "updates.getState#edd4882a", UpdatesGetDifferenceRequestTypeID: "updates.getDifference#19c2f763", UpdatesGetChannelDifferenceRequestTypeID: "updates.getChannelDifference#3173d78", @@ -2150,6 +2171,11 @@ func TypesMap() map[uint32]string { BotsUpdateStarRefProgramRequestTypeID: "bots.updateStarRefProgram#778b5ab3", BotsSetCustomVerificationRequestTypeID: "bots.setCustomVerification#8b89dfbd", BotsGetBotRecommendationsRequestTypeID: "bots.getBotRecommendations#a1b70815", + BotsCheckUsernameRequestTypeID: "bots.checkUsername#87f2219b", + BotsCreateBotRequestTypeID: "bots.createBot#e5b17f2b", + BotsExportBotTokenRequestTypeID: "bots.exportBotToken#bd0d99eb", + BotsRequestWebViewButtonRequestTypeID: "bots.requestWebViewButton#31a2a35e", + BotsGetRequestedWebViewButtonRequestTypeID: "bots.getRequestedWebViewButton#bf25b7f3", PaymentsGetPaymentFormRequestTypeID: "payments.getPaymentForm#37148dbb", PaymentsGetPaymentReceiptRequestTypeID: "payments.getPaymentReceipt#2478d1cc", PaymentsValidateRequestedInfoRequestTypeID: "payments.validateRequestedInfo#b6c8f12b", @@ -2294,8 +2320,8 @@ func TypesMap() map[uint32]string { ChatlistsGetLeaveChatlistSuggestionsRequestTypeID: "chatlists.getLeaveChatlistSuggestions#fdbcd714", ChatlistsLeaveChatlistRequestTypeID: "chatlists.leaveChatlist#74fae13a", StoriesCanSendStoryRequestTypeID: "stories.canSendStory#30eb63f0", - StoriesSendStoryRequestTypeID: "stories.sendStory#737fc2ec", - StoriesEditStoryRequestTypeID: "stories.editStory#b583ba46", + StoriesSendStoryRequestTypeID: "stories.sendStory#8f9e6898", + StoriesEditStoryRequestTypeID: "stories.editStory#2c63a72b", StoriesDeleteStoriesRequestTypeID: "stories.deleteStories#ae59db5f", StoriesTogglePinnedRequestTypeID: "stories.togglePinned#9a75a1ef", StoriesGetAllStoriesRequestTypeID: "stories.getAllStories#eeb0d625", @@ -2538,6 +2564,9 @@ func NamesMap() map[string]uint32 { "messageActionChangeCreator": MessageActionChangeCreatorTypeID, "messageActionNoForwardsToggle": MessageActionNoForwardsToggleTypeID, "messageActionNoForwardsRequest": MessageActionNoForwardsRequestTypeID, + "messageActionPollAppendAnswer": MessageActionPollAppendAnswerTypeID, + "messageActionPollDeleteAnswer": MessageActionPollDeleteAnswerTypeID, + "messageActionManagedBotCreated": MessageActionManagedBotCreatedTypeID, "dialog": DialogTypeID, "dialogFolder": DialogFolderTypeID, "photoEmpty": PhotoEmptyTypeID, @@ -2613,6 +2642,7 @@ func NamesMap() map[string]uint32 { "inputMessagesFilterGeo": InputMessagesFilterGeoTypeID, "inputMessagesFilterContacts": InputMessagesFilterContactsTypeID, "inputMessagesFilterPinned": InputMessagesFilterPinnedTypeID, + "inputMessagesFilterPoll": InputMessagesFilterPollTypeID, "updateNewMessage": UpdateNewMessageTypeID, "updateMessageID": UpdateMessageIDTypeID, "updateDeleteMessages": UpdateDeleteMessagesTypeID, @@ -2766,6 +2796,7 @@ func NamesMap() map[string]uint32 { "updateEmojiGameInfo": UpdateEmojiGameInfoTypeID, "updateStarGiftCraftFail": UpdateStarGiftCraftFailTypeID, "updateChatParticipantRank": UpdateChatParticipantRankTypeID, + "updateManagedBot": UpdateManagedBotTypeID, "updates.state": UpdatesStateTypeID, "updates.differenceEmpty": UpdatesDifferenceEmptyTypeID, "updates.difference": UpdatesDifferenceTypeID, @@ -2983,6 +3014,9 @@ func NamesMap() map[string]uint32 { "messageEntityCustomEmoji": MessageEntityCustomEmojiTypeID, "messageEntityBlockquote": MessageEntityBlockquoteTypeID, "messageEntityFormattedDate": MessageEntityFormattedDateTypeID, + "messageEntityDiffInsert": MessageEntityDiffInsertTypeID, + "messageEntityDiffReplace": MessageEntityDiffReplaceTypeID, + "messageEntityDiffDelete": MessageEntityDiffDeleteTypeID, "inputChannelEmpty": InputChannelEmptyTypeID, "inputChannel": InputChannelTypeID, "inputChannelFromMessage": InputChannelFromMessageTypeID, @@ -3347,6 +3381,7 @@ func NamesMap() map[string]uint32 { "help.userInfoEmpty": HelpUserInfoEmptyTypeID, "help.userInfo": HelpUserInfoTypeID, "pollAnswer": PollAnswerTypeID, + "inputPollAnswer": InputPollAnswerTypeID, "poll": PollTypeID, "pollAnswerVoters": PollAnswerVotersTypeID, "pollResults": PollResultsTypeID, @@ -3592,6 +3627,7 @@ func NamesMap() map[string]uint32 { "requestPeerTypeUser": RequestPeerTypeUserTypeID, "requestPeerTypeChat": RequestPeerTypeChatTypeID, "requestPeerTypeBroadcast": RequestPeerTypeBroadcastTypeID, + "requestPeerTypeCreateBot": RequestPeerTypeCreateBotTypeID, "emojiListNotModified": EmojiListNotModifiedTypeID, "emojiList": EmojiListTypeID, "emojiGroup": EmojiGroupTypeID, @@ -3903,6 +3939,10 @@ func NamesMap() map[string]uint32 { "starGiftAttributeRarityEpic": StarGiftAttributeRarityEpicTypeID, "starGiftAttributeRarityLegendary": StarGiftAttributeRarityLegendaryTypeID, "keyboardButtonStyle": KeyboardButtonStyleTypeID, + "inputMessageReadMetric": InputMessageReadMetricTypeID, + "bots.exportedBotToken": BotsExportedBotTokenTypeID, + "bots.requestedButton": BotsRequestedButtonTypeID, + "messages.composedMessageWithAI": MessagesComposedMessageWithAITypeID, "invokeAfterMsg": InvokeAfterMsgRequestTypeID, "invokeAfterMsgs": InvokeAfterMsgsRequestTypeID, "initConnection": InitConnectionRequestTypeID, @@ -4342,6 +4382,13 @@ func NamesMap() map[string]uint32 { "messages.editChatParticipantRank": MessagesEditChatParticipantRankRequestTypeID, "messages.declineUrlAuth": MessagesDeclineURLAuthRequestTypeID, "messages.checkUrlAuthMatchCode": MessagesCheckURLAuthMatchCodeRequestTypeID, + "messages.composeMessageWithAI": MessagesComposeMessageWithAIRequestTypeID, + "messages.reportReadMetrics": MessagesReportReadMetricsRequestTypeID, + "messages.reportMusicListen": MessagesReportMusicListenRequestTypeID, + "messages.addPollAnswer": MessagesAddPollAnswerRequestTypeID, + "messages.deletePollAnswer": MessagesDeletePollAnswerRequestTypeID, + "messages.getUnreadPollVotes": MessagesGetUnreadPollVotesRequestTypeID, + "messages.readPollVotes": MessagesReadPollVotesRequestTypeID, "updates.getState": UpdatesGetStateRequestTypeID, "updates.getDifference": UpdatesGetDifferenceRequestTypeID, "updates.getChannelDifference": UpdatesGetChannelDifferenceRequestTypeID, @@ -4471,6 +4518,11 @@ func NamesMap() map[string]uint32 { "bots.updateStarRefProgram": BotsUpdateStarRefProgramRequestTypeID, "bots.setCustomVerification": BotsSetCustomVerificationRequestTypeID, "bots.getBotRecommendations": BotsGetBotRecommendationsRequestTypeID, + "bots.checkUsername": BotsCheckUsernameRequestTypeID, + "bots.createBot": BotsCreateBotRequestTypeID, + "bots.exportBotToken": BotsExportBotTokenRequestTypeID, + "bots.requestWebViewButton": BotsRequestWebViewButtonRequestTypeID, + "bots.getRequestedWebViewButton": BotsGetRequestedWebViewButtonRequestTypeID, "payments.getPaymentForm": PaymentsGetPaymentFormRequestTypeID, "payments.getPaymentReceipt": PaymentsGetPaymentReceiptRequestTypeID, "payments.validateRequestedInfo": PaymentsValidateRequestedInfoRequestTypeID, @@ -4859,6 +4911,9 @@ func TypesConstructorMap() map[uint32]func() bin.Object { MessageActionChangeCreatorTypeID: func() bin.Object { return &MessageActionChangeCreator{} }, MessageActionNoForwardsToggleTypeID: func() bin.Object { return &MessageActionNoForwardsToggle{} }, MessageActionNoForwardsRequestTypeID: func() bin.Object { return &MessageActionNoForwardsRequest{} }, + MessageActionPollAppendAnswerTypeID: func() bin.Object { return &MessageActionPollAppendAnswer{} }, + MessageActionPollDeleteAnswerTypeID: func() bin.Object { return &MessageActionPollDeleteAnswer{} }, + MessageActionManagedBotCreatedTypeID: func() bin.Object { return &MessageActionManagedBotCreated{} }, DialogTypeID: func() bin.Object { return &Dialog{} }, DialogFolderTypeID: func() bin.Object { return &DialogFolder{} }, PhotoEmptyTypeID: func() bin.Object { return &PhotoEmpty{} }, @@ -4934,6 +4989,7 @@ func TypesConstructorMap() map[uint32]func() bin.Object { InputMessagesFilterGeoTypeID: func() bin.Object { return &InputMessagesFilterGeo{} }, InputMessagesFilterContactsTypeID: func() bin.Object { return &InputMessagesFilterContacts{} }, InputMessagesFilterPinnedTypeID: func() bin.Object { return &InputMessagesFilterPinned{} }, + InputMessagesFilterPollTypeID: func() bin.Object { return &InputMessagesFilterPoll{} }, UpdateNewMessageTypeID: func() bin.Object { return &UpdateNewMessage{} }, UpdateMessageIDTypeID: func() bin.Object { return &UpdateMessageID{} }, UpdateDeleteMessagesTypeID: func() bin.Object { return &UpdateDeleteMessages{} }, @@ -5087,6 +5143,7 @@ func TypesConstructorMap() map[uint32]func() bin.Object { UpdateEmojiGameInfoTypeID: func() bin.Object { return &UpdateEmojiGameInfo{} }, UpdateStarGiftCraftFailTypeID: func() bin.Object { return &UpdateStarGiftCraftFail{} }, UpdateChatParticipantRankTypeID: func() bin.Object { return &UpdateChatParticipantRank{} }, + UpdateManagedBotTypeID: func() bin.Object { return &UpdateManagedBot{} }, UpdatesStateTypeID: func() bin.Object { return &UpdatesState{} }, UpdatesDifferenceEmptyTypeID: func() bin.Object { return &UpdatesDifferenceEmpty{} }, UpdatesDifferenceTypeID: func() bin.Object { return &UpdatesDifference{} }, @@ -5304,6 +5361,9 @@ func TypesConstructorMap() map[uint32]func() bin.Object { MessageEntityCustomEmojiTypeID: func() bin.Object { return &MessageEntityCustomEmoji{} }, MessageEntityBlockquoteTypeID: func() bin.Object { return &MessageEntityBlockquote{} }, MessageEntityFormattedDateTypeID: func() bin.Object { return &MessageEntityFormattedDate{} }, + MessageEntityDiffInsertTypeID: func() bin.Object { return &MessageEntityDiffInsert{} }, + MessageEntityDiffReplaceTypeID: func() bin.Object { return &MessageEntityDiffReplace{} }, + MessageEntityDiffDeleteTypeID: func() bin.Object { return &MessageEntityDiffDelete{} }, InputChannelEmptyTypeID: func() bin.Object { return &InputChannelEmpty{} }, InputChannelTypeID: func() bin.Object { return &InputChannel{} }, InputChannelFromMessageTypeID: func() bin.Object { return &InputChannelFromMessage{} }, @@ -5668,6 +5728,7 @@ func TypesConstructorMap() map[uint32]func() bin.Object { HelpUserInfoEmptyTypeID: func() bin.Object { return &HelpUserInfoEmpty{} }, HelpUserInfoTypeID: func() bin.Object { return &HelpUserInfo{} }, PollAnswerTypeID: func() bin.Object { return &PollAnswer{} }, + InputPollAnswerTypeID: func() bin.Object { return &InputPollAnswer{} }, PollTypeID: func() bin.Object { return &Poll{} }, PollAnswerVotersTypeID: func() bin.Object { return &PollAnswerVoters{} }, PollResultsTypeID: func() bin.Object { return &PollResults{} }, @@ -5913,6 +5974,7 @@ func TypesConstructorMap() map[uint32]func() bin.Object { RequestPeerTypeUserTypeID: func() bin.Object { return &RequestPeerTypeUser{} }, RequestPeerTypeChatTypeID: func() bin.Object { return &RequestPeerTypeChat{} }, RequestPeerTypeBroadcastTypeID: func() bin.Object { return &RequestPeerTypeBroadcast{} }, + RequestPeerTypeCreateBotTypeID: func() bin.Object { return &RequestPeerTypeCreateBot{} }, EmojiListNotModifiedTypeID: func() bin.Object { return &EmojiListNotModified{} }, EmojiListTypeID: func() bin.Object { return &EmojiList{} }, EmojiGroupTypeID: func() bin.Object { return &EmojiGroup{} }, @@ -6224,6 +6286,10 @@ func TypesConstructorMap() map[uint32]func() bin.Object { StarGiftAttributeRarityEpicTypeID: func() bin.Object { return &StarGiftAttributeRarityEpic{} }, StarGiftAttributeRarityLegendaryTypeID: func() bin.Object { return &StarGiftAttributeRarityLegendary{} }, KeyboardButtonStyleTypeID: func() bin.Object { return &KeyboardButtonStyle{} }, + InputMessageReadMetricTypeID: func() bin.Object { return &InputMessageReadMetric{} }, + BotsExportedBotTokenTypeID: func() bin.Object { return &BotsExportedBotToken{} }, + BotsRequestedButtonTypeID: func() bin.Object { return &BotsRequestedButton{} }, + MessagesComposedMessageWithAITypeID: func() bin.Object { return &MessagesComposedMessageWithAI{} }, InvokeAfterMsgRequestTypeID: func() bin.Object { return &InvokeAfterMsgRequest{} }, InvokeAfterMsgsRequestTypeID: func() bin.Object { return &InvokeAfterMsgsRequest{} }, InitConnectionRequestTypeID: func() bin.Object { return &InitConnectionRequest{} }, @@ -6663,6 +6729,13 @@ func TypesConstructorMap() map[uint32]func() bin.Object { MessagesEditChatParticipantRankRequestTypeID: func() bin.Object { return &MessagesEditChatParticipantRankRequest{} }, MessagesDeclineURLAuthRequestTypeID: func() bin.Object { return &MessagesDeclineURLAuthRequest{} }, MessagesCheckURLAuthMatchCodeRequestTypeID: func() bin.Object { return &MessagesCheckURLAuthMatchCodeRequest{} }, + MessagesComposeMessageWithAIRequestTypeID: func() bin.Object { return &MessagesComposeMessageWithAIRequest{} }, + MessagesReportReadMetricsRequestTypeID: func() bin.Object { return &MessagesReportReadMetricsRequest{} }, + MessagesReportMusicListenRequestTypeID: func() bin.Object { return &MessagesReportMusicListenRequest{} }, + MessagesAddPollAnswerRequestTypeID: func() bin.Object { return &MessagesAddPollAnswerRequest{} }, + MessagesDeletePollAnswerRequestTypeID: func() bin.Object { return &MessagesDeletePollAnswerRequest{} }, + MessagesGetUnreadPollVotesRequestTypeID: func() bin.Object { return &MessagesGetUnreadPollVotesRequest{} }, + MessagesReadPollVotesRequestTypeID: func() bin.Object { return &MessagesReadPollVotesRequest{} }, UpdatesGetStateRequestTypeID: func() bin.Object { return &UpdatesGetStateRequest{} }, UpdatesGetDifferenceRequestTypeID: func() bin.Object { return &UpdatesGetDifferenceRequest{} }, UpdatesGetChannelDifferenceRequestTypeID: func() bin.Object { return &UpdatesGetChannelDifferenceRequest{} }, @@ -6792,6 +6865,11 @@ func TypesConstructorMap() map[uint32]func() bin.Object { BotsUpdateStarRefProgramRequestTypeID: func() bin.Object { return &BotsUpdateStarRefProgramRequest{} }, BotsSetCustomVerificationRequestTypeID: func() bin.Object { return &BotsSetCustomVerificationRequest{} }, BotsGetBotRecommendationsRequestTypeID: func() bin.Object { return &BotsGetBotRecommendationsRequest{} }, + BotsCheckUsernameRequestTypeID: func() bin.Object { return &BotsCheckUsernameRequest{} }, + BotsCreateBotRequestTypeID: func() bin.Object { return &BotsCreateBotRequest{} }, + BotsExportBotTokenRequestTypeID: func() bin.Object { return &BotsExportBotTokenRequest{} }, + BotsRequestWebViewButtonRequestTypeID: func() bin.Object { return &BotsRequestWebViewButtonRequest{} }, + BotsGetRequestedWebViewButtonRequestTypeID: func() bin.Object { return &BotsGetRequestedWebViewButtonRequest{} }, PaymentsGetPaymentFormRequestTypeID: func() bin.Object { return &PaymentsGetPaymentFormRequest{} }, PaymentsGetPaymentReceiptRequestTypeID: func() bin.Object { return &PaymentsGetPaymentReceiptRequest{} }, PaymentsValidateRequestedInfoRequestTypeID: func() bin.Object { return &PaymentsValidateRequestedInfoRequest{} }, @@ -7805,6 +7883,9 @@ func ClassConstructorsMap() map[string][]uint32 { MessageActionChangeCreatorTypeID, MessageActionNoForwardsToggleTypeID, MessageActionNoForwardsRequestTypeID, + MessageActionPollAppendAnswerTypeID, + MessageActionPollDeleteAnswerTypeID, + MessageActionManagedBotCreatedTypeID, }, MessageClassName: { MessageEmptyTypeID, @@ -7834,6 +7915,9 @@ func ClassConstructorsMap() map[string][]uint32 { MessageEntityCustomEmojiTypeID, MessageEntityBlockquoteTypeID, MessageEntityFormattedDateTypeID, + MessageEntityDiffInsertTypeID, + MessageEntityDiffReplaceTypeID, + MessageEntityDiffDeleteTypeID, }, MessageExtendedMediaClassName: { MessageExtendedMediaPreviewTypeID, @@ -7932,6 +8016,7 @@ func ClassConstructorsMap() map[string][]uint32 { InputMessagesFilterGeoTypeID, InputMessagesFilterContactsTypeID, InputMessagesFilterPinnedTypeID, + InputMessagesFilterPollTypeID, }, MessagesFoundStickerSetsClassName: { MessagesFoundStickerSetsNotModifiedTypeID, @@ -8135,6 +8220,10 @@ func ClassConstructorsMap() map[string][]uint32 { PhotosPhotosTypeID, PhotosPhotosSliceTypeID, }, + PollAnswerClassName: { + PollAnswerTypeID, + InputPollAnswerTypeID, + }, PostInteractionCountersClassName: { PostInteractionCountersMessageTypeID, PostInteractionCountersStoryTypeID, @@ -8231,6 +8320,7 @@ func ClassConstructorsMap() map[string][]uint32 { RequestPeerTypeUserTypeID, RequestPeerTypeChatTypeID, RequestPeerTypeBroadcastTypeID, + RequestPeerTypeCreateBotTypeID, }, RequestedPeerClassName: { RequestedPeerUserTypeID, @@ -8589,6 +8679,7 @@ func ClassConstructorsMap() map[string][]uint32 { UpdateEmojiGameInfoTypeID, UpdateStarGiftCraftFailTypeID, UpdateChatParticipantRankTypeID, + UpdateManagedBotTypeID, }, UpdatesChannelDifferenceClassName: { UpdatesChannelDifferenceEmptyTypeID, diff --git a/pkg/gotd/tg/tl_request_peer_type_gen.go b/pkg/gotd/tg/tl_request_peer_type_gen.go index fbb311d8..778ccd6f 100644 --- a/pkg/gotd/tg/tl_request_peer_type_gen.go +++ b/pkg/gotd/tg/tl_request_peer_type_gen.go @@ -976,6 +976,262 @@ func (r *RequestPeerTypeBroadcast) GetBotAdminRights() (value ChatAdminRights, o return r.BotAdminRights, true } +// RequestPeerTypeCreateBot represents TL type `requestPeerTypeCreateBot#3e81e078`. +// +// See https://core.telegram.org/constructor/requestPeerTypeCreateBot for reference. +type RequestPeerTypeCreateBot struct { + // Flags field of RequestPeerTypeCreateBot. + Flags bin.Fields + // BotManaged field of RequestPeerTypeCreateBot. + BotManaged bool + // SuggestedName field of RequestPeerTypeCreateBot. + // + // Use SetSuggestedName and GetSuggestedName helpers. + SuggestedName string + // SuggestedUsername field of RequestPeerTypeCreateBot. + // + // Use SetSuggestedUsername and GetSuggestedUsername helpers. + SuggestedUsername string +} + +// RequestPeerTypeCreateBotTypeID is TL type id of RequestPeerTypeCreateBot. +const RequestPeerTypeCreateBotTypeID = 0x3e81e078 + +// construct implements constructor of RequestPeerTypeClass. +func (r RequestPeerTypeCreateBot) construct() RequestPeerTypeClass { return &r } + +// Ensuring interfaces in compile-time for RequestPeerTypeCreateBot. +var ( + _ bin.Encoder = &RequestPeerTypeCreateBot{} + _ bin.Decoder = &RequestPeerTypeCreateBot{} + _ bin.BareEncoder = &RequestPeerTypeCreateBot{} + _ bin.BareDecoder = &RequestPeerTypeCreateBot{} + + _ RequestPeerTypeClass = &RequestPeerTypeCreateBot{} +) + +func (r *RequestPeerTypeCreateBot) Zero() bool { + if r == nil { + return true + } + if !(r.Flags.Zero()) { + return false + } + if !(r.BotManaged == false) { + return false + } + if !(r.SuggestedName == "") { + return false + } + if !(r.SuggestedUsername == "") { + return false + } + + return true +} + +// String implements fmt.Stringer. +func (r *RequestPeerTypeCreateBot) String() string { + if r == nil { + return "RequestPeerTypeCreateBot(nil)" + } + type Alias RequestPeerTypeCreateBot + return fmt.Sprintf("RequestPeerTypeCreateBot%+v", Alias(*r)) +} + +// FillFrom fills RequestPeerTypeCreateBot from given interface. +func (r *RequestPeerTypeCreateBot) FillFrom(from interface { + GetBotManaged() (value bool) + GetSuggestedName() (value string, ok bool) + GetSuggestedUsername() (value string, ok bool) +}) { + r.BotManaged = from.GetBotManaged() + if val, ok := from.GetSuggestedName(); ok { + r.SuggestedName = val + } + + if val, ok := from.GetSuggestedUsername(); ok { + r.SuggestedUsername = val + } + +} + +// TypeID returns type id in TL schema. +// +// See https://core.telegram.org/mtproto/TL-tl#remarks. +func (*RequestPeerTypeCreateBot) TypeID() uint32 { + return RequestPeerTypeCreateBotTypeID +} + +// TypeName returns name of type in TL schema. +func (*RequestPeerTypeCreateBot) TypeName() string { + return "requestPeerTypeCreateBot" +} + +// TypeInfo returns info about TL type. +func (r *RequestPeerTypeCreateBot) TypeInfo() tdp.Type { + typ := tdp.Type{ + Name: "requestPeerTypeCreateBot", + ID: RequestPeerTypeCreateBotTypeID, + } + if r == nil { + typ.Null = true + return typ + } + typ.Fields = []tdp.Field{ + { + Name: "BotManaged", + SchemaName: "bot_managed", + Null: !r.Flags.Has(0), + }, + { + Name: "SuggestedName", + SchemaName: "suggested_name", + Null: !r.Flags.Has(1), + }, + { + Name: "SuggestedUsername", + SchemaName: "suggested_username", + Null: !r.Flags.Has(2), + }, + } + return typ +} + +// SetFlags sets flags for non-zero fields. +func (r *RequestPeerTypeCreateBot) SetFlags() { + if !(r.BotManaged == false) { + r.Flags.Set(0) + } + if !(r.SuggestedName == "") { + r.Flags.Set(1) + } + if !(r.SuggestedUsername == "") { + r.Flags.Set(2) + } +} + +// Encode implements bin.Encoder. +func (r *RequestPeerTypeCreateBot) Encode(b *bin.Buffer) error { + if r == nil { + return fmt.Errorf("can't encode requestPeerTypeCreateBot#3e81e078 as nil") + } + b.PutID(RequestPeerTypeCreateBotTypeID) + return r.EncodeBare(b) +} + +// EncodeBare implements bin.BareEncoder. +func (r *RequestPeerTypeCreateBot) EncodeBare(b *bin.Buffer) error { + if r == nil { + return fmt.Errorf("can't encode requestPeerTypeCreateBot#3e81e078 as nil") + } + r.SetFlags() + if err := r.Flags.Encode(b); err != nil { + return fmt.Errorf("unable to encode requestPeerTypeCreateBot#3e81e078: field flags: %w", err) + } + if r.Flags.Has(1) { + b.PutString(r.SuggestedName) + } + if r.Flags.Has(2) { + b.PutString(r.SuggestedUsername) + } + return nil +} + +// Decode implements bin.Decoder. +func (r *RequestPeerTypeCreateBot) Decode(b *bin.Buffer) error { + if r == nil { + return fmt.Errorf("can't decode requestPeerTypeCreateBot#3e81e078 to nil") + } + if err := b.ConsumeID(RequestPeerTypeCreateBotTypeID); err != nil { + return fmt.Errorf("unable to decode requestPeerTypeCreateBot#3e81e078: %w", err) + } + return r.DecodeBare(b) +} + +// DecodeBare implements bin.BareDecoder. +func (r *RequestPeerTypeCreateBot) DecodeBare(b *bin.Buffer) error { + if r == nil { + return fmt.Errorf("can't decode requestPeerTypeCreateBot#3e81e078 to nil") + } + { + if err := r.Flags.Decode(b); err != nil { + return fmt.Errorf("unable to decode requestPeerTypeCreateBot#3e81e078: field flags: %w", err) + } + } + r.BotManaged = r.Flags.Has(0) + if r.Flags.Has(1) { + value, err := b.String() + if err != nil { + return fmt.Errorf("unable to decode requestPeerTypeCreateBot#3e81e078: field suggested_name: %w", err) + } + r.SuggestedName = value + } + if r.Flags.Has(2) { + value, err := b.String() + if err != nil { + return fmt.Errorf("unable to decode requestPeerTypeCreateBot#3e81e078: field suggested_username: %w", err) + } + r.SuggestedUsername = value + } + return nil +} + +// SetBotManaged sets value of BotManaged conditional field. +func (r *RequestPeerTypeCreateBot) SetBotManaged(value bool) { + if value { + r.Flags.Set(0) + r.BotManaged = true + } else { + r.Flags.Unset(0) + r.BotManaged = false + } +} + +// GetBotManaged returns value of BotManaged conditional field. +func (r *RequestPeerTypeCreateBot) GetBotManaged() (value bool) { + if r == nil { + return + } + return r.Flags.Has(0) +} + +// SetSuggestedName sets value of SuggestedName conditional field. +func (r *RequestPeerTypeCreateBot) SetSuggestedName(value string) { + r.Flags.Set(1) + r.SuggestedName = value +} + +// GetSuggestedName returns value of SuggestedName conditional field and +// boolean which is true if field was set. +func (r *RequestPeerTypeCreateBot) GetSuggestedName() (value string, ok bool) { + if r == nil { + return + } + if !r.Flags.Has(1) { + return value, false + } + return r.SuggestedName, true +} + +// SetSuggestedUsername sets value of SuggestedUsername conditional field. +func (r *RequestPeerTypeCreateBot) SetSuggestedUsername(value string) { + r.Flags.Set(2) + r.SuggestedUsername = value +} + +// GetSuggestedUsername returns value of SuggestedUsername conditional field and +// boolean which is true if field was set. +func (r *RequestPeerTypeCreateBot) GetSuggestedUsername() (value string, ok bool) { + if r == nil { + return + } + if !r.Flags.Has(2) { + return value, false + } + return r.SuggestedUsername, true +} + // RequestPeerTypeClassName is schema name of RequestPeerTypeClass. const RequestPeerTypeClassName = "RequestPeerType" @@ -993,6 +1249,7 @@ const RequestPeerTypeClassName = "RequestPeerType" // case *tg.RequestPeerTypeUser: // requestPeerTypeUser#5f3b8a00 // case *tg.RequestPeerTypeChat: // requestPeerTypeChat#c9f06e1b // case *tg.RequestPeerTypeBroadcast: // requestPeerTypeBroadcast#339bef6c +// case *tg.RequestPeerTypeCreateBot: // requestPeerTypeCreateBot#3e81e078 // default: panic(v) // } type RequestPeerTypeClass interface { @@ -1042,6 +1299,13 @@ func DecodeRequestPeerType(buf *bin.Buffer) (RequestPeerTypeClass, error) { return nil, fmt.Errorf("unable to decode RequestPeerTypeClass: %w", err) } return &v, nil + case RequestPeerTypeCreateBotTypeID: + // Decoding requestPeerTypeCreateBot#3e81e078. + v := RequestPeerTypeCreateBot{} + if err := v.Decode(buf); err != nil { + return nil, fmt.Errorf("unable to decode RequestPeerTypeClass: %w", err) + } + return &v, nil default: return nil, fmt.Errorf("unable to decode RequestPeerTypeClass: %w", bin.NewUnexpectedID(id)) } diff --git a/pkg/gotd/tg/tl_request_peer_type_slices_gen.go b/pkg/gotd/tg/tl_request_peer_type_slices_gen.go index f3ecc99c..4c9d2516 100644 --- a/pkg/gotd/tg/tl_request_peer_type_slices_gen.go +++ b/pkg/gotd/tg/tl_request_peer_type_slices_gen.go @@ -155,6 +155,19 @@ func (s RequestPeerTypeClassArray) AsRequestPeerTypeBroadcast() (to RequestPeerT return to } +// AsRequestPeerTypeCreateBot returns copy with only RequestPeerTypeCreateBot constructors. +func (s RequestPeerTypeClassArray) AsRequestPeerTypeCreateBot() (to RequestPeerTypeCreateBotArray) { + for _, elem := range s { + value, ok := elem.(*RequestPeerTypeCreateBot) + if !ok { + continue + } + to = append(to, *value) + } + + return to +} + // RequestPeerTypeUserArray is adapter for slice of RequestPeerTypeUser. type RequestPeerTypeUserArray []RequestPeerTypeUser @@ -400,3 +413,85 @@ func (s *RequestPeerTypeBroadcastArray) Pop() (v RequestPeerTypeBroadcast, ok bo return v, true } + +// RequestPeerTypeCreateBotArray is adapter for slice of RequestPeerTypeCreateBot. +type RequestPeerTypeCreateBotArray []RequestPeerTypeCreateBot + +// Sort sorts slice of RequestPeerTypeCreateBot. +func (s RequestPeerTypeCreateBotArray) Sort(less func(a, b RequestPeerTypeCreateBot) bool) RequestPeerTypeCreateBotArray { + sort.Slice(s, func(i, j int) bool { + return less(s[i], s[j]) + }) + return s +} + +// SortStable sorts slice of RequestPeerTypeCreateBot. +func (s RequestPeerTypeCreateBotArray) SortStable(less func(a, b RequestPeerTypeCreateBot) bool) RequestPeerTypeCreateBotArray { + sort.SliceStable(s, func(i, j int) bool { + return less(s[i], s[j]) + }) + return s +} + +// Retain filters in-place slice of RequestPeerTypeCreateBot. +func (s RequestPeerTypeCreateBotArray) Retain(keep func(x RequestPeerTypeCreateBot) bool) RequestPeerTypeCreateBotArray { + n := 0 + for _, x := range s { + if keep(x) { + s[n] = x + n++ + } + } + s = s[:n] + + return s +} + +// First returns first element of slice (if exists). +func (s RequestPeerTypeCreateBotArray) First() (v RequestPeerTypeCreateBot, ok bool) { + if len(s) < 1 { + return + } + return s[0], true +} + +// Last returns last element of slice (if exists). +func (s RequestPeerTypeCreateBotArray) Last() (v RequestPeerTypeCreateBot, ok bool) { + if len(s) < 1 { + return + } + return s[len(s)-1], true +} + +// PopFirst returns first element of slice (if exists) and deletes it. +func (s *RequestPeerTypeCreateBotArray) PopFirst() (v RequestPeerTypeCreateBot, ok bool) { + if s == nil || len(*s) < 1 { + return + } + + a := *s + v = a[0] + + // Delete by index from SliceTricks. + copy(a[0:], a[1:]) + var zero RequestPeerTypeCreateBot + a[len(a)-1] = zero + a = a[:len(a)-1] + *s = a + + return v, true +} + +// Pop returns last element of slice (if exists) and deletes it. +func (s *RequestPeerTypeCreateBotArray) Pop() (v RequestPeerTypeCreateBot, ok bool) { + if s == nil || len(*s) < 1 { + return + } + + a := *s + v = a[len(a)-1] + a = a[:len(a)-1] + *s = a + + return v, true +} diff --git a/pkg/gotd/tg/tl_server_gen.go b/pkg/gotd/tg/tl_server_gen.go index e54ee28b..3f1873b8 100644 --- a/pkg/gotd/tg/tl_server_gen.go +++ b/pkg/gotd/tg/tl_server_gen.go @@ -7869,6 +7869,133 @@ func (s *ServerDispatcher) OnMessagesCheckURLAuthMatchCode(f func(ctx context.Co s.handlers[MessagesCheckURLAuthMatchCodeRequestTypeID] = handler } +func (s *ServerDispatcher) OnMessagesComposeMessageWithAI(f func(ctx context.Context, request *MessagesComposeMessageWithAIRequest) (*MessagesComposedMessageWithAI, error)) { + handler := func(ctx context.Context, b *bin.Buffer) (bin.Encoder, error) { + var request MessagesComposeMessageWithAIRequest + if err := request.Decode(b); err != nil { + return nil, err + } + + response, err := f(ctx, &request) + if err != nil { + return nil, err + } + return response, nil + } + + s.handlers[MessagesComposeMessageWithAIRequestTypeID] = handler +} + +func (s *ServerDispatcher) OnMessagesReportReadMetrics(f func(ctx context.Context, request *MessagesReportReadMetricsRequest) (bool, error)) { + handler := func(ctx context.Context, b *bin.Buffer) (bin.Encoder, error) { + var request MessagesReportReadMetricsRequest + if err := request.Decode(b); err != nil { + return nil, err + } + + response, err := f(ctx, &request) + if err != nil { + return nil, err + } + if response { + return &BoolBox{Bool: &BoolTrue{}}, nil + } + + return &BoolBox{Bool: &BoolFalse{}}, nil + } + + s.handlers[MessagesReportReadMetricsRequestTypeID] = handler +} + +func (s *ServerDispatcher) OnMessagesReportMusicListen(f func(ctx context.Context, request *MessagesReportMusicListenRequest) (bool, error)) { + handler := func(ctx context.Context, b *bin.Buffer) (bin.Encoder, error) { + var request MessagesReportMusicListenRequest + if err := request.Decode(b); err != nil { + return nil, err + } + + response, err := f(ctx, &request) + if err != nil { + return nil, err + } + if response { + return &BoolBox{Bool: &BoolTrue{}}, nil + } + + return &BoolBox{Bool: &BoolFalse{}}, nil + } + + s.handlers[MessagesReportMusicListenRequestTypeID] = handler +} + +func (s *ServerDispatcher) OnMessagesAddPollAnswer(f func(ctx context.Context, request *MessagesAddPollAnswerRequest) (UpdatesClass, error)) { + handler := func(ctx context.Context, b *bin.Buffer) (bin.Encoder, error) { + var request MessagesAddPollAnswerRequest + if err := request.Decode(b); err != nil { + return nil, err + } + + response, err := f(ctx, &request) + if err != nil { + return nil, err + } + return &UpdatesBox{Updates: response}, nil + } + + s.handlers[MessagesAddPollAnswerRequestTypeID] = handler +} + +func (s *ServerDispatcher) OnMessagesDeletePollAnswer(f func(ctx context.Context, request *MessagesDeletePollAnswerRequest) (UpdatesClass, error)) { + handler := func(ctx context.Context, b *bin.Buffer) (bin.Encoder, error) { + var request MessagesDeletePollAnswerRequest + if err := request.Decode(b); err != nil { + return nil, err + } + + response, err := f(ctx, &request) + if err != nil { + return nil, err + } + return &UpdatesBox{Updates: response}, nil + } + + s.handlers[MessagesDeletePollAnswerRequestTypeID] = handler +} + +func (s *ServerDispatcher) OnMessagesGetUnreadPollVotes(f func(ctx context.Context, request *MessagesGetUnreadPollVotesRequest) (MessagesMessagesClass, error)) { + handler := func(ctx context.Context, b *bin.Buffer) (bin.Encoder, error) { + var request MessagesGetUnreadPollVotesRequest + if err := request.Decode(b); err != nil { + return nil, err + } + + response, err := f(ctx, &request) + if err != nil { + return nil, err + } + return &MessagesMessagesBox{Messages: response}, nil + } + + s.handlers[MessagesGetUnreadPollVotesRequestTypeID] = handler +} + +func (s *ServerDispatcher) OnMessagesReadPollVotes(f func(ctx context.Context, request *MessagesReadPollVotesRequest) (*MessagesAffectedHistory, error)) { + handler := func(ctx context.Context, b *bin.Buffer) (bin.Encoder, error) { + var request MessagesReadPollVotesRequest + if err := request.Decode(b); err != nil { + return nil, err + } + + response, err := f(ctx, &request) + if err != nil { + return nil, err + } + return response, nil + } + + s.handlers[MessagesReadPollVotesRequestTypeID] = handler +} + func (s *ServerDispatcher) OnUpdatesGetState(f func(ctx context.Context) (*UpdatesState, error)) { handler := func(ctx context.Context, b *bin.Buffer) (bin.Encoder, error) { var request UpdatesGetStateRequest @@ -10210,6 +10337,95 @@ func (s *ServerDispatcher) OnBotsGetBotRecommendations(f func(ctx context.Contex s.handlers[BotsGetBotRecommendationsRequestTypeID] = handler } +func (s *ServerDispatcher) OnBotsCheckUsername(f func(ctx context.Context, username string) (bool, error)) { + handler := func(ctx context.Context, b *bin.Buffer) (bin.Encoder, error) { + var request BotsCheckUsernameRequest + if err := request.Decode(b); err != nil { + return nil, err + } + + response, err := f(ctx, request.Username) + if err != nil { + return nil, err + } + if response { + return &BoolBox{Bool: &BoolTrue{}}, nil + } + + return &BoolBox{Bool: &BoolFalse{}}, nil + } + + s.handlers[BotsCheckUsernameRequestTypeID] = handler +} + +func (s *ServerDispatcher) OnBotsCreateBot(f func(ctx context.Context, request *BotsCreateBotRequest) (UserClass, error)) { + handler := func(ctx context.Context, b *bin.Buffer) (bin.Encoder, error) { + var request BotsCreateBotRequest + if err := request.Decode(b); err != nil { + return nil, err + } + + response, err := f(ctx, &request) + if err != nil { + return nil, err + } + return &UserBox{User: response}, nil + } + + s.handlers[BotsCreateBotRequestTypeID] = handler +} + +func (s *ServerDispatcher) OnBotsExportBotToken(f func(ctx context.Context, request *BotsExportBotTokenRequest) (*BotsExportedBotToken, error)) { + handler := func(ctx context.Context, b *bin.Buffer) (bin.Encoder, error) { + var request BotsExportBotTokenRequest + if err := request.Decode(b); err != nil { + return nil, err + } + + response, err := f(ctx, &request) + if err != nil { + return nil, err + } + return response, nil + } + + s.handlers[BotsExportBotTokenRequestTypeID] = handler +} + +func (s *ServerDispatcher) OnBotsRequestWebViewButton(f func(ctx context.Context, request *BotsRequestWebViewButtonRequest) (*BotsRequestedButton, error)) { + handler := func(ctx context.Context, b *bin.Buffer) (bin.Encoder, error) { + var request BotsRequestWebViewButtonRequest + if err := request.Decode(b); err != nil { + return nil, err + } + + response, err := f(ctx, &request) + if err != nil { + return nil, err + } + return response, nil + } + + s.handlers[BotsRequestWebViewButtonRequestTypeID] = handler +} + +func (s *ServerDispatcher) OnBotsGetRequestedWebViewButton(f func(ctx context.Context, request *BotsGetRequestedWebViewButtonRequest) (KeyboardButtonClass, error)) { + handler := func(ctx context.Context, b *bin.Buffer) (bin.Encoder, error) { + var request BotsGetRequestedWebViewButtonRequest + if err := request.Decode(b); err != nil { + return nil, err + } + + response, err := f(ctx, &request) + if err != nil { + return nil, err + } + return &KeyboardButtonBox{KeyboardButton: response}, nil + } + + s.handlers[BotsGetRequestedWebViewButtonRequestTypeID] = handler +} + func (s *ServerDispatcher) OnPaymentsGetPaymentForm(f func(ctx context.Context, request *PaymentsGetPaymentFormRequest) (PaymentsPaymentFormClass, error)) { handler := func(ctx context.Context, b *bin.Buffer) (bin.Encoder, error) { var request PaymentsGetPaymentFormRequest diff --git a/pkg/gotd/tg/tl_stories_edit_story_gen.go b/pkg/gotd/tg/tl_stories_edit_story_gen.go index bc370b44..6c321475 100644 --- a/pkg/gotd/tg/tl_stories_edit_story_gen.go +++ b/pkg/gotd/tg/tl_stories_edit_story_gen.go @@ -31,7 +31,7 @@ var ( _ = tdjson.Encoder{} ) -// StoriesEditStoryRequest represents TL type `stories.editStory#b583ba46`. +// StoriesEditStoryRequest represents TL type `stories.editStory#2c63a72b`. // Edit an uploaded story¹ // May also be used in a business connection¹, not by wrapping the query in // invokeWithBusinessConnection »², but rather by specifying the ID of a controlled @@ -88,10 +88,14 @@ type StoriesEditStoryRequest struct { // // Use SetPrivacyRules and GetPrivacyRules helpers. PrivacyRules []InputPrivacyRuleClass + // Music field of StoriesEditStoryRequest. + // + // Use SetMusic and GetMusic helpers. + Music InputDocumentClass } // StoriesEditStoryRequestTypeID is TL type id of StoriesEditStoryRequest. -const StoriesEditStoryRequestTypeID = 0xb583ba46 +const StoriesEditStoryRequestTypeID = 0x2c63a72b // Ensuring interfaces in compile-time for StoriesEditStoryRequest. var ( @@ -129,6 +133,9 @@ func (e *StoriesEditStoryRequest) Zero() bool { if !(e.PrivacyRules == nil) { return false } + if !(e.Music == nil) { + return false + } return true } @@ -151,6 +158,7 @@ func (e *StoriesEditStoryRequest) FillFrom(from interface { GetCaption() (value string, ok bool) GetEntities() (value []MessageEntityClass, ok bool) GetPrivacyRules() (value []InputPrivacyRuleClass, ok bool) + GetMusic() (value InputDocumentClass, ok bool) }) { e.Peer = from.GetPeer() e.ID = from.GetID() @@ -174,6 +182,10 @@ func (e *StoriesEditStoryRequest) FillFrom(from interface { e.PrivacyRules = val } + if val, ok := from.GetMusic(); ok { + e.Music = val + } + } // TypeID returns type id in TL schema. @@ -232,6 +244,11 @@ func (e *StoriesEditStoryRequest) TypeInfo() tdp.Type { SchemaName: "privacy_rules", Null: !e.Flags.Has(2), }, + { + Name: "Music", + SchemaName: "music", + Null: !e.Flags.Has(4), + }, } return typ } @@ -253,12 +270,15 @@ func (e *StoriesEditStoryRequest) SetFlags() { if !(e.PrivacyRules == nil) { e.Flags.Set(2) } + if !(e.Music == nil) { + e.Flags.Set(4) + } } // Encode implements bin.Encoder. func (e *StoriesEditStoryRequest) Encode(b *bin.Buffer) error { if e == nil { - return fmt.Errorf("can't encode stories.editStory#b583ba46 as nil") + return fmt.Errorf("can't encode stories.editStory#2c63a72b as nil") } b.PutID(StoriesEditStoryRequestTypeID) return e.EncodeBare(b) @@ -267,35 +287,35 @@ func (e *StoriesEditStoryRequest) Encode(b *bin.Buffer) error { // EncodeBare implements bin.BareEncoder. func (e *StoriesEditStoryRequest) EncodeBare(b *bin.Buffer) error { if e == nil { - return fmt.Errorf("can't encode stories.editStory#b583ba46 as nil") + return fmt.Errorf("can't encode stories.editStory#2c63a72b as nil") } e.SetFlags() if err := e.Flags.Encode(b); err != nil { - return fmt.Errorf("unable to encode stories.editStory#b583ba46: field flags: %w", err) + return fmt.Errorf("unable to encode stories.editStory#2c63a72b: field flags: %w", err) } if e.Peer == nil { - return fmt.Errorf("unable to encode stories.editStory#b583ba46: field peer is nil") + return fmt.Errorf("unable to encode stories.editStory#2c63a72b: field peer is nil") } if err := e.Peer.Encode(b); err != nil { - return fmt.Errorf("unable to encode stories.editStory#b583ba46: field peer: %w", err) + return fmt.Errorf("unable to encode stories.editStory#2c63a72b: field peer: %w", err) } b.PutInt(e.ID) if e.Flags.Has(0) { if e.Media == nil { - return fmt.Errorf("unable to encode stories.editStory#b583ba46: field media is nil") + return fmt.Errorf("unable to encode stories.editStory#2c63a72b: field media is nil") } if err := e.Media.Encode(b); err != nil { - return fmt.Errorf("unable to encode stories.editStory#b583ba46: field media: %w", err) + return fmt.Errorf("unable to encode stories.editStory#2c63a72b: field media: %w", err) } } if e.Flags.Has(3) { b.PutVectorHeader(len(e.MediaAreas)) for idx, v := range e.MediaAreas { if v == nil { - return fmt.Errorf("unable to encode stories.editStory#b583ba46: field media_areas element with index %d is nil", idx) + return fmt.Errorf("unable to encode stories.editStory#2c63a72b: field media_areas element with index %d is nil", idx) } if err := v.Encode(b); err != nil { - return fmt.Errorf("unable to encode stories.editStory#b583ba46: field media_areas element with index %d: %w", idx, err) + return fmt.Errorf("unable to encode stories.editStory#2c63a72b: field media_areas element with index %d: %w", idx, err) } } } @@ -306,10 +326,10 @@ func (e *StoriesEditStoryRequest) EncodeBare(b *bin.Buffer) error { b.PutVectorHeader(len(e.Entities)) for idx, v := range e.Entities { if v == nil { - return fmt.Errorf("unable to encode stories.editStory#b583ba46: field entities element with index %d is nil", idx) + return fmt.Errorf("unable to encode stories.editStory#2c63a72b: field entities element with index %d is nil", idx) } if err := v.Encode(b); err != nil { - return fmt.Errorf("unable to encode stories.editStory#b583ba46: field entities element with index %d: %w", idx, err) + return fmt.Errorf("unable to encode stories.editStory#2c63a72b: field entities element with index %d: %w", idx, err) } } } @@ -317,23 +337,31 @@ func (e *StoriesEditStoryRequest) EncodeBare(b *bin.Buffer) error { b.PutVectorHeader(len(e.PrivacyRules)) for idx, v := range e.PrivacyRules { if v == nil { - return fmt.Errorf("unable to encode stories.editStory#b583ba46: field privacy_rules element with index %d is nil", idx) + return fmt.Errorf("unable to encode stories.editStory#2c63a72b: field privacy_rules element with index %d is nil", idx) } if err := v.Encode(b); err != nil { - return fmt.Errorf("unable to encode stories.editStory#b583ba46: field privacy_rules element with index %d: %w", idx, err) + return fmt.Errorf("unable to encode stories.editStory#2c63a72b: field privacy_rules element with index %d: %w", idx, err) } } } + if e.Flags.Has(4) { + if e.Music == nil { + return fmt.Errorf("unable to encode stories.editStory#2c63a72b: field music is nil") + } + if err := e.Music.Encode(b); err != nil { + return fmt.Errorf("unable to encode stories.editStory#2c63a72b: field music: %w", err) + } + } return nil } // Decode implements bin.Decoder. func (e *StoriesEditStoryRequest) Decode(b *bin.Buffer) error { if e == nil { - return fmt.Errorf("can't decode stories.editStory#b583ba46 to nil") + return fmt.Errorf("can't decode stories.editStory#2c63a72b to nil") } if err := b.ConsumeID(StoriesEditStoryRequestTypeID); err != nil { - return fmt.Errorf("unable to decode stories.editStory#b583ba46: %w", err) + return fmt.Errorf("unable to decode stories.editStory#2c63a72b: %w", err) } return e.DecodeBare(b) } @@ -341,38 +369,38 @@ func (e *StoriesEditStoryRequest) Decode(b *bin.Buffer) error { // DecodeBare implements bin.BareDecoder. func (e *StoriesEditStoryRequest) DecodeBare(b *bin.Buffer) error { if e == nil { - return fmt.Errorf("can't decode stories.editStory#b583ba46 to nil") + return fmt.Errorf("can't decode stories.editStory#2c63a72b to nil") } { if err := e.Flags.Decode(b); err != nil { - return fmt.Errorf("unable to decode stories.editStory#b583ba46: field flags: %w", err) + return fmt.Errorf("unable to decode stories.editStory#2c63a72b: field flags: %w", err) } } { value, err := DecodeInputPeer(b) if err != nil { - return fmt.Errorf("unable to decode stories.editStory#b583ba46: field peer: %w", err) + return fmt.Errorf("unable to decode stories.editStory#2c63a72b: field peer: %w", err) } e.Peer = value } { value, err := b.Int() if err != nil { - return fmt.Errorf("unable to decode stories.editStory#b583ba46: field id: %w", err) + return fmt.Errorf("unable to decode stories.editStory#2c63a72b: field id: %w", err) } e.ID = value } if e.Flags.Has(0) { value, err := DecodeInputMedia(b) if err != nil { - return fmt.Errorf("unable to decode stories.editStory#b583ba46: field media: %w", err) + return fmt.Errorf("unable to decode stories.editStory#2c63a72b: field media: %w", err) } e.Media = value } if e.Flags.Has(3) { headerLen, err := b.VectorHeader() if err != nil { - return fmt.Errorf("unable to decode stories.editStory#b583ba46: field media_areas: %w", err) + return fmt.Errorf("unable to decode stories.editStory#2c63a72b: field media_areas: %w", err) } if headerLen > 0 { @@ -381,7 +409,7 @@ func (e *StoriesEditStoryRequest) DecodeBare(b *bin.Buffer) error { for idx := 0; idx < headerLen; idx++ { value, err := DecodeMediaArea(b) if err != nil { - return fmt.Errorf("unable to decode stories.editStory#b583ba46: field media_areas: %w", err) + return fmt.Errorf("unable to decode stories.editStory#2c63a72b: field media_areas: %w", err) } e.MediaAreas = append(e.MediaAreas, value) } @@ -389,14 +417,14 @@ func (e *StoriesEditStoryRequest) DecodeBare(b *bin.Buffer) error { if e.Flags.Has(1) { value, err := b.String() if err != nil { - return fmt.Errorf("unable to decode stories.editStory#b583ba46: field caption: %w", err) + return fmt.Errorf("unable to decode stories.editStory#2c63a72b: field caption: %w", err) } e.Caption = value } if e.Flags.Has(1) { headerLen, err := b.VectorHeader() if err != nil { - return fmt.Errorf("unable to decode stories.editStory#b583ba46: field entities: %w", err) + return fmt.Errorf("unable to decode stories.editStory#2c63a72b: field entities: %w", err) } if headerLen > 0 { @@ -405,7 +433,7 @@ func (e *StoriesEditStoryRequest) DecodeBare(b *bin.Buffer) error { for idx := 0; idx < headerLen; idx++ { value, err := DecodeMessageEntity(b) if err != nil { - return fmt.Errorf("unable to decode stories.editStory#b583ba46: field entities: %w", err) + return fmt.Errorf("unable to decode stories.editStory#2c63a72b: field entities: %w", err) } e.Entities = append(e.Entities, value) } @@ -413,7 +441,7 @@ func (e *StoriesEditStoryRequest) DecodeBare(b *bin.Buffer) error { if e.Flags.Has(2) { headerLen, err := b.VectorHeader() if err != nil { - return fmt.Errorf("unable to decode stories.editStory#b583ba46: field privacy_rules: %w", err) + return fmt.Errorf("unable to decode stories.editStory#2c63a72b: field privacy_rules: %w", err) } if headerLen > 0 { @@ -422,11 +450,18 @@ func (e *StoriesEditStoryRequest) DecodeBare(b *bin.Buffer) error { for idx := 0; idx < headerLen; idx++ { value, err := DecodeInputPrivacyRule(b) if err != nil { - return fmt.Errorf("unable to decode stories.editStory#b583ba46: field privacy_rules: %w", err) + return fmt.Errorf("unable to decode stories.editStory#2c63a72b: field privacy_rules: %w", err) } e.PrivacyRules = append(e.PrivacyRules, value) } } + if e.Flags.Has(4) { + value, err := DecodeInputDocument(b) + if err != nil { + return fmt.Errorf("unable to decode stories.editStory#2c63a72b: field music: %w", err) + } + e.Music = value + } return nil } @@ -536,6 +571,24 @@ func (e *StoriesEditStoryRequest) GetPrivacyRules() (value []InputPrivacyRuleCla return e.PrivacyRules, true } +// SetMusic sets value of Music conditional field. +func (e *StoriesEditStoryRequest) SetMusic(value InputDocumentClass) { + e.Flags.Set(4) + e.Music = value +} + +// GetMusic returns value of Music conditional field and +// boolean which is true if field was set. +func (e *StoriesEditStoryRequest) GetMusic() (value InputDocumentClass, ok bool) { + if e == nil { + return + } + if !e.Flags.Has(4) { + return value, false + } + return e.Music, true +} + // MapMediaAreas returns field MediaAreas wrapped in MediaAreaClassArray helper. func (e *StoriesEditStoryRequest) MapMediaAreas() (value MediaAreaClassArray, ok bool) { if !e.Flags.Has(3) { @@ -560,7 +613,16 @@ func (e *StoriesEditStoryRequest) MapPrivacyRules() (value InputPrivacyRuleClass return InputPrivacyRuleClassArray(e.PrivacyRules), true } -// StoriesEditStory invokes method stories.editStory#b583ba46 returning error if any. +// GetMusicAsNotEmpty returns mapped value of Music conditional field and +// boolean which is true if field was set. +func (e *StoriesEditStoryRequest) GetMusicAsNotEmpty() (*InputDocument, bool) { + if value, ok := e.GetMusic(); ok { + return value.AsNotEmpty() + } + return nil, false +} + +// StoriesEditStory invokes method stories.editStory#2c63a72b returning error if any. // Edit an uploaded story¹ // May also be used in a business connection¹, not by wrapping the query in // invokeWithBusinessConnection »², but rather by specifying the ID of a controlled diff --git a/pkg/gotd/tg/tl_stories_send_story_gen.go b/pkg/gotd/tg/tl_stories_send_story_gen.go index c7f6ca4d..a205768e 100644 --- a/pkg/gotd/tg/tl_stories_send_story_gen.go +++ b/pkg/gotd/tg/tl_stories_send_story_gen.go @@ -31,7 +31,7 @@ var ( _ = tdjson.Encoder{} ) -// StoriesSendStoryRequest represents TL type `stories.sendStory#737fc2ec`. +// StoriesSendStoryRequest represents TL type `stories.sendStory#8f9e6898`. // Uploads a Telegram Story¹. // May also be used in a business connection¹, not by wrapping the query in // invokeWithBusinessConnection »², but rather by specifying the ID of a controlled @@ -112,10 +112,14 @@ type StoriesSendStoryRequest struct { // // Use SetAlbums and GetAlbums helpers. Albums []int + // Music field of StoriesSendStoryRequest. + // + // Use SetMusic and GetMusic helpers. + Music InputDocumentClass } // StoriesSendStoryRequestTypeID is TL type id of StoriesSendStoryRequest. -const StoriesSendStoryRequestTypeID = 0x737fc2ec +const StoriesSendStoryRequestTypeID = 0x8f9e6898 // Ensuring interfaces in compile-time for StoriesSendStoryRequest. var ( @@ -174,6 +178,9 @@ func (s *StoriesSendStoryRequest) Zero() bool { if !(s.Albums == nil) { return false } + if !(s.Music == nil) { + return false + } return true } @@ -203,6 +210,7 @@ func (s *StoriesSendStoryRequest) FillFrom(from interface { GetFwdFromID() (value InputPeerClass, ok bool) GetFwdFromStory() (value int, ok bool) GetAlbums() (value []int, ok bool) + GetMusic() (value InputDocumentClass, ok bool) }) { s.Pinned = from.GetPinned() s.Noforwards = from.GetNoforwards() @@ -239,6 +247,10 @@ func (s *StoriesSendStoryRequest) FillFrom(from interface { s.Albums = val } + if val, ok := from.GetMusic(); ok { + s.Music = val + } + } // TypeID returns type id in TL schema. @@ -330,6 +342,11 @@ func (s *StoriesSendStoryRequest) TypeInfo() tdp.Type { SchemaName: "albums", Null: !s.Flags.Has(8), }, + { + Name: "Music", + SchemaName: "music", + Null: !s.Flags.Has(9), + }, } return typ } @@ -366,12 +383,15 @@ func (s *StoriesSendStoryRequest) SetFlags() { if !(s.Albums == nil) { s.Flags.Set(8) } + if !(s.Music == nil) { + s.Flags.Set(9) + } } // Encode implements bin.Encoder. func (s *StoriesSendStoryRequest) Encode(b *bin.Buffer) error { if s == nil { - return fmt.Errorf("can't encode stories.sendStory#737fc2ec as nil") + return fmt.Errorf("can't encode stories.sendStory#8f9e6898 as nil") } b.PutID(StoriesSendStoryRequestTypeID) return s.EncodeBare(b) @@ -380,32 +400,32 @@ func (s *StoriesSendStoryRequest) Encode(b *bin.Buffer) error { // EncodeBare implements bin.BareEncoder. func (s *StoriesSendStoryRequest) EncodeBare(b *bin.Buffer) error { if s == nil { - return fmt.Errorf("can't encode stories.sendStory#737fc2ec as nil") + return fmt.Errorf("can't encode stories.sendStory#8f9e6898 as nil") } s.SetFlags() if err := s.Flags.Encode(b); err != nil { - return fmt.Errorf("unable to encode stories.sendStory#737fc2ec: field flags: %w", err) + return fmt.Errorf("unable to encode stories.sendStory#8f9e6898: field flags: %w", err) } if s.Peer == nil { - return fmt.Errorf("unable to encode stories.sendStory#737fc2ec: field peer is nil") + return fmt.Errorf("unable to encode stories.sendStory#8f9e6898: field peer is nil") } if err := s.Peer.Encode(b); err != nil { - return fmt.Errorf("unable to encode stories.sendStory#737fc2ec: field peer: %w", err) + return fmt.Errorf("unable to encode stories.sendStory#8f9e6898: field peer: %w", err) } if s.Media == nil { - return fmt.Errorf("unable to encode stories.sendStory#737fc2ec: field media is nil") + return fmt.Errorf("unable to encode stories.sendStory#8f9e6898: field media is nil") } if err := s.Media.Encode(b); err != nil { - return fmt.Errorf("unable to encode stories.sendStory#737fc2ec: field media: %w", err) + return fmt.Errorf("unable to encode stories.sendStory#8f9e6898: field media: %w", err) } if s.Flags.Has(5) { b.PutVectorHeader(len(s.MediaAreas)) for idx, v := range s.MediaAreas { if v == nil { - return fmt.Errorf("unable to encode stories.sendStory#737fc2ec: field media_areas element with index %d is nil", idx) + return fmt.Errorf("unable to encode stories.sendStory#8f9e6898: field media_areas element with index %d is nil", idx) } if err := v.Encode(b); err != nil { - return fmt.Errorf("unable to encode stories.sendStory#737fc2ec: field media_areas element with index %d: %w", idx, err) + return fmt.Errorf("unable to encode stories.sendStory#8f9e6898: field media_areas element with index %d: %w", idx, err) } } } @@ -416,20 +436,20 @@ func (s *StoriesSendStoryRequest) EncodeBare(b *bin.Buffer) error { b.PutVectorHeader(len(s.Entities)) for idx, v := range s.Entities { if v == nil { - return fmt.Errorf("unable to encode stories.sendStory#737fc2ec: field entities element with index %d is nil", idx) + return fmt.Errorf("unable to encode stories.sendStory#8f9e6898: field entities element with index %d is nil", idx) } if err := v.Encode(b); err != nil { - return fmt.Errorf("unable to encode stories.sendStory#737fc2ec: field entities element with index %d: %w", idx, err) + return fmt.Errorf("unable to encode stories.sendStory#8f9e6898: field entities element with index %d: %w", idx, err) } } } b.PutVectorHeader(len(s.PrivacyRules)) for idx, v := range s.PrivacyRules { if v == nil { - return fmt.Errorf("unable to encode stories.sendStory#737fc2ec: field privacy_rules element with index %d is nil", idx) + return fmt.Errorf("unable to encode stories.sendStory#8f9e6898: field privacy_rules element with index %d is nil", idx) } if err := v.Encode(b); err != nil { - return fmt.Errorf("unable to encode stories.sendStory#737fc2ec: field privacy_rules element with index %d: %w", idx, err) + return fmt.Errorf("unable to encode stories.sendStory#8f9e6898: field privacy_rules element with index %d: %w", idx, err) } } b.PutLong(s.RandomID) @@ -438,10 +458,10 @@ func (s *StoriesSendStoryRequest) EncodeBare(b *bin.Buffer) error { } if s.Flags.Has(6) { if s.FwdFromID == nil { - return fmt.Errorf("unable to encode stories.sendStory#737fc2ec: field fwd_from_id is nil") + return fmt.Errorf("unable to encode stories.sendStory#8f9e6898: field fwd_from_id is nil") } if err := s.FwdFromID.Encode(b); err != nil { - return fmt.Errorf("unable to encode stories.sendStory#737fc2ec: field fwd_from_id: %w", err) + return fmt.Errorf("unable to encode stories.sendStory#8f9e6898: field fwd_from_id: %w", err) } } if s.Flags.Has(6) { @@ -453,16 +473,24 @@ func (s *StoriesSendStoryRequest) EncodeBare(b *bin.Buffer) error { b.PutInt(v) } } + if s.Flags.Has(9) { + if s.Music == nil { + return fmt.Errorf("unable to encode stories.sendStory#8f9e6898: field music is nil") + } + if err := s.Music.Encode(b); err != nil { + return fmt.Errorf("unable to encode stories.sendStory#8f9e6898: field music: %w", err) + } + } return nil } // Decode implements bin.Decoder. func (s *StoriesSendStoryRequest) Decode(b *bin.Buffer) error { if s == nil { - return fmt.Errorf("can't decode stories.sendStory#737fc2ec to nil") + return fmt.Errorf("can't decode stories.sendStory#8f9e6898 to nil") } if err := b.ConsumeID(StoriesSendStoryRequestTypeID); err != nil { - return fmt.Errorf("unable to decode stories.sendStory#737fc2ec: %w", err) + return fmt.Errorf("unable to decode stories.sendStory#8f9e6898: %w", err) } return s.DecodeBare(b) } @@ -470,11 +498,11 @@ func (s *StoriesSendStoryRequest) Decode(b *bin.Buffer) error { // DecodeBare implements bin.BareDecoder. func (s *StoriesSendStoryRequest) DecodeBare(b *bin.Buffer) error { if s == nil { - return fmt.Errorf("can't decode stories.sendStory#737fc2ec to nil") + return fmt.Errorf("can't decode stories.sendStory#8f9e6898 to nil") } { if err := s.Flags.Decode(b); err != nil { - return fmt.Errorf("unable to decode stories.sendStory#737fc2ec: field flags: %w", err) + return fmt.Errorf("unable to decode stories.sendStory#8f9e6898: field flags: %w", err) } } s.Pinned = s.Flags.Has(2) @@ -483,21 +511,21 @@ func (s *StoriesSendStoryRequest) DecodeBare(b *bin.Buffer) error { { value, err := DecodeInputPeer(b) if err != nil { - return fmt.Errorf("unable to decode stories.sendStory#737fc2ec: field peer: %w", err) + return fmt.Errorf("unable to decode stories.sendStory#8f9e6898: field peer: %w", err) } s.Peer = value } { value, err := DecodeInputMedia(b) if err != nil { - return fmt.Errorf("unable to decode stories.sendStory#737fc2ec: field media: %w", err) + return fmt.Errorf("unable to decode stories.sendStory#8f9e6898: field media: %w", err) } s.Media = value } if s.Flags.Has(5) { headerLen, err := b.VectorHeader() if err != nil { - return fmt.Errorf("unable to decode stories.sendStory#737fc2ec: field media_areas: %w", err) + return fmt.Errorf("unable to decode stories.sendStory#8f9e6898: field media_areas: %w", err) } if headerLen > 0 { @@ -506,7 +534,7 @@ func (s *StoriesSendStoryRequest) DecodeBare(b *bin.Buffer) error { for idx := 0; idx < headerLen; idx++ { value, err := DecodeMediaArea(b) if err != nil { - return fmt.Errorf("unable to decode stories.sendStory#737fc2ec: field media_areas: %w", err) + return fmt.Errorf("unable to decode stories.sendStory#8f9e6898: field media_areas: %w", err) } s.MediaAreas = append(s.MediaAreas, value) } @@ -514,14 +542,14 @@ func (s *StoriesSendStoryRequest) DecodeBare(b *bin.Buffer) error { if s.Flags.Has(0) { value, err := b.String() if err != nil { - return fmt.Errorf("unable to decode stories.sendStory#737fc2ec: field caption: %w", err) + return fmt.Errorf("unable to decode stories.sendStory#8f9e6898: field caption: %w", err) } s.Caption = value } if s.Flags.Has(1) { headerLen, err := b.VectorHeader() if err != nil { - return fmt.Errorf("unable to decode stories.sendStory#737fc2ec: field entities: %w", err) + return fmt.Errorf("unable to decode stories.sendStory#8f9e6898: field entities: %w", err) } if headerLen > 0 { @@ -530,7 +558,7 @@ func (s *StoriesSendStoryRequest) DecodeBare(b *bin.Buffer) error { for idx := 0; idx < headerLen; idx++ { value, err := DecodeMessageEntity(b) if err != nil { - return fmt.Errorf("unable to decode stories.sendStory#737fc2ec: field entities: %w", err) + return fmt.Errorf("unable to decode stories.sendStory#8f9e6898: field entities: %w", err) } s.Entities = append(s.Entities, value) } @@ -538,7 +566,7 @@ func (s *StoriesSendStoryRequest) DecodeBare(b *bin.Buffer) error { { headerLen, err := b.VectorHeader() if err != nil { - return fmt.Errorf("unable to decode stories.sendStory#737fc2ec: field privacy_rules: %w", err) + return fmt.Errorf("unable to decode stories.sendStory#8f9e6898: field privacy_rules: %w", err) } if headerLen > 0 { @@ -547,7 +575,7 @@ func (s *StoriesSendStoryRequest) DecodeBare(b *bin.Buffer) error { for idx := 0; idx < headerLen; idx++ { value, err := DecodeInputPrivacyRule(b) if err != nil { - return fmt.Errorf("unable to decode stories.sendStory#737fc2ec: field privacy_rules: %w", err) + return fmt.Errorf("unable to decode stories.sendStory#8f9e6898: field privacy_rules: %w", err) } s.PrivacyRules = append(s.PrivacyRules, value) } @@ -555,35 +583,35 @@ func (s *StoriesSendStoryRequest) DecodeBare(b *bin.Buffer) error { { value, err := b.Long() if err != nil { - return fmt.Errorf("unable to decode stories.sendStory#737fc2ec: field random_id: %w", err) + return fmt.Errorf("unable to decode stories.sendStory#8f9e6898: field random_id: %w", err) } s.RandomID = value } if s.Flags.Has(3) { value, err := b.Int() if err != nil { - return fmt.Errorf("unable to decode stories.sendStory#737fc2ec: field period: %w", err) + return fmt.Errorf("unable to decode stories.sendStory#8f9e6898: field period: %w", err) } s.Period = value } if s.Flags.Has(6) { value, err := DecodeInputPeer(b) if err != nil { - return fmt.Errorf("unable to decode stories.sendStory#737fc2ec: field fwd_from_id: %w", err) + return fmt.Errorf("unable to decode stories.sendStory#8f9e6898: field fwd_from_id: %w", err) } s.FwdFromID = value } if s.Flags.Has(6) { value, err := b.Int() if err != nil { - return fmt.Errorf("unable to decode stories.sendStory#737fc2ec: field fwd_from_story: %w", err) + return fmt.Errorf("unable to decode stories.sendStory#8f9e6898: field fwd_from_story: %w", err) } s.FwdFromStory = value } if s.Flags.Has(8) { headerLen, err := b.VectorHeader() if err != nil { - return fmt.Errorf("unable to decode stories.sendStory#737fc2ec: field albums: %w", err) + return fmt.Errorf("unable to decode stories.sendStory#8f9e6898: field albums: %w", err) } if headerLen > 0 { @@ -592,11 +620,18 @@ func (s *StoriesSendStoryRequest) DecodeBare(b *bin.Buffer) error { for idx := 0; idx < headerLen; idx++ { value, err := b.Int() if err != nil { - return fmt.Errorf("unable to decode stories.sendStory#737fc2ec: field albums: %w", err) + return fmt.Errorf("unable to decode stories.sendStory#8f9e6898: field albums: %w", err) } s.Albums = append(s.Albums, value) } } + if s.Flags.Has(9) { + value, err := DecodeInputDocument(b) + if err != nil { + return fmt.Errorf("unable to decode stories.sendStory#8f9e6898: field music: %w", err) + } + s.Music = value + } return nil } @@ -815,6 +850,24 @@ func (s *StoriesSendStoryRequest) GetAlbums() (value []int, ok bool) { return s.Albums, true } +// SetMusic sets value of Music conditional field. +func (s *StoriesSendStoryRequest) SetMusic(value InputDocumentClass) { + s.Flags.Set(9) + s.Music = value +} + +// GetMusic returns value of Music conditional field and +// boolean which is true if field was set. +func (s *StoriesSendStoryRequest) GetMusic() (value InputDocumentClass, ok bool) { + if s == nil { + return + } + if !s.Flags.Has(9) { + return value, false + } + return s.Music, true +} + // MapMediaAreas returns field MediaAreas wrapped in MediaAreaClassArray helper. func (s *StoriesSendStoryRequest) MapMediaAreas() (value MediaAreaClassArray, ok bool) { if !s.Flags.Has(5) { @@ -836,7 +889,16 @@ func (s *StoriesSendStoryRequest) MapPrivacyRules() (value InputPrivacyRuleClass return InputPrivacyRuleClassArray(s.PrivacyRules) } -// StoriesSendStory invokes method stories.sendStory#737fc2ec returning error if any. +// GetMusicAsNotEmpty returns mapped value of Music conditional field and +// boolean which is true if field was set. +func (s *StoriesSendStoryRequest) GetMusicAsNotEmpty() (*InputDocument, bool) { + if value, ok := s.GetMusic(); ok { + return value.AsNotEmpty() + } + return nil, false +} + +// StoriesSendStory invokes method stories.sendStory#8f9e6898 returning error if any. // Uploads a Telegram Story¹. // May also be used in a business connection¹, not by wrapping the query in // invokeWithBusinessConnection »², but rather by specifying the ID of a controlled diff --git a/pkg/gotd/tg/tl_story_item_gen.go b/pkg/gotd/tg/tl_story_item_gen.go index 4538fc1e..8d1054ca 100644 --- a/pkg/gotd/tg/tl_story_item_gen.go +++ b/pkg/gotd/tg/tl_story_item_gen.go @@ -455,7 +455,7 @@ func (s *StoryItemSkipped) GetExpireDate() (value int) { return s.ExpireDate } -// StoryItem represents TL type `storyItem#edf164f1`. +// StoryItem represents TL type `storyItem#16a4b93c`. // Represents a story¹. // // Links: @@ -558,10 +558,14 @@ type StoryItem struct { // // Use SetAlbums and GetAlbums helpers. Albums []int + // Music field of StoryItem. + // + // Use SetMusic and GetMusic helpers. + Music DocumentClass } // StoryItemTypeID is TL type id of StoryItem. -const StoryItemTypeID = 0xedf164f1 +const StoryItemTypeID = 0x16a4b93c // construct implements constructor of StoryItemClass. func (s StoryItem) construct() StoryItemClass { return &s } @@ -649,6 +653,9 @@ func (s *StoryItem) Zero() bool { if !(s.Albums == nil) { return false } + if !(s.Music == nil) { + return false + } return true } @@ -686,6 +693,7 @@ func (s *StoryItem) FillFrom(from interface { GetViews() (value StoryViews, ok bool) GetSentReaction() (value ReactionClass, ok bool) GetAlbums() (value []int, ok bool) + GetMusic() (value DocumentClass, ok bool) }) { s.Pinned = from.GetPinned() s.Public = from.GetPublic() @@ -736,6 +744,10 @@ func (s *StoryItem) FillFrom(from interface { s.Albums = val } + if val, ok := from.GetMusic(); ok { + s.Music = val + } + } // TypeID returns type id in TL schema. @@ -867,6 +879,11 @@ func (s *StoryItem) TypeInfo() tdp.Type { SchemaName: "albums", Null: !s.Flags.Has(19), }, + { + Name: "Music", + SchemaName: "music", + Null: !s.Flags.Has(20), + }, } return typ } @@ -927,12 +944,15 @@ func (s *StoryItem) SetFlags() { if !(s.Albums == nil) { s.Flags.Set(19) } + if !(s.Music == nil) { + s.Flags.Set(20) + } } // Encode implements bin.Encoder. func (s *StoryItem) Encode(b *bin.Buffer) error { if s == nil { - return fmt.Errorf("can't encode storyItem#edf164f1 as nil") + return fmt.Errorf("can't encode storyItem#16a4b93c as nil") } b.PutID(StoryItemTypeID) return s.EncodeBare(b) @@ -941,25 +961,25 @@ func (s *StoryItem) Encode(b *bin.Buffer) error { // EncodeBare implements bin.BareEncoder. func (s *StoryItem) EncodeBare(b *bin.Buffer) error { if s == nil { - return fmt.Errorf("can't encode storyItem#edf164f1 as nil") + return fmt.Errorf("can't encode storyItem#16a4b93c as nil") } s.SetFlags() if err := s.Flags.Encode(b); err != nil { - return fmt.Errorf("unable to encode storyItem#edf164f1: field flags: %w", err) + return fmt.Errorf("unable to encode storyItem#16a4b93c: field flags: %w", err) } b.PutInt(s.ID) b.PutInt(s.Date) if s.Flags.Has(18) { if s.FromID == nil { - return fmt.Errorf("unable to encode storyItem#edf164f1: field from_id is nil") + return fmt.Errorf("unable to encode storyItem#16a4b93c: field from_id is nil") } if err := s.FromID.Encode(b); err != nil { - return fmt.Errorf("unable to encode storyItem#edf164f1: field from_id: %w", err) + return fmt.Errorf("unable to encode storyItem#16a4b93c: field from_id: %w", err) } } if s.Flags.Has(17) { if err := s.FwdFrom.Encode(b); err != nil { - return fmt.Errorf("unable to encode storyItem#edf164f1: field fwd_from: %w", err) + return fmt.Errorf("unable to encode storyItem#16a4b93c: field fwd_from: %w", err) } } b.PutInt(s.ExpireDate) @@ -970,27 +990,27 @@ func (s *StoryItem) EncodeBare(b *bin.Buffer) error { b.PutVectorHeader(len(s.Entities)) for idx, v := range s.Entities { if v == nil { - return fmt.Errorf("unable to encode storyItem#edf164f1: field entities element with index %d is nil", idx) + return fmt.Errorf("unable to encode storyItem#16a4b93c: field entities element with index %d is nil", idx) } if err := v.Encode(b); err != nil { - return fmt.Errorf("unable to encode storyItem#edf164f1: field entities element with index %d: %w", idx, err) + return fmt.Errorf("unable to encode storyItem#16a4b93c: field entities element with index %d: %w", idx, err) } } } if s.Media == nil { - return fmt.Errorf("unable to encode storyItem#edf164f1: field media is nil") + return fmt.Errorf("unable to encode storyItem#16a4b93c: field media is nil") } if err := s.Media.Encode(b); err != nil { - return fmt.Errorf("unable to encode storyItem#edf164f1: field media: %w", err) + return fmt.Errorf("unable to encode storyItem#16a4b93c: field media: %w", err) } if s.Flags.Has(14) { b.PutVectorHeader(len(s.MediaAreas)) for idx, v := range s.MediaAreas { if v == nil { - return fmt.Errorf("unable to encode storyItem#edf164f1: field media_areas element with index %d is nil", idx) + return fmt.Errorf("unable to encode storyItem#16a4b93c: field media_areas element with index %d is nil", idx) } if err := v.Encode(b); err != nil { - return fmt.Errorf("unable to encode storyItem#edf164f1: field media_areas element with index %d: %w", idx, err) + return fmt.Errorf("unable to encode storyItem#16a4b93c: field media_areas element with index %d: %w", idx, err) } } } @@ -998,24 +1018,24 @@ func (s *StoryItem) EncodeBare(b *bin.Buffer) error { b.PutVectorHeader(len(s.Privacy)) for idx, v := range s.Privacy { if v == nil { - return fmt.Errorf("unable to encode storyItem#edf164f1: field privacy element with index %d is nil", idx) + return fmt.Errorf("unable to encode storyItem#16a4b93c: field privacy element with index %d is nil", idx) } if err := v.Encode(b); err != nil { - return fmt.Errorf("unable to encode storyItem#edf164f1: field privacy element with index %d: %w", idx, err) + return fmt.Errorf("unable to encode storyItem#16a4b93c: field privacy element with index %d: %w", idx, err) } } } if s.Flags.Has(3) { if err := s.Views.Encode(b); err != nil { - return fmt.Errorf("unable to encode storyItem#edf164f1: field views: %w", err) + return fmt.Errorf("unable to encode storyItem#16a4b93c: field views: %w", err) } } if s.Flags.Has(15) { if s.SentReaction == nil { - return fmt.Errorf("unable to encode storyItem#edf164f1: field sent_reaction is nil") + return fmt.Errorf("unable to encode storyItem#16a4b93c: field sent_reaction is nil") } if err := s.SentReaction.Encode(b); err != nil { - return fmt.Errorf("unable to encode storyItem#edf164f1: field sent_reaction: %w", err) + return fmt.Errorf("unable to encode storyItem#16a4b93c: field sent_reaction: %w", err) } } if s.Flags.Has(19) { @@ -1024,16 +1044,24 @@ func (s *StoryItem) EncodeBare(b *bin.Buffer) error { b.PutInt(v) } } + if s.Flags.Has(20) { + if s.Music == nil { + return fmt.Errorf("unable to encode storyItem#16a4b93c: field music is nil") + } + if err := s.Music.Encode(b); err != nil { + return fmt.Errorf("unable to encode storyItem#16a4b93c: field music: %w", err) + } + } return nil } // Decode implements bin.Decoder. func (s *StoryItem) Decode(b *bin.Buffer) error { if s == nil { - return fmt.Errorf("can't decode storyItem#edf164f1 to nil") + return fmt.Errorf("can't decode storyItem#16a4b93c to nil") } if err := b.ConsumeID(StoryItemTypeID); err != nil { - return fmt.Errorf("unable to decode storyItem#edf164f1: %w", err) + return fmt.Errorf("unable to decode storyItem#16a4b93c: %w", err) } return s.DecodeBare(b) } @@ -1041,11 +1069,11 @@ func (s *StoryItem) Decode(b *bin.Buffer) error { // DecodeBare implements bin.BareDecoder. func (s *StoryItem) DecodeBare(b *bin.Buffer) error { if s == nil { - return fmt.Errorf("can't decode storyItem#edf164f1 to nil") + return fmt.Errorf("can't decode storyItem#16a4b93c to nil") } { if err := s.Flags.Decode(b); err != nil { - return fmt.Errorf("unable to decode storyItem#edf164f1: field flags: %w", err) + return fmt.Errorf("unable to decode storyItem#16a4b93c: field flags: %w", err) } } s.Pinned = s.Flags.Has(5) @@ -1060,47 +1088,47 @@ func (s *StoryItem) DecodeBare(b *bin.Buffer) error { { value, err := b.Int() if err != nil { - return fmt.Errorf("unable to decode storyItem#edf164f1: field id: %w", err) + return fmt.Errorf("unable to decode storyItem#16a4b93c: field id: %w", err) } s.ID = value } { value, err := b.Int() if err != nil { - return fmt.Errorf("unable to decode storyItem#edf164f1: field date: %w", err) + return fmt.Errorf("unable to decode storyItem#16a4b93c: field date: %w", err) } s.Date = value } if s.Flags.Has(18) { value, err := DecodePeer(b) if err != nil { - return fmt.Errorf("unable to decode storyItem#edf164f1: field from_id: %w", err) + return fmt.Errorf("unable to decode storyItem#16a4b93c: field from_id: %w", err) } s.FromID = value } if s.Flags.Has(17) { if err := s.FwdFrom.Decode(b); err != nil { - return fmt.Errorf("unable to decode storyItem#edf164f1: field fwd_from: %w", err) + return fmt.Errorf("unable to decode storyItem#16a4b93c: field fwd_from: %w", err) } } { value, err := b.Int() if err != nil { - return fmt.Errorf("unable to decode storyItem#edf164f1: field expire_date: %w", err) + return fmt.Errorf("unable to decode storyItem#16a4b93c: field expire_date: %w", err) } s.ExpireDate = value } if s.Flags.Has(0) { value, err := b.String() if err != nil { - return fmt.Errorf("unable to decode storyItem#edf164f1: field caption: %w", err) + return fmt.Errorf("unable to decode storyItem#16a4b93c: field caption: %w", err) } s.Caption = value } if s.Flags.Has(1) { headerLen, err := b.VectorHeader() if err != nil { - return fmt.Errorf("unable to decode storyItem#edf164f1: field entities: %w", err) + return fmt.Errorf("unable to decode storyItem#16a4b93c: field entities: %w", err) } if headerLen > 0 { @@ -1109,7 +1137,7 @@ func (s *StoryItem) DecodeBare(b *bin.Buffer) error { for idx := 0; idx < headerLen; idx++ { value, err := DecodeMessageEntity(b) if err != nil { - return fmt.Errorf("unable to decode storyItem#edf164f1: field entities: %w", err) + return fmt.Errorf("unable to decode storyItem#16a4b93c: field entities: %w", err) } s.Entities = append(s.Entities, value) } @@ -1117,14 +1145,14 @@ func (s *StoryItem) DecodeBare(b *bin.Buffer) error { { value, err := DecodeMessageMedia(b) if err != nil { - return fmt.Errorf("unable to decode storyItem#edf164f1: field media: %w", err) + return fmt.Errorf("unable to decode storyItem#16a4b93c: field media: %w", err) } s.Media = value } if s.Flags.Has(14) { headerLen, err := b.VectorHeader() if err != nil { - return fmt.Errorf("unable to decode storyItem#edf164f1: field media_areas: %w", err) + return fmt.Errorf("unable to decode storyItem#16a4b93c: field media_areas: %w", err) } if headerLen > 0 { @@ -1133,7 +1161,7 @@ func (s *StoryItem) DecodeBare(b *bin.Buffer) error { for idx := 0; idx < headerLen; idx++ { value, err := DecodeMediaArea(b) if err != nil { - return fmt.Errorf("unable to decode storyItem#edf164f1: field media_areas: %w", err) + return fmt.Errorf("unable to decode storyItem#16a4b93c: field media_areas: %w", err) } s.MediaAreas = append(s.MediaAreas, value) } @@ -1141,7 +1169,7 @@ func (s *StoryItem) DecodeBare(b *bin.Buffer) error { if s.Flags.Has(2) { headerLen, err := b.VectorHeader() if err != nil { - return fmt.Errorf("unable to decode storyItem#edf164f1: field privacy: %w", err) + return fmt.Errorf("unable to decode storyItem#16a4b93c: field privacy: %w", err) } if headerLen > 0 { @@ -1150,27 +1178,27 @@ func (s *StoryItem) DecodeBare(b *bin.Buffer) error { for idx := 0; idx < headerLen; idx++ { value, err := DecodePrivacyRule(b) if err != nil { - return fmt.Errorf("unable to decode storyItem#edf164f1: field privacy: %w", err) + return fmt.Errorf("unable to decode storyItem#16a4b93c: field privacy: %w", err) } s.Privacy = append(s.Privacy, value) } } if s.Flags.Has(3) { if err := s.Views.Decode(b); err != nil { - return fmt.Errorf("unable to decode storyItem#edf164f1: field views: %w", err) + return fmt.Errorf("unable to decode storyItem#16a4b93c: field views: %w", err) } } if s.Flags.Has(15) { value, err := DecodeReaction(b) if err != nil { - return fmt.Errorf("unable to decode storyItem#edf164f1: field sent_reaction: %w", err) + return fmt.Errorf("unable to decode storyItem#16a4b93c: field sent_reaction: %w", err) } s.SentReaction = value } if s.Flags.Has(19) { headerLen, err := b.VectorHeader() if err != nil { - return fmt.Errorf("unable to decode storyItem#edf164f1: field albums: %w", err) + return fmt.Errorf("unable to decode storyItem#16a4b93c: field albums: %w", err) } if headerLen > 0 { @@ -1179,11 +1207,18 @@ func (s *StoryItem) DecodeBare(b *bin.Buffer) error { for idx := 0; idx < headerLen; idx++ { value, err := b.Int() if err != nil { - return fmt.Errorf("unable to decode storyItem#edf164f1: field albums: %w", err) + return fmt.Errorf("unable to decode storyItem#16a4b93c: field albums: %w", err) } s.Albums = append(s.Albums, value) } } + if s.Flags.Has(20) { + value, err := DecodeDocument(b) + if err != nil { + return fmt.Errorf("unable to decode storyItem#16a4b93c: field music: %w", err) + } + s.Music = value + } return nil } @@ -1552,6 +1587,24 @@ func (s *StoryItem) GetAlbums() (value []int, ok bool) { return s.Albums, true } +// SetMusic sets value of Music conditional field. +func (s *StoryItem) SetMusic(value DocumentClass) { + s.Flags.Set(20) + s.Music = value +} + +// GetMusic returns value of Music conditional field and +// boolean which is true if field was set. +func (s *StoryItem) GetMusic() (value DocumentClass, ok bool) { + if s == nil { + return + } + if !s.Flags.Has(20) { + return value, false + } + return s.Music, true +} + // MapEntities returns field Entities wrapped in MessageEntityClassArray helper. func (s *StoryItem) MapEntities() (value MessageEntityClassArray, ok bool) { if !s.Flags.Has(1) { @@ -1592,7 +1645,7 @@ const StoryItemClassName = "StoryItem" // switch v := g.(type) { // case *tg.StoryItemDeleted: // storyItemDeleted#51e6ee4f // case *tg.StoryItemSkipped: // storyItemSkipped#ffadc913 -// case *tg.StoryItem: // storyItem#edf164f1 +// case *tg.StoryItem: // storyItem#16a4b93c // default: panic(v) // } type StoryItemClass interface { @@ -1639,7 +1692,7 @@ func DecodeStoryItem(buf *bin.Buffer) (StoryItemClass, error) { } return &v, nil case StoryItemTypeID: - // Decoding storyItem#edf164f1. + // Decoding storyItem#16a4b93c. v := StoryItem{} if err := v.Decode(buf); err != nil { return nil, fmt.Errorf("unable to decode StoryItemClass: %w", err) diff --git a/pkg/gotd/tg/tl_update_gen.go b/pkg/gotd/tg/tl_update_gen.go index 49a2e1ba..cd81fdc2 100644 --- a/pkg/gotd/tg/tl_update_gen.go +++ b/pkg/gotd/tg/tl_update_gen.go @@ -13021,7 +13021,7 @@ func (u *UpdateDialogUnreadMark) GetSavedPeerID() (value PeerClass, ok bool) { return u.SavedPeerID, true } -// UpdateMessagePoll represents TL type `updateMessagePoll#aca1657b`. +// UpdateMessagePoll represents TL type `updateMessagePoll#d64c522b`. // The results of a poll have changed // // See https://core.telegram.org/constructor/updateMessagePoll for reference. @@ -13031,6 +13031,18 @@ type UpdateMessagePoll struct { // Links: // 1) https://core.telegram.org/mtproto/TL-combinators#conditional-fields Flags bin.Fields + // Peer field of UpdateMessagePoll. + // + // Use SetPeer and GetPeer helpers. + Peer PeerClass + // MsgID field of UpdateMessagePoll. + // + // Use SetMsgID and GetMsgID helpers. + MsgID int + // TopMsgID field of UpdateMessagePoll. + // + // Use SetTopMsgID and GetTopMsgID helpers. + TopMsgID int // Poll ID PollID int64 // If the server knows the client hasn't cached this poll yet, the poll itself @@ -13042,7 +13054,7 @@ type UpdateMessagePoll struct { } // UpdateMessagePollTypeID is TL type id of UpdateMessagePoll. -const UpdateMessagePollTypeID = 0xaca1657b +const UpdateMessagePollTypeID = 0xd64c522b // construct implements constructor of UpdateClass. func (u UpdateMessagePoll) construct() UpdateClass { return &u } @@ -13064,6 +13076,15 @@ func (u *UpdateMessagePoll) Zero() bool { if !(u.Flags.Zero()) { return false } + if !(u.Peer == nil) { + return false + } + if !(u.MsgID == 0) { + return false + } + if !(u.TopMsgID == 0) { + return false + } if !(u.PollID == 0) { return false } @@ -13088,10 +13109,25 @@ func (u *UpdateMessagePoll) String() string { // FillFrom fills UpdateMessagePoll from given interface. func (u *UpdateMessagePoll) FillFrom(from interface { + GetPeer() (value PeerClass, ok bool) + GetMsgID() (value int, ok bool) + GetTopMsgID() (value int, ok bool) GetPollID() (value int64) GetPoll() (value Poll, ok bool) GetResults() (value PollResults) }) { + if val, ok := from.GetPeer(); ok { + u.Peer = val + } + + if val, ok := from.GetMsgID(); ok { + u.MsgID = val + } + + if val, ok := from.GetTopMsgID(); ok { + u.TopMsgID = val + } + u.PollID = from.GetPollID() if val, ok := from.GetPoll(); ok { u.Poll = val @@ -13123,6 +13159,21 @@ func (u *UpdateMessagePoll) TypeInfo() tdp.Type { return typ } typ.Fields = []tdp.Field{ + { + Name: "Peer", + SchemaName: "peer", + Null: !u.Flags.Has(1), + }, + { + Name: "MsgID", + SchemaName: "msg_id", + Null: !u.Flags.Has(1), + }, + { + Name: "TopMsgID", + SchemaName: "top_msg_id", + Null: !u.Flags.Has(2), + }, { Name: "PollID", SchemaName: "poll_id", @@ -13142,6 +13193,15 @@ func (u *UpdateMessagePoll) TypeInfo() tdp.Type { // SetFlags sets flags for non-zero fields. func (u *UpdateMessagePoll) SetFlags() { + if !(u.Peer == nil) { + u.Flags.Set(1) + } + if !(u.MsgID == 0) { + u.Flags.Set(1) + } + if !(u.TopMsgID == 0) { + u.Flags.Set(2) + } if !(u.Poll.Zero()) { u.Flags.Set(0) } @@ -13150,7 +13210,7 @@ func (u *UpdateMessagePoll) SetFlags() { // Encode implements bin.Encoder. func (u *UpdateMessagePoll) Encode(b *bin.Buffer) error { if u == nil { - return fmt.Errorf("can't encode updateMessagePoll#aca1657b as nil") + return fmt.Errorf("can't encode updateMessagePoll#d64c522b as nil") } b.PutID(UpdateMessagePollTypeID) return u.EncodeBare(b) @@ -13159,20 +13219,34 @@ func (u *UpdateMessagePoll) Encode(b *bin.Buffer) error { // EncodeBare implements bin.BareEncoder. func (u *UpdateMessagePoll) EncodeBare(b *bin.Buffer) error { if u == nil { - return fmt.Errorf("can't encode updateMessagePoll#aca1657b as nil") + return fmt.Errorf("can't encode updateMessagePoll#d64c522b as nil") } u.SetFlags() if err := u.Flags.Encode(b); err != nil { - return fmt.Errorf("unable to encode updateMessagePoll#aca1657b: field flags: %w", err) + return fmt.Errorf("unable to encode updateMessagePoll#d64c522b: field flags: %w", err) + } + if u.Flags.Has(1) { + if u.Peer == nil { + return fmt.Errorf("unable to encode updateMessagePoll#d64c522b: field peer is nil") + } + if err := u.Peer.Encode(b); err != nil { + return fmt.Errorf("unable to encode updateMessagePoll#d64c522b: field peer: %w", err) + } + } + if u.Flags.Has(1) { + b.PutInt(u.MsgID) + } + if u.Flags.Has(2) { + b.PutInt(u.TopMsgID) } b.PutLong(u.PollID) if u.Flags.Has(0) { if err := u.Poll.Encode(b); err != nil { - return fmt.Errorf("unable to encode updateMessagePoll#aca1657b: field poll: %w", err) + return fmt.Errorf("unable to encode updateMessagePoll#d64c522b: field poll: %w", err) } } if err := u.Results.Encode(b); err != nil { - return fmt.Errorf("unable to encode updateMessagePoll#aca1657b: field results: %w", err) + return fmt.Errorf("unable to encode updateMessagePoll#d64c522b: field results: %w", err) } return nil } @@ -13180,10 +13254,10 @@ func (u *UpdateMessagePoll) EncodeBare(b *bin.Buffer) error { // Decode implements bin.Decoder. func (u *UpdateMessagePoll) Decode(b *bin.Buffer) error { if u == nil { - return fmt.Errorf("can't decode updateMessagePoll#aca1657b to nil") + return fmt.Errorf("can't decode updateMessagePoll#d64c522b to nil") } if err := b.ConsumeID(UpdateMessagePollTypeID); err != nil { - return fmt.Errorf("unable to decode updateMessagePoll#aca1657b: %w", err) + return fmt.Errorf("unable to decode updateMessagePoll#d64c522b: %w", err) } return u.DecodeBare(b) } @@ -13191,33 +13265,108 @@ func (u *UpdateMessagePoll) Decode(b *bin.Buffer) error { // DecodeBare implements bin.BareDecoder. func (u *UpdateMessagePoll) DecodeBare(b *bin.Buffer) error { if u == nil { - return fmt.Errorf("can't decode updateMessagePoll#aca1657b to nil") + return fmt.Errorf("can't decode updateMessagePoll#d64c522b to nil") } { if err := u.Flags.Decode(b); err != nil { - return fmt.Errorf("unable to decode updateMessagePoll#aca1657b: field flags: %w", err) + return fmt.Errorf("unable to decode updateMessagePoll#d64c522b: field flags: %w", err) } } + if u.Flags.Has(1) { + value, err := DecodePeer(b) + if err != nil { + return fmt.Errorf("unable to decode updateMessagePoll#d64c522b: field peer: %w", err) + } + u.Peer = value + } + if u.Flags.Has(1) { + value, err := b.Int() + if err != nil { + return fmt.Errorf("unable to decode updateMessagePoll#d64c522b: field msg_id: %w", err) + } + u.MsgID = value + } + if u.Flags.Has(2) { + value, err := b.Int() + if err != nil { + return fmt.Errorf("unable to decode updateMessagePoll#d64c522b: field top_msg_id: %w", err) + } + u.TopMsgID = value + } { value, err := b.Long() if err != nil { - return fmt.Errorf("unable to decode updateMessagePoll#aca1657b: field poll_id: %w", err) + return fmt.Errorf("unable to decode updateMessagePoll#d64c522b: field poll_id: %w", err) } u.PollID = value } if u.Flags.Has(0) { if err := u.Poll.Decode(b); err != nil { - return fmt.Errorf("unable to decode updateMessagePoll#aca1657b: field poll: %w", err) + return fmt.Errorf("unable to decode updateMessagePoll#d64c522b: field poll: %w", err) } } { if err := u.Results.Decode(b); err != nil { - return fmt.Errorf("unable to decode updateMessagePoll#aca1657b: field results: %w", err) + return fmt.Errorf("unable to decode updateMessagePoll#d64c522b: field results: %w", err) } } return nil } +// SetPeer sets value of Peer conditional field. +func (u *UpdateMessagePoll) SetPeer(value PeerClass) { + u.Flags.Set(1) + u.Peer = value +} + +// GetPeer returns value of Peer conditional field and +// boolean which is true if field was set. +func (u *UpdateMessagePoll) GetPeer() (value PeerClass, ok bool) { + if u == nil { + return + } + if !u.Flags.Has(1) { + return value, false + } + return u.Peer, true +} + +// SetMsgID sets value of MsgID conditional field. +func (u *UpdateMessagePoll) SetMsgID(value int) { + u.Flags.Set(1) + u.MsgID = value +} + +// GetMsgID returns value of MsgID conditional field and +// boolean which is true if field was set. +func (u *UpdateMessagePoll) GetMsgID() (value int, ok bool) { + if u == nil { + return + } + if !u.Flags.Has(1) { + return value, false + } + return u.MsgID, true +} + +// SetTopMsgID sets value of TopMsgID conditional field. +func (u *UpdateMessagePoll) SetTopMsgID(value int) { + u.Flags.Set(2) + u.TopMsgID = value +} + +// GetTopMsgID returns value of TopMsgID conditional field and +// boolean which is true if field was set. +func (u *UpdateMessagePoll) GetTopMsgID() (value int, ok bool) { + if u == nil { + return + } + if !u.Flags.Has(2) { + return value, false + } + return u.TopMsgID, true +} + // GetPollID returns value of PollID field. func (u *UpdateMessagePoll) GetPollID() (value int64) { if u == nil { @@ -14806,7 +14955,7 @@ func (u *UpdateLoginToken) DecodeBare(b *bin.Buffer) error { return nil } -// UpdateMessagePollVote represents TL type `updateMessagePollVote#24f40e77`. +// UpdateMessagePollVote represents TL type `updateMessagePollVote#7699f014`. // A specific peer has voted in a poll // // See https://core.telegram.org/constructor/updateMessagePollVote for reference. @@ -14817,6 +14966,8 @@ type UpdateMessagePollVote struct { Peer PeerClass // Chosen option(s) Options [][]byte + // Positions field of UpdateMessagePollVote. + Positions []int // New qts value, see updates »¹ for more info. // // Links: @@ -14825,7 +14976,7 @@ type UpdateMessagePollVote struct { } // UpdateMessagePollVoteTypeID is TL type id of UpdateMessagePollVote. -const UpdateMessagePollVoteTypeID = 0x24f40e77 +const UpdateMessagePollVoteTypeID = 0x7699f014 // construct implements constructor of UpdateClass. func (u UpdateMessagePollVote) construct() UpdateClass { return &u } @@ -14853,6 +15004,9 @@ func (u *UpdateMessagePollVote) Zero() bool { if !(u.Options == nil) { return false } + if !(u.Positions == nil) { + return false + } if !(u.Qts == 0) { return false } @@ -14874,11 +15028,13 @@ func (u *UpdateMessagePollVote) FillFrom(from interface { GetPollID() (value int64) GetPeer() (value PeerClass) GetOptions() (value [][]byte) + GetPositions() (value []int) GetQts() (value int) }) { u.PollID = from.GetPollID() u.Peer = from.GetPeer() u.Options = from.GetOptions() + u.Positions = from.GetPositions() u.Qts = from.GetQts() } @@ -14917,6 +15073,10 @@ func (u *UpdateMessagePollVote) TypeInfo() tdp.Type { Name: "Options", SchemaName: "options", }, + { + Name: "Positions", + SchemaName: "positions", + }, { Name: "Qts", SchemaName: "qts", @@ -14928,7 +15088,7 @@ func (u *UpdateMessagePollVote) TypeInfo() tdp.Type { // Encode implements bin.Encoder. func (u *UpdateMessagePollVote) Encode(b *bin.Buffer) error { if u == nil { - return fmt.Errorf("can't encode updateMessagePollVote#24f40e77 as nil") + return fmt.Errorf("can't encode updateMessagePollVote#7699f014 as nil") } b.PutID(UpdateMessagePollVoteTypeID) return u.EncodeBare(b) @@ -14937,19 +15097,23 @@ func (u *UpdateMessagePollVote) Encode(b *bin.Buffer) error { // EncodeBare implements bin.BareEncoder. func (u *UpdateMessagePollVote) EncodeBare(b *bin.Buffer) error { if u == nil { - return fmt.Errorf("can't encode updateMessagePollVote#24f40e77 as nil") + return fmt.Errorf("can't encode updateMessagePollVote#7699f014 as nil") } b.PutLong(u.PollID) if u.Peer == nil { - return fmt.Errorf("unable to encode updateMessagePollVote#24f40e77: field peer is nil") + return fmt.Errorf("unable to encode updateMessagePollVote#7699f014: field peer is nil") } if err := u.Peer.Encode(b); err != nil { - return fmt.Errorf("unable to encode updateMessagePollVote#24f40e77: field peer: %w", err) + return fmt.Errorf("unable to encode updateMessagePollVote#7699f014: field peer: %w", err) } b.PutVectorHeader(len(u.Options)) for _, v := range u.Options { b.PutBytes(v) } + b.PutVectorHeader(len(u.Positions)) + for _, v := range u.Positions { + b.PutInt(v) + } b.PutInt(u.Qts) return nil } @@ -14957,10 +15121,10 @@ func (u *UpdateMessagePollVote) EncodeBare(b *bin.Buffer) error { // Decode implements bin.Decoder. func (u *UpdateMessagePollVote) Decode(b *bin.Buffer) error { if u == nil { - return fmt.Errorf("can't decode updateMessagePollVote#24f40e77 to nil") + return fmt.Errorf("can't decode updateMessagePollVote#7699f014 to nil") } if err := b.ConsumeID(UpdateMessagePollVoteTypeID); err != nil { - return fmt.Errorf("unable to decode updateMessagePollVote#24f40e77: %w", err) + return fmt.Errorf("unable to decode updateMessagePollVote#7699f014: %w", err) } return u.DecodeBare(b) } @@ -14968,26 +15132,26 @@ func (u *UpdateMessagePollVote) Decode(b *bin.Buffer) error { // DecodeBare implements bin.BareDecoder. func (u *UpdateMessagePollVote) DecodeBare(b *bin.Buffer) error { if u == nil { - return fmt.Errorf("can't decode updateMessagePollVote#24f40e77 to nil") + return fmt.Errorf("can't decode updateMessagePollVote#7699f014 to nil") } { value, err := b.Long() if err != nil { - return fmt.Errorf("unable to decode updateMessagePollVote#24f40e77: field poll_id: %w", err) + return fmt.Errorf("unable to decode updateMessagePollVote#7699f014: field poll_id: %w", err) } u.PollID = value } { value, err := DecodePeer(b) if err != nil { - return fmt.Errorf("unable to decode updateMessagePollVote#24f40e77: field peer: %w", err) + return fmt.Errorf("unable to decode updateMessagePollVote#7699f014: field peer: %w", err) } u.Peer = value } { headerLen, err := b.VectorHeader() if err != nil { - return fmt.Errorf("unable to decode updateMessagePollVote#24f40e77: field options: %w", err) + return fmt.Errorf("unable to decode updateMessagePollVote#7699f014: field options: %w", err) } if headerLen > 0 { @@ -14996,15 +15160,32 @@ func (u *UpdateMessagePollVote) DecodeBare(b *bin.Buffer) error { for idx := 0; idx < headerLen; idx++ { value, err := b.Bytes() if err != nil { - return fmt.Errorf("unable to decode updateMessagePollVote#24f40e77: field options: %w", err) + return fmt.Errorf("unable to decode updateMessagePollVote#7699f014: field options: %w", err) } u.Options = append(u.Options, value) } } + { + headerLen, err := b.VectorHeader() + if err != nil { + return fmt.Errorf("unable to decode updateMessagePollVote#7699f014: field positions: %w", err) + } + + if headerLen > 0 { + u.Positions = make([]int, 0, headerLen%bin.PreallocateLimit) + } + for idx := 0; idx < headerLen; idx++ { + value, err := b.Int() + if err != nil { + return fmt.Errorf("unable to decode updateMessagePollVote#7699f014: field positions: %w", err) + } + u.Positions = append(u.Positions, value) + } + } { value, err := b.Int() if err != nil { - return fmt.Errorf("unable to decode updateMessagePollVote#24f40e77: field qts: %w", err) + return fmt.Errorf("unable to decode updateMessagePollVote#7699f014: field qts: %w", err) } u.Qts = value } @@ -15035,6 +15216,14 @@ func (u *UpdateMessagePollVote) GetOptions() (value [][]byte) { return u.Options } +// GetPositions returns value of Positions field. +func (u *UpdateMessagePollVote) GetPositions() (value []int) { + if u == nil { + return + } + return u.Positions +} + // GetQts returns value of Qts field. func (u *UpdateMessagePollVote) GetQts() (value int) { if u == nil { @@ -31162,6 +31351,194 @@ func (u *UpdateChatParticipantRank) GetVersion() (value int) { return u.Version } +// UpdateManagedBot represents TL type `updateManagedBot#4880ed9a`. +// +// See https://core.telegram.org/constructor/updateManagedBot for reference. +type UpdateManagedBot struct { + // UserID field of UpdateManagedBot. + UserID int64 + // BotID field of UpdateManagedBot. + BotID int64 + // Qts field of UpdateManagedBot. + Qts int +} + +// UpdateManagedBotTypeID is TL type id of UpdateManagedBot. +const UpdateManagedBotTypeID = 0x4880ed9a + +// construct implements constructor of UpdateClass. +func (u UpdateManagedBot) construct() UpdateClass { return &u } + +// Ensuring interfaces in compile-time for UpdateManagedBot. +var ( + _ bin.Encoder = &UpdateManagedBot{} + _ bin.Decoder = &UpdateManagedBot{} + _ bin.BareEncoder = &UpdateManagedBot{} + _ bin.BareDecoder = &UpdateManagedBot{} + + _ UpdateClass = &UpdateManagedBot{} +) + +func (u *UpdateManagedBot) Zero() bool { + if u == nil { + return true + } + if !(u.UserID == 0) { + return false + } + if !(u.BotID == 0) { + return false + } + if !(u.Qts == 0) { + return false + } + + return true +} + +// String implements fmt.Stringer. +func (u *UpdateManagedBot) String() string { + if u == nil { + return "UpdateManagedBot(nil)" + } + type Alias UpdateManagedBot + return fmt.Sprintf("UpdateManagedBot%+v", Alias(*u)) +} + +// FillFrom fills UpdateManagedBot from given interface. +func (u *UpdateManagedBot) FillFrom(from interface { + GetUserID() (value int64) + GetBotID() (value int64) + GetQts() (value int) +}) { + u.UserID = from.GetUserID() + u.BotID = from.GetBotID() + u.Qts = from.GetQts() +} + +// TypeID returns type id in TL schema. +// +// See https://core.telegram.org/mtproto/TL-tl#remarks. +func (*UpdateManagedBot) TypeID() uint32 { + return UpdateManagedBotTypeID +} + +// TypeName returns name of type in TL schema. +func (*UpdateManagedBot) TypeName() string { + return "updateManagedBot" +} + +// TypeInfo returns info about TL type. +func (u *UpdateManagedBot) TypeInfo() tdp.Type { + typ := tdp.Type{ + Name: "updateManagedBot", + ID: UpdateManagedBotTypeID, + } + if u == nil { + typ.Null = true + return typ + } + typ.Fields = []tdp.Field{ + { + Name: "UserID", + SchemaName: "user_id", + }, + { + Name: "BotID", + SchemaName: "bot_id", + }, + { + Name: "Qts", + SchemaName: "qts", + }, + } + return typ +} + +// Encode implements bin.Encoder. +func (u *UpdateManagedBot) Encode(b *bin.Buffer) error { + if u == nil { + return fmt.Errorf("can't encode updateManagedBot#4880ed9a as nil") + } + b.PutID(UpdateManagedBotTypeID) + return u.EncodeBare(b) +} + +// EncodeBare implements bin.BareEncoder. +func (u *UpdateManagedBot) EncodeBare(b *bin.Buffer) error { + if u == nil { + return fmt.Errorf("can't encode updateManagedBot#4880ed9a as nil") + } + b.PutLong(u.UserID) + b.PutLong(u.BotID) + b.PutInt(u.Qts) + return nil +} + +// Decode implements bin.Decoder. +func (u *UpdateManagedBot) Decode(b *bin.Buffer) error { + if u == nil { + return fmt.Errorf("can't decode updateManagedBot#4880ed9a to nil") + } + if err := b.ConsumeID(UpdateManagedBotTypeID); err != nil { + return fmt.Errorf("unable to decode updateManagedBot#4880ed9a: %w", err) + } + return u.DecodeBare(b) +} + +// DecodeBare implements bin.BareDecoder. +func (u *UpdateManagedBot) DecodeBare(b *bin.Buffer) error { + if u == nil { + return fmt.Errorf("can't decode updateManagedBot#4880ed9a to nil") + } + { + value, err := b.Long() + if err != nil { + return fmt.Errorf("unable to decode updateManagedBot#4880ed9a: field user_id: %w", err) + } + u.UserID = value + } + { + value, err := b.Long() + if err != nil { + return fmt.Errorf("unable to decode updateManagedBot#4880ed9a: field bot_id: %w", err) + } + u.BotID = value + } + { + value, err := b.Int() + if err != nil { + return fmt.Errorf("unable to decode updateManagedBot#4880ed9a: field qts: %w", err) + } + u.Qts = value + } + return nil +} + +// GetUserID returns value of UserID field. +func (u *UpdateManagedBot) GetUserID() (value int64) { + if u == nil { + return + } + return u.UserID +} + +// GetBotID returns value of BotID field. +func (u *UpdateManagedBot) GetBotID() (value int64) { + if u == nil { + return + } + return u.BotID +} + +// GetQts returns value of Qts field. +func (u *UpdateManagedBot) GetQts() (value int) { + if u == nil { + return + } + return u.Qts +} + // UpdateClassName is schema name of UpdateClass. const UpdateClassName = "Update" @@ -31238,7 +31615,7 @@ const UpdateClassName = "Update" // case *tg.UpdateContactsReset: // updateContactsReset#7084a7be // case *tg.UpdateChannelAvailableMessages: // updateChannelAvailableMessages#b23fc698 // case *tg.UpdateDialogUnreadMark: // updateDialogUnreadMark#b658f23e -// case *tg.UpdateMessagePoll: // updateMessagePoll#aca1657b +// case *tg.UpdateMessagePoll: // updateMessagePoll#d64c522b // case *tg.UpdateChatDefaultBannedRights: // updateChatDefaultBannedRights#54c01850 // case *tg.UpdateFolderPeers: // updateFolderPeers#19360dc0 // case *tg.UpdatePeerSettings: // updatePeerSettings#6a7e7366 @@ -31248,7 +31625,7 @@ const UpdateClassName = "Update" // case *tg.UpdateTheme: // updateTheme#8216fba3 // case *tg.UpdateGeoLiveViewed: // updateGeoLiveViewed#871fb939 // case *tg.UpdateLoginToken: // updateLoginToken#564fe691 -// case *tg.UpdateMessagePollVote: // updateMessagePollVote#24f40e77 +// case *tg.UpdateMessagePollVote: // updateMessagePollVote#7699f014 // case *tg.UpdateDialogFilter: // updateDialogFilter#26ffde7d // case *tg.UpdateDialogFilterOrder: // updateDialogFilterOrder#a5d72105 // case *tg.UpdateDialogFilters: // updateDialogFilters#3504914f @@ -31329,6 +31706,7 @@ const UpdateClassName = "Update" // case *tg.UpdateEmojiGameInfo: // updateEmojiGameInfo#fb9c547a // case *tg.UpdateStarGiftCraftFail: // updateStarGiftCraftFail#ac072444 // case *tg.UpdateChatParticipantRank: // updateChatParticipantRank#bd8367b9 +// case *tg.UpdateManagedBot: // updateManagedBot#4880ed9a // default: panic(v) // } type UpdateClass interface { @@ -31792,7 +32170,7 @@ func DecodeUpdate(buf *bin.Buffer) (UpdateClass, error) { } return &v, nil case UpdateMessagePollTypeID: - // Decoding updateMessagePoll#aca1657b. + // Decoding updateMessagePoll#d64c522b. v := UpdateMessagePoll{} if err := v.Decode(buf); err != nil { return nil, fmt.Errorf("unable to decode UpdateClass: %w", err) @@ -31862,7 +32240,7 @@ func DecodeUpdate(buf *bin.Buffer) (UpdateClass, error) { } return &v, nil case UpdateMessagePollVoteTypeID: - // Decoding updateMessagePollVote#24f40e77. + // Decoding updateMessagePollVote#7699f014. v := UpdateMessagePollVote{} if err := v.Decode(buf); err != nil { return nil, fmt.Errorf("unable to decode UpdateClass: %w", err) @@ -32428,6 +32806,13 @@ func DecodeUpdate(buf *bin.Buffer) (UpdateClass, error) { return nil, fmt.Errorf("unable to decode UpdateClass: %w", err) } return &v, nil + case UpdateManagedBotTypeID: + // Decoding updateManagedBot#4880ed9a. + v := UpdateManagedBot{} + if err := v.Decode(buf); err != nil { + return nil, fmt.Errorf("unable to decode UpdateClass: %w", err) + } + return &v, nil default: return nil, fmt.Errorf("unable to decode UpdateClass: %w", bin.NewUnexpectedID(id)) } diff --git a/pkg/gotd/tg/tl_update_slices_gen.go b/pkg/gotd/tg/tl_update_slices_gen.go index 1456d6c3..92e0d7fa 100644 --- a/pkg/gotd/tg/tl_update_slices_gen.go +++ b/pkg/gotd/tg/tl_update_slices_gen.go @@ -1884,6 +1884,19 @@ func (s UpdateClassArray) AsUpdateChatParticipantRank() (to UpdateChatParticipan return to } +// AsUpdateManagedBot returns copy with only UpdateManagedBot constructors. +func (s UpdateClassArray) AsUpdateManagedBot() (to UpdateManagedBotArray) { + for _, elem := range s { + value, ok := elem.(*UpdateManagedBot) + if !ok { + continue + } + to = append(to, *value) + } + + return to +} + // UpdateNewMessageArray is adapter for slice of UpdateNewMessage. type UpdateNewMessageArray []UpdateNewMessage @@ -13301,3 +13314,85 @@ func (s *UpdateChatParticipantRankArray) Pop() (v UpdateChatParticipantRank, ok return v, true } + +// UpdateManagedBotArray is adapter for slice of UpdateManagedBot. +type UpdateManagedBotArray []UpdateManagedBot + +// Sort sorts slice of UpdateManagedBot. +func (s UpdateManagedBotArray) Sort(less func(a, b UpdateManagedBot) bool) UpdateManagedBotArray { + sort.Slice(s, func(i, j int) bool { + return less(s[i], s[j]) + }) + return s +} + +// SortStable sorts slice of UpdateManagedBot. +func (s UpdateManagedBotArray) SortStable(less func(a, b UpdateManagedBot) bool) UpdateManagedBotArray { + sort.SliceStable(s, func(i, j int) bool { + return less(s[i], s[j]) + }) + return s +} + +// Retain filters in-place slice of UpdateManagedBot. +func (s UpdateManagedBotArray) Retain(keep func(x UpdateManagedBot) bool) UpdateManagedBotArray { + n := 0 + for _, x := range s { + if keep(x) { + s[n] = x + n++ + } + } + s = s[:n] + + return s +} + +// First returns first element of slice (if exists). +func (s UpdateManagedBotArray) First() (v UpdateManagedBot, ok bool) { + if len(s) < 1 { + return + } + return s[0], true +} + +// Last returns last element of slice (if exists). +func (s UpdateManagedBotArray) Last() (v UpdateManagedBot, ok bool) { + if len(s) < 1 { + return + } + return s[len(s)-1], true +} + +// PopFirst returns first element of slice (if exists) and deletes it. +func (s *UpdateManagedBotArray) PopFirst() (v UpdateManagedBot, ok bool) { + if s == nil || len(*s) < 1 { + return + } + + a := *s + v = a[0] + + // Delete by index from SliceTricks. + copy(a[0:], a[1:]) + var zero UpdateManagedBot + a[len(a)-1] = zero + a = a[:len(a)-1] + *s = a + + return v, true +} + +// Pop returns last element of slice (if exists) and deletes it. +func (s *UpdateManagedBotArray) Pop() (v UpdateManagedBot, ok bool) { + if s == nil || len(*s) < 1 { + return + } + + a := *s + v = a[len(a)-1] + a = a[:len(a)-1] + *s = a + + return v, true +} diff --git a/pkg/gotd/tg/tl_updates_classifier_gen.go b/pkg/gotd/tg/tl_updates_classifier_gen.go index f219cdb1..df4198fb 100644 --- a/pkg/gotd/tg/tl_updates_classifier_gen.go +++ b/pkg/gotd/tg/tl_updates_classifier_gen.go @@ -86,6 +86,8 @@ func IsQtsUpdate(u UpdateClass) (qts int, ok bool) { return u.Qts, true case *UpdateBotPurchasedPaidMedia: return u.Qts, true + case *UpdateManagedBot: + return u.Qts, true } return diff --git a/pkg/gotd/tg/tl_url_auth_result_gen.go b/pkg/gotd/tg/tl_url_auth_result_gen.go index 911c10c0..989cb096 100644 --- a/pkg/gotd/tg/tl_url_auth_result_gen.go +++ b/pkg/gotd/tg/tl_url_auth_result_gen.go @@ -31,7 +31,7 @@ var ( _ = tdjson.Encoder{} ) -// URLAuthResultRequest represents TL type `urlAuthResultRequest#f8f8eb1e`. +// URLAuthResultRequest represents TL type `urlAuthResultRequest#3cd623ec`. // Details about the authorization request, for more info click here »¹ // // Links: @@ -50,6 +50,8 @@ type URLAuthResultRequest struct { RequestPhoneNumber bool // MatchCodesFirst field of URLAuthResultRequest. MatchCodesFirst bool + // IsApp field of URLAuthResultRequest. + IsApp bool // 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. @@ -83,10 +85,14 @@ type URLAuthResultRequest struct { // // Use SetUserIDHint and GetUserIDHint helpers. UserIDHint int64 + // VerifiedAppName field of URLAuthResultRequest. + // + // Use SetVerifiedAppName and GetVerifiedAppName helpers. + VerifiedAppName string } // URLAuthResultRequestTypeID is TL type id of URLAuthResultRequest. -const URLAuthResultRequestTypeID = 0xf8f8eb1e +const URLAuthResultRequestTypeID = 0x3cd623ec // construct implements constructor of URLAuthResultClass. func (u URLAuthResultRequest) construct() URLAuthResultClass { return &u } @@ -117,6 +123,9 @@ func (u *URLAuthResultRequest) Zero() bool { if !(u.MatchCodesFirst == false) { return false } + if !(u.IsApp == false) { + return false + } if !(u.Bot == nil) { return false } @@ -141,6 +150,9 @@ func (u *URLAuthResultRequest) Zero() bool { if !(u.UserIDHint == 0) { return false } + if !(u.VerifiedAppName == "") { + return false + } return true } @@ -159,6 +171,7 @@ func (u *URLAuthResultRequest) FillFrom(from interface { GetRequestWriteAccess() (value bool) GetRequestPhoneNumber() (value bool) GetMatchCodesFirst() (value bool) + GetIsApp() (value bool) GetBot() (value UserClass) GetDomain() (value string) GetBrowser() (value string, ok bool) @@ -167,10 +180,12 @@ func (u *URLAuthResultRequest) FillFrom(from interface { GetRegion() (value string, ok bool) GetMatchCodes() (value []string, ok bool) GetUserIDHint() (value int64, ok bool) + GetVerifiedAppName() (value string, ok bool) }) { u.RequestWriteAccess = from.GetRequestWriteAccess() u.RequestPhoneNumber = from.GetRequestPhoneNumber() u.MatchCodesFirst = from.GetMatchCodesFirst() + u.IsApp = from.GetIsApp() u.Bot = from.GetBot() u.Domain = from.GetDomain() if val, ok := from.GetBrowser(); ok { @@ -197,6 +212,10 @@ func (u *URLAuthResultRequest) FillFrom(from interface { u.UserIDHint = val } + if val, ok := from.GetVerifiedAppName(); ok { + u.VerifiedAppName = val + } + } // TypeID returns type id in TL schema. @@ -237,6 +256,11 @@ func (u *URLAuthResultRequest) TypeInfo() tdp.Type { SchemaName: "match_codes_first", Null: !u.Flags.Has(5), }, + { + Name: "IsApp", + SchemaName: "is_app", + Null: !u.Flags.Has(6), + }, { Name: "Bot", SchemaName: "bot", @@ -275,6 +299,11 @@ func (u *URLAuthResultRequest) TypeInfo() tdp.Type { SchemaName: "user_id_hint", Null: !u.Flags.Has(4), }, + { + Name: "VerifiedAppName", + SchemaName: "verified_app_name", + Null: !u.Flags.Has(7), + }, } return typ } @@ -290,6 +319,9 @@ func (u *URLAuthResultRequest) SetFlags() { if !(u.MatchCodesFirst == false) { u.Flags.Set(5) } + if !(u.IsApp == false) { + u.Flags.Set(6) + } if !(u.Browser == "") { u.Flags.Set(2) } @@ -308,12 +340,15 @@ func (u *URLAuthResultRequest) SetFlags() { if !(u.UserIDHint == 0) { u.Flags.Set(4) } + if !(u.VerifiedAppName == "") { + u.Flags.Set(7) + } } // Encode implements bin.Encoder. func (u *URLAuthResultRequest) Encode(b *bin.Buffer) error { if u == nil { - return fmt.Errorf("can't encode urlAuthResultRequest#f8f8eb1e as nil") + return fmt.Errorf("can't encode urlAuthResultRequest#3cd623ec as nil") } b.PutID(URLAuthResultRequestTypeID) return u.EncodeBare(b) @@ -322,17 +357,17 @@ func (u *URLAuthResultRequest) Encode(b *bin.Buffer) error { // EncodeBare implements bin.BareEncoder. func (u *URLAuthResultRequest) EncodeBare(b *bin.Buffer) error { if u == nil { - return fmt.Errorf("can't encode urlAuthResultRequest#f8f8eb1e as nil") + return fmt.Errorf("can't encode urlAuthResultRequest#3cd623ec as nil") } u.SetFlags() if err := u.Flags.Encode(b); err != nil { - return fmt.Errorf("unable to encode urlAuthResultRequest#f8f8eb1e: field flags: %w", err) + return fmt.Errorf("unable to encode urlAuthResultRequest#3cd623ec: field flags: %w", err) } if u.Bot == nil { - return fmt.Errorf("unable to encode urlAuthResultRequest#f8f8eb1e: field bot is nil") + return fmt.Errorf("unable to encode urlAuthResultRequest#3cd623ec: field bot is nil") } if err := u.Bot.Encode(b); err != nil { - return fmt.Errorf("unable to encode urlAuthResultRequest#f8f8eb1e: field bot: %w", err) + return fmt.Errorf("unable to encode urlAuthResultRequest#3cd623ec: field bot: %w", err) } b.PutString(u.Domain) if u.Flags.Has(2) { @@ -356,16 +391,19 @@ func (u *URLAuthResultRequest) EncodeBare(b *bin.Buffer) error { if u.Flags.Has(4) { b.PutLong(u.UserIDHint) } + if u.Flags.Has(7) { + b.PutString(u.VerifiedAppName) + } return nil } // Decode implements bin.Decoder. func (u *URLAuthResultRequest) Decode(b *bin.Buffer) error { if u == nil { - return fmt.Errorf("can't decode urlAuthResultRequest#f8f8eb1e to nil") + return fmt.Errorf("can't decode urlAuthResultRequest#3cd623ec to nil") } if err := b.ConsumeID(URLAuthResultRequestTypeID); err != nil { - return fmt.Errorf("unable to decode urlAuthResultRequest#f8f8eb1e: %w", err) + return fmt.Errorf("unable to decode urlAuthResultRequest#3cd623ec: %w", err) } return u.DecodeBare(b) } @@ -373,62 +411,63 @@ func (u *URLAuthResultRequest) Decode(b *bin.Buffer) error { // DecodeBare implements bin.BareDecoder. func (u *URLAuthResultRequest) DecodeBare(b *bin.Buffer) error { if u == nil { - return fmt.Errorf("can't decode urlAuthResultRequest#f8f8eb1e to nil") + return fmt.Errorf("can't decode urlAuthResultRequest#3cd623ec to nil") } { if err := u.Flags.Decode(b); err != nil { - return fmt.Errorf("unable to decode urlAuthResultRequest#f8f8eb1e: field flags: %w", err) + return fmt.Errorf("unable to decode urlAuthResultRequest#3cd623ec: field flags: %w", err) } } u.RequestWriteAccess = u.Flags.Has(0) u.RequestPhoneNumber = u.Flags.Has(1) u.MatchCodesFirst = u.Flags.Has(5) + u.IsApp = u.Flags.Has(6) { value, err := DecodeUser(b) if err != nil { - return fmt.Errorf("unable to decode urlAuthResultRequest#f8f8eb1e: field bot: %w", err) + return fmt.Errorf("unable to decode urlAuthResultRequest#3cd623ec: field bot: %w", err) } u.Bot = value } { value, err := b.String() if err != nil { - return fmt.Errorf("unable to decode urlAuthResultRequest#f8f8eb1e: field domain: %w", err) + return fmt.Errorf("unable to decode urlAuthResultRequest#3cd623ec: field domain: %w", err) } u.Domain = value } if u.Flags.Has(2) { value, err := b.String() if err != nil { - return fmt.Errorf("unable to decode urlAuthResultRequest#f8f8eb1e: field browser: %w", err) + return fmt.Errorf("unable to decode urlAuthResultRequest#3cd623ec: field browser: %w", err) } u.Browser = value } if u.Flags.Has(2) { value, err := b.String() if err != nil { - return fmt.Errorf("unable to decode urlAuthResultRequest#f8f8eb1e: field platform: %w", err) + return fmt.Errorf("unable to decode urlAuthResultRequest#3cd623ec: field platform: %w", err) } u.Platform = value } if u.Flags.Has(2) { value, err := b.String() if err != nil { - return fmt.Errorf("unable to decode urlAuthResultRequest#f8f8eb1e: field ip: %w", err) + return fmt.Errorf("unable to decode urlAuthResultRequest#3cd623ec: field ip: %w", err) } u.IP = value } if u.Flags.Has(2) { value, err := b.String() if err != nil { - return fmt.Errorf("unable to decode urlAuthResultRequest#f8f8eb1e: field region: %w", err) + return fmt.Errorf("unable to decode urlAuthResultRequest#3cd623ec: field region: %w", err) } u.Region = value } if u.Flags.Has(3) { headerLen, err := b.VectorHeader() if err != nil { - return fmt.Errorf("unable to decode urlAuthResultRequest#f8f8eb1e: field match_codes: %w", err) + return fmt.Errorf("unable to decode urlAuthResultRequest#3cd623ec: field match_codes: %w", err) } if headerLen > 0 { @@ -437,7 +476,7 @@ func (u *URLAuthResultRequest) DecodeBare(b *bin.Buffer) error { for idx := 0; idx < headerLen; idx++ { value, err := b.String() if err != nil { - return fmt.Errorf("unable to decode urlAuthResultRequest#f8f8eb1e: field match_codes: %w", err) + return fmt.Errorf("unable to decode urlAuthResultRequest#3cd623ec: field match_codes: %w", err) } u.MatchCodes = append(u.MatchCodes, value) } @@ -445,10 +484,17 @@ func (u *URLAuthResultRequest) DecodeBare(b *bin.Buffer) error { if u.Flags.Has(4) { value, err := b.Long() if err != nil { - return fmt.Errorf("unable to decode urlAuthResultRequest#f8f8eb1e: field user_id_hint: %w", err) + return fmt.Errorf("unable to decode urlAuthResultRequest#3cd623ec: field user_id_hint: %w", err) } u.UserIDHint = value } + if u.Flags.Has(7) { + value, err := b.String() + if err != nil { + return fmt.Errorf("unable to decode urlAuthResultRequest#3cd623ec: field verified_app_name: %w", err) + } + u.VerifiedAppName = value + } return nil } @@ -509,6 +555,25 @@ func (u *URLAuthResultRequest) GetMatchCodesFirst() (value bool) { return u.Flags.Has(5) } +// SetIsApp sets value of IsApp conditional field. +func (u *URLAuthResultRequest) SetIsApp(value bool) { + if value { + u.Flags.Set(6) + u.IsApp = true + } else { + u.Flags.Unset(6) + u.IsApp = false + } +} + +// GetIsApp returns value of IsApp conditional field. +func (u *URLAuthResultRequest) GetIsApp() (value bool) { + if u == nil { + return + } + return u.Flags.Has(6) +} + // GetBot returns value of Bot field. func (u *URLAuthResultRequest) GetBot() (value UserClass) { if u == nil { @@ -633,6 +698,24 @@ func (u *URLAuthResultRequest) GetUserIDHint() (value int64, ok bool) { return u.UserIDHint, true } +// SetVerifiedAppName sets value of VerifiedAppName conditional field. +func (u *URLAuthResultRequest) SetVerifiedAppName(value string) { + u.Flags.Set(7) + u.VerifiedAppName = value +} + +// GetVerifiedAppName returns value of VerifiedAppName conditional field and +// boolean which is true if field was set. +func (u *URLAuthResultRequest) GetVerifiedAppName() (value string, ok bool) { + if u == nil { + return + } + if !u.Flags.Has(7) { + return value, false + } + return u.VerifiedAppName, true +} + // URLAuthResultAccepted represents TL type `urlAuthResultAccepted#623a8fa0`. // Details about an accepted authorization request, for more info click here »¹ // @@ -929,7 +1012,7 @@ const URLAuthResultClassName = "UrlAuthResult" // panic(err) // } // switch v := g.(type) { -// case *tg.URLAuthResultRequest: // urlAuthResultRequest#f8f8eb1e +// case *tg.URLAuthResultRequest: // urlAuthResultRequest#3cd623ec // case *tg.URLAuthResultAccepted: // urlAuthResultAccepted#623a8fa0 // case *tg.URLAuthResultDefault: // urlAuthResultDefault#a9d6db1f // default: panic(v) @@ -961,7 +1044,7 @@ func DecodeURLAuthResult(buf *bin.Buffer) (URLAuthResultClass, error) { } switch id { case URLAuthResultRequestTypeID: - // Decoding urlAuthResultRequest#f8f8eb1e. + // Decoding urlAuthResultRequest#3cd623ec. v := URLAuthResultRequest{} if err := v.Decode(buf); err != nil { return nil, fmt.Errorf("unable to decode URLAuthResultClass: %w", err) diff --git a/pkg/gotd/tg/tl_user_full_gen.go b/pkg/gotd/tg/tl_user_full_gen.go index 6f64e7d5..746f66f3 100644 --- a/pkg/gotd/tg/tl_user_full_gen.go +++ b/pkg/gotd/tg/tl_user_full_gen.go @@ -31,7 +31,7 @@ var ( _ = tdjson.Encoder{} ) -// UserFull represents TL type `userFull#a02bc13e`. +// UserFull represents TL type `userFull#6cbe645`. // Extended user info // When updating the local peer database »¹, all fields from the newly received // constructor take priority over the old constructor cached locally (including by @@ -144,6 +144,8 @@ type UserFull struct { NoforwardsMyEnabled bool // NoforwardsPeerEnabled field of UserFull. NoforwardsPeerEnabled bool + // UnofficialSecurityRisk field of UserFull. + UnofficialSecurityRisk bool // User ID ID int64 // Bio of the user @@ -372,10 +374,14 @@ type UserFull struct { // // Use SetNote and GetNote helpers. Note TextWithEntities + // BotManagerID field of UserFull. + // + // Use SetBotManagerID and GetBotManagerID helpers. + BotManagerID int64 } // UserFullTypeID is TL type id of UserFull. -const UserFullTypeID = 0xa02bc13e +const UserFullTypeID = 0x6cbe645 // Ensuring interfaces in compile-time for UserFull. var ( @@ -452,6 +458,9 @@ func (u *UserFull) Zero() bool { if !(u.NoforwardsPeerEnabled == false) { return false } + if !(u.UnofficialSecurityRisk == false) { + return false + } if !(u.ID == 0) { return false } @@ -563,6 +572,9 @@ func (u *UserFull) Zero() bool { if !(u.Note.Zero()) { return false } + if !(u.BotManagerID == 0) { + return false + } return true } @@ -597,6 +609,7 @@ func (u *UserFull) FillFrom(from interface { GetDisplayGiftsButton() (value bool) GetNoforwardsMyEnabled() (value bool) GetNoforwardsPeerEnabled() (value bool) + GetUnofficialSecurityRisk() (value bool) GetID() (value int64) GetAbout() (value string, ok bool) GetSettings() (value PeerSettings) @@ -634,6 +647,7 @@ func (u *UserFull) FillFrom(from interface { GetMainTab() (value ProfileTabClass, ok bool) GetSavedMusic() (value DocumentClass, ok bool) GetNote() (value TextWithEntities, ok bool) + GetBotManagerID() (value int64, ok bool) }) { u.Blocked = from.GetBlocked() u.PhoneCallsAvailable = from.GetPhoneCallsAvailable() @@ -654,6 +668,7 @@ func (u *UserFull) FillFrom(from interface { u.DisplayGiftsButton = from.GetDisplayGiftsButton() u.NoforwardsMyEnabled = from.GetNoforwardsMyEnabled() u.NoforwardsPeerEnabled = from.GetNoforwardsPeerEnabled() + u.UnofficialSecurityRisk = from.GetUnofficialSecurityRisk() u.ID = from.GetID() if val, ok := from.GetAbout(); ok { u.About = val @@ -790,6 +805,10 @@ func (u *UserFull) FillFrom(from interface { u.Note = val } + if val, ok := from.GetBotManagerID(); ok { + u.BotManagerID = val + } + } // TypeID returns type id in TL schema. @@ -910,6 +929,11 @@ func (u *UserFull) TypeInfo() tdp.Type { SchemaName: "noforwards_peer_enabled", Null: !u.Flags2.Has(24), }, + { + Name: "UnofficialSecurityRisk", + SchemaName: "unofficial_security_risk", + Null: !u.Flags2.Has(26), + }, { Name: "ID", SchemaName: "id", @@ -1091,6 +1115,11 @@ func (u *UserFull) TypeInfo() tdp.Type { SchemaName: "note", Null: !u.Flags2.Has(22), }, + { + Name: "BotManagerID", + SchemaName: "bot_manager_id", + Null: !u.Flags2.Has(25), + }, } return typ } @@ -1154,6 +1183,9 @@ func (u *UserFull) SetFlags() { if !(u.NoforwardsPeerEnabled == false) { u.Flags2.Set(24) } + if !(u.UnofficialSecurityRisk == false) { + u.Flags2.Set(26) + } if !(u.About == "") { u.Flags.Set(1) } @@ -1253,12 +1285,15 @@ func (u *UserFull) SetFlags() { if !(u.Note.Zero()) { u.Flags2.Set(22) } + if !(u.BotManagerID == 0) { + u.Flags2.Set(25) + } } // Encode implements bin.Encoder. func (u *UserFull) Encode(b *bin.Buffer) error { if u == nil { - return fmt.Errorf("can't encode userFull#a02bc13e as nil") + return fmt.Errorf("can't encode userFull#6cbe645 as nil") } b.PutID(UserFullTypeID) return u.EncodeBare(b) @@ -1267,52 +1302,52 @@ func (u *UserFull) Encode(b *bin.Buffer) error { // EncodeBare implements bin.BareEncoder. func (u *UserFull) EncodeBare(b *bin.Buffer) error { if u == nil { - return fmt.Errorf("can't encode userFull#a02bc13e as nil") + return fmt.Errorf("can't encode userFull#6cbe645 as nil") } u.SetFlags() if err := u.Flags.Encode(b); err != nil { - return fmt.Errorf("unable to encode userFull#a02bc13e: field flags: %w", err) + return fmt.Errorf("unable to encode userFull#6cbe645: field flags: %w", err) } if err := u.Flags2.Encode(b); err != nil { - return fmt.Errorf("unable to encode userFull#a02bc13e: field flags2: %w", err) + return fmt.Errorf("unable to encode userFull#6cbe645: field flags2: %w", err) } b.PutLong(u.ID) if u.Flags.Has(1) { b.PutString(u.About) } if err := u.Settings.Encode(b); err != nil { - return fmt.Errorf("unable to encode userFull#a02bc13e: field settings: %w", err) + return fmt.Errorf("unable to encode userFull#6cbe645: field settings: %w", err) } if u.Flags.Has(21) { if u.PersonalPhoto == nil { - return fmt.Errorf("unable to encode userFull#a02bc13e: field personal_photo is nil") + return fmt.Errorf("unable to encode userFull#6cbe645: field personal_photo is nil") } if err := u.PersonalPhoto.Encode(b); err != nil { - return fmt.Errorf("unable to encode userFull#a02bc13e: field personal_photo: %w", err) + return fmt.Errorf("unable to encode userFull#6cbe645: field personal_photo: %w", err) } } if u.Flags.Has(2) { if u.ProfilePhoto == nil { - return fmt.Errorf("unable to encode userFull#a02bc13e: field profile_photo is nil") + return fmt.Errorf("unable to encode userFull#6cbe645: field profile_photo is nil") } if err := u.ProfilePhoto.Encode(b); err != nil { - return fmt.Errorf("unable to encode userFull#a02bc13e: field profile_photo: %w", err) + return fmt.Errorf("unable to encode userFull#6cbe645: field profile_photo: %w", err) } } if u.Flags.Has(22) { if u.FallbackPhoto == nil { - return fmt.Errorf("unable to encode userFull#a02bc13e: field fallback_photo is nil") + return fmt.Errorf("unable to encode userFull#6cbe645: field fallback_photo is nil") } if err := u.FallbackPhoto.Encode(b); err != nil { - return fmt.Errorf("unable to encode userFull#a02bc13e: field fallback_photo: %w", err) + return fmt.Errorf("unable to encode userFull#6cbe645: field fallback_photo: %w", err) } } if err := u.NotifySettings.Encode(b); err != nil { - return fmt.Errorf("unable to encode userFull#a02bc13e: field notify_settings: %w", err) + return fmt.Errorf("unable to encode userFull#6cbe645: field notify_settings: %w", err) } if u.Flags.Has(3) { if err := u.BotInfo.Encode(b); err != nil { - return fmt.Errorf("unable to encode userFull#a02bc13e: field bot_info: %w", err) + return fmt.Errorf("unable to encode userFull#6cbe645: field bot_info: %w", err) } } if u.Flags.Has(6) { @@ -1327,10 +1362,10 @@ func (u *UserFull) EncodeBare(b *bin.Buffer) error { } if u.Flags.Has(15) { if u.Theme == nil { - return fmt.Errorf("unable to encode userFull#a02bc13e: field theme is nil") + return fmt.Errorf("unable to encode userFull#6cbe645: field theme is nil") } if err := u.Theme.Encode(b); err != nil { - return fmt.Errorf("unable to encode userFull#a02bc13e: field theme: %w", err) + return fmt.Errorf("unable to encode userFull#6cbe645: field theme: %w", err) } } if u.Flags.Has(16) { @@ -1338,55 +1373,55 @@ func (u *UserFull) EncodeBare(b *bin.Buffer) error { } if u.Flags.Has(17) { if err := u.BotGroupAdminRights.Encode(b); err != nil { - return fmt.Errorf("unable to encode userFull#a02bc13e: field bot_group_admin_rights: %w", err) + return fmt.Errorf("unable to encode userFull#6cbe645: field bot_group_admin_rights: %w", err) } } if u.Flags.Has(18) { if err := u.BotBroadcastAdminRights.Encode(b); err != nil { - return fmt.Errorf("unable to encode userFull#a02bc13e: field bot_broadcast_admin_rights: %w", err) + return fmt.Errorf("unable to encode userFull#6cbe645: field bot_broadcast_admin_rights: %w", err) } } if u.Flags.Has(24) { if u.Wallpaper == nil { - return fmt.Errorf("unable to encode userFull#a02bc13e: field wallpaper is nil") + return fmt.Errorf("unable to encode userFull#6cbe645: field wallpaper is nil") } if err := u.Wallpaper.Encode(b); err != nil { - return fmt.Errorf("unable to encode userFull#a02bc13e: field wallpaper: %w", err) + return fmt.Errorf("unable to encode userFull#6cbe645: field wallpaper: %w", err) } } if u.Flags.Has(25) { if err := u.Stories.Encode(b); err != nil { - return fmt.Errorf("unable to encode userFull#a02bc13e: field stories: %w", err) + return fmt.Errorf("unable to encode userFull#6cbe645: field stories: %w", err) } } if u.Flags2.Has(0) { if err := u.BusinessWorkHours.Encode(b); err != nil { - return fmt.Errorf("unable to encode userFull#a02bc13e: field business_work_hours: %w", err) + return fmt.Errorf("unable to encode userFull#6cbe645: field business_work_hours: %w", err) } } if u.Flags2.Has(1) { if err := u.BusinessLocation.Encode(b); err != nil { - return fmt.Errorf("unable to encode userFull#a02bc13e: field business_location: %w", err) + return fmt.Errorf("unable to encode userFull#6cbe645: field business_location: %w", err) } } if u.Flags2.Has(2) { if err := u.BusinessGreetingMessage.Encode(b); err != nil { - return fmt.Errorf("unable to encode userFull#a02bc13e: field business_greeting_message: %w", err) + return fmt.Errorf("unable to encode userFull#6cbe645: field business_greeting_message: %w", err) } } if u.Flags2.Has(3) { if err := u.BusinessAwayMessage.Encode(b); err != nil { - return fmt.Errorf("unable to encode userFull#a02bc13e: field business_away_message: %w", err) + return fmt.Errorf("unable to encode userFull#6cbe645: field business_away_message: %w", err) } } if u.Flags2.Has(4) { if err := u.BusinessIntro.Encode(b); err != nil { - return fmt.Errorf("unable to encode userFull#a02bc13e: field business_intro: %w", err) + return fmt.Errorf("unable to encode userFull#6cbe645: field business_intro: %w", err) } } if u.Flags2.Has(5) { if err := u.Birthday.Encode(b); err != nil { - return fmt.Errorf("unable to encode userFull#a02bc13e: field birthday: %w", err) + return fmt.Errorf("unable to encode userFull#6cbe645: field birthday: %w", err) } } if u.Flags2.Has(6) { @@ -1400,12 +1435,12 @@ func (u *UserFull) EncodeBare(b *bin.Buffer) error { } if u.Flags2.Has(11) { if err := u.StarrefProgram.Encode(b); err != nil { - return fmt.Errorf("unable to encode userFull#a02bc13e: field starref_program: %w", err) + return fmt.Errorf("unable to encode userFull#6cbe645: field starref_program: %w", err) } } if u.Flags2.Has(12) { if err := u.BotVerification.Encode(b); err != nil { - return fmt.Errorf("unable to encode userFull#a02bc13e: field bot_verification: %w", err) + return fmt.Errorf("unable to encode userFull#6cbe645: field bot_verification: %w", err) } } if u.Flags2.Has(14) { @@ -1413,17 +1448,17 @@ func (u *UserFull) EncodeBare(b *bin.Buffer) error { } if u.Flags2.Has(15) { if err := u.DisallowedGifts.Encode(b); err != nil { - return fmt.Errorf("unable to encode userFull#a02bc13e: field disallowed_gifts: %w", err) + return fmt.Errorf("unable to encode userFull#6cbe645: field disallowed_gifts: %w", err) } } if u.Flags2.Has(17) { if err := u.StarsRating.Encode(b); err != nil { - return fmt.Errorf("unable to encode userFull#a02bc13e: field stars_rating: %w", err) + return fmt.Errorf("unable to encode userFull#6cbe645: field stars_rating: %w", err) } } if u.Flags2.Has(18) { if err := u.StarsMyPendingRating.Encode(b); err != nil { - return fmt.Errorf("unable to encode userFull#a02bc13e: field stars_my_pending_rating: %w", err) + return fmt.Errorf("unable to encode userFull#6cbe645: field stars_my_pending_rating: %w", err) } } if u.Flags2.Has(18) { @@ -1431,35 +1466,38 @@ func (u *UserFull) EncodeBare(b *bin.Buffer) error { } if u.Flags2.Has(20) { if u.MainTab == nil { - return fmt.Errorf("unable to encode userFull#a02bc13e: field main_tab is nil") + return fmt.Errorf("unable to encode userFull#6cbe645: field main_tab is nil") } if err := u.MainTab.Encode(b); err != nil { - return fmt.Errorf("unable to encode userFull#a02bc13e: field main_tab: %w", err) + return fmt.Errorf("unable to encode userFull#6cbe645: field main_tab: %w", err) } } if u.Flags2.Has(21) { if u.SavedMusic == nil { - return fmt.Errorf("unable to encode userFull#a02bc13e: field saved_music is nil") + return fmt.Errorf("unable to encode userFull#6cbe645: field saved_music is nil") } if err := u.SavedMusic.Encode(b); err != nil { - return fmt.Errorf("unable to encode userFull#a02bc13e: field saved_music: %w", err) + return fmt.Errorf("unable to encode userFull#6cbe645: field saved_music: %w", err) } } if u.Flags2.Has(22) { if err := u.Note.Encode(b); err != nil { - return fmt.Errorf("unable to encode userFull#a02bc13e: field note: %w", err) + return fmt.Errorf("unable to encode userFull#6cbe645: field note: %w", err) } } + if u.Flags2.Has(25) { + b.PutLong(u.BotManagerID) + } return nil } // Decode implements bin.Decoder. func (u *UserFull) Decode(b *bin.Buffer) error { if u == nil { - return fmt.Errorf("can't decode userFull#a02bc13e to nil") + return fmt.Errorf("can't decode userFull#6cbe645 to nil") } if err := b.ConsumeID(UserFullTypeID); err != nil { - return fmt.Errorf("unable to decode userFull#a02bc13e: %w", err) + return fmt.Errorf("unable to decode userFull#6cbe645: %w", err) } return u.DecodeBare(b) } @@ -1467,11 +1505,11 @@ func (u *UserFull) Decode(b *bin.Buffer) error { // DecodeBare implements bin.BareDecoder. func (u *UserFull) DecodeBare(b *bin.Buffer) error { if u == nil { - return fmt.Errorf("can't decode userFull#a02bc13e to nil") + return fmt.Errorf("can't decode userFull#6cbe645 to nil") } { if err := u.Flags.Decode(b); err != nil { - return fmt.Errorf("unable to decode userFull#a02bc13e: field flags: %w", err) + return fmt.Errorf("unable to decode userFull#6cbe645: field flags: %w", err) } } u.Blocked = u.Flags.Has(0) @@ -1489,7 +1527,7 @@ func (u *UserFull) DecodeBare(b *bin.Buffer) error { u.ReadDatesPrivate = u.Flags.Has(30) { if err := u.Flags2.Decode(b); err != nil { - return fmt.Errorf("unable to decode userFull#a02bc13e: field flags2: %w", err) + return fmt.Errorf("unable to decode userFull#6cbe645: field flags2: %w", err) } } u.SponsoredEnabled = u.Flags2.Has(7) @@ -1498,229 +1536,237 @@ func (u *UserFull) DecodeBare(b *bin.Buffer) error { u.DisplayGiftsButton = u.Flags2.Has(16) u.NoforwardsMyEnabled = u.Flags2.Has(23) u.NoforwardsPeerEnabled = u.Flags2.Has(24) + u.UnofficialSecurityRisk = u.Flags2.Has(26) { value, err := b.Long() if err != nil { - return fmt.Errorf("unable to decode userFull#a02bc13e: field id: %w", err) + return fmt.Errorf("unable to decode userFull#6cbe645: field id: %w", err) } u.ID = value } if u.Flags.Has(1) { value, err := b.String() if err != nil { - return fmt.Errorf("unable to decode userFull#a02bc13e: field about: %w", err) + return fmt.Errorf("unable to decode userFull#6cbe645: field about: %w", err) } u.About = value } { if err := u.Settings.Decode(b); err != nil { - return fmt.Errorf("unable to decode userFull#a02bc13e: field settings: %w", err) + return fmt.Errorf("unable to decode userFull#6cbe645: field settings: %w", err) } } if u.Flags.Has(21) { value, err := DecodePhoto(b) if err != nil { - return fmt.Errorf("unable to decode userFull#a02bc13e: field personal_photo: %w", err) + return fmt.Errorf("unable to decode userFull#6cbe645: field personal_photo: %w", err) } u.PersonalPhoto = value } if u.Flags.Has(2) { value, err := DecodePhoto(b) if err != nil { - return fmt.Errorf("unable to decode userFull#a02bc13e: field profile_photo: %w", err) + return fmt.Errorf("unable to decode userFull#6cbe645: field profile_photo: %w", err) } u.ProfilePhoto = value } if u.Flags.Has(22) { value, err := DecodePhoto(b) if err != nil { - return fmt.Errorf("unable to decode userFull#a02bc13e: field fallback_photo: %w", err) + return fmt.Errorf("unable to decode userFull#6cbe645: field fallback_photo: %w", err) } u.FallbackPhoto = value } { if err := u.NotifySettings.Decode(b); err != nil { - return fmt.Errorf("unable to decode userFull#a02bc13e: field notify_settings: %w", err) + return fmt.Errorf("unable to decode userFull#6cbe645: field notify_settings: %w", err) } } if u.Flags.Has(3) { if err := u.BotInfo.Decode(b); err != nil { - return fmt.Errorf("unable to decode userFull#a02bc13e: field bot_info: %w", err) + return fmt.Errorf("unable to decode userFull#6cbe645: field bot_info: %w", err) } } if u.Flags.Has(6) { value, err := b.Int() if err != nil { - return fmt.Errorf("unable to decode userFull#a02bc13e: field pinned_msg_id: %w", err) + return fmt.Errorf("unable to decode userFull#6cbe645: field pinned_msg_id: %w", err) } u.PinnedMsgID = value } { value, err := b.Int() if err != nil { - return fmt.Errorf("unable to decode userFull#a02bc13e: field common_chats_count: %w", err) + return fmt.Errorf("unable to decode userFull#6cbe645: field common_chats_count: %w", err) } u.CommonChatsCount = value } if u.Flags.Has(11) { value, err := b.Int() if err != nil { - return fmt.Errorf("unable to decode userFull#a02bc13e: field folder_id: %w", err) + return fmt.Errorf("unable to decode userFull#6cbe645: field folder_id: %w", err) } u.FolderID = value } if u.Flags.Has(14) { value, err := b.Int() if err != nil { - return fmt.Errorf("unable to decode userFull#a02bc13e: field ttl_period: %w", err) + return fmt.Errorf("unable to decode userFull#6cbe645: field ttl_period: %w", err) } u.TTLPeriod = value } if u.Flags.Has(15) { value, err := DecodeChatTheme(b) if err != nil { - return fmt.Errorf("unable to decode userFull#a02bc13e: field theme: %w", err) + return fmt.Errorf("unable to decode userFull#6cbe645: field theme: %w", err) } u.Theme = value } if u.Flags.Has(16) { value, err := b.String() if err != nil { - return fmt.Errorf("unable to decode userFull#a02bc13e: field private_forward_name: %w", err) + return fmt.Errorf("unable to decode userFull#6cbe645: field private_forward_name: %w", err) } u.PrivateForwardName = value } if u.Flags.Has(17) { if err := u.BotGroupAdminRights.Decode(b); err != nil { - return fmt.Errorf("unable to decode userFull#a02bc13e: field bot_group_admin_rights: %w", err) + return fmt.Errorf("unable to decode userFull#6cbe645: field bot_group_admin_rights: %w", err) } } if u.Flags.Has(18) { if err := u.BotBroadcastAdminRights.Decode(b); err != nil { - return fmt.Errorf("unable to decode userFull#a02bc13e: field bot_broadcast_admin_rights: %w", err) + return fmt.Errorf("unable to decode userFull#6cbe645: field bot_broadcast_admin_rights: %w", err) } } if u.Flags.Has(24) { value, err := DecodeWallPaper(b) if err != nil { - return fmt.Errorf("unable to decode userFull#a02bc13e: field wallpaper: %w", err) + return fmt.Errorf("unable to decode userFull#6cbe645: field wallpaper: %w", err) } u.Wallpaper = value } if u.Flags.Has(25) { if err := u.Stories.Decode(b); err != nil { - return fmt.Errorf("unable to decode userFull#a02bc13e: field stories: %w", err) + return fmt.Errorf("unable to decode userFull#6cbe645: field stories: %w", err) } } if u.Flags2.Has(0) { if err := u.BusinessWorkHours.Decode(b); err != nil { - return fmt.Errorf("unable to decode userFull#a02bc13e: field business_work_hours: %w", err) + return fmt.Errorf("unable to decode userFull#6cbe645: field business_work_hours: %w", err) } } if u.Flags2.Has(1) { if err := u.BusinessLocation.Decode(b); err != nil { - return fmt.Errorf("unable to decode userFull#a02bc13e: field business_location: %w", err) + return fmt.Errorf("unable to decode userFull#6cbe645: field business_location: %w", err) } } if u.Flags2.Has(2) { if err := u.BusinessGreetingMessage.Decode(b); err != nil { - return fmt.Errorf("unable to decode userFull#a02bc13e: field business_greeting_message: %w", err) + return fmt.Errorf("unable to decode userFull#6cbe645: field business_greeting_message: %w", err) } } if u.Flags2.Has(3) { if err := u.BusinessAwayMessage.Decode(b); err != nil { - return fmt.Errorf("unable to decode userFull#a02bc13e: field business_away_message: %w", err) + return fmt.Errorf("unable to decode userFull#6cbe645: field business_away_message: %w", err) } } if u.Flags2.Has(4) { if err := u.BusinessIntro.Decode(b); err != nil { - return fmt.Errorf("unable to decode userFull#a02bc13e: field business_intro: %w", err) + return fmt.Errorf("unable to decode userFull#6cbe645: field business_intro: %w", err) } } if u.Flags2.Has(5) { if err := u.Birthday.Decode(b); err != nil { - return fmt.Errorf("unable to decode userFull#a02bc13e: field birthday: %w", err) + return fmt.Errorf("unable to decode userFull#6cbe645: field birthday: %w", err) } } if u.Flags2.Has(6) { value, err := b.Long() if err != nil { - return fmt.Errorf("unable to decode userFull#a02bc13e: field personal_channel_id: %w", err) + return fmt.Errorf("unable to decode userFull#6cbe645: field personal_channel_id: %w", err) } u.PersonalChannelID = value } if u.Flags2.Has(6) { value, err := b.Int() if err != nil { - return fmt.Errorf("unable to decode userFull#a02bc13e: field personal_channel_message: %w", err) + return fmt.Errorf("unable to decode userFull#6cbe645: field personal_channel_message: %w", err) } u.PersonalChannelMessage = value } if u.Flags2.Has(8) { value, err := b.Int() if err != nil { - return fmt.Errorf("unable to decode userFull#a02bc13e: field stargifts_count: %w", err) + return fmt.Errorf("unable to decode userFull#6cbe645: field stargifts_count: %w", err) } u.StargiftsCount = value } if u.Flags2.Has(11) { if err := u.StarrefProgram.Decode(b); err != nil { - return fmt.Errorf("unable to decode userFull#a02bc13e: field starref_program: %w", err) + return fmt.Errorf("unable to decode userFull#6cbe645: field starref_program: %w", err) } } if u.Flags2.Has(12) { if err := u.BotVerification.Decode(b); err != nil { - return fmt.Errorf("unable to decode userFull#a02bc13e: field bot_verification: %w", err) + return fmt.Errorf("unable to decode userFull#6cbe645: field bot_verification: %w", err) } } if u.Flags2.Has(14) { value, err := b.Long() if err != nil { - return fmt.Errorf("unable to decode userFull#a02bc13e: field send_paid_messages_stars: %w", err) + return fmt.Errorf("unable to decode userFull#6cbe645: field send_paid_messages_stars: %w", err) } u.SendPaidMessagesStars = value } if u.Flags2.Has(15) { if err := u.DisallowedGifts.Decode(b); err != nil { - return fmt.Errorf("unable to decode userFull#a02bc13e: field disallowed_gifts: %w", err) + return fmt.Errorf("unable to decode userFull#6cbe645: field disallowed_gifts: %w", err) } } if u.Flags2.Has(17) { if err := u.StarsRating.Decode(b); err != nil { - return fmt.Errorf("unable to decode userFull#a02bc13e: field stars_rating: %w", err) + return fmt.Errorf("unable to decode userFull#6cbe645: field stars_rating: %w", err) } } if u.Flags2.Has(18) { if err := u.StarsMyPendingRating.Decode(b); err != nil { - return fmt.Errorf("unable to decode userFull#a02bc13e: field stars_my_pending_rating: %w", err) + return fmt.Errorf("unable to decode userFull#6cbe645: field stars_my_pending_rating: %w", err) } } if u.Flags2.Has(18) { value, err := b.Int() if err != nil { - return fmt.Errorf("unable to decode userFull#a02bc13e: field stars_my_pending_rating_date: %w", err) + return fmt.Errorf("unable to decode userFull#6cbe645: field stars_my_pending_rating_date: %w", err) } u.StarsMyPendingRatingDate = value } if u.Flags2.Has(20) { value, err := DecodeProfileTab(b) if err != nil { - return fmt.Errorf("unable to decode userFull#a02bc13e: field main_tab: %w", err) + return fmt.Errorf("unable to decode userFull#6cbe645: field main_tab: %w", err) } u.MainTab = value } if u.Flags2.Has(21) { value, err := DecodeDocument(b) if err != nil { - return fmt.Errorf("unable to decode userFull#a02bc13e: field saved_music: %w", err) + return fmt.Errorf("unable to decode userFull#6cbe645: field saved_music: %w", err) } u.SavedMusic = value } if u.Flags2.Has(22) { if err := u.Note.Decode(b); err != nil { - return fmt.Errorf("unable to decode userFull#a02bc13e: field note: %w", err) + return fmt.Errorf("unable to decode userFull#6cbe645: field note: %w", err) } } + if u.Flags2.Has(25) { + value, err := b.Long() + if err != nil { + return fmt.Errorf("unable to decode userFull#6cbe645: field bot_manager_id: %w", err) + } + u.BotManagerID = value + } return nil } @@ -2085,6 +2131,25 @@ func (u *UserFull) GetNoforwardsPeerEnabled() (value bool) { return u.Flags2.Has(24) } +// SetUnofficialSecurityRisk sets value of UnofficialSecurityRisk conditional field. +func (u *UserFull) SetUnofficialSecurityRisk(value bool) { + if value { + u.Flags2.Set(26) + u.UnofficialSecurityRisk = true + } else { + u.Flags2.Unset(26) + u.UnofficialSecurityRisk = false + } +} + +// GetUnofficialSecurityRisk returns value of UnofficialSecurityRisk conditional field. +func (u *UserFull) GetUnofficialSecurityRisk() (value bool) { + if u == nil { + return + } + return u.Flags2.Has(26) +} + // GetID returns value of ID field. func (u *UserFull) GetID() (value int64) { if u == nil { @@ -2711,6 +2776,24 @@ func (u *UserFull) GetNote() (value TextWithEntities, ok bool) { return u.Note, true } +// SetBotManagerID sets value of BotManagerID conditional field. +func (u *UserFull) SetBotManagerID(value int64) { + u.Flags2.Set(25) + u.BotManagerID = value +} + +// GetBotManagerID returns value of BotManagerID conditional field and +// boolean which is true if field was set. +func (u *UserFull) GetBotManagerID() (value int64, ok bool) { + if u == nil { + return + } + if !u.Flags2.Has(25) { + return value, false + } + return u.BotManagerID, true +} + // GetPersonalPhotoAsNotEmpty returns mapped value of PersonalPhoto conditional field and // boolean which is true if field was set. func (u *UserFull) GetPersonalPhotoAsNotEmpty() (*Photo, bool) { diff --git a/pkg/gotd/tg/tl_user_gen.go b/pkg/gotd/tg/tl_user_gen.go index 09985b6e..d9034475 100644 --- a/pkg/gotd/tg/tl_user_gen.go +++ b/pkg/gotd/tg/tl_user_gen.go @@ -313,6 +313,8 @@ type User struct { BotForumView bool // BotForumCanManageTopics field of User. BotForumCanManageTopics bool + // BotCanManageBots field of User. + BotCanManageBots bool // ID of the user, see here »¹ for more info and the available ID range. // // Links: @@ -598,6 +600,9 @@ func (u *User) Zero() bool { if !(u.BotForumCanManageTopics == false) { return false } + if !(u.BotCanManageBots == false) { + return false + } if !(u.ID == 0) { return false } @@ -700,6 +705,7 @@ func (u *User) FillFrom(from interface { GetBotHasMainApp() (value bool) GetBotForumView() (value bool) GetBotForumCanManageTopics() (value bool) + GetBotCanManageBots() (value bool) GetID() (value int64) GetAccessHash() (value int64, ok bool) GetFirstName() (value string, ok bool) @@ -748,6 +754,7 @@ func (u *User) FillFrom(from interface { u.BotHasMainApp = from.GetBotHasMainApp() u.BotForumView = from.GetBotForumView() u.BotForumCanManageTopics = from.GetBotForumCanManageTopics() + u.BotCanManageBots = from.GetBotCanManageBots() u.ID = from.GetID() if val, ok := from.GetAccessHash(); ok { u.AccessHash = val @@ -985,6 +992,11 @@ func (u *User) TypeInfo() tdp.Type { SchemaName: "bot_forum_can_manage_topics", Null: !u.Flags2.Has(17), }, + { + Name: "BotCanManageBots", + SchemaName: "bot_can_manage_bots", + Null: !u.Flags2.Has(18), + }, { Name: "ID", SchemaName: "id", @@ -1171,6 +1183,9 @@ func (u *User) SetFlags() { if !(u.BotForumCanManageTopics == false) { u.Flags2.Set(17) } + if !(u.BotCanManageBots == false) { + u.Flags2.Set(18) + } if !(u.AccessHash == 0) { u.Flags.Set(0) } @@ -1402,6 +1417,7 @@ func (u *User) DecodeBare(b *bin.Buffer) error { u.BotHasMainApp = u.Flags2.Has(13) u.BotForumView = u.Flags2.Has(16) u.BotForumCanManageTopics = u.Flags2.Has(17) + u.BotCanManageBots = u.Flags2.Has(18) { value, err := b.Long() if err != nil { @@ -2076,6 +2092,25 @@ func (u *User) GetBotForumCanManageTopics() (value bool) { return u.Flags2.Has(17) } +// SetBotCanManageBots sets value of BotCanManageBots conditional field. +func (u *User) SetBotCanManageBots(value bool) { + if value { + u.Flags2.Set(18) + u.BotCanManageBots = true + } else { + u.Flags2.Unset(18) + u.BotCanManageBots = false + } +} + +// GetBotCanManageBots returns value of BotCanManageBots conditional field. +func (u *User) GetBotCanManageBots() (value bool) { + if u == nil { + return + } + return u.Flags2.Has(18) +} + // GetID returns value of ID field. func (u *User) GetID() (value int64) { if u == nil {