From 0391868790d06145f618838bb7caa8e1e78d0281 Mon Sep 17 00:00:00 2001 From: pppscn <35696959@qq.com> Date: Sun, 2 Mar 2025 21:52:41 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=EF=BC=9A`Telegram`=20?= =?UTF-8?q?=E5=8F=91=E9=80=81=E9=80=9A=E9=81=93=E6=94=AF=E6=8C=81=20`Markd?= =?UTF-8?q?ownV2`=E8=A7=A3=E6=9E=90=E6=A8=A1=E5=BC=8F=20#570?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../entity/setting/TelegramSetting.kt | 11 ++++- .../fragment/senders/TelegramFragment.kt | 8 +++- .../forwarder/utils/sender/TelegramUtils.kt | 35 ++++++++++++++-- .../res/layout/fragment_senders_telegram.xml | 40 ++++++++++++++++++- app/src/main/res/values-en/strings.xml | 4 ++ app/src/main/res/values-zh-rCN/strings.xml | 4 ++ app/src/main/res/values-zh-rTW/strings.xml | 18 +++++---- app/src/main/res/values/strings.xml | 4 ++ 8 files changed, 111 insertions(+), 13 deletions(-) diff --git a/app/src/main/java/com/idormy/sms/forwarder/entity/setting/TelegramSetting.kt b/app/src/main/java/com/idormy/sms/forwarder/entity/setting/TelegramSetting.kt index e9e7f6df..8168959e 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/entity/setting/TelegramSetting.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/entity/setting/TelegramSetting.kt @@ -14,6 +14,7 @@ data class TelegramSetting( val proxyAuthenticator: Boolean = false, val proxyUsername: String = "", val proxyPassword: String = "", + val parseMode: String = "HTML", ) : Serializable { fun getMethodCheckId(): Int { @@ -27,4 +28,12 @@ data class TelegramSetting( else -> R.id.rb_proxyNone } } -} \ No newline at end of file + + fun getParseModeCheckId(): Int { + return when (parseMode) { + "TEXT" -> R.id.rb_parse_mode_text + "MarkdownV2" -> R.id.rb_parse_mode_markdown + else -> R.id.rb_parse_mode_html + } + } +} diff --git a/app/src/main/java/com/idormy/sms/forwarder/fragment/senders/TelegramFragment.kt b/app/src/main/java/com/idormy/sms/forwarder/fragment/senders/TelegramFragment.kt index 4eee9318..69be0784 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/fragment/senders/TelegramFragment.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/fragment/senders/TelegramFragment.kt @@ -133,6 +133,7 @@ class TelegramFragment : BaseFragment(), View.O binding!!.sbProxyAuthenticator.isChecked = settingVo.proxyAuthenticator == true binding!!.etProxyUsername.setText(settingVo.proxyUsername) binding!!.etProxyPassword.setText(settingVo.proxyPassword) + binding!!.rgParseMode.check(settingVo.getParseModeCheckId()) } } }) @@ -251,8 +252,13 @@ class TelegramFragment : BaseFragment(), View.O } val method = if (binding!!.rgMethod.checkedRadioButtonId == R.id.rb_method_get) "GET" else "POST" + val parseMode = when (binding!!.rgParseMode.checkedRadioButtonId) { + R.id.rb_parse_mode_text -> "TEXT" + R.id.rb_parse_mode_markdown -> "MarkdownV2" + else -> "HTML" + } - return TelegramSetting(method, apiToken, chatId, proxyType, proxyHost, proxyPort, proxyAuthenticator, proxyUsername, proxyPassword) + return TelegramSetting(method, apiToken, chatId, proxyType, proxyHost, proxyPort, proxyAuthenticator, proxyUsername, proxyPassword, parseMode) } override fun onDestroyView() { diff --git a/app/src/main/java/com/idormy/sms/forwarder/utils/sender/TelegramUtils.kt b/app/src/main/java/com/idormy/sms/forwarder/utils/sender/TelegramUtils.kt index c933187d..2a25f5d5 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/utils/sender/TelegramUtils.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/utils/sender/TelegramUtils.kt @@ -58,13 +58,29 @@ class TelegramUtils private constructor() { val request = if (setting.method == "GET") { requestUrl += "?chat_id=" + setting.chatId + "&text=" + URLEncoder.encode(content, "UTF-8") + if (setting.parseMode.isNotEmpty() && setting.parseMode != "TEXT") { + requestUrl += "&parse_mode=" + setting.parseMode + } Log.i(TAG, "requestUrl:$requestUrl") XHttp.get(requestUrl) } else { val bodyMap: MutableMap = mutableMapOf() bodyMap["chat_id"] = setting.chatId - bodyMap["text"] = content - bodyMap["parse_mode"] = "HTML" + when (setting.parseMode) { + "MarkdownV2" -> { + bodyMap["parse_mode"] = "MarkdownV2" + bodyMap["text"] = escapeMarkdownV2(content) + } + + "HTML" -> { + bodyMap["parse_mode"] = "HTML" + bodyMap["text"] = content + } + + else -> { + bodyMap["text"] = content + } + } bodyMap["disable_web_page_preview"] = "true" val requestMsg: String = Gson().toJson(bodyMap) Log.i(TAG, "requestMsg:$requestMsg") @@ -155,5 +171,18 @@ class TelegramUtils private constructor() { } return buffer.toString() } + + // 用于转义 MarkdownV2 特殊字符的方法 + private fun escapeMarkdownV2(text: String): String { + // TODO: MarkdownV2 要求转义以下字符,实测不能全部转义(丢失格式) + //val specialChars = listOf('_', '*', '[', ']', '(', ')', '~', '`', '>', '#', '+', '-', '=', '|', '{', '}', '.', '!') + val specialChars = listOf('-') + var escapedText = text + for (char in specialChars) { + // 将每个字符替换为带反斜杠的形式 + escapedText = escapedText.replace(char.toString(), "\\$char") + } + return escapedText + } } -} \ No newline at end of file +} diff --git a/app/src/main/res/layout/fragment_senders_telegram.xml b/app/src/main/res/layout/fragment_senders_telegram.xml index 82ac54e5..6bef3218 100644 --- a/app/src/main/res/layout/fragment_senders_telegram.xml +++ b/app/src/main/res/layout/fragment_senders_telegram.xml @@ -102,6 +102,44 @@ + + + + + + + + + + + + + + + + - \ No newline at end of file + diff --git a/app/src/main/res/values-en/strings.xml b/app/src/main/res/values-en/strings.xml index ecd299c6..ddeea823 100644 --- a/app/src/main/res/values-en/strings.xml +++ b/app/src/main/res/values-en/strings.xml @@ -309,6 +309,10 @@ ApiToken or Custom Proxy Address (startwith http) ChatId Method + Parse Mode + Text + Html + MarkdownV2 SIM Slot Same source diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 6a78c795..35f61c93 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -310,6 +310,10 @@ ApiToken 或 自定义代理地址(http开头) 被通知人(或群组)的ChatId 请求方式 + 解析模式 + Text + Html + MarkdownV2 发送卡槽 原进原出 diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 17c88224..f7ef6dca 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -218,8 +218,14 @@ 啟用該條轉發規則 匹配的值不可為空 通話類型不正確,只能填寫1到6的任意一個數字 - + 星期一 + 星期二 + 星期三 + 星期四 + 星期五 + 星期六 星期日 + 發送通道操作確認 刪除發送通道後會級聯刪除其相關的轉發規則、轉發日誌的所有記錄!\n\n確定刪除該條發送通道? 該條發送通道已經刪除! @@ -304,6 +310,10 @@ ApiToken 或 自定義代理地址(http開頭) 被通知人(或群組)的ChatId 請求方式 + 解析模式 + Text + Html + MarkdownV2 發送卡槽 原進原出 @@ -1180,10 +1190,4 @@ 搜索裝置 藍牙裝置MAC地址無效,例如:AA:BB:CC:DD:EE:FF 自啟動管理 -> 允許應用自啟動]]> - 星期一 - 星期二 - 星期三 - 星期四 - 星期五 - 星期六 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index d3a27441..dab020e5 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -339,6 +339,10 @@ ApiToken 或 自定义代理地址(http开头) 被通知人(或群组)的ChatId 请求方式 + 解析模式 + Text + Html + MarkdownV2 发送卡槽 原进原出