mirror of
https://github.com/InsanusMokrassar/TelegramBotAPI-examples.git
synced 2026-07-01 15:45:14 +00:00
improve examples
This commit is contained in:
@@ -6,22 +6,25 @@ import dev.inmo.micro_utils.coroutines.subscribeLoggingDropExceptions
|
|||||||
import dev.inmo.tgbotapi.extensions.api.answers.answer
|
import dev.inmo.tgbotapi.extensions.api.answers.answer
|
||||||
import dev.inmo.tgbotapi.extensions.api.bot.setMyCommands
|
import dev.inmo.tgbotapi.extensions.api.bot.setMyCommands
|
||||||
import dev.inmo.tgbotapi.extensions.api.send.reply
|
import dev.inmo.tgbotapi.extensions.api.send.reply
|
||||||
import dev.inmo.tgbotapi.extensions.api.send.send
|
|
||||||
import dev.inmo.tgbotapi.extensions.api.send.sendRichMessage
|
import dev.inmo.tgbotapi.extensions.api.send.sendRichMessage
|
||||||
import dev.inmo.tgbotapi.extensions.api.send.sendRichMessageDraft
|
import dev.inmo.tgbotapi.extensions.api.send.sendRichMessageDraft
|
||||||
import dev.inmo.tgbotapi.extensions.behaviour_builder.expectations.waitRichMessage
|
import dev.inmo.tgbotapi.extensions.behaviour_builder.expectations.waitRichMessage
|
||||||
import dev.inmo.tgbotapi.extensions.behaviour_builder.telegramBotWithBehaviourAndLongPolling
|
import dev.inmo.tgbotapi.extensions.behaviour_builder.telegramBotWithBehaviourAndLongPolling
|
||||||
import dev.inmo.tgbotapi.extensions.behaviour_builder.triggers_handling.onBaseInlineQuery
|
import dev.inmo.tgbotapi.extensions.behaviour_builder.triggers_handling.onBaseInlineQuery
|
||||||
import dev.inmo.tgbotapi.extensions.behaviour_builder.triggers_handling.onCommand
|
import dev.inmo.tgbotapi.extensions.behaviour_builder.triggers_handling.onCommand
|
||||||
|
import dev.inmo.tgbotapi.extensions.behaviour_builder.triggers_handling.onGuestRequestMessage
|
||||||
import dev.inmo.tgbotapi.extensions.behaviour_builder.triggers_handling.onRichMessage
|
import dev.inmo.tgbotapi.extensions.behaviour_builder.triggers_handling.onRichMessage
|
||||||
import dev.inmo.tgbotapi.extensions.utils.baseSentMessageUpdateOrNull
|
import dev.inmo.tgbotapi.extensions.utils.baseSentMessageUpdateOrNull
|
||||||
import dev.inmo.tgbotapi.extensions.utils.contentMessageOrNull
|
import dev.inmo.tgbotapi.extensions.utils.contentMessageOrNull
|
||||||
import dev.inmo.tgbotapi.extensions.utils.onlyRichMessageContentMessages
|
import dev.inmo.tgbotapi.extensions.utils.onlyRichMessageContentMessages
|
||||||
|
import dev.inmo.tgbotapi.extensions.utils.withContentOrNull
|
||||||
import dev.inmo.tgbotapi.requests.edit.text.EditChatMessageRichText
|
import dev.inmo.tgbotapi.requests.edit.text.EditChatMessageRichText
|
||||||
import dev.inmo.tgbotapi.types.BotCommand
|
import dev.inmo.tgbotapi.types.BotCommand
|
||||||
import dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.InlineQueryResultArticle
|
import dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.InlineQueryResultArticle
|
||||||
import dev.inmo.tgbotapi.types.InlineQueries.InputMessageContent.InputRichMessageContent
|
import dev.inmo.tgbotapi.types.InlineQueries.InputMessageContent.InputRichMessageContent
|
||||||
import dev.inmo.tgbotapi.types.InlineQueryId
|
import dev.inmo.tgbotapi.types.InlineQueryId
|
||||||
|
import dev.inmo.tgbotapi.types.message.content.TextContent
|
||||||
|
import dev.inmo.tgbotapi.types.message.textsources.BotCommandTextSource
|
||||||
import dev.inmo.tgbotapi.types.rich.InputRichMessageHTML
|
import dev.inmo.tgbotapi.types.rich.InputRichMessageHTML
|
||||||
import dev.inmo.tgbotapi.types.rich.InputRichMessageMarkdown
|
import dev.inmo.tgbotapi.types.rich.InputRichMessageMarkdown
|
||||||
import dev.inmo.tgbotapi.types.toChatId
|
import dev.inmo.tgbotapi.types.toChatId
|
||||||
@@ -63,114 +66,7 @@ suspend fun main(vararg args: String) {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
telegramBotWithBehaviourAndLongPolling(
|
val testMarkdownText = """
|
||||||
botToken,
|
|
||||||
CoroutineScope(Dispatchers.IO),
|
|
||||||
testServer = isTestServer
|
|
||||||
) {
|
|
||||||
// sendRichMessage with HTML-formatted content
|
|
||||||
onCommand("rich_html") {
|
|
||||||
sendRichMessage(
|
|
||||||
it.chat.id,
|
|
||||||
// InputRichMessageHTML factory — content described using HTML formatting
|
|
||||||
InputRichMessageHTML(
|
|
||||||
"""
|
|
||||||
<a name="chapter-0"></a>
|
|
||||||
<b>bold text</b>, <strong>bold text</strong>
|
|
||||||
<i>italic text</i>, <em>italic text</em>
|
|
||||||
<u>underlined text</u>, <ins>underlined text</ins>
|
|
||||||
<s>strikethrough text</s>, <strike>strikethrough text</strike>, <del>strikethrough text</del>
|
|
||||||
<code>inline fixed-width code</code>
|
|
||||||
<mark>marked text</mark>
|
|
||||||
<sub>subscript text</sub>
|
|
||||||
<sup>superscript text</sup>
|
|
||||||
<tg-spoiler>spoiler</tg-spoiler>
|
|
||||||
|
|
||||||
<a href="#note-1">Reference</a>
|
|
||||||
<a href="https://t.me/">inline URL</a>
|
|
||||||
<a href="mailto:user@example.com">inline e-mail</a>
|
|
||||||
<a href="tel:+123456789">inline phone number</a>
|
|
||||||
<a href="tg://user?id=123456789">inline mention of a user</a>
|
|
||||||
<a href="#chapter-1">in-document link</a>
|
|
||||||
<a name="chapter-1"></a>
|
|
||||||
|
|
||||||
<tg-reference name="note-1">Referenced text</tg-reference>
|
|
||||||
<tg-emoji emoji-id="5368324170671202286">👍</tg-emoji>
|
|
||||||
<img src="tg://emoji?id=5368324170671202286" alt="👍"/>
|
|
||||||
<tg-time unix="1647531900" format="wDT">22:45 tomorrow</tg-time>
|
|
||||||
<tg-math>x^2 + y^2</tg-math>
|
|
||||||
|
|
||||||
#hashtag ${'$'}USD +12345678901, card: 4242 4242 4242 4242, https://t.me t.me a@t.me /command @username
|
|
||||||
|
|
||||||
all the text above was on the same line
|
|
||||||
|
|
||||||
<h1>Heading 1</h1>
|
|
||||||
<h2>Heading 2</h2>
|
|
||||||
<h3>Heading 3</h3>
|
|
||||||
<h4>Heading 4</h4>
|
|
||||||
<h5>Heading 5</h5>
|
|
||||||
<h6>Heading 6</h6>
|
|
||||||
|
|
||||||
<a name="chapter-2"></a>
|
|
||||||
|
|
||||||
<p>Paragraph text</p>
|
|
||||||
<pre>pre-formatted fixed-width code block</pre>
|
|
||||||
<pre><code class="language-python"> print('pre-formatted fixed-width code block written in the Python programming language')</code></pre>
|
|
||||||
<footer>Footer text</footer>
|
|
||||||
<hr/>
|
|
||||||
<ul><li>unordered list item</li></ul>
|
|
||||||
<ol><li>ordered list item</li></ol>
|
|
||||||
<ol start="3" type="a" reversed><li>ordered list item</li></ol>
|
|
||||||
<ol><li value="7" type="i">ordered list item with explicit number</li></ol>
|
|
||||||
<ul>
|
|
||||||
<li><input type="checkbox" checked>Checked checkbox</li>
|
|
||||||
<li><input type="checkbox">Unchecked checkbox</li>
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
<blockquote>Block quotation started<br>Block quotation continued<br>The last line of the block quotation<cite>The Author</cite></blockquote>
|
|
||||||
<aside>Pull quote<cite>The Author</cite></aside>
|
|
||||||
|
|
||||||
<img src="https://telegram.org/example/photo.jpg"/>
|
|
||||||
<video src="https://telegram.org/example/video.mp4"></video>
|
|
||||||
<audio src="https://telegram.org/example/audio.mp3"></audio>
|
|
||||||
<audio src="https://telegram.org/example/audio.ogg"></audio>
|
|
||||||
<video src="https://telegram.org/example/animation.gif"></video>
|
|
||||||
|
|
||||||
<figure><img src="https://telegram.org/example/photo.jpg" tg-spoiler/><figcaption>Photo caption<cite>Photo credit</cite></figcaption></figure>
|
|
||||||
<figure><video src="https://telegram.org/example/video.mp4" tg-spoiler></video><figcaption>Video caption</figcaption></figure>
|
|
||||||
<figure><audio src="https://telegram.org/example/audio.mp3"></audio><figcaption>Audio caption</figcaption></figure>
|
|
||||||
<figure><audio src="https://telegram.org/example/audio.ogg"></audio><figcaption>Voice note caption</figcaption></figure>
|
|
||||||
<figure><video src="https://telegram.org/example/animation.gif" tg-spoiler></video><figcaption>Animation caption</figcaption></figure>
|
|
||||||
|
|
||||||
<tg-map lat="41.9" long="12.5" zoom="14"/>
|
|
||||||
<figure><tg-map lat="41.9" long="12.5" zoom="14"/><figcaption>Map caption</figcaption></figure>
|
|
||||||
|
|
||||||
<tg-collage><img src="https://telegram.org/example/photo.jpg"/><video src="https://telegram.org/example/video.mp4"/></tg-collage>
|
|
||||||
<tg-collage><video src="https://telegram.org/example/video.mp4"/><img src="https://telegram.org/example/photo.jpg"/><figcaption>Collage caption</figcaption></tg-collage>
|
|
||||||
<tg-slideshow><img src="https://telegram.org/example/photo.jpg"/><video src="https://telegram.org/example/video.mp4"/></tg-slideshow>
|
|
||||||
<tg-slideshow><video src="https://telegram.org/example/video.mp4"/><img src="https://telegram.org/example/photo.jpg"/><figcaption>Slideshow caption</figcaption></tg-slideshow>
|
|
||||||
|
|
||||||
<table><tr><th>Header 1</th><th>Header 2</th></tr><tr><td>Value 1</td><td>Value 2</td></tr></table>
|
|
||||||
<table bordered striped><caption>Table caption</caption>
|
|
||||||
<tr><td colspan="2" rowspan="2" align="left">Value</td><td align="center">Value2</td><td align="right">Value3</td></tr>
|
|
||||||
<tr><td valign="top">Value4</td><td valign="middle">Value5</td><td valign="bottom">Value6</td></tr>
|
|
||||||
<tr><td>Value7</td></tr></table>
|
|
||||||
|
|
||||||
<details><summary>Title</summary>Content</details>
|
|
||||||
<details open><summary>Title</summary>Content</details>
|
|
||||||
<tg-math-block>E = mc^2</tg-math-block>
|
|
||||||
""".trimIndent()
|
|
||||||
)
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
// sendRichMessage with Markdown-formatted content
|
|
||||||
onCommand("rich_markdown") {
|
|
||||||
val sent = sendRichMessage(
|
|
||||||
it.chat.id,
|
|
||||||
// InputRichMessageMarkdown factory — content described using Markdown formatting
|
|
||||||
InputRichMessageMarkdown(
|
|
||||||
"""
|
|
||||||
**bold text**
|
**bold text**
|
||||||
__bold text__
|
__bold text__
|
||||||
*italic text*
|
*italic text*
|
||||||
@@ -294,6 +190,115 @@ suspend fun main(vararg args: String) {
|
|||||||
|
|
||||||
</tg-slideshow>
|
</tg-slideshow>
|
||||||
""".trimIndent()
|
""".trimIndent()
|
||||||
|
|
||||||
|
telegramBotWithBehaviourAndLongPolling(
|
||||||
|
botToken,
|
||||||
|
CoroutineScope(Dispatchers.IO),
|
||||||
|
testServer = isTestServer
|
||||||
|
) {
|
||||||
|
// sendRichMessage with HTML-formatted content
|
||||||
|
onCommand("rich_html") {
|
||||||
|
sendRichMessage(
|
||||||
|
it.chat.id,
|
||||||
|
// InputRichMessageHTML factory — content described using HTML formatting
|
||||||
|
InputRichMessageHTML(
|
||||||
|
"""
|
||||||
|
<a name="chapter-0"></a>
|
||||||
|
<b>bold text</b>, <strong>bold text</strong>
|
||||||
|
<i>italic text</i>, <em>italic text</em>
|
||||||
|
<u>underlined text</u>, <ins>underlined text</ins>
|
||||||
|
<s>strikethrough text</s>, <strike>strikethrough text</strike>, <del>strikethrough text</del>
|
||||||
|
<code>inline fixed-width code</code>
|
||||||
|
<mark>marked text</mark>
|
||||||
|
<sub>subscript text</sub>
|
||||||
|
<sup>superscript text</sup>
|
||||||
|
<tg-spoiler>spoiler</tg-spoiler>
|
||||||
|
|
||||||
|
<a href="#note-1">Reference</a>
|
||||||
|
<a href="https://t.me/">inline URL</a>
|
||||||
|
<a href="mailto:user@example.com">inline e-mail</a>
|
||||||
|
<a href="tel:+123456789">inline phone number</a>
|
||||||
|
<a href="tg://user?id=123456789">inline mention of a user</a>
|
||||||
|
<a href="#chapter-1">in-document link</a>
|
||||||
|
<a name="chapter-1"></a>
|
||||||
|
|
||||||
|
<tg-reference name="note-1">Referenced text</tg-reference>
|
||||||
|
<tg-emoji emoji-id="5368324170671202286">👍</tg-emoji>
|
||||||
|
<img src="tg://emoji?id=5368324170671202286" alt="👍"/>
|
||||||
|
<tg-time unix="1647531900" format="wDT">22:45 tomorrow</tg-time>
|
||||||
|
<tg-math>x^2 + y^2</tg-math>
|
||||||
|
|
||||||
|
#hashtag ${'$'}USD +12345678901, card: 4242 4242 4242 4242, https://t.me t.me a@t.me /command @username
|
||||||
|
|
||||||
|
all the text above was on the same line
|
||||||
|
|
||||||
|
<h1>Heading 1</h1>
|
||||||
|
<h2>Heading 2</h2>
|
||||||
|
<h3>Heading 3</h3>
|
||||||
|
<h4>Heading 4</h4>
|
||||||
|
<h5>Heading 5</h5>
|
||||||
|
<h6>Heading 6</h6>
|
||||||
|
|
||||||
|
<a name="chapter-2"></a>
|
||||||
|
|
||||||
|
<p>Paragraph text</p>
|
||||||
|
<pre>pre-formatted fixed-width code block</pre>
|
||||||
|
<pre><code class="language-python"> print('pre-formatted fixed-width code block written in the Python programming language')</code></pre>
|
||||||
|
<footer>Footer text</footer>
|
||||||
|
<hr/>
|
||||||
|
<ul><li>unordered list item</li></ul>
|
||||||
|
<ol><li>ordered list item</li></ol>
|
||||||
|
<ol start="3" type="a" reversed><li>ordered list item</li></ol>
|
||||||
|
<ol><li value="7" type="i">ordered list item with explicit number</li></ol>
|
||||||
|
<ul>
|
||||||
|
<li><input type="checkbox" checked>Checked checkbox</li>
|
||||||
|
<li><input type="checkbox">Unchecked checkbox</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<blockquote>Block quotation started<br>Block quotation continued<br>The last line of the block quotation<cite>The Author</cite></blockquote>
|
||||||
|
<aside>Pull quote<cite>The Author</cite></aside>
|
||||||
|
|
||||||
|
<img src="https://telegram.org/example/photo.jpg"/>
|
||||||
|
<video src="https://telegram.org/example/video.mp4"></video>
|
||||||
|
<audio src="https://telegram.org/example/audio.mp3"></audio>
|
||||||
|
<audio src="https://telegram.org/example/audio.ogg"></audio>
|
||||||
|
<video src="https://telegram.org/example/animation.gif"></video>
|
||||||
|
|
||||||
|
<figure><img src="https://telegram.org/example/photo.jpg" tg-spoiler/><figcaption>Photo caption<cite>Photo credit</cite></figcaption></figure>
|
||||||
|
<figure><video src="https://telegram.org/example/video.mp4" tg-spoiler></video><figcaption>Video caption</figcaption></figure>
|
||||||
|
<figure><audio src="https://telegram.org/example/audio.mp3"></audio><figcaption>Audio caption</figcaption></figure>
|
||||||
|
<figure><audio src="https://telegram.org/example/audio.ogg"></audio><figcaption>Voice note caption</figcaption></figure>
|
||||||
|
<figure><video src="https://telegram.org/example/animation.gif" tg-spoiler></video><figcaption>Animation caption</figcaption></figure>
|
||||||
|
|
||||||
|
<tg-map lat="41.9" long="12.5" zoom="14"/>
|
||||||
|
<figure><tg-map lat="41.9" long="12.5" zoom="14"/><figcaption>Map caption</figcaption></figure>
|
||||||
|
|
||||||
|
<tg-collage><img src="https://telegram.org/example/photo.jpg"/><video src="https://telegram.org/example/video.mp4"/></tg-collage>
|
||||||
|
<tg-collage><video src="https://telegram.org/example/video.mp4"/><img src="https://telegram.org/example/photo.jpg"/><figcaption>Collage caption</figcaption></tg-collage>
|
||||||
|
<tg-slideshow><img src="https://telegram.org/example/photo.jpg"/><video src="https://telegram.org/example/video.mp4"/></tg-slideshow>
|
||||||
|
<tg-slideshow><video src="https://telegram.org/example/video.mp4"/><img src="https://telegram.org/example/photo.jpg"/><figcaption>Slideshow caption</figcaption></tg-slideshow>
|
||||||
|
|
||||||
|
<table><tr><th>Header 1</th><th>Header 2</th></tr><tr><td>Value 1</td><td>Value 2</td></tr></table>
|
||||||
|
<table bordered striped><caption>Table caption</caption>
|
||||||
|
<tr><td colspan="2" rowspan="2" align="left">Value</td><td align="center">Value2</td><td align="right">Value3</td></tr>
|
||||||
|
<tr><td valign="top">Value4</td><td valign="middle">Value5</td><td valign="bottom">Value6</td></tr>
|
||||||
|
<tr><td>Value7</td></tr></table>
|
||||||
|
|
||||||
|
<details><summary>Title</summary>Content</details>
|
||||||
|
<details open><summary>Title</summary>Content</details>
|
||||||
|
<tg-math-block>E = mc^2</tg-math-block>
|
||||||
|
""".trimIndent()
|
||||||
|
)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
// sendRichMessage with Markdown-formatted content
|
||||||
|
onCommand("rich_markdown") {
|
||||||
|
val sent = sendRichMessage(
|
||||||
|
it.chat.id,
|
||||||
|
// InputRichMessageMarkdown factory — content described using Markdown formatting
|
||||||
|
InputRichMessageMarkdown(
|
||||||
|
testMarkdownText
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
println(sent)
|
println(sent)
|
||||||
@@ -341,6 +346,25 @@ suspend fun main(vararg args: String) {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
onGuestRequestMessage {
|
||||||
|
val withTextContent = it.withContentOrNull<TextContent>() ?: return@onGuestRequestMessage
|
||||||
|
val haveCommand = withTextContent.content.text.contains("/rich_guest")
|
||||||
|
if (haveCommand) {
|
||||||
|
answer(
|
||||||
|
it.guestQueryId,
|
||||||
|
InlineQueryResultArticle(
|
||||||
|
InlineQueryId("rich_content"),
|
||||||
|
"Send rich message",
|
||||||
|
InputRichMessageContent(
|
||||||
|
InputRichMessageMarkdown(
|
||||||
|
testMarkdownText
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// onRichMessage trigger: incoming messages carrying the new rich_message field
|
// onRichMessage trigger: incoming messages carrying the new rich_message field
|
||||||
onRichMessage { message ->
|
onRichMessage { message ->
|
||||||
val richMessage = message.content.richMessage
|
val richMessage = message.content.richMessage
|
||||||
|
|||||||
Reference in New Issue
Block a user