From 2acb177ad62b5b043a930d3d63d9d9a74384931d Mon Sep 17 00:00:00 2001 From: InsanusMokrassar Date: Wed, 24 Jun 2020 20:51:48 +0600 Subject: [PATCH] first keyboards improvements --- CHANGELOG.md | 8 ++++++++ .../utils/types/buttons/InlineKeyboardMarkup.kt | 11 +++++++++++ .../utils/types/buttons/ReplyKeyboardMarkup.kt | 17 +++++++++++++++++ .../TelegramBotAPI/utils/Matrix.kt | 9 +++++++++ 4 files changed, 45 insertions(+) create mode 100644 TelegramBotAPI-extensions-utils/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/extensions/utils/types/buttons/InlineKeyboardMarkup.kt create mode 100644 TelegramBotAPI-extensions-utils/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/extensions/utils/types/buttons/ReplyKeyboardMarkup.kt diff --git a/CHANGELOG.md b/CHANGELOG.md index a5c8edb7cc..491ddf25e6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -51,6 +51,14 @@ ### 0.27.7 +* `TelegramBotAPI`: + * Operator function `unaryPlus` was added to `RowBuilder`. Now it is possible to write `row { +button }` + * Function `flatMatrix` was added for single-row columns + * Operator extension `RowBuilder#plus` was added to be able to write things like `row { this + button }` +* `TelegramBotAPI-extensions-utils`: + * Function `InlineKeyboardMarkup` for flat keyboards was added + * Function `ReplyKeyboardMarkup` for flat keyboards was added + ### 0.27.6 * `Common`: diff --git a/TelegramBotAPI-extensions-utils/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/extensions/utils/types/buttons/InlineKeyboardMarkup.kt b/TelegramBotAPI-extensions-utils/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/extensions/utils/types/buttons/InlineKeyboardMarkup.kt new file mode 100644 index 0000000000..9752514036 --- /dev/null +++ b/TelegramBotAPI-extensions-utils/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/extensions/utils/types/buttons/InlineKeyboardMarkup.kt @@ -0,0 +1,11 @@ +package com.github.insanusmokrassar.TelegramBotAPI.extensions.utils.types.buttons + +import com.github.insanusmokrassar.TelegramBotAPI.types.buttons.InlineKeyboardMarkup +import com.github.insanusmokrassar.TelegramBotAPI.types.buttons.InlineKeyboardButtons.InlineKeyboardButton +import com.github.insanusmokrassar.TelegramBotAPI.utils.* + +fun InlineKeyboardMarkup( + vararg buttons: InlineKeyboardButton +): InlineKeyboardMarkup = InlineKeyboardMarkup( + flatMatrix { buttons.forEach { +it } } +) diff --git a/TelegramBotAPI-extensions-utils/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/extensions/utils/types/buttons/ReplyKeyboardMarkup.kt b/TelegramBotAPI-extensions-utils/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/extensions/utils/types/buttons/ReplyKeyboardMarkup.kt new file mode 100644 index 0000000000..473bc131ce --- /dev/null +++ b/TelegramBotAPI-extensions-utils/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/extensions/utils/types/buttons/ReplyKeyboardMarkup.kt @@ -0,0 +1,17 @@ +package com.github.insanusmokrassar.TelegramBotAPI.extensions.utils.types.buttons + +import com.github.insanusmokrassar.TelegramBotAPI.types.buttons.ReplyKeyboardMarkup +import com.github.insanusmokrassar.TelegramBotAPI.types.buttons.KeyboardButton +import com.github.insanusmokrassar.TelegramBotAPI.utils.flatMatrix + +fun ReplyKeyboardMarkup( + vararg buttons: KeyboardButton, + resizeKeyboard: Boolean? = null, + oneTimeKeyboard: Boolean? = null, + selective: Boolean? = null +): ReplyKeyboardMarkup = ReplyKeyboardMarkup( + flatMatrix { buttons.forEach { +it } }, + resizeKeyboard, + oneTimeKeyboard, + selective +) diff --git a/TelegramBotAPI/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/utils/Matrix.kt b/TelegramBotAPI/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/utils/Matrix.kt index 2469e74da7..8b02d06f7a 100644 --- a/TelegramBotAPI/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/utils/Matrix.kt +++ b/TelegramBotAPI/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/utils/Matrix.kt @@ -18,12 +18,21 @@ fun matrix(block: MatrixBuilder.() -> Unit): Matrix { return MatrixBuilder().also(block).matrix } +fun flatMatrix(block: RowBuilder.() -> Unit): Matrix { + return MatrixBuilder().apply { + row(block) + }.matrix +} + +operator fun RowBuilder.plus(t: T) = add(t) + class RowBuilder { private val mutRow: MutableList = ArrayList() val row: List get() = mutRow fun add(t: T) = mutRow.add(t) + operator fun T.unaryPlus() = add(this) } class MatrixBuilder {