Fix Support for Google Places values in venue-related methods and types
MODIFY
CHANGELOG.md
CHANGELOG.md
* Update all classes which must have `entities`/`caption_entities` fields
* New request `CopyMessage`
* New extension `List<TextSource>#makeString` for more comfortable work with new api with entities
+ * Support for Google Places identifiers for venues
* `API`:
* Extensions `TelegramBot#pinChatMessage` now support any `Chat` and `Message`s from any `Chat`
* New extensions `TelegramBot#unpinAllChatMessages`

MODIFY
tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/CommonAbstracts/CommonVenueData.kt
tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/CommonAbstracts/CommonVenueData.kt
package dev.inmo.tgbotapi.CommonAbstracts
+import dev.inmo.tgbotapi.types.FoursquareId
+import dev.inmo.tgbotapi.types.FoursquareType
+import dev.inmo.tgbotapi.types.GooglePlaceId
+import dev.inmo.tgbotapi.types.GooglePlaceType
+
interface CommonVenueData : Titled {
override val title: String
val address: String
- val foursquareId: String?
- val foursquareType: String? // TODO:: Rewrite with enum or interface
+ val foursquareId: FoursquareId?
+ val foursquareType: FoursquareType? // TODO:: Rewrite with enum or interface
+ val googlePlaceId: GooglePlaceId?
+ val googlePlaceType: GooglePlaceType?
}

MODIFY
tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/requests/send/SendVenue.kt
tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/requests/send/SendVenue.kt
@@ -25,7 +25,13 @@ data class SendVenue(
@SerialName(addressField)
val address: String,
@SerialName(foursquareIdField)
- val foursquareId: String? = null,
+ val foursquareId: FoursquareId? = null,
+ @SerialName(foursquareTypeField)
+ val foursquareType: FoursquareType? = null,
+ @SerialName(googlePlaceIdField)
+ val googlePlaceId: GooglePlaceId? = null,
+ @SerialName(googlePlaceTypeField)
+ val googlePlaceType: GooglePlaceType? = null,
@SerialName(disableNotificationField)
override val disableNotification: Boolean = false,
@SerialName(replyToMessageIdField)
@@ -47,16 +53,19 @@ data class SendVenue(
allowSendingWithoutReply: Boolean? = null,
replyMarkup: KeyboardMarkup? = null
): this(
- chatId,
- venue.location.latitude,
- venue.location.longitude,
- venue.title,
- venue.address,
- venue.foursquareId,
- disableNotification,
- replyToMessageId,
- allowSendingWithoutReply,
- replyMarkup
+ chatId = chatId,
+ latitude = venue.location.latitude,
+ longitude = venue.location.longitude,
+ title = venue.title,
+ address = venue.address,
+ foursquareId = venue.foursquareId,
+ foursquareType = venue.foursquareType,
+ googlePlaceId = venue.googlePlaceId,
+ googlePlaceType = venue.googlePlaceType,
+ disableNotification = disableNotification,
+ replyToMessageId = replyToMessageId,
+ allowSendingWithoutReply = allowSendingWithoutReply,
+ replyMarkup = replyMarkup
)
override fun method(): String = "sendVenue"

MODIFY
tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/Common.kt
tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/Common.kt
@@ -24,6 +24,8 @@ typealias FileUniqueId = String
typealias DiceResult = Int
typealias FoursquareId = String
typealias FoursquareType = String
+typealias GooglePlaceId = String
+typealias GooglePlaceType = String
typealias Seconds = Int
typealias LongSeconds = Long
@@ -126,6 +128,8 @@ const val showAlertField = "show_alert"
const val cachedTimeField = "cached_time"
const val foursquareIdField = "foursquare_id"
const val foursquareTypeField = "foursquare_type"
+const val googlePlaceIdField = "google_place_id"
+const val googlePlaceTypeField = "google_place_type"
const val untilDateField = "until_date"
const val errorMessageField = "error_message"
const val messageTextField = "message_text"

MODIFY
tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/InlineQueries/InlineQueryResult/InlineQueryResultVenue.kt
tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/InlineQueries/InlineQueryResult/InlineQueryResultVenue.kt
@@ -22,9 +22,13 @@ data class InlineQueryResultVenue(
@SerialName(addressField)
override val address: String,
@SerialName(foursquareIdField)
- override val foursquareId: String? = null,
+ override val foursquareId: FoursquareId? = null,
@SerialName(foursquareTypeField)
- override val foursquareType: String? = null,
+ override val foursquareType: FoursquareType? = null,
+ @SerialName(googlePlaceIdField)
+ override val googlePlaceId: GooglePlaceId? = null,
+ @SerialName(googlePlaceTypeField)
+ override val googlePlaceType: GooglePlaceType? = null,
@SerialName(thumbUrlField)
override val thumbUrl: String? = null,
@SerialName(thumbWidthField)

MODIFY
tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/InlineQueries/InputMessageContent/InputVenueMessageContent.kt
tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/InlineQueries/InputMessageContent/InputVenueMessageContent.kt
@@ -18,7 +18,11 @@ data class InputVenueMessageContent(
@SerialName(addressField)
override val address: String,
@SerialName(foursquareIdField)
- override val foursquareId: String? = null,
+ override val foursquareId: FoursquareId? = null,
@SerialName(foursquareTypeField)
- override val foursquareType: String? = null
+ override val foursquareType: FoursquareType? = null,
+ @SerialName(googlePlaceIdField)
+ override val googlePlaceId: GooglePlaceId? = null,
+ @SerialName(googlePlaceTypeField)
+ override val googlePlaceType: GooglePlaceType? = null
) : Locationed, CommonVenueData, InputMessageContent

MODIFY
tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/venue/Venue.kt
tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/venue/Venue.kt
@@ -18,5 +18,9 @@ data class Venue(
@SerialName(foursquareIdField)
override val foursquareId: FoursquareId? = null,
@SerialName(foursquareTypeField)
- override val foursquareType: FoursquareType? = null
+ override val foursquareType: FoursquareType? = null,
+ @SerialName(googlePlaceIdField)
+ override val googlePlaceId: GooglePlaceId? = null,
+ @SerialName(googlePlaceTypeField)
+ override val googlePlaceType: GooglePlaceType? = null
) : CommonVenueData, Locationed by location

MODIFY
tgbotapi.extensions.api/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/api/send/SendVenue.kt
tgbotapi.extensions.api/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/api/send/SendVenue.kt
@@ -3,6 +3,10 @@ package dev.inmo.tgbotapi.extensions.api.send
import dev.inmo.tgbotapi.bot.TelegramBot
import dev.inmo.tgbotapi.requests.send.SendVenue
import dev.inmo.tgbotapi.types.ChatIdentifier
+import dev.inmo.tgbotapi.types.FoursquareId
+import dev.inmo.tgbotapi.types.FoursquareType
+import dev.inmo.tgbotapi.types.GooglePlaceId
+import dev.inmo.tgbotapi.types.GooglePlaceType
import dev.inmo.tgbotapi.types.MessageIdentifier
import dev.inmo.tgbotapi.types.buttons.KeyboardMarkup
import dev.inmo.tgbotapi.types.chat.abstracts.Chat
@@ -16,14 +20,29 @@ suspend fun TelegramBot.sendVenue(
longitude: Double,
title: String,
address: String,
- foursquareId: String? = null,
+ foursquareId: FoursquareId? = null,
+ foursquareType: FoursquareType? = null,
+ googlePlaceId: GooglePlaceId? = null,
+ googlePlaceType: GooglePlaceType? = null,
disableNotification: Boolean = false,
replyToMessageId: MessageIdentifier? = null,
allowSendingWithoutReply: Boolean? = null,
replyMarkup: KeyboardMarkup? = null
) = execute(
SendVenue(
- chatId, latitude, longitude, title, address, foursquareId, disableNotification, replyToMessageId, allowSendingWithoutReply, replyMarkup
+ chatId = chatId,
+ latitude = latitude,
+ longitude = longitude,
+ title = title,
+ address = address,
+ foursquareId = foursquareId,
+ foursquareType = foursquareType,
+ googlePlaceId = googlePlaceId,
+ googlePlaceType = googlePlaceType,
+ disableNotification = disableNotification,
+ replyToMessageId = replyToMessageId,
+ allowSendingWithoutReply = allowSendingWithoutReply,
+ replyMarkup = replyMarkup
)
)
@@ -33,13 +52,28 @@ suspend fun TelegramBot.sendVenue(
longitude: Double,
title: String,
address: String,
- foursquareId: String? = null,
+ foursquareId: FoursquareId? = null,
+ foursquareType: FoursquareType? = null,
+ googlePlaceId: GooglePlaceId? = null,
+ googlePlaceType: GooglePlaceType? = null,
disableNotification: Boolean = false,
replyToMessageId: MessageIdentifier? = null,
allowSendingWithoutReply: Boolean? = null,
replyMarkup: KeyboardMarkup? = null
) = sendVenue(
- chat.id, latitude, longitude, title, address, foursquareId, disableNotification, replyToMessageId, allowSendingWithoutReply, replyMarkup
+ chatId = chat.id,
+ latitude = latitude,
+ longitude = longitude,
+ title = title,
+ address = address,
+ foursquareId = foursquareId,
+ foursquareType = foursquareType,
+ googlePlaceId = googlePlaceId,
+ googlePlaceType = googlePlaceType,
+ disableNotification = disableNotification,
+ replyToMessageId = replyToMessageId,
+ allowSendingWithoutReply = allowSendingWithoutReply,
+ replyMarkup = replyMarkup
)
suspend fun TelegramBot.sendVenue(
@@ -47,13 +81,28 @@ suspend fun TelegramBot.sendVenue(
location: StaticLocation,
title: String,
address: String,
- foursquareId: String? = null,
+ foursquareId: FoursquareId? = null,
+ foursquareType: FoursquareType? = null,
+ googlePlaceId: GooglePlaceId? = null,
+ googlePlaceType: GooglePlaceType? = null,
disableNotification: Boolean = false,
replyToMessageId: MessageIdentifier? = null,
allowSendingWithoutReply: Boolean? = null,
replyMarkup: KeyboardMarkup? = null
) = sendVenue(
- chatId, location.latitude, location.longitude, title, address, foursquareId, disableNotification, replyToMessageId, allowSendingWithoutReply, replyMarkup
+ chatId = chatId,
+ latitude = location.latitude,
+ longitude = location.longitude,
+ title = title,
+ address = address,
+ foursquareId = foursquareId,
+ foursquareType = foursquareType,
+ googlePlaceId = googlePlaceId,
+ googlePlaceType = googlePlaceType,
+ disableNotification = disableNotification,
+ replyToMessageId = replyToMessageId,
+ allowSendingWithoutReply = allowSendingWithoutReply,
+ replyMarkup = replyMarkup
)
suspend fun TelegramBot.sendVenue(
@@ -61,13 +110,28 @@ suspend fun TelegramBot.sendVenue(
location: StaticLocation,
title: String,
address: String,
- foursquareId: String? = null,
+ foursquareId: FoursquareId? = null,
+ foursquareType: FoursquareType? = null,
+ googlePlaceId: GooglePlaceId? = null,
+ googlePlaceType: GooglePlaceType? = null,
disableNotification: Boolean = false,
replyToMessageId: MessageIdentifier? = null,
allowSendingWithoutReply: Boolean? = null,
replyMarkup: KeyboardMarkup? = null
) = sendVenue(
- chat.id, location.latitude, location.longitude, title, address, foursquareId, disableNotification, replyToMessageId, allowSendingWithoutReply, replyMarkup
+ chatId = chat.id,
+ latitude = location.latitude,
+ longitude = location.longitude,
+ title = title,
+ address = address,
+ foursquareId = foursquareId,
+ foursquareType = foursquareType,
+ googlePlaceId = googlePlaceId,
+ googlePlaceType = googlePlaceType,
+ disableNotification = disableNotification,
+ replyToMessageId = replyToMessageId,
+ allowSendingWithoutReply = allowSendingWithoutReply,
+ replyMarkup = replyMarkup
)
suspend fun TelegramBot.sendVenue(
@@ -79,7 +143,12 @@ suspend fun TelegramBot.sendVenue(
replyMarkup: KeyboardMarkup? = null
) = execute(
SendVenue(
- chatId, venue, disableNotification, replyToMessageId, allowSendingWithoutReply, replyMarkup
+ chatId = chatId,
+ venue = venue,
+ disableNotification = disableNotification,
+ replyToMessageId = replyToMessageId,
+ allowSendingWithoutReply = allowSendingWithoutReply,
+ replyMarkup = replyMarkup
)
)
@@ -91,7 +160,12 @@ suspend fun TelegramBot.sendVenue(
allowSendingWithoutReply: Boolean? = null,
replyMarkup: KeyboardMarkup? = null
) = sendVenue(
- chat.id, venue, disableNotification, replyToMessageId, allowSendingWithoutReply, replyMarkup
+ chatId = chat.id,
+ venue = venue,
+ disableNotification = disableNotification,
+ replyToMessageId = replyToMessageId,
+ allowSendingWithoutReply = allowSendingWithoutReply,
+ replyMarkup = replyMarkup
)
suspend inline fun TelegramBot.reply(
@@ -100,12 +174,27 @@ suspend inline fun TelegramBot.reply(
longitude: Double,
title: String,
address: String,
- foursquareId: String? = null,
+ foursquareId: FoursquareId? = null,
+ foursquareType: FoursquareType? = null,
+ googlePlaceId: GooglePlaceId? = null,
+ googlePlaceType: GooglePlaceType? = null,
disableNotification: Boolean = false,
allowSendingWithoutReply: Boolean? = null,
replyMarkup: KeyboardMarkup? = null
) = sendVenue(
- to.chat, latitude, longitude, title, address, foursquareId, disableNotification, to.messageId, allowSendingWithoutReply, replyMarkup
+ chat = to.chat,
+ latitude = latitude,
+ longitude = longitude,
+ title = title,
+ address = address,
+ foursquareId = foursquareId,
+ foursquareType = foursquareType,
+ googlePlaceId = googlePlaceId,
+ googlePlaceType = googlePlaceType,
+ disableNotification = disableNotification,
+ replyToMessageId = to.messageId,
+ allowSendingWithoutReply = allowSendingWithoutReply,
+ replyMarkup = replyMarkup
)
suspend inline fun TelegramBot.reply(
@@ -113,12 +202,27 @@ suspend inline fun TelegramBot.reply(
location: StaticLocation,
title: String,
address: String,
- foursquareId: String? = null,
+ foursquareId: FoursquareId? = null,
+ foursquareType: FoursquareType? = null,
+ googlePlaceId: GooglePlaceId? = null,
+ googlePlaceType: GooglePlaceType? = null,
disableNotification: Boolean = false,
allowSendingWithoutReply: Boolean? = null,
replyMarkup: KeyboardMarkup? = null
) = sendVenue(
- to.chat, location, title, address, foursquareId, disableNotification, to.messageId, allowSendingWithoutReply, replyMarkup
+ chat = to.chat,
+ latitude = location.latitude,
+ longitude = location.longitude,
+ title = title,
+ address = address,
+ foursquareId = foursquareId,
+ foursquareType = foursquareType,
+ googlePlaceId = googlePlaceId,
+ googlePlaceType = googlePlaceType,
+ disableNotification = disableNotification,
+ replyToMessageId = to.messageId,
+ allowSendingWithoutReply = allowSendingWithoutReply,
+ replyMarkup = replyMarkup
)
suspend inline fun TelegramBot.reply(
@@ -128,5 +232,10 @@ suspend inline fun TelegramBot.reply(
allowSendingWithoutReply: Boolean? = null,
replyMarkup: KeyboardMarkup? = null
) = sendVenue(
- to.chat, venue, disableNotification, to.messageId, allowSendingWithoutReply, replyMarkup
+ chat = to.chat,
+ venue = venue,
+ disableNotification = disableNotification,
+ replyToMessageId = to.messageId,
+ allowSendingWithoutReply = allowSendingWithoutReply,
+ replyMarkup = replyMarkup
)

MODIFY
tgbotapi.extensions.utils/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/utils/extensions/venue/Foursquare.kt
tgbotapi.extensions.utils/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/utils/extensions/venue/Foursquare.kt
@@ -16,7 +16,7 @@ fun Venue(
title: String,
address: String,
foursquare: Foursquare
-) = Venue(location, title, address, foursquare.id, foursquare.type)
+) = Venue(location, title, address, foursquareId = foursquare.id, foursquareType = foursquare.type)
@Serializable
data class Foursquare(

ADD
tgbotapi.extensions.utils/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/utils/extensions/venue/Google.kt
+package dev.inmo.tgbotapi.extensions.utils.extensions.venue
+
+import dev.inmo.tgbotapi.types.*
+import dev.inmo.tgbotapi.types.location.StaticLocation
+import dev.inmo.tgbotapi.types.venue.Venue
+import kotlinx.serialization.SerialName
+import kotlinx.serialization.Serializable
+
+val Venue.googlePlace: GooglePlace?
+ get() = googlePlaceId?.let {
+ GooglePlace(it, googlePlaceType)
+ }
+
+fun Venue(
+ location: StaticLocation,
+ title: String,
+ address: String,
+ googlePlace: GooglePlace
+) = Venue(location, title, address, googlePlaceId = googlePlace.id, googlePlaceType = googlePlace.type)
+
+@Serializable
+data class GooglePlace(
+ @SerialName(googlePlaceIdField)
+ val id: GooglePlaceId,
+ @SerialName(googlePlaceTypeField)
+ val type: GooglePlaceType? = null
+)

Fix #190: Support for Google Places values in venue-related methods and types