diff --git a/KeyboardsBot/KeyboardsBotLib/src/commonMain/kotlin/KeyboardsBot.kt b/KeyboardsBot/KeyboardsBotLib/src/commonMain/kotlin/KeyboardsBot.kt index 3f69b47..b808b8e 100644 --- a/KeyboardsBot/KeyboardsBotLib/src/commonMain/kotlin/KeyboardsBot.kt +++ b/KeyboardsBot/KeyboardsBotLib/src/commonMain/kotlin/KeyboardsBot.kt @@ -4,12 +4,17 @@ import dev.inmo.tgbotapi.bot.ktor.telegramBot import dev.inmo.tgbotapi.extensions.api.answers.answer import dev.inmo.tgbotapi.extensions.api.bot.setMyCommands import dev.inmo.tgbotapi.extensions.api.edit.edit +import dev.inmo.tgbotapi.extensions.api.edit.editMessageText +import dev.inmo.tgbotapi.extensions.api.edit.reply_markup.editMessageReplyMarkup +import dev.inmo.tgbotapi.extensions.api.edit.text.editMessageText import dev.inmo.tgbotapi.extensions.api.send.* import dev.inmo.tgbotapi.extensions.behaviour_builder.* import dev.inmo.tgbotapi.extensions.behaviour_builder.triggers_handling.* import dev.inmo.tgbotapi.extensions.utils.types.buttons.* import dev.inmo.tgbotapi.extensions.utils.withContent import dev.inmo.tgbotapi.types.BotCommand +import dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.InlineQueryResultArticle +import dev.inmo.tgbotapi.types.InlineQueries.InputMessageContent.InputTextMessageContent import dev.inmo.tgbotapi.types.message.content.TextContent import dev.inmo.tgbotapi.utils.* import kotlinx.coroutines.* @@ -55,6 +60,16 @@ fun InlineKeyboardBuilder.includePageButtons(page: Int, count: Int) { dataButton(">>", "$count $count") } } + row { + inlineQueryInChosenChatButton( + "Send somebody page", + query = "$page $count", + allowUsers = true, + allowBots = true, + allowGroups = true, + allowChannels = true, + ) + } } suspend fun activateKeyboardsBot( @@ -71,9 +86,7 @@ suspend fun activateKeyboardsBot( reply( message, replyMarkup = inlineKeyboard { - row { - includePageButtons(1, numberOfPages) - } + includePageButtons(1, numberOfPages) } ) { regular("Your inline keyboard with $numberOfPages pages") @@ -92,15 +105,48 @@ suspend fun activateKeyboardsBot( return@onMessageDataCallbackQuery }, replyMarkup = inlineKeyboard { - row { - includePageButtons(page, count) - } + includePageButtons(page, count) } ) { regular("This is $page of $count") } answer(it) } + onInlineMessageIdDataCallbackQuery { + val (page, count) = it.data.parsePageAndCount() ?: it.let { + answer(it, "Unsupported data :(") + return@onInlineMessageIdDataCallbackQuery + } + + editMessageText( + it.inlineMessageId, + replyMarkup = inlineKeyboard { + includePageButtons(page, count) + } + ) { + regular("This is $page of $count") + } + answer(it) + } + + onBaseInlineQuery { + val page = it.query.takeWhile { it.isDigit() }.toIntOrNull() ?: return@onBaseInlineQuery + val count = it.query.removePrefix(page.toString()).dropWhile { !it.isDigit() }.takeWhile { it.isDigit() }.toIntOrNull() ?: return@onBaseInlineQuery + + answer( + it, + results = listOf( + InlineQueryResultArticle( + it.query, + "Send buttons", + InputTextMessageContent("It is sent via inline mode inline buttons"), + replyMarkup = inlineKeyboard { + includePageButtons(page, count) + } + ) + ) + ) + } onUnhandledCommand { reply( diff --git a/WebApp/src/jvmMain/kotlin/WebAppServer.kt b/WebApp/src/jvmMain/kotlin/WebAppServer.kt index 0b800bf..9423482 100644 --- a/WebApp/src/jvmMain/kotlin/WebAppServer.kt +++ b/WebApp/src/jvmMain/kotlin/WebAppServer.kt @@ -7,6 +7,7 @@ import dev.inmo.tgbotapi.extensions.api.send.* import dev.inmo.tgbotapi.extensions.api.telegramBot import dev.inmo.tgbotapi.extensions.behaviour_builder.* import dev.inmo.tgbotapi.extensions.behaviour_builder.triggers_handling.* +import dev.inmo.tgbotapi.extensions.utils.formatting.makeTelegramStartattach import dev.inmo.tgbotapi.extensions.utils.types.buttons.* import dev.inmo.tgbotapi.types.BotCommand import dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.InlineQueryResultArticle @@ -73,6 +74,7 @@ suspend fun main(vararg args: String) { bot.buildBehaviourWithLongPolling( defaultExceptionsHandler = { it.printStackTrace() } ) { + val me = getMe() onCommand("reply_markup") { reply( it, @@ -97,6 +99,18 @@ suspend fun main(vararg args: String) { ) } + onCommand("attachment_menu") { + reply( + it, + , + replyMarkup = inlineKeyboard { + row { + webAppButton("Open WebApp", WebAppInfo(args[1])) + } + } + + ) + } onUnhandledCommand { reply( it, @@ -106,6 +120,9 @@ suspend fun main(vararg args: String) { } ) } + onWriteAccessAllowed(initialFilter = { it.chatEvent.webAppName != null }) { + send(it.chat, "Thanks for adding ${it.chatEvent.webAppName} to the attachment menu") + } setMyCommands( BotCommand("reply_markup", "Use to get reply markup keyboard with web app trigger"), BotCommand("inline", "Use to get inline keyboard with web app trigger"),