From 821c7cc58c981eeef24cbc6968a32180bc2efe7d Mon Sep 17 00:00:00 2001 From: Omar Miatello Date: Sun, 7 Jul 2024 21:36:38 +0200 Subject: [PATCH] Version 7.7.1 - Added Kotlin inline value classes --- data/telegramapi.html | 2 +- example/TelegramClient.kt | 342 +++++++++++------------ example/TelegramModels.kt | 432 ++++++++++++++--------------- example/TelegramModelsOnly.kt | 11 - src/main/kotlin/GeneratorKotlin.kt | 113 ++++++-- src/main/kotlin/Main.kt | 2 +- 6 files changed, 480 insertions(+), 422 deletions(-) diff --git a/data/telegramapi.html b/data/telegramapi.html index d2c747d..4d26bfb 100644 --- a/data/telegramapi.html +++ b/data/telegramapi.html @@ -14334,4 +14334,4 @@
Press
- + diff --git a/example/TelegramClient.kt b/example/TelegramClient.kt index 8b7009b..5750322 100644 --- a/example/TelegramClient.kt +++ b/example/TelegramClient.kt @@ -151,16 +151,16 @@ suspend fun close() = telegramGet("$basePath/close", Boolean.serializer()) * @return [Message] * */ suspend fun sendMessage( -chat_id: String, +chat_id: ChatId, text: String, -business_connection_id: String? = null, -message_thread_id: Long? = null, +business_connection_id: BusinessConnectionId? = null, +message_thread_id: MessageThreadId? = null, parse_mode: ParseMode? = null, entities: List? = null, link_preview_options: LinkPreviewOptions? = null, disable_notification: Boolean? = null, protect_content: Boolean? = null, -message_effect_id: String? = null, +message_effect_id: MessageEffectId? = null, reply_parameters: ReplyParameters? = null, reply_markup: KeyboardOption? = null, ) = telegramPost( @@ -194,10 +194,10 @@ reply_markup: KeyboardOption? = null, * @return [Message] * */ suspend fun forwardMessage( -chat_id: String, -from_chat_id: String, -message_id: Long, -message_thread_id: Long? = null, +chat_id: ChatId, +from_chat_id: ChatId, +message_id: MessageId, +message_thread_id: MessageThreadId? = null, disable_notification: Boolean? = null, protect_content: Boolean? = null, ) = telegramPost( @@ -225,10 +225,10 @@ protect_content: Boolean? = null, * @return [List] * */ suspend fun forwardMessages( -chat_id: String, -from_chat_id: String, -message_ids: List, -message_thread_id: Long? = null, +chat_id: ChatId, +from_chat_id: ChatId, +message_ids: List, +message_thread_id: MessageThreadId? = null, disable_notification: Boolean? = null, protect_content: Boolean? = null, ) = telegramPost( @@ -262,10 +262,10 @@ protect_content: Boolean? = null, * @return [MessageId] * */ suspend fun copyMessage( -chat_id: String, -from_chat_id: String, -message_id: Long, -message_thread_id: Long? = null, +chat_id: ChatId, +from_chat_id: ChatId, +message_id: MessageId, +message_thread_id: MessageThreadId? = null, caption: String? = null, parse_mode: ParseMode? = null, caption_entities: List? = null, @@ -306,10 +306,10 @@ reply_markup: KeyboardOption? = null, * @return [List] * */ suspend fun copyMessages( -chat_id: String, -from_chat_id: String, -message_ids: List, -message_thread_id: Long? = null, +chat_id: ChatId, +from_chat_id: ChatId, +message_ids: List, +message_thread_id: MessageThreadId? = null, disable_notification: Boolean? = null, protect_content: Boolean? = null, remove_caption: Boolean? = null, @@ -347,10 +347,10 @@ remove_caption: Boolean? = null, * @return [Message] * */ suspend fun sendPhoto( -chat_id: String, +chat_id: ChatId, photo: String, -business_connection_id: String? = null, -message_thread_id: Long? = null, +business_connection_id: BusinessConnectionId? = null, +message_thread_id: MessageThreadId? = null, caption: String? = null, parse_mode: ParseMode? = null, caption_entities: List? = null, @@ -358,7 +358,7 @@ show_caption_above_media: Boolean? = null, has_spoiler: Boolean? = null, disable_notification: Boolean? = null, protect_content: Boolean? = null, -message_effect_id: String? = null, +message_effect_id: MessageEffectId? = null, reply_parameters: ReplyParameters? = null, reply_markup: KeyboardOption? = null, ) = telegramPost( @@ -404,10 +404,10 @@ reply_markup: KeyboardOption? = null, * @return [Message] * */ suspend fun sendAudio( -chat_id: String, +chat_id: ChatId, audio: String, -business_connection_id: String? = null, -message_thread_id: Long? = null, +business_connection_id: BusinessConnectionId? = null, +message_thread_id: MessageThreadId? = null, caption: String? = null, parse_mode: ParseMode? = null, caption_entities: List? = null, @@ -417,7 +417,7 @@ title: String? = null, thumbnail: String? = null, disable_notification: Boolean? = null, protect_content: Boolean? = null, -message_effect_id: String? = null, +message_effect_id: MessageEffectId? = null, reply_parameters: ReplyParameters? = null, reply_markup: KeyboardOption? = null, ) = telegramPost( @@ -463,10 +463,10 @@ reply_markup: KeyboardOption? = null, * @return [Message] * */ suspend fun sendDocument( -chat_id: String, +chat_id: ChatId, document: String, -business_connection_id: String? = null, -message_thread_id: Long? = null, +business_connection_id: BusinessConnectionId? = null, +message_thread_id: MessageThreadId? = null, thumbnail: String? = null, caption: String? = null, parse_mode: ParseMode? = null, @@ -474,7 +474,7 @@ caption_entities: List? = null, disable_content_type_detection: Boolean? = null, disable_notification: Boolean? = null, protect_content: Boolean? = null, -message_effect_id: String? = null, +message_effect_id: MessageEffectId? = null, reply_parameters: ReplyParameters? = null, reply_markup: KeyboardOption? = null, ) = telegramPost( @@ -523,10 +523,10 @@ reply_markup: KeyboardOption? = null, * @return [Message] * */ suspend fun sendVideo( -chat_id: String, +chat_id: ChatId, video: String, -business_connection_id: String? = null, -message_thread_id: Long? = null, +business_connection_id: BusinessConnectionId? = null, +message_thread_id: MessageThreadId? = null, duration: Long? = null, width: Long? = null, height: Long? = null, @@ -539,7 +539,7 @@ has_spoiler: Boolean? = null, supports_streaming: Boolean? = null, disable_notification: Boolean? = null, protect_content: Boolean? = null, -message_effect_id: String? = null, +message_effect_id: MessageEffectId? = null, reply_parameters: ReplyParameters? = null, reply_markup: KeyboardOption? = null, ) = telegramPost( @@ -592,10 +592,10 @@ reply_markup: KeyboardOption? = null, * @return [Message] * */ suspend fun sendAnimation( -chat_id: String, +chat_id: ChatId, animation: String, -business_connection_id: String? = null, -message_thread_id: Long? = null, +business_connection_id: BusinessConnectionId? = null, +message_thread_id: MessageThreadId? = null, duration: Long? = null, width: Long? = null, height: Long? = null, @@ -607,7 +607,7 @@ show_caption_above_media: Boolean? = null, has_spoiler: Boolean? = null, disable_notification: Boolean? = null, protect_content: Boolean? = null, -message_effect_id: String? = null, +message_effect_id: MessageEffectId? = null, reply_parameters: ReplyParameters? = null, reply_markup: KeyboardOption? = null, ) = telegramPost( @@ -654,17 +654,17 @@ reply_markup: KeyboardOption? = null, * @return [Message] * */ suspend fun sendVoice( -chat_id: String, +chat_id: ChatId, voice: String, -business_connection_id: String? = null, -message_thread_id: Long? = null, +business_connection_id: BusinessConnectionId? = null, +message_thread_id: MessageThreadId? = null, caption: String? = null, parse_mode: ParseMode? = null, caption_entities: List? = null, duration: Long? = null, disable_notification: Boolean? = null, protect_content: Boolean? = null, -message_effect_id: String? = null, +message_effect_id: MessageEffectId? = null, reply_parameters: ReplyParameters? = null, reply_markup: KeyboardOption? = null, ) = telegramPost( @@ -705,16 +705,16 @@ reply_markup: KeyboardOption? = null, * @return [Message] * */ suspend fun sendVideoNote( -chat_id: String, +chat_id: ChatId, video_note: String, -business_connection_id: String? = null, -message_thread_id: Long? = null, +business_connection_id: BusinessConnectionId? = null, +message_thread_id: MessageThreadId? = null, duration: Long? = null, length: Long? = null, thumbnail: String? = null, disable_notification: Boolean? = null, protect_content: Boolean? = null, -message_effect_id: String? = null, +message_effect_id: MessageEffectId? = null, reply_parameters: ReplyParameters? = null, reply_markup: KeyboardOption? = null, ) = telegramPost( @@ -753,7 +753,7 @@ reply_markup: KeyboardOption? = null, * @return [Message] * */ suspend fun sendPaidMedia( -chat_id: String, +chat_id: ChatId, star_count: Long, media: List, caption: String? = null, @@ -796,13 +796,13 @@ reply_markup: KeyboardOption? = null, * @return [List] * */ suspend fun sendMediaGroup( -chat_id: String, +chat_id: ChatId, media: List, -business_connection_id: String? = null, -message_thread_id: Long? = null, +business_connection_id: BusinessConnectionId? = null, +message_thread_id: MessageThreadId? = null, disable_notification: Boolean? = null, protect_content: Boolean? = null, -message_effect_id: String? = null, +message_effect_id: MessageEffectId? = null, reply_parameters: ReplyParameters? = null, ) = telegramPost( "$basePath/sendMediaGroup", @@ -839,18 +839,18 @@ reply_parameters: ReplyParameters? = null, * @return [Message] * */ suspend fun sendLocation( -chat_id: String, +chat_id: ChatId, latitude: Float, longitude: Float, -business_connection_id: String? = null, -message_thread_id: Long? = null, +business_connection_id: BusinessConnectionId? = null, +message_thread_id: MessageThreadId? = null, horizontal_accuracy: Float? = null, live_period: Long? = null, heading: Long? = null, proximity_alert_radius: Long? = null, disable_notification: Boolean? = null, protect_content: Boolean? = null, -message_effect_id: String? = null, +message_effect_id: MessageEffectId? = null, reply_parameters: ReplyParameters? = null, reply_markup: KeyboardOption? = null, ) = telegramPost( @@ -896,20 +896,20 @@ reply_markup: KeyboardOption? = null, * @return [Message] * */ suspend fun sendVenue( -chat_id: String, +chat_id: ChatId, latitude: Float, longitude: Float, title: String, address: String, -business_connection_id: String? = null, -message_thread_id: Long? = null, +business_connection_id: BusinessConnectionId? = null, +message_thread_id: MessageThreadId? = null, foursquare_id: String? = null, foursquare_type: String? = null, google_place_id: String? = null, google_place_type: String? = null, disable_notification: Boolean? = null, protect_content: Boolean? = null, -message_effect_id: String? = null, +message_effect_id: MessageEffectId? = null, reply_parameters: ReplyParameters? = null, reply_markup: KeyboardOption? = null, ) = telegramPost( @@ -953,16 +953,16 @@ reply_markup: KeyboardOption? = null, * @return [Message] * */ suspend fun sendContact( -chat_id: String, +chat_id: ChatId, phone_number: String, first_name: String, -business_connection_id: String? = null, -message_thread_id: Long? = null, +business_connection_id: BusinessConnectionId? = null, +message_thread_id: MessageThreadId? = null, last_name: String? = null, vcard: String? = null, disable_notification: Boolean? = null, protect_content: Boolean? = null, -message_effect_id: String? = null, +message_effect_id: MessageEffectId? = null, reply_parameters: ReplyParameters? = null, reply_markup: KeyboardOption? = null, ) = telegramPost( @@ -1012,11 +1012,11 @@ reply_markup: KeyboardOption? = null, * @return [Message] * */ suspend fun sendPoll( -chat_id: String, +chat_id: ChatId, question: String, options: List, -business_connection_id: String? = null, -message_thread_id: Long? = null, +business_connection_id: BusinessConnectionId? = null, +message_thread_id: MessageThreadId? = null, question_parse_mode: String? = null, question_entities: List? = null, is_anonymous: Boolean? = null, @@ -1031,7 +1031,7 @@ close_date: Long? = null, is_closed: Boolean? = null, disable_notification: Boolean? = null, protect_content: Boolean? = null, -message_effect_id: String? = null, +message_effect_id: MessageEffectId? = null, reply_parameters: ReplyParameters? = null, reply_markup: KeyboardOption? = null, ) = telegramPost( @@ -1078,13 +1078,13 @@ reply_markup: KeyboardOption? = null, * @return [Message] * */ suspend fun sendDice( -chat_id: String, -business_connection_id: String? = null, -message_thread_id: Long? = null, +chat_id: ChatId, +business_connection_id: BusinessConnectionId? = null, +message_thread_id: MessageThreadId? = null, emoji: String? = null, disable_notification: Boolean? = null, protect_content: Boolean? = null, -message_effect_id: String? = null, +message_effect_id: MessageEffectId? = null, reply_parameters: ReplyParameters? = null, reply_markup: KeyboardOption? = null, ) = telegramPost( @@ -1115,10 +1115,10 @@ reply_markup: KeyboardOption? = null, * @return [Boolean] * */ suspend fun sendChatAction( -chat_id: String, +chat_id: ChatId, action: String, -business_connection_id: String? = null, -message_thread_id: Long? = null, +business_connection_id: BusinessConnectionId? = null, +message_thread_id: MessageThreadId? = null, ) = telegramPost( "$basePath/sendChatAction", SendChatActionRequest( @@ -1140,8 +1140,8 @@ message_thread_id: Long? = null, * @return [Boolean] * */ suspend fun setMessageReaction( -chat_id: String, -message_id: Long, +chat_id: ChatId, +message_id: MessageId, reaction: List? = null, is_big: Boolean? = null, ) = telegramPost( @@ -1203,7 +1203,7 @@ file_id: String, * @return [Boolean] * */ suspend fun banChatMember( -chat_id: String, +chat_id: ChatId, user_id: Long, until_date: Long? = null, revoke_messages: Boolean? = null, @@ -1227,7 +1227,7 @@ revoke_messages: Boolean? = null, * @return [Boolean] * */ suspend fun unbanChatMember( -chat_id: String, +chat_id: ChatId, user_id: Long, only_if_banned: Boolean? = null, ) = telegramPost( @@ -1251,7 +1251,7 @@ only_if_banned: Boolean? = null, * @return [Boolean] * */ suspend fun restrictChatMember( -chat_id: String, +chat_id: ChatId, user_id: Long, permissions: ChatPermissions, use_independent_chat_permissions: Boolean? = null, @@ -1291,7 +1291,7 @@ until_date: Long? = null, * @return [Boolean] * */ suspend fun promoteChatMember( -chat_id: String, +chat_id: ChatId, user_id: Long, is_anonymous: Boolean? = null, can_manage_chat: Boolean? = null, @@ -1341,7 +1341,7 @@ can_manage_topics: Boolean? = null, * @return [Boolean] * */ suspend fun setChatAdministratorCustomTitle( -chat_id: String, +chat_id: ChatId, user_id: Long, custom_title: String, ) = telegramPost( @@ -1362,8 +1362,8 @@ custom_title: String, * @return [Boolean] * */ suspend fun banChatSenderChat( -chat_id: String, -sender_chat_id: Long, +chat_id: ChatId, +sender_chat_id: ChatId, ) = telegramPost( "$basePath/banChatSenderChat", BanChatSenderChatRequest( @@ -1381,8 +1381,8 @@ sender_chat_id: Long, * @return [Boolean] * */ suspend fun unbanChatSenderChat( -chat_id: String, -sender_chat_id: Long, +chat_id: ChatId, +sender_chat_id: ChatId, ) = telegramPost( "$basePath/unbanChatSenderChat", UnbanChatSenderChatRequest( @@ -1401,7 +1401,7 @@ sender_chat_id: Long, * @return [Boolean] * */ suspend fun setChatPermissions( -chat_id: String, +chat_id: ChatId, permissions: ChatPermissions, use_independent_chat_permissions: Boolean? = null, ) = telegramPost( @@ -1423,7 +1423,7 @@ use_independent_chat_permissions: Boolean? = null, * @return [String] * */ suspend fun exportChatInviteLink( -chat_id: String, +chat_id: ChatId, ) = telegramPost( "$basePath/exportChatInviteLink", ExportChatInviteLinkRequest( @@ -1443,7 +1443,7 @@ chat_id: String, * @return [ChatInviteLink] * */ suspend fun createChatInviteLink( -chat_id: String, +chat_id: ChatId, name: String? = null, expire_date: Long? = null, member_limit: Long? = null, @@ -1472,7 +1472,7 @@ creates_join_request: Boolean? = null, * @return [ChatInviteLink] * */ suspend fun editChatInviteLink( -chat_id: String, +chat_id: ChatId, invite_link: String, name: String? = null, expire_date: Long? = null, @@ -1499,7 +1499,7 @@ creates_join_request: Boolean? = null, * @return [ChatInviteLink] * */ suspend fun revokeChatInviteLink( -chat_id: String, +chat_id: ChatId, invite_link: String, ) = telegramPost( "$basePath/revokeChatInviteLink", @@ -1518,7 +1518,7 @@ invite_link: String, * @return [Boolean] * */ suspend fun approveChatJoinRequest( -chat_id: String, +chat_id: ChatId, user_id: Long, ) = telegramPost( "$basePath/approveChatJoinRequest", @@ -1537,7 +1537,7 @@ user_id: Long, * @return [Boolean] * */ suspend fun declineChatJoinRequest( -chat_id: String, +chat_id: ChatId, user_id: Long, ) = telegramPost( "$basePath/declineChatJoinRequest", @@ -1556,7 +1556,7 @@ user_id: Long, * @return [Boolean] * */ suspend fun setChatPhoto( -chat_id: String, +chat_id: ChatId, photo: Any, ) = telegramPost( "$basePath/setChatPhoto", @@ -1574,7 +1574,7 @@ photo: Any, * @return [Boolean] * */ suspend fun deleteChatPhoto( -chat_id: String, +chat_id: ChatId, ) = telegramPost( "$basePath/deleteChatPhoto", DeleteChatPhotoRequest( @@ -1591,7 +1591,7 @@ chat_id: String, * @return [Boolean] * */ suspend fun setChatTitle( -chat_id: String, +chat_id: ChatId, title: String, ) = telegramPost( "$basePath/setChatTitle", @@ -1610,7 +1610,7 @@ title: String, * @return [Boolean] * */ suspend fun setChatDescription( -chat_id: String, +chat_id: ChatId, description: String? = null, ) = telegramPost( "$basePath/setChatDescription", @@ -1630,8 +1630,8 @@ description: String? = null, * @return [Boolean] * */ suspend fun pinChatMessage( -chat_id: String, -message_id: Long, +chat_id: ChatId, +message_id: MessageId, disable_notification: Boolean? = null, ) = telegramPost( "$basePath/pinChatMessage", @@ -1651,8 +1651,8 @@ disable_notification: Boolean? = null, * @return [Boolean] * */ suspend fun unpinChatMessage( -chat_id: String, -message_id: Long? = null, +chat_id: ChatId, +message_id: MessageId? = null, ) = telegramPost( "$basePath/unpinChatMessage", UnpinChatMessageRequest( @@ -1669,7 +1669,7 @@ message_id: Long? = null, * @return [Boolean] * */ suspend fun unpinAllChatMessages( -chat_id: String, +chat_id: ChatId, ) = telegramPost( "$basePath/unpinAllChatMessages", UnpinAllChatMessagesRequest( @@ -1685,7 +1685,7 @@ chat_id: String, * @return [Boolean] * */ suspend fun leaveChat( -chat_id: String, +chat_id: ChatId, ) = telegramPost( "$basePath/leaveChat", LeaveChatRequest( @@ -1701,7 +1701,7 @@ chat_id: String, * @return [ChatFullInfo] * */ suspend fun getChat( -chat_id: String, +chat_id: ChatId, ) = telegramPost( "$basePath/getChat", GetChatRequest( @@ -1717,7 +1717,7 @@ chat_id: String, * @return [List] * */ suspend fun getChatAdministrators( -chat_id: String, +chat_id: ChatId, ) = telegramPost( "$basePath/getChatAdministrators", GetChatAdministratorsRequest( @@ -1733,7 +1733,7 @@ chat_id: String, * @return [Int] * */ suspend fun getChatMemberCount( -chat_id: String, +chat_id: ChatId, ) = telegramPost( "$basePath/getChatMemberCount", GetChatMemberCountRequest( @@ -1750,7 +1750,7 @@ chat_id: String, * @return [ChatMember] * */ suspend fun getChatMember( -chat_id: String, +chat_id: ChatId, user_id: Long, ) = telegramPost( "$basePath/getChatMember", @@ -1769,7 +1769,7 @@ user_id: Long, * @return [Boolean] * */ suspend fun setChatStickerSet( -chat_id: String, +chat_id: ChatId, sticker_set_name: String, ) = telegramPost( "$basePath/setChatStickerSet", @@ -1787,7 +1787,7 @@ sticker_set_name: String, * @return [Boolean] * */ suspend fun deleteChatStickerSet( -chat_id: String, +chat_id: ChatId, ) = telegramPost( "$basePath/deleteChatStickerSet", DeleteChatStickerSetRequest( @@ -1813,7 +1813,7 @@ suspend fun getForumTopicIconStickers() = telegramGet("$basePath/getForumTopicIc * @return [ForumTopic] * */ suspend fun createForumTopic( -chat_id: String, +chat_id: ChatId, name: String, icon_color: Long? = null, icon_custom_emoji_id: String? = null, @@ -1838,8 +1838,8 @@ icon_custom_emoji_id: String? = null, * @return [Boolean] * */ suspend fun editForumTopic( -chat_id: String, -message_thread_id: Long, +chat_id: ChatId, +message_thread_id: MessageThreadId, name: String? = null, icon_custom_emoji_id: String? = null, ) = telegramPost( @@ -1861,8 +1861,8 @@ icon_custom_emoji_id: String? = null, * @return [Boolean] * */ suspend fun closeForumTopic( -chat_id: String, -message_thread_id: Long, +chat_id: ChatId, +message_thread_id: MessageThreadId, ) = telegramPost( "$basePath/closeForumTopic", CloseForumTopicRequest( @@ -1880,8 +1880,8 @@ message_thread_id: Long, * @return [Boolean] * */ suspend fun reopenForumTopic( -chat_id: String, -message_thread_id: Long, +chat_id: ChatId, +message_thread_id: MessageThreadId, ) = telegramPost( "$basePath/reopenForumTopic", ReopenForumTopicRequest( @@ -1899,8 +1899,8 @@ message_thread_id: Long, * @return [Boolean] * */ suspend fun deleteForumTopic( -chat_id: String, -message_thread_id: Long, +chat_id: ChatId, +message_thread_id: MessageThreadId, ) = telegramPost( "$basePath/deleteForumTopic", DeleteForumTopicRequest( @@ -1918,8 +1918,8 @@ message_thread_id: Long, * @return [Boolean] * */ suspend fun unpinAllForumTopicMessages( -chat_id: String, -message_thread_id: Long, +chat_id: ChatId, +message_thread_id: MessageThreadId, ) = telegramPost( "$basePath/unpinAllForumTopicMessages", UnpinAllForumTopicMessagesRequest( @@ -1937,7 +1937,7 @@ message_thread_id: Long, * @return [Boolean] * */ suspend fun editGeneralForumTopic( -chat_id: String, +chat_id: ChatId, name: String, ) = telegramPost( "$basePath/editGeneralForumTopic", @@ -1955,7 +1955,7 @@ name: String, * @return [Boolean] * */ suspend fun closeGeneralForumTopic( -chat_id: String, +chat_id: ChatId, ) = telegramPost( "$basePath/closeGeneralForumTopic", CloseGeneralForumTopicRequest( @@ -1971,7 +1971,7 @@ chat_id: String, * @return [Boolean] * */ suspend fun reopenGeneralForumTopic( -chat_id: String, +chat_id: ChatId, ) = telegramPost( "$basePath/reopenGeneralForumTopic", ReopenGeneralForumTopicRequest( @@ -1987,7 +1987,7 @@ chat_id: String, * @return [Boolean] * */ suspend fun hideGeneralForumTopic( -chat_id: String, +chat_id: ChatId, ) = telegramPost( "$basePath/hideGeneralForumTopic", HideGeneralForumTopicRequest( @@ -2003,7 +2003,7 @@ chat_id: String, * @return [Boolean] * */ suspend fun unhideGeneralForumTopic( -chat_id: String, +chat_id: ChatId, ) = telegramPost( "$basePath/unhideGeneralForumTopic", UnhideGeneralForumTopicRequest( @@ -2019,7 +2019,7 @@ chat_id: String, * @return [Boolean] * */ suspend fun unpinAllGeneralForumTopicMessages( -chat_id: String, +chat_id: ChatId, ) = telegramPost( "$basePath/unpinAllGeneralForumTopicMessages", UnpinAllGeneralForumTopicMessagesRequest( @@ -2066,7 +2066,7 @@ cache_time: Long? = null, * @return [UserChatBoosts] * */ suspend fun getUserChatBoosts( -chat_id: String, +chat_id: ChatId, user_id: Long, ) = telegramPost( "$basePath/getUserChatBoosts", @@ -2084,7 +2084,7 @@ user_id: Long, * @return [BusinessConnection] * */ suspend fun getBusinessConnection( -business_connection_id: String, +business_connection_id: BusinessConnectionId, ) = telegramPost( "$basePath/getBusinessConnection", GetBusinessConnectionRequest( @@ -2266,7 +2266,7 @@ language_code: String? = null, * @return [Boolean] * */ suspend fun setChatMenuButton( -chat_id: Long? = null, +chat_id: ChatId? = null, menu_button: MenuButton? = null, ) = telegramPost( "$basePath/setChatMenuButton", @@ -2284,7 +2284,7 @@ menu_button: MenuButton? = null, * @return [MenuButton] * */ suspend fun getChatMenuButton( -chat_id: Long? = null, +chat_id: ChatId? = null, ) = telegramPost( "$basePath/getChatMenuButton", GetChatMenuButtonRequest( @@ -2347,9 +2347,9 @@ for_channels: Boolean? = null, * */ suspend fun editMessageText( text: String, -business_connection_id: String? = null, -chat_id: String? = null, -message_id: Long? = null, +business_connection_id: BusinessConnectionId? = null, +chat_id: ChatId? = null, +message_id: MessageId? = null, inline_message_id: String? = null, parse_mode: ParseMode? = null, entities: List? = null, @@ -2386,9 +2386,9 @@ reply_markup: InlineKeyboardMarkup? = null, * @return [Message] * */ suspend fun editMessageCaption( -business_connection_id: String? = null, -chat_id: String? = null, -message_id: Long? = null, +business_connection_id: BusinessConnectionId? = null, +chat_id: ChatId? = null, +message_id: MessageId? = null, inline_message_id: String? = null, caption: String? = null, parse_mode: ParseMode? = null, @@ -2424,9 +2424,9 @@ reply_markup: InlineKeyboardMarkup? = null, * */ suspend fun editMessageMedia( media: InputMedia, -business_connection_id: String? = null, -chat_id: String? = null, -message_id: Long? = null, +business_connection_id: BusinessConnectionId? = null, +chat_id: ChatId? = null, +message_id: MessageId? = null, inline_message_id: String? = null, reply_markup: InlineKeyboardMarkup? = null, ) = telegramPost( @@ -2461,9 +2461,9 @@ reply_markup: InlineKeyboardMarkup? = null, suspend fun editMessageLiveLocation( latitude: Float, longitude: Float, -business_connection_id: String? = null, -chat_id: String? = null, -message_id: Long? = null, +business_connection_id: BusinessConnectionId? = null, +chat_id: ChatId? = null, +message_id: MessageId? = null, inline_message_id: String? = null, live_period: Long? = null, horizontal_accuracy: Float? = null, @@ -2499,9 +2499,9 @@ reply_markup: InlineKeyboardMarkup? = null, * @return [Message] * */ suspend fun stopMessageLiveLocation( -business_connection_id: String? = null, -chat_id: String? = null, -message_id: Long? = null, +business_connection_id: BusinessConnectionId? = null, +chat_id: ChatId? = null, +message_id: MessageId? = null, inline_message_id: String? = null, reply_markup: InlineKeyboardMarkup? = null, ) = telegramPost( @@ -2527,9 +2527,9 @@ reply_markup: InlineKeyboardMarkup? = null, * @return [Message] * */ suspend fun editMessageReplyMarkup( -business_connection_id: String? = null, -chat_id: String? = null, -message_id: Long? = null, +business_connection_id: BusinessConnectionId? = null, +chat_id: ChatId? = null, +message_id: MessageId? = null, inline_message_id: String? = null, reply_markup: InlineKeyboardMarkup? = null, ) = telegramPost( @@ -2554,9 +2554,9 @@ reply_markup: InlineKeyboardMarkup? = null, * @return [Poll] * */ suspend fun stopPoll( -chat_id: String, -message_id: Long, -business_connection_id: String? = null, +chat_id: ChatId, +message_id: MessageId, +business_connection_id: BusinessConnectionId? = null, reply_markup: InlineKeyboardMarkup? = null, ) = telegramPost( "$basePath/stopPoll", @@ -2577,8 +2577,8 @@ reply_markup: InlineKeyboardMarkup? = null, * @return [Boolean] * */ suspend fun deleteMessage( -chat_id: String, -message_id: Long, +chat_id: ChatId, +message_id: MessageId, ) = telegramPost( "$basePath/deleteMessage", DeleteMessageRequest( @@ -2596,8 +2596,8 @@ message_id: Long, * @return [Boolean] * */ suspend fun deleteMessages( -chat_id: String, -message_ids: List, +chat_id: ChatId, +message_ids: List, ) = telegramPost( "$basePath/deleteMessages", DeleteMessagesRequest( @@ -2626,14 +2626,14 @@ message_ids: List, * @return [Message] * */ suspend fun sendSticker( -chat_id: String, +chat_id: ChatId, sticker: String, -business_connection_id: String? = null, -message_thread_id: Long? = null, +business_connection_id: BusinessConnectionId? = null, +message_thread_id: MessageThreadId? = null, emoji: String? = null, disable_notification: Boolean? = null, protect_content: Boolean? = null, -message_effect_id: String? = null, +message_effect_id: MessageEffectId? = null, reply_parameters: ReplyParameters? = null, reply_markup: KeyboardOption? = null, ) = telegramPost( @@ -3046,13 +3046,13 @@ result: InlineQueryResult, * @return [Message] * */ suspend fun sendInvoice( -chat_id: String, +chat_id: ChatId, title: String, description: String, payload: String, currency: String, prices: List, -message_thread_id: Long? = null, +message_thread_id: MessageThreadId? = null, provider_token: String? = null, max_tip_amount: Long? = null, suggested_tip_amounts: List? = null, @@ -3071,7 +3071,7 @@ send_email_to_provider: Boolean? = null, is_flexible: Boolean? = null, disable_notification: Boolean? = null, protect_content: Boolean? = null, -message_effect_id: String? = null, +message_effect_id: MessageEffectId? = null, reply_parameters: ReplyParameters? = null, reply_markup: InlineKeyboardMarkup? = null, ) = telegramPost( @@ -3307,13 +3307,13 @@ errors: List, * @return [Message] * */ suspend fun sendGame( -chat_id: Long, +chat_id: ChatId, game_short_name: String, -business_connection_id: String? = null, -message_thread_id: Long? = null, +business_connection_id: BusinessConnectionId? = null, +message_thread_id: MessageThreadId? = null, disable_notification: Boolean? = null, protect_content: Boolean? = null, -message_effect_id: String? = null, +message_effect_id: MessageEffectId? = null, reply_parameters: ReplyParameters? = null, reply_markup: InlineKeyboardMarkup? = null, ) = telegramPost( @@ -3349,8 +3349,8 @@ user_id: Long, score: Long, force: Boolean? = null, disable_edit_message: Boolean? = null, -chat_id: Long? = null, -message_id: Long? = null, +chat_id: ChatId? = null, +message_id: MessageId? = null, inline_message_id: String? = null, ) = telegramPost( "$basePath/setGameScore", @@ -3379,8 +3379,8 @@ inline_message_id: String? = null, * */ suspend fun getGameHighScores( user_id: Long, -chat_id: Long? = null, -message_id: Long? = null, +chat_id: ChatId? = null, +message_id: MessageId? = null, inline_message_id: String? = null, ) = telegramPost( "$basePath/getGameHighScores", diff --git a/example/TelegramModels.kt b/example/TelegramModels.kt index 77e5fc3..d5a1258 100644 --- a/example/TelegramModels.kt +++ b/example/TelegramModels.kt @@ -32,6 +32,7 @@ import kotlinx.serialization.encoding.Decoder import kotlinx.serialization.encoding.Encoder import kotlinx.serialization.json.* import kotlinx.serialization.serializer +import kotlin.jvm.JvmInline private val json = Json { ignoreUnknownKeys = true @@ -41,14 +42,26 @@ private val json = Json { sealed class TelegramModel { abstract fun toJson(): String } private fun Decoder.tryDeserializers(vararg serializers: KSerializer): T { - return serializers.firstNotNullOf { - try { - decodeSerializableValue(it) - } catch (e: Exception) { - null - } - } + error(buildString { + appendLine("Tried ${serializers.size} deserializers, but all failed!") + val jsonEl = decodeSerializableValue(JsonElement.serializer()) + serializers.firstNotNullOfOrNull { + try { + json.decodeFromJsonElement(it, jsonEl) + } catch (e: Exception) { + appendLine("$it: $e") + null + } + }?.also { return it } + }) +} +@Serializable @JvmInline value class ChatId(val stringValue: String) { + val longValue: Long get() = stringValue.toLong() } +@Serializable @JvmInline value class MessageId(val longValue: Long) +@Serializable @JvmInline value class BusinessConnectionId(val stringValue: String) +@Serializable @JvmInline value class MessageThreadId(val longValue: Long) +@Serializable @JvmInline value class MessageEffectId(val stringValue: String) @Serializable sealed class InputMedia : TelegramModel() object InputMediaSerializer : KSerializer { @@ -629,7 +642,7 @@ data class ChatFullInfo( val sticker_set_name: String? = null, val can_set_sticker_set: Boolean? = null, val custom_emoji_sticker_set_name: String? = null, - val linked_chat_id: Long? = null, + val linked_chat_id: ChatId? = null, val location: ChatLocation? = null, ) : TelegramModel() { override fun toJson() = json.encodeToString(serializer(), this) @@ -731,15 +744,15 @@ data class ChatFullInfo( * */ @Serializable data class Message( - val message_id: Long, + val message_id: MessageId, val date: Long, val chat: Chat, - val message_thread_id: Long? = null, + val message_thread_id: MessageThreadId? = null, val from: User? = null, val sender_chat: Chat? = null, val sender_boost_count: Long? = null, val sender_business_bot: User? = null, - val business_connection_id: String? = null, + val business_connection_id: BusinessConnectionId? = null, val forward_origin: @Contextual MessageOrigin? = null, val is_topic_message: Boolean? = null, val is_automatic_forward: Boolean? = null, @@ -786,8 +799,8 @@ data class Message( val supergroup_chat_created: Boolean? = null, val channel_chat_created: Boolean? = null, val message_auto_delete_timer_changed: MessageAutoDeleteTimerChanged? = null, - val migrate_to_chat_id: Long? = null, - val migrate_from_chat_id: Long? = null, + val migrate_to_chat_id: ChatId? = null, + val migrate_from_chat_id: ChatId? = null, val pinned_message: @Contextual MaybeInaccessibleMessage? = null, val invoice: Invoice? = null, val successful_payment: SuccessfulPayment? = null, @@ -823,23 +836,6 @@ data class Message( } } -/** - *

This object represents a unique message identifier.

- * - * @property message_id Unique message identifier - * - * @constructor Creates a [MessageId]. - * */ -@Serializable -data class MessageId( - val message_id: Long, -) : TelegramModel() { - override fun toJson() = json.encodeToString(serializer(), this) - companion object { - fun fromJson(string: String) = json.decodeFromString(serializer(), string) - } -} - /** *

This object describes a message that was deleted or is otherwise inaccessible to the bot.

* @@ -852,7 +848,7 @@ data class MessageId( @Serializable data class InaccessibleMessage( val chat: Chat, - val message_id: Long, + val message_id: MessageId, val date: Long, ) : MaybeInaccessibleMessage() { override fun toJson() = json.encodeToString(serializer(), this) @@ -947,7 +943,7 @@ data class TextQuote( data class ExternalReplyInfo( val origin: @Contextual MessageOrigin, val chat: Chat? = null, - val message_id: Long? = null, + val message_id: MessageId? = null, val link_preview_options: LinkPreviewOptions? = null, val animation: Animation? = null, val audio: Audio? = null, @@ -991,8 +987,8 @@ data class ExternalReplyInfo( * */ @Serializable data class ReplyParameters( - val message_id: Long, - val chat_id: String? = null, + val message_id: MessageId, + val chat_id: ChatId? = null, val allow_sending_without_reply: Boolean? = null, val quote: String? = null, val quote_parse_mode: String? = null, @@ -1086,7 +1082,7 @@ data class MessageOriginChannel( val type: String, val date: Long, val chat: Chat, - val message_id: Long, + val message_id: MessageId, val author_signature: String? = null, ) : MessageOrigin() { override fun toJson() = json.encodeToString(serializer(), this) @@ -1947,7 +1943,7 @@ data class UsersShared( @Serializable data class ChatShared( val request_id: Long, - val chat_id: Long, + val chat_id: ChatId, val title: String? = null, val username: String? = null, val photo: List? = null, @@ -2858,7 +2854,7 @@ data class ChatMemberBanned( data class ChatJoinRequest( val chat: Chat, val from: User, - val user_chat_id: Long, + val user_chat_id: ChatId, val date: Long, val bio: String? = null, val invite_link: ChatInviteLink? = null, @@ -3103,7 +3099,7 @@ data class ReactionCount( @Serializable data class MessageReactionUpdated( val chat: Chat, - val message_id: Long, + val message_id: MessageId, val date: Long, val old_reaction: List<@Contextual ReactionType>, val new_reaction: List<@Contextual ReactionType>, @@ -3129,7 +3125,7 @@ data class MessageReactionUpdated( @Serializable data class MessageReactionCountUpdated( val chat: Chat, - val message_id: Long, + val message_id: MessageId, val date: Long, val reactions: List, ) : TelegramModel() { @@ -3151,7 +3147,7 @@ data class MessageReactionCountUpdated( * */ @Serializable data class ForumTopic( - val message_thread_id: Long, + val message_thread_id: MessageThreadId, val name: String, val icon_color: Long, val icon_custom_emoji_id: String? = null, @@ -3260,7 +3256,7 @@ data class BotCommandScopeAllChatAdministrators( @Serializable data class BotCommandScopeChat( val type: String, - val chat_id: String, + val chat_id: ChatId, ) : BotCommandScope() { override fun toJson() = json.encodeToString(serializer(), this) companion object { @@ -3279,7 +3275,7 @@ data class BotCommandScopeChat( @Serializable data class BotCommandScopeChatAdministrators( val type: String, - val chat_id: String, + val chat_id: ChatId, ) : BotCommandScope() { override fun toJson() = json.encodeToString(serializer(), this) companion object { @@ -3299,7 +3295,7 @@ data class BotCommandScopeChatAdministrators( @Serializable data class BotCommandScopeChatMember( val type: String, - val chat_id: String, + val chat_id: ChatId, val user_id: Long, ) : BotCommandScope() { override fun toJson() = json.encodeToString(serializer(), this) @@ -3573,7 +3569,7 @@ data class UserChatBoosts( data class BusinessConnection( val id: String, val user: User, - val user_chat_id: Long, + val user_chat_id: ChatId, val date: Long, val can_reply: Boolean, val is_enabled: Boolean, @@ -3595,9 +3591,9 @@ data class BusinessConnection( * */ @Serializable data class BusinessMessagesDeleted( - val business_connection_id: String, + val business_connection_id: BusinessConnectionId, val chat: Chat, - val message_ids: List, + val message_ids: List, ) : TelegramModel() { override fun toJson() = json.encodeToString(serializer(), this) companion object { @@ -3615,7 +3611,7 @@ data class BusinessMessagesDeleted( * */ @Serializable data class ResponseParameters( - val migrate_to_chat_id: Long? = null, + val migrate_to_chat_id: ChatId? = null, val retry_after: Long? = null, ) : TelegramModel() { override fun toJson() = json.encodeToString(serializer(), this) @@ -5825,16 +5821,16 @@ data class DeleteWebhookRequest( * */ @Serializable data class SendMessageRequest( - val chat_id: String, + val chat_id: ChatId, val text: String, - val business_connection_id: String? = null, - val message_thread_id: Long? = null, + val business_connection_id: BusinessConnectionId? = null, + val message_thread_id: MessageThreadId? = null, val parse_mode: ParseMode? = null, val entities: List? = null, val link_preview_options: LinkPreviewOptions? = null, val disable_notification: Boolean? = null, val protect_content: Boolean? = null, - val message_effect_id: String? = null, + val message_effect_id: MessageEffectId? = null, val reply_parameters: ReplyParameters? = null, val reply_markup: @Contextual KeyboardOption? = null, ) : TelegramRequest() { @@ -5859,10 +5855,10 @@ data class SendMessageRequest( * */ @Serializable data class ForwardMessageRequest( - val chat_id: String, - val from_chat_id: String, - val message_id: Long, - val message_thread_id: Long? = null, + val chat_id: ChatId, + val from_chat_id: ChatId, + val message_id: MessageId, + val message_thread_id: MessageThreadId? = null, val disable_notification: Boolean? = null, val protect_content: Boolean? = null, ) : TelegramRequest() { @@ -5887,10 +5883,10 @@ data class ForwardMessageRequest( * */ @Serializable data class ForwardMessagesRequest( - val chat_id: String, - val from_chat_id: String, - val message_ids: List, - val message_thread_id: Long? = null, + val chat_id: ChatId, + val from_chat_id: ChatId, + val message_ids: List, + val message_thread_id: MessageThreadId? = null, val disable_notification: Boolean? = null, val protect_content: Boolean? = null, ) : TelegramRequest() { @@ -5921,10 +5917,10 @@ data class ForwardMessagesRequest( * */ @Serializable data class CopyMessageRequest( - val chat_id: String, - val from_chat_id: String, - val message_id: Long, - val message_thread_id: Long? = null, + val chat_id: ChatId, + val from_chat_id: ChatId, + val message_id: MessageId, + val message_thread_id: MessageThreadId? = null, val caption: String? = null, val parse_mode: ParseMode? = null, val caption_entities: List? = null, @@ -5956,10 +5952,10 @@ data class CopyMessageRequest( * */ @Serializable data class CopyMessagesRequest( - val chat_id: String, - val from_chat_id: String, - val message_ids: List, - val message_thread_id: Long? = null, + val chat_id: ChatId, + val from_chat_id: ChatId, + val message_ids: List, + val message_thread_id: MessageThreadId? = null, val disable_notification: Boolean? = null, val protect_content: Boolean? = null, val remove_caption: Boolean? = null, @@ -5993,10 +5989,10 @@ data class CopyMessagesRequest( * */ @Serializable data class SendPhotoRequest( - val chat_id: String, + val chat_id: ChatId, val photo: String, - val business_connection_id: String? = null, - val message_thread_id: Long? = null, + val business_connection_id: BusinessConnectionId? = null, + val message_thread_id: MessageThreadId? = null, val caption: String? = null, val parse_mode: ParseMode? = null, val caption_entities: List? = null, @@ -6004,7 +6000,7 @@ data class SendPhotoRequest( val has_spoiler: Boolean? = null, val disable_notification: Boolean? = null, val protect_content: Boolean? = null, - val message_effect_id: String? = null, + val message_effect_id: MessageEffectId? = null, val reply_parameters: ReplyParameters? = null, val reply_markup: @Contextual KeyboardOption? = null, ) : TelegramRequest() { @@ -6039,10 +6035,10 @@ data class SendPhotoRequest( * */ @Serializable data class SendAudioRequest( - val chat_id: String, + val chat_id: ChatId, val audio: String, - val business_connection_id: String? = null, - val message_thread_id: Long? = null, + val business_connection_id: BusinessConnectionId? = null, + val message_thread_id: MessageThreadId? = null, val caption: String? = null, val parse_mode: ParseMode? = null, val caption_entities: List? = null, @@ -6052,7 +6048,7 @@ data class SendAudioRequest( val thumbnail: String? = null, val disable_notification: Boolean? = null, val protect_content: Boolean? = null, - val message_effect_id: String? = null, + val message_effect_id: MessageEffectId? = null, val reply_parameters: ReplyParameters? = null, val reply_markup: @Contextual KeyboardOption? = null, ) : TelegramRequest() { @@ -6085,10 +6081,10 @@ data class SendAudioRequest( * */ @Serializable data class SendDocumentRequest( - val chat_id: String, + val chat_id: ChatId, val document: String, - val business_connection_id: String? = null, - val message_thread_id: Long? = null, + val business_connection_id: BusinessConnectionId? = null, + val message_thread_id: MessageThreadId? = null, val thumbnail: String? = null, val caption: String? = null, val parse_mode: ParseMode? = null, @@ -6096,7 +6092,7 @@ data class SendDocumentRequest( val disable_content_type_detection: Boolean? = null, val disable_notification: Boolean? = null, val protect_content: Boolean? = null, - val message_effect_id: String? = null, + val message_effect_id: MessageEffectId? = null, val reply_parameters: ReplyParameters? = null, val reply_markup: @Contextual KeyboardOption? = null, ) : TelegramRequest() { @@ -6134,10 +6130,10 @@ data class SendDocumentRequest( * */ @Serializable data class SendVideoRequest( - val chat_id: String, + val chat_id: ChatId, val video: String, - val business_connection_id: String? = null, - val message_thread_id: Long? = null, + val business_connection_id: BusinessConnectionId? = null, + val message_thread_id: MessageThreadId? = null, val duration: Long? = null, val width: Long? = null, val height: Long? = null, @@ -6150,7 +6146,7 @@ data class SendVideoRequest( val supports_streaming: Boolean? = null, val disable_notification: Boolean? = null, val protect_content: Boolean? = null, - val message_effect_id: String? = null, + val message_effect_id: MessageEffectId? = null, val reply_parameters: ReplyParameters? = null, val reply_markup: @Contextual KeyboardOption? = null, ) : TelegramRequest() { @@ -6187,10 +6183,10 @@ data class SendVideoRequest( * */ @Serializable data class SendAnimationRequest( - val chat_id: String, + val chat_id: ChatId, val animation: String, - val business_connection_id: String? = null, - val message_thread_id: Long? = null, + val business_connection_id: BusinessConnectionId? = null, + val message_thread_id: MessageThreadId? = null, val duration: Long? = null, val width: Long? = null, val height: Long? = null, @@ -6202,7 +6198,7 @@ data class SendAnimationRequest( val has_spoiler: Boolean? = null, val disable_notification: Boolean? = null, val protect_content: Boolean? = null, - val message_effect_id: String? = null, + val message_effect_id: MessageEffectId? = null, val reply_parameters: ReplyParameters? = null, val reply_markup: @Contextual KeyboardOption? = null, ) : TelegramRequest() { @@ -6234,17 +6230,17 @@ data class SendAnimationRequest( * */ @Serializable data class SendVoiceRequest( - val chat_id: String, + val chat_id: ChatId, val voice: String, - val business_connection_id: String? = null, - val message_thread_id: Long? = null, + val business_connection_id: BusinessConnectionId? = null, + val message_thread_id: MessageThreadId? = null, val caption: String? = null, val parse_mode: ParseMode? = null, val caption_entities: List? = null, val duration: Long? = null, val disable_notification: Boolean? = null, val protect_content: Boolean? = null, - val message_effect_id: String? = null, + val message_effect_id: MessageEffectId? = null, val reply_parameters: ReplyParameters? = null, val reply_markup: @Contextual KeyboardOption? = null, ) : TelegramRequest() { @@ -6275,16 +6271,16 @@ data class SendVoiceRequest( * */ @Serializable data class SendVideoNoteRequest( - val chat_id: String, + val chat_id: ChatId, val video_note: String, - val business_connection_id: String? = null, - val message_thread_id: Long? = null, + val business_connection_id: BusinessConnectionId? = null, + val message_thread_id: MessageThreadId? = null, val duration: Long? = null, val length: Long? = null, val thumbnail: String? = null, val disable_notification: Boolean? = null, val protect_content: Boolean? = null, - val message_effect_id: String? = null, + val message_effect_id: MessageEffectId? = null, val reply_parameters: ReplyParameters? = null, val reply_markup: @Contextual KeyboardOption? = null, ) : TelegramRequest() { @@ -6314,7 +6310,7 @@ data class SendVideoNoteRequest( * */ @Serializable data class SendPaidMediaRequest( - val chat_id: String, + val chat_id: ChatId, val star_count: Long, val media: List<@Contextual InputPaidMedia>, val caption: String? = null, @@ -6349,13 +6345,13 @@ data class SendPaidMediaRequest( * */ @Serializable data class SendMediaGroupRequest( - val chat_id: String, + val chat_id: ChatId, val media: List<@Contextual InputMedia>, - val business_connection_id: String? = null, - val message_thread_id: Long? = null, + val business_connection_id: BusinessConnectionId? = null, + val message_thread_id: MessageThreadId? = null, val disable_notification: Boolean? = null, val protect_content: Boolean? = null, - val message_effect_id: String? = null, + val message_effect_id: MessageEffectId? = null, val reply_parameters: ReplyParameters? = null, ) : TelegramRequest() { override fun toJsonForRequest() = json.encodeToString(serializer(), this) @@ -6387,18 +6383,18 @@ data class SendMediaGroupRequest( * */ @Serializable data class SendLocationRequest( - val chat_id: String, + val chat_id: ChatId, val latitude: Float, val longitude: Float, - val business_connection_id: String? = null, - val message_thread_id: Long? = null, + val business_connection_id: BusinessConnectionId? = null, + val message_thread_id: MessageThreadId? = null, val horizontal_accuracy: Float? = null, val live_period: Long? = null, val heading: Long? = null, val proximity_alert_radius: Long? = null, val disable_notification: Boolean? = null, val protect_content: Boolean? = null, - val message_effect_id: String? = null, + val message_effect_id: MessageEffectId? = null, val reply_parameters: ReplyParameters? = null, val reply_markup: @Contextual KeyboardOption? = null, ) : TelegramRequest() { @@ -6433,20 +6429,20 @@ data class SendLocationRequest( * */ @Serializable data class SendVenueRequest( - val chat_id: String, + val chat_id: ChatId, val latitude: Float, val longitude: Float, val title: String, val address: String, - val business_connection_id: String? = null, - val message_thread_id: Long? = null, + val business_connection_id: BusinessConnectionId? = null, + val message_thread_id: MessageThreadId? = null, val foursquare_id: String? = null, val foursquare_type: String? = null, val google_place_id: String? = null, val google_place_type: String? = null, val disable_notification: Boolean? = null, val protect_content: Boolean? = null, - val message_effect_id: String? = null, + val message_effect_id: MessageEffectId? = null, val reply_parameters: ReplyParameters? = null, val reply_markup: @Contextual KeyboardOption? = null, ) : TelegramRequest() { @@ -6477,16 +6473,16 @@ data class SendVenueRequest( * */ @Serializable data class SendContactRequest( - val chat_id: String, + val chat_id: ChatId, val phone_number: String, val first_name: String, - val business_connection_id: String? = null, - val message_thread_id: Long? = null, + val business_connection_id: BusinessConnectionId? = null, + val message_thread_id: MessageThreadId? = null, val last_name: String? = null, val vcard: String? = null, val disable_notification: Boolean? = null, val protect_content: Boolean? = null, - val message_effect_id: String? = null, + val message_effect_id: MessageEffectId? = null, val reply_parameters: ReplyParameters? = null, val reply_markup: @Contextual KeyboardOption? = null, ) : TelegramRequest() { @@ -6527,11 +6523,11 @@ data class SendContactRequest( * */ @Serializable data class SendPollRequest( - val chat_id: String, + val chat_id: ChatId, val question: String, val options: List, - val business_connection_id: String? = null, - val message_thread_id: Long? = null, + val business_connection_id: BusinessConnectionId? = null, + val message_thread_id: MessageThreadId? = null, val question_parse_mode: String? = null, val question_entities: List? = null, val is_anonymous: Boolean? = null, @@ -6546,7 +6542,7 @@ data class SendPollRequest( val is_closed: Boolean? = null, val disable_notification: Boolean? = null, val protect_content: Boolean? = null, - val message_effect_id: String? = null, + val message_effect_id: MessageEffectId? = null, val reply_parameters: ReplyParameters? = null, val reply_markup: @Contextual KeyboardOption? = null, ) : TelegramRequest() { @@ -6574,13 +6570,13 @@ data class SendPollRequest( * */ @Serializable data class SendDiceRequest( - val chat_id: String, - val business_connection_id: String? = null, - val message_thread_id: Long? = null, + val chat_id: ChatId, + val business_connection_id: BusinessConnectionId? = null, + val message_thread_id: MessageThreadId? = null, val emoji: String? = null, val disable_notification: Boolean? = null, val protect_content: Boolean? = null, - val message_effect_id: String? = null, + val message_effect_id: MessageEffectId? = null, val reply_parameters: ReplyParameters? = null, val reply_markup: @Contextual KeyboardOption? = null, ) : TelegramRequest() { @@ -6605,10 +6601,10 @@ data class SendDiceRequest( * */ @Serializable data class SendChatActionRequest( - val chat_id: String, + val chat_id: ChatId, val action: String, - val business_connection_id: String? = null, - val message_thread_id: Long? = null, + val business_connection_id: BusinessConnectionId? = null, + val message_thread_id: MessageThreadId? = null, ) : TelegramRequest() { override fun toJsonForRequest() = json.encodeToString(serializer(), this) override fun toJsonForResponse() = JsonObject( @@ -6629,8 +6625,8 @@ data class SendChatActionRequest( * */ @Serializable data class SetMessageReactionRequest( - val chat_id: String, - val message_id: Long, + val chat_id: ChatId, + val message_id: MessageId, val reaction: List<@Contextual ReactionType>? = null, val is_big: Boolean? = null, ) : TelegramRequest() { @@ -6693,7 +6689,7 @@ data class GetFileRequest( * */ @Serializable data class BanChatMemberRequest( - val chat_id: String, + val chat_id: ChatId, val user_id: Long, val until_date: Long? = null, val revoke_messages: Boolean? = null, @@ -6716,7 +6712,7 @@ data class BanChatMemberRequest( * */ @Serializable data class UnbanChatMemberRequest( - val chat_id: String, + val chat_id: ChatId, val user_id: Long, val only_if_banned: Boolean? = null, ) : TelegramRequest() { @@ -6740,7 +6736,7 @@ data class UnbanChatMemberRequest( * */ @Serializable data class RestrictChatMemberRequest( - val chat_id: String, + val chat_id: ChatId, val user_id: Long, val permissions: ChatPermissions, val use_independent_chat_permissions: Boolean? = null, @@ -6778,7 +6774,7 @@ data class RestrictChatMemberRequest( * */ @Serializable data class PromoteChatMemberRequest( - val chat_id: String, + val chat_id: ChatId, val user_id: Long, val is_anonymous: Boolean? = null, val can_manage_chat: Boolean? = null, @@ -6814,7 +6810,7 @@ data class PromoteChatMemberRequest( * */ @Serializable data class SetChatAdministratorCustomTitleRequest( - val chat_id: String, + val chat_id: ChatId, val user_id: Long, val custom_title: String, ) : TelegramRequest() { @@ -6835,8 +6831,8 @@ data class SetChatAdministratorCustomTitleRequest( * */ @Serializable data class BanChatSenderChatRequest( - val chat_id: String, - val sender_chat_id: Long, + val chat_id: ChatId, + val sender_chat_id: ChatId, ) : TelegramRequest() { override fun toJsonForRequest() = json.encodeToString(serializer(), this) override fun toJsonForResponse() = JsonObject( @@ -6855,8 +6851,8 @@ data class BanChatSenderChatRequest( * */ @Serializable data class UnbanChatSenderChatRequest( - val chat_id: String, - val sender_chat_id: Long, + val chat_id: ChatId, + val sender_chat_id: ChatId, ) : TelegramRequest() { override fun toJsonForRequest() = json.encodeToString(serializer(), this) override fun toJsonForResponse() = JsonObject( @@ -6876,7 +6872,7 @@ data class UnbanChatSenderChatRequest( * */ @Serializable data class SetChatPermissionsRequest( - val chat_id: String, + val chat_id: ChatId, val permissions: ChatPermissions, val use_independent_chat_permissions: Boolean? = null, ) : TelegramRequest() { @@ -6898,7 +6894,7 @@ data class SetChatPermissionsRequest( * */ @Serializable data class ExportChatInviteLinkRequest( - val chat_id: String, + val chat_id: ChatId, ) : TelegramRequest() { override fun toJsonForRequest() = json.encodeToString(serializer(), this) override fun toJsonForResponse() = JsonObject( @@ -6920,7 +6916,7 @@ data class ExportChatInviteLinkRequest( * */ @Serializable data class CreateChatInviteLinkRequest( - val chat_id: String, + val chat_id: ChatId, val name: String? = null, val expire_date: Long? = null, val member_limit: Long? = null, @@ -6947,7 +6943,7 @@ data class CreateChatInviteLinkRequest( * */ @Serializable data class EditChatInviteLinkRequest( - val chat_id: String, + val chat_id: ChatId, val invite_link: String, val name: String? = null, val expire_date: Long? = null, @@ -6971,7 +6967,7 @@ data class EditChatInviteLinkRequest( * */ @Serializable data class RevokeChatInviteLinkRequest( - val chat_id: String, + val chat_id: ChatId, val invite_link: String, ) : TelegramRequest() { override fun toJsonForRequest() = json.encodeToString(serializer(), this) @@ -6991,7 +6987,7 @@ data class RevokeChatInviteLinkRequest( * */ @Serializable data class ApproveChatJoinRequestRequest( - val chat_id: String, + val chat_id: ChatId, val user_id: Long, ) : TelegramRequest() { override fun toJsonForRequest() = json.encodeToString(serializer(), this) @@ -7011,7 +7007,7 @@ data class ApproveChatJoinRequestRequest( * */ @Serializable data class DeclineChatJoinRequestRequest( - val chat_id: String, + val chat_id: ChatId, val user_id: Long, ) : TelegramRequest() { override fun toJsonForRequest() = json.encodeToString(serializer(), this) @@ -7031,7 +7027,7 @@ data class DeclineChatJoinRequestRequest( * */ @Serializable data class SetChatPhotoRequest( - val chat_id: String, + val chat_id: ChatId, val photo: @Contextual Any, ) : TelegramRequest() { override fun toJsonForRequest() = json.encodeToString(serializer(), this) @@ -7050,7 +7046,7 @@ data class SetChatPhotoRequest( * */ @Serializable data class DeleteChatPhotoRequest( - val chat_id: String, + val chat_id: ChatId, ) : TelegramRequest() { override fun toJsonForRequest() = json.encodeToString(serializer(), this) override fun toJsonForResponse() = JsonObject( @@ -7069,7 +7065,7 @@ data class DeleteChatPhotoRequest( * */ @Serializable data class SetChatTitleRequest( - val chat_id: String, + val chat_id: ChatId, val title: String, ) : TelegramRequest() { override fun toJsonForRequest() = json.encodeToString(serializer(), this) @@ -7089,7 +7085,7 @@ data class SetChatTitleRequest( * */ @Serializable data class SetChatDescriptionRequest( - val chat_id: String, + val chat_id: ChatId, val description: String? = null, ) : TelegramRequest() { override fun toJsonForRequest() = json.encodeToString(serializer(), this) @@ -7110,8 +7106,8 @@ data class SetChatDescriptionRequest( * */ @Serializable data class PinChatMessageRequest( - val chat_id: String, - val message_id: Long, + val chat_id: ChatId, + val message_id: MessageId, val disable_notification: Boolean? = null, ) : TelegramRequest() { override fun toJsonForRequest() = json.encodeToString(serializer(), this) @@ -7131,8 +7127,8 @@ data class PinChatMessageRequest( * */ @Serializable data class UnpinChatMessageRequest( - val chat_id: String, - val message_id: Long? = null, + val chat_id: ChatId, + val message_id: MessageId? = null, ) : TelegramRequest() { override fun toJsonForRequest() = json.encodeToString(serializer(), this) override fun toJsonForResponse() = JsonObject( @@ -7150,7 +7146,7 @@ data class UnpinChatMessageRequest( * */ @Serializable data class UnpinAllChatMessagesRequest( - val chat_id: String, + val chat_id: ChatId, ) : TelegramRequest() { override fun toJsonForRequest() = json.encodeToString(serializer(), this) override fun toJsonForResponse() = JsonObject( @@ -7168,7 +7164,7 @@ data class UnpinAllChatMessagesRequest( * */ @Serializable data class LeaveChatRequest( - val chat_id: String, + val chat_id: ChatId, ) : TelegramRequest() { override fun toJsonForRequest() = json.encodeToString(serializer(), this) override fun toJsonForResponse() = JsonObject( @@ -7186,7 +7182,7 @@ data class LeaveChatRequest( * */ @Serializable data class GetChatRequest( - val chat_id: String, + val chat_id: ChatId, ) : TelegramRequest() { override fun toJsonForRequest() = json.encodeToString(serializer(), this) override fun toJsonForResponse() = JsonObject( @@ -7204,7 +7200,7 @@ data class GetChatRequest( * */ @Serializable data class GetChatAdministratorsRequest( - val chat_id: String, + val chat_id: ChatId, ) : TelegramRequest() { override fun toJsonForRequest() = json.encodeToString(serializer(), this) override fun toJsonForResponse() = JsonObject( @@ -7222,7 +7218,7 @@ data class GetChatAdministratorsRequest( * */ @Serializable data class GetChatMemberCountRequest( - val chat_id: String, + val chat_id: ChatId, ) : TelegramRequest() { override fun toJsonForRequest() = json.encodeToString(serializer(), this) override fun toJsonForResponse() = JsonObject( @@ -7241,7 +7237,7 @@ data class GetChatMemberCountRequest( * */ @Serializable data class GetChatMemberRequest( - val chat_id: String, + val chat_id: ChatId, val user_id: Long, ) : TelegramRequest() { override fun toJsonForRequest() = json.encodeToString(serializer(), this) @@ -7261,7 +7257,7 @@ data class GetChatMemberRequest( * */ @Serializable data class SetChatStickerSetRequest( - val chat_id: String, + val chat_id: ChatId, val sticker_set_name: String, ) : TelegramRequest() { override fun toJsonForRequest() = json.encodeToString(serializer(), this) @@ -7280,7 +7276,7 @@ data class SetChatStickerSetRequest( * */ @Serializable data class DeleteChatStickerSetRequest( - val chat_id: String, + val chat_id: ChatId, ) : TelegramRequest() { override fun toJsonForRequest() = json.encodeToString(serializer(), this) override fun toJsonForResponse() = JsonObject( @@ -7301,7 +7297,7 @@ data class DeleteChatStickerSetRequest( * */ @Serializable data class CreateForumTopicRequest( - val chat_id: String, + val chat_id: ChatId, val name: String, val icon_color: Long? = null, val icon_custom_emoji_id: String? = null, @@ -7325,8 +7321,8 @@ data class CreateForumTopicRequest( * */ @Serializable data class EditForumTopicRequest( - val chat_id: String, - val message_thread_id: Long, + val chat_id: ChatId, + val message_thread_id: MessageThreadId, val name: String? = null, val icon_custom_emoji_id: String? = null, ) : TelegramRequest() { @@ -7347,8 +7343,8 @@ data class EditForumTopicRequest( * */ @Serializable data class CloseForumTopicRequest( - val chat_id: String, - val message_thread_id: Long, + val chat_id: ChatId, + val message_thread_id: MessageThreadId, ) : TelegramRequest() { override fun toJsonForRequest() = json.encodeToString(serializer(), this) override fun toJsonForResponse() = JsonObject( @@ -7367,8 +7363,8 @@ data class CloseForumTopicRequest( * */ @Serializable data class ReopenForumTopicRequest( - val chat_id: String, - val message_thread_id: Long, + val chat_id: ChatId, + val message_thread_id: MessageThreadId, ) : TelegramRequest() { override fun toJsonForRequest() = json.encodeToString(serializer(), this) override fun toJsonForResponse() = JsonObject( @@ -7387,8 +7383,8 @@ data class ReopenForumTopicRequest( * */ @Serializable data class DeleteForumTopicRequest( - val chat_id: String, - val message_thread_id: Long, + val chat_id: ChatId, + val message_thread_id: MessageThreadId, ) : TelegramRequest() { override fun toJsonForRequest() = json.encodeToString(serializer(), this) override fun toJsonForResponse() = JsonObject( @@ -7407,8 +7403,8 @@ data class DeleteForumTopicRequest( * */ @Serializable data class UnpinAllForumTopicMessagesRequest( - val chat_id: String, - val message_thread_id: Long, + val chat_id: ChatId, + val message_thread_id: MessageThreadId, ) : TelegramRequest() { override fun toJsonForRequest() = json.encodeToString(serializer(), this) override fun toJsonForResponse() = JsonObject( @@ -7427,7 +7423,7 @@ data class UnpinAllForumTopicMessagesRequest( * */ @Serializable data class EditGeneralForumTopicRequest( - val chat_id: String, + val chat_id: ChatId, val name: String, ) : TelegramRequest() { override fun toJsonForRequest() = json.encodeToString(serializer(), this) @@ -7446,7 +7442,7 @@ data class EditGeneralForumTopicRequest( * */ @Serializable data class CloseGeneralForumTopicRequest( - val chat_id: String, + val chat_id: ChatId, ) : TelegramRequest() { override fun toJsonForRequest() = json.encodeToString(serializer(), this) override fun toJsonForResponse() = JsonObject( @@ -7464,7 +7460,7 @@ data class CloseGeneralForumTopicRequest( * */ @Serializable data class ReopenGeneralForumTopicRequest( - val chat_id: String, + val chat_id: ChatId, ) : TelegramRequest() { override fun toJsonForRequest() = json.encodeToString(serializer(), this) override fun toJsonForResponse() = JsonObject( @@ -7482,7 +7478,7 @@ data class ReopenGeneralForumTopicRequest( * */ @Serializable data class HideGeneralForumTopicRequest( - val chat_id: String, + val chat_id: ChatId, ) : TelegramRequest() { override fun toJsonForRequest() = json.encodeToString(serializer(), this) override fun toJsonForResponse() = JsonObject( @@ -7500,7 +7496,7 @@ data class HideGeneralForumTopicRequest( * */ @Serializable data class UnhideGeneralForumTopicRequest( - val chat_id: String, + val chat_id: ChatId, ) : TelegramRequest() { override fun toJsonForRequest() = json.encodeToString(serializer(), this) override fun toJsonForResponse() = JsonObject( @@ -7518,7 +7514,7 @@ data class UnhideGeneralForumTopicRequest( * */ @Serializable data class UnpinAllGeneralForumTopicMessagesRequest( - val chat_id: String, + val chat_id: ChatId, ) : TelegramRequest() { override fun toJsonForRequest() = json.encodeToString(serializer(), this) override fun toJsonForResponse() = JsonObject( @@ -7565,7 +7561,7 @@ data class AnswerCallbackQueryRequest( * */ @Serializable data class GetUserChatBoostsRequest( - val chat_id: String, + val chat_id: ChatId, val user_id: Long, ) : TelegramRequest() { override fun toJsonForRequest() = json.encodeToString(serializer(), this) @@ -7584,7 +7580,7 @@ data class GetUserChatBoostsRequest( * */ @Serializable data class GetBusinessConnectionRequest( - val business_connection_id: String, + val business_connection_id: BusinessConnectionId, ) : TelegramRequest() { override fun toJsonForRequest() = json.encodeToString(serializer(), this) override fun toJsonForResponse() = JsonObject( @@ -7779,7 +7775,7 @@ data class GetMyShortDescriptionRequest( * */ @Serializable data class SetChatMenuButtonRequest( - val chat_id: Long? = null, + val chat_id: ChatId? = null, val menu_button: @Contextual MenuButton? = null, ) : TelegramRequest() { override fun toJsonForRequest() = json.encodeToString(serializer(), this) @@ -7798,7 +7794,7 @@ data class SetChatMenuButtonRequest( * */ @Serializable data class GetChatMenuButtonRequest( - val chat_id: Long? = null, + val chat_id: ChatId? = null, ) : TelegramRequest() { override fun toJsonForRequest() = json.encodeToString(serializer(), this) override fun toJsonForResponse() = JsonObject( @@ -7866,9 +7862,9 @@ data class GetMyDefaultAdministratorRightsRequest( @Serializable data class EditMessageTextRequest( val text: String, - val business_connection_id: String? = null, - val chat_id: String? = null, - val message_id: Long? = null, + val business_connection_id: BusinessConnectionId? = null, + val chat_id: ChatId? = null, + val message_id: MessageId? = null, val inline_message_id: String? = null, val parse_mode: ParseMode? = null, val entities: List? = null, @@ -7899,9 +7895,9 @@ data class EditMessageTextRequest( * */ @Serializable data class EditMessageCaptionRequest( - val business_connection_id: String? = null, - val chat_id: String? = null, - val message_id: Long? = null, + val business_connection_id: BusinessConnectionId? = null, + val chat_id: ChatId? = null, + val message_id: MessageId? = null, val inline_message_id: String? = null, val caption: String? = null, val parse_mode: ParseMode? = null, @@ -7931,9 +7927,9 @@ data class EditMessageCaptionRequest( @Serializable data class EditMessageMediaRequest( val media: @Contextual InputMedia, - val business_connection_id: String? = null, - val chat_id: String? = null, - val message_id: Long? = null, + val business_connection_id: BusinessConnectionId? = null, + val chat_id: ChatId? = null, + val message_id: MessageId? = null, val inline_message_id: String? = null, val reply_markup: InlineKeyboardMarkup? = null, ) : TelegramRequest() { @@ -7965,9 +7961,9 @@ data class EditMessageMediaRequest( data class EditMessageLiveLocationRequest( val latitude: Float, val longitude: Float, - val business_connection_id: String? = null, - val chat_id: String? = null, - val message_id: Long? = null, + val business_connection_id: BusinessConnectionId? = null, + val chat_id: ChatId? = null, + val message_id: MessageId? = null, val inline_message_id: String? = null, val live_period: Long? = null, val horizontal_accuracy: Float? = null, @@ -7995,9 +7991,9 @@ data class EditMessageLiveLocationRequest( * */ @Serializable data class StopMessageLiveLocationRequest( - val business_connection_id: String? = null, - val chat_id: String? = null, - val message_id: Long? = null, + val business_connection_id: BusinessConnectionId? = null, + val chat_id: ChatId? = null, + val message_id: MessageId? = null, val inline_message_id: String? = null, val reply_markup: InlineKeyboardMarkup? = null, ) : TelegramRequest() { @@ -8021,9 +8017,9 @@ data class StopMessageLiveLocationRequest( * */ @Serializable data class EditMessageReplyMarkupRequest( - val business_connection_id: String? = null, - val chat_id: String? = null, - val message_id: Long? = null, + val business_connection_id: BusinessConnectionId? = null, + val chat_id: ChatId? = null, + val message_id: MessageId? = null, val inline_message_id: String? = null, val reply_markup: InlineKeyboardMarkup? = null, ) : TelegramRequest() { @@ -8046,9 +8042,9 @@ data class EditMessageReplyMarkupRequest( * */ @Serializable data class StopPollRequest( - val chat_id: String, - val message_id: Long, - val business_connection_id: String? = null, + val chat_id: ChatId, + val message_id: MessageId, + val business_connection_id: BusinessConnectionId? = null, val reply_markup: InlineKeyboardMarkup? = null, ) : TelegramRequest() { override fun toJsonForRequest() = json.encodeToString(serializer(), this) @@ -8068,8 +8064,8 @@ data class StopPollRequest( * */ @Serializable data class DeleteMessageRequest( - val chat_id: String, - val message_id: Long, + val chat_id: ChatId, + val message_id: MessageId, ) : TelegramRequest() { override fun toJsonForRequest() = json.encodeToString(serializer(), this) override fun toJsonForResponse() = JsonObject( @@ -8088,8 +8084,8 @@ data class DeleteMessageRequest( * */ @Serializable data class DeleteMessagesRequest( - val chat_id: String, - val message_ids: List, + val chat_id: ChatId, + val message_ids: List, ) : TelegramRequest() { override fun toJsonForRequest() = json.encodeToString(serializer(), this) override fun toJsonForResponse() = JsonObject( @@ -8119,14 +8115,14 @@ data class DeleteMessagesRequest( * */ @Serializable data class SendStickerRequest( - val chat_id: String, + val chat_id: ChatId, val sticker: String, - val business_connection_id: String? = null, - val message_thread_id: Long? = null, + val business_connection_id: BusinessConnectionId? = null, + val message_thread_id: MessageThreadId? = null, val emoji: String? = null, val disable_notification: Boolean? = null, val protect_content: Boolean? = null, - val message_effect_id: String? = null, + val message_effect_id: MessageEffectId? = null, val reply_parameters: ReplyParameters? = null, val reply_markup: @Contextual KeyboardOption? = null, ) : TelegramRequest() { @@ -8539,13 +8535,13 @@ data class AnswerWebAppQueryRequest( * */ @Serializable data class SendInvoiceRequest( - val chat_id: String, + val chat_id: ChatId, val title: String, val description: String, val payload: String, val currency: String, val prices: List, - val message_thread_id: Long? = null, + val message_thread_id: MessageThreadId? = null, val provider_token: String? = null, val max_tip_amount: Long? = null, val suggested_tip_amounts: List? = null, @@ -8564,7 +8560,7 @@ data class SendInvoiceRequest( val is_flexible: Boolean? = null, val disable_notification: Boolean? = null, val protect_content: Boolean? = null, - val message_effect_id: String? = null, + val message_effect_id: MessageEffectId? = null, val reply_parameters: ReplyParameters? = null, val reply_markup: InlineKeyboardMarkup? = null, ) : TelegramRequest() { @@ -8760,13 +8756,13 @@ data class SetPassportDataErrorsRequest( * */ @Serializable data class SendGameRequest( - val chat_id: Long, + val chat_id: ChatId, val game_short_name: String, - val business_connection_id: String? = null, - val message_thread_id: Long? = null, + val business_connection_id: BusinessConnectionId? = null, + val message_thread_id: MessageThreadId? = null, val disable_notification: Boolean? = null, val protect_content: Boolean? = null, - val message_effect_id: String? = null, + val message_effect_id: MessageEffectId? = null, val reply_parameters: ReplyParameters? = null, val reply_markup: InlineKeyboardMarkup? = null, ) : TelegramRequest() { @@ -8796,8 +8792,8 @@ data class SetGameScoreRequest( val score: Long, val force: Boolean? = null, val disable_edit_message: Boolean? = null, - val chat_id: Long? = null, - val message_id: Long? = null, + val chat_id: ChatId? = null, + val message_id: MessageId? = null, val inline_message_id: String? = null, ) : TelegramRequest() { override fun toJsonForRequest() = json.encodeToString(serializer(), this) @@ -8822,8 +8818,8 @@ data class SetGameScoreRequest( @Serializable data class GetGameHighScoresRequest( val user_id: Long, - val chat_id: Long? = null, - val message_id: Long? = null, + val chat_id: ChatId? = null, + val message_id: MessageId? = null, val inline_message_id: String? = null, ) : TelegramRequest() { override fun toJsonForRequest() = json.encodeToString(serializer(), this) diff --git a/example/TelegramModelsOnly.kt b/example/TelegramModelsOnly.kt index d8773ee..133d7e9 100644 --- a/example/TelegramModelsOnly.kt +++ b/example/TelegramModelsOnly.kt @@ -449,17 +449,6 @@ data class Message( val reply_markup: InlineKeyboardMarkup? = null, ) : MaybeInaccessibleMessage() -/** - *

This object represents a unique message identifier.

- * - * @property message_id Unique message identifier - * - * @constructor Creates a [MessageId]. - * */ -data class MessageId( - val message_id: Long, -) : TelegramModel() - /** *

This object describes a message that was deleted or is otherwise inaccessible to the bot.

* diff --git a/src/main/kotlin/GeneratorKotlin.kt b/src/main/kotlin/GeneratorKotlin.kt index 2a8b760..d7f9f14 100644 --- a/src/main/kotlin/GeneratorKotlin.kt +++ b/src/main/kotlin/GeneratorKotlin.kt @@ -19,7 +19,8 @@ fun List.toKotlinModels(useKotlinXSerialization: Boolean) = buildStr appendLine("import kotlinx.serialization.encoding.Decoder") appendLine("import kotlinx.serialization.encoding.Encoder") appendLine("import kotlinx.serialization.json.*") - appendLine("import kotlinx.serialization.serializer\n") + appendLine("import kotlinx.serialization.serializer") + appendLine("import kotlin.jvm.JvmInline\n") appendLine("private val json = Json {") appendLine(" ignoreUnknownKeys = true") appendLine(" prettyPrint = true") @@ -27,14 +28,26 @@ fun List.toKotlinModels(useKotlinXSerialization: Boolean) = buildStr appendLine("}\n") appendLine("sealed class TelegramModel { abstract fun toJson(): String }") appendLine("private fun Decoder.tryDeserializers(vararg serializers: KSerializer): T {") - appendLine(" return serializers.firstNotNullOf {") - appendLine(" try {") - appendLine(" decodeSerializableValue(it)") - appendLine(" } catch (e: Exception) {") - appendLine(" null") - appendLine(" }") - appendLine(" }") + appendLine(" error(buildString {") + appendLine(" appendLine(\"Tried \${serializers.size} deserializers, but all failed!\")") + appendLine(" val jsonEl = decodeSerializableValue(JsonElement.serializer())") + appendLine(" serializers.firstNotNullOfOrNull {") + appendLine(" try {") + appendLine(" json.decodeFromJsonElement(it, jsonEl)") + appendLine(" } catch (e: Exception) {") + appendLine(" appendLine(\"\$it: \$e\")") + appendLine(" null") + appendLine(" }") + appendLine(" }?.also { return it }") + appendLine(" })") + appendLine("}") + appendLine("@Serializable @JvmInline value class ChatId(val stringValue: String) {") // chat_id + appendLine(" val longValue: Long get() = stringValue.toLong()") appendLine("}") + appendLine("@Serializable @JvmInline value class MessageId(val longValue: Long)") // message_id + appendLine("@Serializable @JvmInline value class BusinessConnectionId(val stringValue: String)") // business_connection_id + appendLine("@Serializable @JvmInline value class MessageThreadId(val longValue: Long)") // message_thread_id + appendLine("@Serializable @JvmInline value class MessageEffectId(val stringValue: String)") // message_effect_id } else { appendLine("sealed class TelegramModel") } @@ -180,7 +193,7 @@ private fun DocMethod.toKotlinDoc(showReturn: Boolean = true) = buildString { } if (showReturn) { appendLine(" *") - appendLine(" * @return [${returns.toKotlinType()}]") + appendLine(" * @return [${returns.toKotlinTypeNoValueClasses()}]") } append(" * */") } @@ -188,7 +201,14 @@ private fun DocMethod.toKotlinDoc(showReturn: Boolean = true) = buildString { private fun DocType.toKotlinDataClass(useKotlinXSerialization: Boolean) = buildString { appendLine("data class $name(") docFields.forEachIndexed { index, field -> - appendLine(" val ${field.name}: ${field.toKotlinType(useKotlinXSerialization)},") + appendLine( + " val ${field.name}: ${ + field.toKotlinType( + useInlineClasses = useKotlinXSerialization, + useContextualSerialization = useKotlinXSerialization, + ) + }," + ) } val superType = TelegramType.from(name).superType ?: "TelegramModel" if (useKotlinXSerialization) { @@ -206,7 +226,14 @@ private fun DocType.toKotlinDataClass(useKotlinXSerialization: Boolean) = buildS private fun DocMethod.toKotlinDataClass(useKotlinXSerialization: Boolean) = buildString { appendLine("data class ${name.capitalize()}Request(") docParameters.forEachIndexed { index, field -> - appendLine(" val ${field.name}: ${field.toKotlinType(useKotlinXSerialization)},") + appendLine( + " val ${field.name}: ${ + field.toKotlinType( + useInlineClasses = useKotlinXSerialization, + useContextualSerialization = useKotlinXSerialization, + ) + }," + ) } if (useKotlinXSerialization) { appendLine(") : TelegramRequest() {") @@ -225,13 +252,19 @@ private fun DocMethod.toKotlinDataClass(useKotlinXSerialization: Boolean) = buil private fun DocMethod.toKotlinRequestMethod() = buildString { val path = """"${"$"}basePath/$name"""" - val parameters = docParameters.map { f -> f.name }.joinToString(",\n") if (docParameters.isEmpty()) { append("suspend fun $name() = telegramGet($path, ${returns.toKotlinSerializerType()})") } else { appendLine("suspend fun $name(") docParameters.forEachIndexed { index, parameter -> - appendLine("${parameter.name}: ${parameter.toKotlinType(useContextualSerialization = false)},") + appendLine( + "${parameter.name}: ${ + parameter.toKotlinType( + useInlineClasses = true, + useContextualSerialization = false, + ) + }," + ) } appendLine(") = telegramPost(") appendLine(" $path,") @@ -245,15 +278,55 @@ private fun DocMethod.toKotlinRequestMethod() = buildString { } } -private fun DocField.toKotlinType(useContextualSerialization: Boolean) = - type.toKotlinType(if (useContextualSerialization) "@Contextual " else "") + if (required) "" else "? = null" +private fun DocField.toKotlinType(useInlineClasses: Boolean, useContextualSerialization: Boolean) = + type.toKotlinTypeWithValueClasses( + propertyName = name.takeIf { useInlineClasses }, + prefixPolymorphic = if (useContextualSerialization) "@Contextual " else "", + ) + if (required) "" else "? = null" -private fun DocParameter.toKotlinType(useContextualSerialization: Boolean) = - type.toKotlinType(if (useContextualSerialization) "@Contextual " else "") + if (required) "" else "? = null" +private fun DocParameter.toKotlinType(useInlineClasses: Boolean, useContextualSerialization: Boolean) = + type.toKotlinTypeWithValueClasses( + propertyName = name.takeIf { useInlineClasses }, + prefixPolymorphic = if (useContextualSerialization) "@Contextual " else "", + ) + if (required) "" else "? = null" + +private fun TelegramType.toKotlinTypeWithValueClasses( + propertyName: String?, + prefixPolymorphic: String = "", +): String { + return when (this) { + is TelegramType.ListType<*> -> "List<${ + elementType.toKotlinTypeWithValueClasses( + propertyName = propertyName, + prefixPolymorphic = prefixPolymorphic + ) + }>" + else -> when (propertyName) { + null -> toKotlinTypeNoValueClasses(prefixPolymorphic) + "chat_id" -> "ChatId" + "message_id" -> "MessageId" + "message_ids" -> "MessageId" + "business_connection_id" -> "BusinessConnectionId" + "message_thread_id" -> "MessageThreadId" + "message_effect_id" -> "MessageEffectId" + else -> when { + propertyName.endsWith("_chat_id") -> "ChatId" + else -> toKotlinTypeNoValueClasses(prefixPolymorphic) + } + } + } +} -private fun TelegramType.toKotlinType(prefixPolymorphic: String = ""): String = when (this) { +private fun TelegramType.toKotlinTypeNoValueClasses( + prefixPolymorphic: String = "", +): String = when (this) { is TelegramType.Declared -> name - is TelegramType.ListType<*> -> "List<${elementType.toKotlinType(prefixPolymorphic)}>" + is TelegramType.ListType<*> -> "List<${ + elementType.toKotlinTypeNoValueClasses( + prefixPolymorphic = prefixPolymorphic + ) + }>" + TelegramType.Integer -> "Long" TelegramType.StringType -> name TelegramType.Boolean -> name @@ -284,5 +357,5 @@ private fun TelegramType.toKotlinType(prefixPolymorphic: String = ""): String = private fun TelegramType.toKotlinSerializerType(): String = when (this) { is TelegramType.ListType<*> -> "ListSerializer(${elementType.toKotlinSerializerType()})" - else -> "${toKotlinType()}.serializer()" + else -> "${toKotlinTypeNoValueClasses()}.serializer()" } \ No newline at end of file diff --git a/src/main/kotlin/Main.kt b/src/main/kotlin/Main.kt index 050e475..b53936e 100644 --- a/src/main/kotlin/Main.kt +++ b/src/main/kotlin/Main.kt @@ -20,7 +20,7 @@ fun main() = runBlocking { type.copy( docFields = type.docFields.sortedByDescending { it.required } ) - }, + }.filter { it.name != "MessageId" }, docMethods = doc.docMethods.map { method -> method.copy( docParameters = method.docParameters.sortedByDescending { it.required }