新增:企微群机器人发送文本消息时支持at成员 #376

This commit is contained in:
pppscn 2023-12-11 15:33:10 +08:00
parent 95e9f22816
commit 5381151ac3
6 changed files with 168 additions and 18 deletions

View File

@ -6,6 +6,9 @@ import java.io.Serializable
data class WeworkRobotSetting(
var webHook: String,
val msgType: String = "text",
var atAll: Boolean? = false,
var atUserIds: String? = "",
var atMobiles: String? = "",
) : Serializable {
fun getMsgTypeCheckId(): Int {

View File

@ -6,6 +6,8 @@ import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.CompoundButton
import android.widget.RadioGroup
import androidx.fragment.app.viewModels
import com.google.gson.Gson
import com.idormy.sms.forwarder.R
@ -17,7 +19,13 @@ import com.idormy.sms.forwarder.database.viewmodel.SenderViewModel
import com.idormy.sms.forwarder.databinding.FragmentSendersWeworkRobotBinding
import com.idormy.sms.forwarder.entity.MsgInfo
import com.idormy.sms.forwarder.entity.setting.WeworkRobotSetting
import com.idormy.sms.forwarder.utils.*
import com.idormy.sms.forwarder.utils.CommonUtils
import com.idormy.sms.forwarder.utils.KEY_SENDER_CLONE
import com.idormy.sms.forwarder.utils.KEY_SENDER_ID
import com.idormy.sms.forwarder.utils.KEY_SENDER_TEST
import com.idormy.sms.forwarder.utils.KEY_SENDER_TYPE
import com.idormy.sms.forwarder.utils.SettingUtils
import com.idormy.sms.forwarder.utils.XToastUtils
import com.idormy.sms.forwarder.utils.sender.WeworkRobotUtils
import com.jeremyliao.liveeventbus.LiveEventBus
import com.xuexiang.xaop.annotation.SingleClick
@ -32,11 +40,11 @@ import io.reactivex.SingleObserver
import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.disposables.Disposable
import io.reactivex.schedulers.Schedulers
import java.util.*
import java.util.Date
@Page(name = "企业微信群机器人")
@Suppress("PrivatePropertyName")
class WeworkRobotFragment : BaseFragment<FragmentSendersWeworkRobotBinding?>(), View.OnClickListener {
class WeworkRobotFragment : BaseFragment<FragmentSendersWeworkRobotBinding?>(), View.OnClickListener, CompoundButton.OnCheckedChangeListener {
private val TAG: String = WeworkRobotFragment::class.java.simpleName
var titleBar: TitleBar? = null
@ -122,6 +130,10 @@ class WeworkRobotFragment : BaseFragment<FragmentSendersWeworkRobotBinding?>(),
if (settingVo != null) {
binding!!.etWebHook.setText(settingVo.webHook)
binding!!.rgMsgType.check(settingVo.getMsgTypeCheckId())
binding!!.layoutAt.visibility = if (settingVo.getMsgTypeCheckId() == R.id.rb_msg_type_text) View.VISIBLE else View.GONE
binding!!.sbAtAll.isChecked = settingVo.atAll == true
binding!!.etAtMobiles.setText(settingVo.atMobiles)
binding!!.etAtUserIds.setText(settingVo.atUserIds)
}
}
})
@ -131,9 +143,26 @@ class WeworkRobotFragment : BaseFragment<FragmentSendersWeworkRobotBinding?>(),
binding!!.btnTest.setOnClickListener(this)
binding!!.btnDel.setOnClickListener(this)
binding!!.btnSave.setOnClickListener(this)
binding!!.sbAtAll.setOnCheckedChangeListener(this)
binding!!.rgMsgType.setOnCheckedChangeListener { _: RadioGroup?, checkedId: Int ->
binding!!.layoutAt.visibility = if (checkedId == R.id.rb_msg_type_text) View.VISIBLE else View.GONE
}
LiveEventBus.get(KEY_SENDER_TEST, String::class.java).observe(this) { mCountDownHelper?.finish() }
}
override fun onCheckedChanged(buttonView: CompoundButton?, isChecked: Boolean) {
//这里只有一个监听不需要判断id
if (isChecked) {
binding!!.layoutAtMobiles.visibility = View.GONE
binding!!.layoutAtUserIds.visibility = View.GONE
binding!!.etAtMobiles.setText("")
binding!!.etAtUserIds.setText("")
} else {
binding!!.layoutAtMobiles.visibility = View.VISIBLE
binding!!.layoutAtUserIds.visibility = View.VISIBLE
}
}
@SingleClick
override fun onClick(v: View) {
try {
@ -208,7 +237,10 @@ class WeworkRobotFragment : BaseFragment<FragmentSendersWeworkRobotBinding?>(),
throw Exception(getString(R.string.invalid_webhook))
}
val msgType = if (binding!!.rgMsgType.checkedRadioButtonId == R.id.rb_msg_type_markdown) "markdown" else "text"
return WeworkRobotSetting(webHook, msgType)
val atAll = binding!!.sbAtAll.isChecked
val atUserIds = binding!!.etAtUserIds.text.toString().trim()
val atMobiles = binding!!.etAtMobiles.text.toString().trim()
return WeworkRobotSetting(webHook, msgType, atAll, atUserIds, atMobiles)
}
override fun onDestroyView() {

View File

@ -38,14 +38,23 @@ class WeworkRobotUtils private constructor() {
val msgMap: MutableMap<String, Any> = mutableMapOf()
msgMap["msgtype"] = setting.msgType
val contextMap = mutableMapOf<String, Any>()
contextMap["content"] = content
if (setting.msgType == "markdown") {
val markdownText: MutableMap<String, Any> = mutableMapOf()
markdownText["content"] = content
msgMap["markdown"] = markdownText
msgMap["markdown"] = contextMap
} else {
val textText: MutableMap<String, Any> = mutableMapOf()
textText["content"] = content
msgMap["text"] = textText
if (setting.atAll == true) {
contextMap["mentioned_list"] = arrayListOf("@all")
} else {
if (!setting.atUserIds.isNullOrEmpty()) {
contextMap["mentioned_list"] = setting.atUserIds!!.split(",")
}
if (!setting.atMobiles.isNullOrEmpty()) {
contextMap["mentioned_mobile_list"] = setting.atMobiles!!.split(",")
}
}
msgMap["text"] = contextMap
}
val requestMsg: String = Gson().toJson(msgMap)

View File

@ -38,14 +38,16 @@
android:layout_marginStart="5dp"
android:layout_weight="1"
android:singleLine="true"
app:met_clearButton="true" />
app:met_clearButton="true"
tools:ignore="SpeakableTextPresentCheck,TouchTargetSizeCheck" />
<com.xuexiang.xui.widget.button.switchbutton.SwitchButton
android:id="@+id/sb_enable"
style="@style/SwitchButtonStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:checked="true" />
android:checked="true"
tools:ignore="DuplicateSpeakableTextCheck,TouchTargetSizeCheck" />
</LinearLayout>
@ -73,7 +75,8 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:singleLine="true"
app:met_passWordButton="true" />
app:met_passWordButton="true"
tools:ignore="SpeakableTextPresentCheck,TouchTargetSizeCheck" />
</LinearLayout>
@ -99,17 +102,112 @@
android:id="@+id/rb_msg_type_text"
style="@style/rg_rb_style"
android:checked="true"
android:text="@string/wework_msg_type_text" />
android:text="@string/wework_msg_type_text"
tools:ignore="TouchTargetSizeCheck" />
<RadioButton
android:id="@+id/rb_msg_type_markdown"
style="@style/rg_rb_style"
android:text="@string/wework_msg_type_markdown" />
android:text="@string/wework_msg_type_markdown"
tools:ignore="TouchTargetSizeCheck" />
</RadioGroup>
</LinearLayout>
<LinearLayout
android:id="@+id/layout_at"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<LinearLayout
style="@style/senderBarStyleWithSwitch"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/is_at_all"
android:textStyle="bold" />
<com.xuexiang.xui.widget.button.switchbutton.SwitchButton
android:id="@+id/sb_at_all"
style="@style/SwitchButtonStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:checked="true"
tools:ignore="TouchTargetSizeCheck" />
</LinearLayout>
<LinearLayout
android:id="@+id/layout_at_user_ids"
style="@style/senderBarStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:visibility="gone">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/wework_at_userids"
android:textStyle="bold" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:maxLines="1"
android:text="@string/wework_at_userids_tip"
android:textSize="10sp"
tools:ignore="SmallSp" />
<com.xuexiang.xui.widget.edittext.materialedittext.MaterialEditText
android:id="@+id/et_at_user_ids"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:singleLine="true"
app:met_clearButton="true" />
</LinearLayout>
<LinearLayout
android:id="@+id/layout_at_mobiles"
style="@style/senderBarStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:visibility="gone">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/wework_at_mobiles"
android:textStyle="bold" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:maxLines="1"
android:text="@string/wework_at_mobiles_tip"
android:textSize="10sp"
tools:ignore="SmallSp" />
<com.xuexiang.xui.widget.edittext.materialedittext.MaterialEditText
android:id="@+id/et_at_mobiles"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:singleLine="true"
app:met_clearButton="true" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
</androidx.core.widget.NestedScrollView>
@ -128,7 +226,7 @@
android:paddingStart="15dp"
android:text="@string/del"
android:textSize="11sp"
tools:ignore="RtlSymmetry" />
tools:ignore="RtlSymmetry,TextContrastCheck,TouchTargetSizeCheck" />
<com.xuexiang.xui.widget.textview.supertextview.SuperButton
android:id="@+id/btn_save"
@ -138,7 +236,7 @@
android:paddingStart="15dp"
android:text="@string/save"
android:textSize="11sp"
tools:ignore="RtlSymmetry" />
tools:ignore="RtlSymmetry,TextContrastCheck,TouchTargetSizeCheck" />
<com.xuexiang.xui.widget.textview.supertextview.SuperButton
android:id="@+id/btn_test"
@ -148,7 +246,7 @@
android:paddingStart="15dp"
android:text="@string/test"
android:textSize="11sp"
tools:ignore="RtlSymmetry" />
tools:ignore="RtlSymmetry,TextContrastCheck,TouchTargetSizeCheck" />
</LinearLayout>

View File

@ -774,6 +774,10 @@
<string name="wework_msg_type">Msg Type</string>
<string name="wework_msg_type_text">Text</string>
<string name="wework_msg_type_markdown">Markdown</string>
<string name="wework_at_mobiles">At Mobiles</string>
<string name="wework_at_mobiles_tip">Tips: Separate multiple mobiles with commas, e.g. 18888888888,19999999999</string>
<string name="wework_at_userids">At UserId</string>
<string name="wework_at_userids_tip">TipsSeparate multiple UserIds with commas, e.g. user1,user2</string>
<string name="url_scheme">URL Scheme</string>
<string name="url_scheme_tips">Examplemyapp://api/add?&amp;type=0&amp;msg=[msg]</string>

View File

@ -775,6 +775,10 @@
<string name="wework_msg_type">消息类型</string>
<string name="wework_msg_type_text">纯文本</string>
<string name="wework_msg_type_markdown">markdown</string>
<string name="wework_at_mobiles">被@人的手机号</string>
<string name="wework_at_mobiles_tip">Tips多个手机号用逗号分开例如18888888888,19999999999</string>
<string name="wework_at_userids">被@人的userid</string>
<string name="wework_at_userids_tip">Tips多个userid用逗号分开例如user1,user2</string>
<string name="url_scheme">URL Scheme</string>
<string name="url_scheme_tips">示例myapp://api/add?&amp;type=0&amp;msg=[msg]</string>