diff --git a/CHANGELOG.md b/CHANGELOG.md index 4b27f49068..bd1422104b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -60,6 +60,7 @@ of `]` in links titles * Added `Markdown` and `HTML` type aliases which actually means `MarkdownParseMode` and `HTMLParseMode` * `ChatId` now have extension `link` which will automatically create link like `tg://user?id=` * Created a few of methods for all supported formats of text like bold, italic, links and others +* Rewritten `MessageEntities` to use new formatting options ## 0.11.0 diff --git a/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/BoldTextMessageEntity.kt b/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/BoldTextMessageEntity.kt index 3944bda314..5336c72289 100644 --- a/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/BoldTextMessageEntity.kt +++ b/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/BoldTextMessageEntity.kt @@ -1,10 +1,13 @@ package com.github.insanusmokrassar.TelegramBotAPI.types.MessageEntity +import com.github.insanusmokrassar.TelegramBotAPI.utils.boldHTML +import com.github.insanusmokrassar.TelegramBotAPI.utils.boldMarkdown + data class BoldTextMessageEntity( override val offset: Int, override val length: Int, override val sourceString: String -) : TextMessageEntity() { - override val markdownFormatSymbol: String = "*" - override val htmlFormatTagname: String = "b" +) : MessageEntity { + override val asMarkdownSource: String = sourceString.boldMarkdown() + override val asHtmlSource: String = sourceString.boldHTML() } diff --git a/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/BotCommandMessageEntity.kt b/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/BotCommandMessageEntity.kt index 4556f722c0..bbaee4642c 100644 --- a/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/BotCommandMessageEntity.kt +++ b/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/BotCommandMessageEntity.kt @@ -1,10 +1,15 @@ package com.github.insanusmokrassar.TelegramBotAPI.types.MessageEntity +import com.github.insanusmokrassar.TelegramBotAPI.utils.* + data class BotCommandMessageEntity( override val offset: Int, override val length: Int, override val sourceString: String ) : MessageEntity { + override val asMarkdownSource: String = sourceString.commandMarkdown() + override val asHtmlSource: String = sourceString.commandHTML() + val command: String by lazy { sourceString.substring(1)// skip first symbol like "/" or "!" } diff --git a/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/CodeTextMessageEntity.kt b/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/CodeTextMessageEntity.kt index 19e66daeaa..d5adda2106 100644 --- a/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/CodeTextMessageEntity.kt +++ b/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/CodeTextMessageEntity.kt @@ -1,10 +1,13 @@ package com.github.insanusmokrassar.TelegramBotAPI.types.MessageEntity +import com.github.insanusmokrassar.TelegramBotAPI.utils.codeHTML +import com.github.insanusmokrassar.TelegramBotAPI.utils.codeMarkdown + data class CodeTextMessageEntity( override val offset: Int, override val length: Int, override val sourceString: String -) : TextMessageEntity() { - override val markdownFormatSymbol: String = "`" - override val htmlFormatTagname: String = "code" +) : MessageEntity { + override val asMarkdownSource: String = sourceString.codeMarkdown() + override val asHtmlSource: String = sourceString.codeHTML() } diff --git a/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/EMailMessageEntity.kt b/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/EMailMessageEntity.kt index 90f1872575..4c88ce875a 100644 --- a/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/EMailMessageEntity.kt +++ b/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/EMailMessageEntity.kt @@ -1,10 +1,13 @@ package com.github.insanusmokrassar.TelegramBotAPI.types.MessageEntity +import com.github.insanusmokrassar.TelegramBotAPI.utils.emailHTML +import com.github.insanusmokrassar.TelegramBotAPI.utils.emailMarkdown + class EMailMessageEntity( override val offset: Int, override val length: Int, override val sourceString: String -) : LinkMessageEntity( - sourceString, - "mailto://$sourceString" -) +) : MessageEntity { + override val asMarkdownSource: String = sourceString.emailMarkdown() + override val asHtmlSource: String = sourceString.emailHTML() +} diff --git a/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/HashTagMessageEntity.kt b/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/HashTagMessageEntity.kt index 1bc3c9a1ff..702a3f75a9 100644 --- a/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/HashTagMessageEntity.kt +++ b/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/HashTagMessageEntity.kt @@ -1,7 +1,13 @@ package com.github.insanusmokrassar.TelegramBotAPI.types.MessageEntity +import com.github.insanusmokrassar.TelegramBotAPI.utils.hashTagHTML +import com.github.insanusmokrassar.TelegramBotAPI.utils.hashTagMarkdown + data class HashTagMessageEntity( override val offset: Int, override val length: Int, override val sourceString: String -) : MessageEntity +) : MessageEntity { + override val asMarkdownSource: String = sourceString.hashTagMarkdown() + override val asHtmlSource: String = sourceString.hashTagHTML() +} diff --git a/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/ItalicTextMessageEntity.kt b/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/ItalicTextMessageEntity.kt index 4c1f280b6d..744dbaae9e 100644 --- a/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/ItalicTextMessageEntity.kt +++ b/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/ItalicTextMessageEntity.kt @@ -1,10 +1,13 @@ package com.github.insanusmokrassar.TelegramBotAPI.types.MessageEntity +import com.github.insanusmokrassar.TelegramBotAPI.utils.italicHTML +import com.github.insanusmokrassar.TelegramBotAPI.utils.italicMarkdown + data class ItalicTextMessageEntity( override val offset: Int, override val length: Int, override val sourceString: String -) : TextMessageEntity() { - override val markdownFormatSymbol: String = "_" - override val htmlFormatTagname: String = "i" +) : MessageEntity { + override val asMarkdownSource: String = sourceString.italicMarkdown() + override val asHtmlSource: String = sourceString.italicHTML() } diff --git a/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/LinkMessageEntity.kt b/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/LinkMessageEntity.kt deleted file mode 100644 index 390029d204..0000000000 --- a/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/LinkMessageEntity.kt +++ /dev/null @@ -1,14 +0,0 @@ -package com.github.insanusmokrassar.TelegramBotAPI.types.MessageEntity - -abstract class LinkMessageEntity( - val linkTitle: String, - val link: String -) : MessageEntity { - - override val asMarkdownSource: String by lazy { - "[$linkTitle]($link)" - } - override val asHtmlSource: String by lazy { - "$linkTitle" - } -} diff --git a/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/MentionMessageEntity.kt b/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/MentionMessageEntity.kt index 17ba95553d..010559e880 100644 --- a/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/MentionMessageEntity.kt +++ b/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/MentionMessageEntity.kt @@ -1,7 +1,13 @@ package com.github.insanusmokrassar.TelegramBotAPI.types.MessageEntity +import com.github.insanusmokrassar.TelegramBotAPI.utils.mentionHTML +import com.github.insanusmokrassar.TelegramBotAPI.utils.mentionMarkdown + class MentionMessageEntity( override val offset: Int, override val length: Int, override val sourceString: String -) : MessageEntity +) : MessageEntity { + override val asMarkdownSource: String = sourceString.mentionMarkdown() + override val asHtmlSource: String = sourceString.mentionHTML() +} diff --git a/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/MessageEntity.kt b/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/MessageEntity.kt index 75c09f24bb..5b85448cec 100644 --- a/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/MessageEntity.kt +++ b/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/MessageEntity.kt @@ -1,16 +1,10 @@ package com.github.insanusmokrassar.TelegramBotAPI.types.MessageEntity -import com.github.insanusmokrassar.TelegramBotAPI.utils.extensions.toHtml -import com.github.insanusmokrassar.TelegramBotAPI.utils.extensions.toMarkdown - interface MessageEntity { val offset: Int val length: Int val sourceString: String val asMarkdownSource: String - get() = sourceString.toMarkdown() - val asHtmlSource: String - get() = sourceString.toHtml() } diff --git a/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/PhoneNumberMessageEntity.kt b/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/PhoneNumberMessageEntity.kt index 6bccd2e78f..9c4433a301 100644 --- a/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/PhoneNumberMessageEntity.kt +++ b/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/PhoneNumberMessageEntity.kt @@ -1,7 +1,13 @@ package com.github.insanusmokrassar.TelegramBotAPI.types.MessageEntity +import com.github.insanusmokrassar.TelegramBotAPI.utils.phoneHTML +import com.github.insanusmokrassar.TelegramBotAPI.utils.phoneMarkdown + data class PhoneNumberMessageEntity( override val offset: Int, override val length: Int, override val sourceString: String -) : MessageEntity +) : MessageEntity { + override val asMarkdownSource: String = sourceString.phoneMarkdown() + override val asHtmlSource: String = sourceString.phoneHTML() +} diff --git a/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/PreTextMessageEntity.kt b/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/PreTextMessageEntity.kt index 17c0e3c0c0..37424b7b4f 100644 --- a/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/PreTextMessageEntity.kt +++ b/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/PreTextMessageEntity.kt @@ -1,10 +1,13 @@ package com.github.insanusmokrassar.TelegramBotAPI.types.MessageEntity +import com.github.insanusmokrassar.TelegramBotAPI.utils.preHTML +import com.github.insanusmokrassar.TelegramBotAPI.utils.preMarkdown + data class PreTextMessageEntity( override val offset: Int, override val length: Int, override val sourceString: String -) : TextMessageEntity() { - override val markdownFormatSymbol: String = "```" - override val htmlFormatTagname: String = "pre" +) : MessageEntity { + override val asMarkdownSource: String = sourceString.preMarkdown() + override val asHtmlSource: String = sourceString.preHTML() } diff --git a/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/RegularTextMessageEntity.kt b/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/RegularTextMessageEntity.kt index 5c899b71e8..0c4af76680 100644 --- a/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/RegularTextMessageEntity.kt +++ b/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/RegularTextMessageEntity.kt @@ -1,7 +1,13 @@ package com.github.insanusmokrassar.TelegramBotAPI.types.MessageEntity +import com.github.insanusmokrassar.TelegramBotAPI.utils.extensions.toHtml +import com.github.insanusmokrassar.TelegramBotAPI.utils.extensions.toMarkdown + data class RegularTextMessageEntity( override val offset: Int, override val length: Int, override val sourceString: String -) : MessageEntity +) : MessageEntity { + override val asMarkdownSource: String = sourceString.toMarkdown() + override val asHtmlSource: String = sourceString.toHtml() +} diff --git a/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/TextLinkMessageEntity.kt b/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/TextLinkMessageEntity.kt index f044bae249..fae946f170 100644 --- a/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/TextLinkMessageEntity.kt +++ b/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/TextLinkMessageEntity.kt @@ -1,11 +1,14 @@ package com.github.insanusmokrassar.TelegramBotAPI.types.MessageEntity +import com.github.insanusmokrassar.TelegramBotAPI.utils.linkHTML +import com.github.insanusmokrassar.TelegramBotAPI.utils.linkMarkdown + data class TextLinkMessageEntity( override val offset: Int, override val length: Int, override val sourceString: String, val url: String -) : LinkMessageEntity( - sourceString, - url -) +) : MessageEntity { + override val asMarkdownSource: String = sourceString.linkMarkdown(url) + override val asHtmlSource: String = sourceString.linkHTML(url) +} diff --git a/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/TextMentionMessageEntity.kt b/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/TextMentionMessageEntity.kt index f4ec51de54..4bbe2ea2da 100644 --- a/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/TextMentionMessageEntity.kt +++ b/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/TextMentionMessageEntity.kt @@ -1,13 +1,14 @@ package com.github.insanusmokrassar.TelegramBotAPI.types.MessageEntity import com.github.insanusmokrassar.TelegramBotAPI.types.User +import com.github.insanusmokrassar.TelegramBotAPI.utils.mentionMarkdown class TextMentionMessageEntity( override val offset: Int, override val length: Int, override val sourceString: String, val user: User -) : LinkMessageEntity( - sourceString, - "tg://user?id=${user.id})" -) +) : MessageEntity { + override val asMarkdownSource: String = sourceString.mentionMarkdown(user.id) + override val asHtmlSource: String = sourceString.mentionMarkdown(user.id) +} diff --git a/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/TextMessageEntity.kt b/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/TextMessageEntity.kt deleted file mode 100644 index d271d6e4f8..0000000000 --- a/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/TextMessageEntity.kt +++ /dev/null @@ -1,14 +0,0 @@ -package com.github.insanusmokrassar.TelegramBotAPI.types.MessageEntity - -abstract class TextMessageEntity : MessageEntity { - protected abstract val markdownFormatSymbol: String - protected abstract val htmlFormatTagname: String - - override val asMarkdownSource: String by lazy { - "$markdownFormatSymbol$sourceString$markdownFormatSymbol" - } - - override val asHtmlSource: String by lazy { - "<$htmlFormatTagname>$sourceString" - } -} diff --git a/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/URLMessageEntity.kt b/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/URLMessageEntity.kt index 2aee673219..d4cecba36f 100644 --- a/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/URLMessageEntity.kt +++ b/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/URLMessageEntity.kt @@ -1,12 +1,15 @@ package com.github.insanusmokrassar.TelegramBotAPI.types.MessageEntity +import com.github.insanusmokrassar.TelegramBotAPI.utils.linkHTML +import com.github.insanusmokrassar.TelegramBotAPI.utils.linkMarkdown + data class URLMessageEntity( override val offset: Int, override val length: Int, override val sourceString: String -) : LinkMessageEntity( - sourceString, - sourceString -) { - val url: String = link +) : MessageEntity{ + val url: String = sourceString + + override val asMarkdownSource: String = sourceString.linkMarkdown(url) + override val asHtmlSource: String = sourceString.linkHTML(url) } diff --git a/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/utils/StringFormatting.kt b/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/utils/StringFormatting.kt index 8809af3459..0f52d0b1d0 100644 --- a/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/utils/StringFormatting.kt +++ b/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/utils/StringFormatting.kt @@ -78,6 +78,9 @@ fun String.command(): String = if (startsWith("/")) { "/$this" } +fun String.commandMarkdown(): String = command() +fun String.commandHTML(): String = command() + infix fun String.bold(parseMode: ParseMode): String = when (parseMode) { is HTML -> boldHTML()