mirror of
https://github.com/pppscn/SmsForwarder
synced 2025-08-02 17:07:41 +08:00
优化:Telegram
发送通道支持 MarkdownV2
解析模式 #570
This commit is contained in:
parent
44728b858a
commit
0391868790
@ -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
|
||||
}
|
||||
}
|
||||
|
||||
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
|
||||
}
|
||||
}
|
||||
}
|
@ -133,6 +133,7 @@ class TelegramFragment : BaseFragment<FragmentSendersTelegramBinding?>(), 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<FragmentSendersTelegramBinding?>(), 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() {
|
||||
|
@ -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<String, Any> = 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
|
||||
}
|
||||
}
|
||||
}
|
@ -102,6 +102,44 @@
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
style="@style/BarStyle"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="horizontal">
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/parse_mode"
|
||||
android:textStyle="bold" />
|
||||
|
||||
<RadioGroup
|
||||
android:id="@+id/rg_parse_mode"
|
||||
style="@style/rg_style"
|
||||
android:layout_marginStart="5dp"
|
||||
android:orientation="horizontal">
|
||||
|
||||
<RadioButton
|
||||
android:id="@+id/rb_parse_mode_text"
|
||||
style="@style/rg_rb_style"
|
||||
android:text="@string/parse_mode_text" />
|
||||
|
||||
<RadioButton
|
||||
android:id="@+id/rb_parse_mode_html"
|
||||
style="@style/rg_rb_style"
|
||||
android:checked="true"
|
||||
android:text="@string/parse_mode_html" />
|
||||
|
||||
<RadioButton
|
||||
android:id="@+id/rb_parse_mode_markdown"
|
||||
style="@style/rg_rb_style"
|
||||
android:text="@string/parse_mode_markdown" />
|
||||
|
||||
</RadioGroup>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
style="@style/BarStyle"
|
||||
android:layout_width="match_parent"
|
||||
|
@ -309,6 +309,10 @@
|
||||
<string name="TelegramApiToken">ApiToken or Custom Proxy Address (startwith http)</string>
|
||||
<string name="TelegramChatId">ChatId</string>
|
||||
<string name="Method" formatted="false">Method</string>
|
||||
<string name="parse_mode">Parse Mode</string>
|
||||
<string name="parse_mode_text">Text</string>
|
||||
<string name="parse_mode_html">Html</string>
|
||||
<string name="parse_mode_markdown">MarkdownV2</string>
|
||||
|
||||
<string name="SmsSimSlot">SIM Slot</string>
|
||||
<string name="same_source">Same source</string>
|
||||
|
@ -310,6 +310,10 @@
|
||||
<string name="TelegramApiToken">ApiToken 或 自定义代理地址(http开头)</string>
|
||||
<string name="TelegramChatId">被通知人(或群组)的ChatId</string>
|
||||
<string name="Method" formatted="false">请求方式</string>
|
||||
<string name="parse_mode">解析模式</string>
|
||||
<string name="parse_mode_text">Text</string>
|
||||
<string name="parse_mode_html">Html</string>
|
||||
<string name="parse_mode_markdown">MarkdownV2</string>
|
||||
|
||||
<string name="SmsSimSlot">发送卡槽</string>
|
||||
<string name="same_source">原进原出</string>
|
||||
|
@ -218,8 +218,14 @@
|
||||
<string name="switch_rule_status">啟用該條轉發規則</string>
|
||||
<string name="invalid_match_value">匹配的值不可為空</string>
|
||||
<string name="invalid_call_type">通話類型不正確,只能填寫1到6的任意一個數字</string>
|
||||
<!--SenderActivity-->
|
||||
<string name="mon">星期一</string>
|
||||
<string name="tue">星期二</string>
|
||||
<string name="wed">星期三</string>
|
||||
<string name="thu">星期四</string>
|
||||
<string name="fri">星期五</string>
|
||||
<string name="sat">星期六</string>
|
||||
<string name="sun">星期日</string>
|
||||
<!--SenderActivity-->
|
||||
<string name="delete_sender_title">發送通道操作確認</string>
|
||||
<string name="delete_sender_tips">刪除發送通道後會級聯刪除其相關的轉發規則、轉發日誌的所有記錄!\n\n確定刪除該條發送通道?</string>
|
||||
<string name="delete_sender_toast">該條發送通道已經刪除!</string>
|
||||
@ -304,6 +310,10 @@
|
||||
<string name="TelegramApiToken">ApiToken 或 自定義代理地址(http開頭)</string>
|
||||
<string name="TelegramChatId">被通知人(或群組)的ChatId</string>
|
||||
<string name="Method" formatted="false">請求方式</string>
|
||||
<string name="parse_mode">解析模式</string>
|
||||
<string name="parse_mode_text">Text</string>
|
||||
<string name="parse_mode_html">Html</string>
|
||||
<string name="parse_mode_markdown">MarkdownV2</string>
|
||||
|
||||
<string name="SmsSimSlot">發送卡槽</string>
|
||||
<string name="same_source">原進原出</string>
|
||||
@ -1180,10 +1190,4 @@
|
||||
<string name="start_discovery">搜索裝置</string>
|
||||
<string name="invalid_bluetooth_mac_address">藍牙裝置MAC地址無效,例如:AA:BB:CC:DD:EE:FF</string>
|
||||
<string name="auto_start_redmi"><![CDATA[紅米手機:授權管理 -> 自啟動管理 -> 允許應用自啟動]]></string>
|
||||
<string name="mon">星期一</string>
|
||||
<string name="tue">星期二</string>
|
||||
<string name="wed">星期三</string>
|
||||
<string name="thu">星期四</string>
|
||||
<string name="fri">星期五</string>
|
||||
<string name="sat">星期六</string>
|
||||
</resources>
|
||||
|
@ -339,6 +339,10 @@
|
||||
<string name="TelegramApiToken">ApiToken 或 自定义代理地址(http开头)</string>
|
||||
<string name="TelegramChatId">被通知人(或群组)的ChatId</string>
|
||||
<string name="Method" formatted="false">请求方式</string>
|
||||
<string name="parse_mode">解析模式</string>
|
||||
<string name="parse_mode_text">Text</string>
|
||||
<string name="parse_mode_html">Html</string>
|
||||
<string name="parse_mode_markdown">MarkdownV2</string>
|
||||
|
||||
<string name="SmsSimSlot">发送卡槽</string>
|
||||
<string name="same_source">原进原出</string>
|
||||
|
Loading…
x
Reference in New Issue
Block a user