diff --git a/app/src/main/java/org/yameida/worktool/model/WeworkMessageBean.java b/app/src/main/java/org/yameida/worktool/model/WeworkMessageBean.java
index 10e8deb..20d34e0 100644
--- a/app/src/main/java/org/yameida/worktool/model/WeworkMessageBean.java
+++ b/app/src/main/java/org/yameida/worktool/model/WeworkMessageBean.java
@@ -42,6 +42,8 @@ public class WeworkMessageBean {
* 撤回消息 RECALL_MESSAGE
* 批量转发 RELAY_MULTI_MESSAGE
* 合并转发 RELAY_MERGE_MESSAGE
+ * 批量发送 SEND_MULTI_MESSAGE
+ * 合并发送 SEND_MERGE_MESSAGE
*
* 非操作类型 300
* 机器人普通日志记录 ROBOT_LOG
@@ -89,6 +91,8 @@ public class WeworkMessageBean {
public static final int RECALL_MESSAGE = 226;
public static final int RELAY_MULTI_MESSAGE = 227;
public static final int RELAY_MERGE_MESSAGE = 228;
+ public static final int SEND_MULTI_MESSAGE = 229;
+ public static final int SEND_MERGE_MESSAGE = 230;
public static final int ROBOT_LOG = 301;
public static final int ROBOT_ERROR_LOG = 302;
@@ -219,6 +223,8 @@ public class WeworkMessageBean {
public String objectName;
//二维码转码
public String qrcode;
+ //批量发送
+ public List weworkMessageList;
//添加好友
public Friend friend;
diff --git a/app/src/main/java/org/yameida/worktool/service/MyLooper.kt b/app/src/main/java/org/yameida/worktool/service/MyLooper.kt
index 0cb616c..1c43ad7 100644
--- a/app/src/main/java/org/yameida/worktool/service/MyLooper.kt
+++ b/app/src/main/java/org/yameida/worktool/service/MyLooper.kt
@@ -183,6 +183,12 @@ object MyLooper {
WeworkMessageBean.RELAY_MERGE_MESSAGE -> {
WeworkController.relayMergeMessage(message)
}
+ WeworkMessageBean.SEND_MULTI_MESSAGE -> {
+ WeworkController.sendMultiMessage(message)
+ }
+ WeworkMessageBean.SEND_MERGE_MESSAGE -> {
+ WeworkController.sendMergeMessage(message)
+ }
WeworkMessageBean.DISMISS_GROUP -> {
WeworkController.dismissGroup(message)
}
diff --git a/app/src/main/java/org/yameida/worktool/service/WeworkController.kt b/app/src/main/java/org/yameida/worktool/service/WeworkController.kt
index 81e41f5..8339ff4 100644
--- a/app/src/main/java/org/yameida/worktool/service/WeworkController.kt
+++ b/app/src/main/java/org/yameida/worktool/service/WeworkController.kt
@@ -440,6 +440,47 @@ object WeworkController {
)
}
+ /**
+ * 批量发送
+ * @see WeworkMessageBean.SEND_MULTI_MESSAGE
+ * @param message#titleList 房间名称
+ * @param message#messageList 消息列表
+ * @param message#nameList 待转发姓名列表
+ * @param message#extraText 附加留言 选填
+ * @see WeworkMessageBean.TEXT_TYPE
+ */
+ @RequestMapping
+ fun sendMultiMessage(message: WeworkMessageBean): Boolean {
+ LogUtils.d("sendMultiMessage(): ${message.titleList} ${message.messageList} ${message.nameList} ${message.extraText}")
+ return WeworkOperationImpl.sendMultiMessage(
+ message,
+ message.titleList,
+ message.messageList,
+ message.nameList,
+ message.extraText
+ )
+ }
+
+ /**
+ * 合并发送
+ * @see WeworkMessageBean.SEND_MERGE_MESSAGE
+ * @param message#titleList 房间名称
+ * @param message#weworkMessageList 消息列表
+ * @param message#nameList 待转发姓名列表
+ * @param message#extraText 附加留言 选填
+ * @see WeworkMessageBean.TEXT_TYPE
+ */
+ @RequestMapping
+ fun sendMergeMessage(message: WeworkMessageBean): Boolean {
+ LogUtils.d("sendMergeMessage(): ${message.weworkMessageList} ${message.nameList} ${message.extraText}")
+ return WeworkOperationImpl.sendMergeMessage(
+ message,
+ message.weworkMessageList,
+ message.nameList,
+ message.extraText
+ )
+ }
+
/**
* 按手机号添加好友
* @see WeworkMessageBean.ADD_FRIEND_BY_PHONE
diff --git a/app/src/main/java/org/yameida/worktool/service/WeworkLoopImpl.kt b/app/src/main/java/org/yameida/worktool/service/WeworkLoopImpl.kt
index 2e01a7e..db9c27d 100644
--- a/app/src/main/java/org/yameida/worktool/service/WeworkLoopImpl.kt
+++ b/app/src/main/java/org/yameida/worktool/service/WeworkLoopImpl.kt
@@ -620,7 +620,7 @@ object WeworkLoopImpl {
/**
* 解析消息列表里的一条消息
*/
- private fun parseChatMessageItem(
+ fun parseChatMessageItem(
node: AccessibilityNodeInfo,
titleList: ArrayList,
roomType: Int,
diff --git a/app/src/main/java/org/yameida/worktool/service/WeworkOperationImpl.kt b/app/src/main/java/org/yameida/worktool/service/WeworkOperationImpl.kt
index 0e34c27..e33565a 100644
--- a/app/src/main/java/org/yameida/worktool/service/WeworkOperationImpl.kt
+++ b/app/src/main/java/org/yameida/worktool/service/WeworkOperationImpl.kt
@@ -858,6 +858,167 @@ object WeworkOperationImpl {
return relayMultiMessage(message, titleList, messageList, nameList, extraText, "合并转发")
}
+ /**
+ * 批量发送
+ * @see WeworkMessageBean.SEND_MULTI_MESSAGE
+ * @param titleList 房间名称
+ * @param messageList 消息列表
+ * @param nameList 待转发姓名列表
+ * @param extraText 附加留言 选填
+ * @see WeworkMessageBean.TEXT_TYPE
+ */
+ fun sendMultiMessage(
+ message: WeworkMessageBean,
+ titleList: List,
+ messageList: List,
+ nameList: List,
+ extraText: String? = null
+ ): Boolean {
+ return relayMultiMessage(message, titleList, messageList, nameList, extraText, "逐条转发")
+ }
+
+ /**
+ * 合并发送
+ * @see WeworkMessageBean.SEND_MERGE_MESSAGE
+ * @param weworkMessageList 消息列表
+ * @param nameList 待转发姓名列表
+ * @param extraText 附加留言 选填
+ * @see WeworkMessageBean.TEXT_TYPE
+ */
+ fun sendMergeMessage(
+ message: WeworkMessageBean,
+ weworkMessageList: List,
+ nameList: List,
+ extraText: String? = null
+ ): Boolean {
+ val startTime = System.currentTimeMillis()
+ val groupName = "消息转发专用群"
+ message.titleList = arrayListOf(groupName)
+ if (!WeworkRoomUtil.isGroupExists(groupName)) {
+ if (!createGroup()) {
+ uploadCommandResult(message, ExecCallbackBean.ERROR_CREATE_GROUP, "创建群失败", startTime, listOf(), listOf(groupName))
+ return false
+ }
+ if (!groupRename(groupName)) {
+ uploadCommandResult(message, ExecCallbackBean.ERROR_GROUP_RENAME, "创建群成功 群改名失败", startTime, listOf(), listOf(groupName))
+ return false
+ }
+ }
+ LogUtils.d("进入转发专用群")
+ sendMessage(message, message.titleList, startTime.toString())
+ for (weworkMessage in weworkMessageList) {
+ weworkMessage.titleList = message.titleList
+ when (weworkMessage.type) {
+ WeworkMessageBean.SEND_MESSAGE -> {
+ WeworkController.sendMessage(weworkMessage)
+ }
+ WeworkMessageBean.PUSH_MICRO_DISK_IMAGE -> {
+ WeworkController.pushMicroDiskImage(weworkMessage)
+ }
+ WeworkMessageBean.PUSH_MICRO_DISK_FILE -> {
+ WeworkController.pushMicroDiskFile(weworkMessage)
+ }
+ WeworkMessageBean.PUSH_MICROPROGRAM -> {
+ WeworkController.pushMicroprogram(weworkMessage)
+ }
+ WeworkMessageBean.PUSH_OFFICE -> {
+ WeworkController.pushOffice(weworkMessage)
+ }
+ WeworkMessageBean.PUSH_FILE -> {
+ WeworkController.pushFile(weworkMessage)
+ }
+ WeworkMessageBean.PUSH_LINK -> {
+ WeworkController.pushLink(weworkMessage)
+ }
+ }
+ }
+ return sendMultiMessage(message, groupName, startTime, nameList, extraText, "合并转发")
+ }
+
+ /**
+ * 批量发送 合并发送
+ */
+ private fun sendMultiMessage(
+ message: WeworkMessageBean,
+ groupName: String,
+ startTime: Long,
+ nameList: List,
+ extraText: String? = null,
+ key: String
+ ): Boolean {
+ val titleList = arrayListOf(groupName)
+ if (WeworkRoomUtil.intoRoom(groupName)) {
+ if (WeworkTextUtil.longClickMyMessageItem(
+ //聊天消息列表 1ListView 0RecycleView xViewGroup
+ AccessibilityUtil.findOneByClazz(getRoot(), Views.ListView),
+ WeworkMessageBean.TEXT_TYPE_PLAIN,
+ startTime.toString(),
+ "多选"
+ )
+ ) {
+ LogUtils.d("多选成功")
+ } else {
+ LogUtils.e("$groupName: 多选失败")
+ uploadCommandResult(message, ExecCallbackBean.ERROR_BUTTON, "多选失败 $startTime", startTime, listOf(), titleList)
+ return false
+ }
+ //聊天消息列表 1ListView 0RecycleView xViewGroup
+ val list = AccessibilityUtil.findOneByClazz(getRoot(), Views.ListView)
+ if (list != null) {
+ val childCount = list.childCount
+ LogUtils.v("消息条数: $childCount")
+ var start = false
+ for (i in 0 until list.childCount) {
+ val item = list.getChild(i)
+ if (item != null && item.childCount > 0) {
+ if (!start) {
+ val parseChatMessageItem = WeworkLoopImpl.parseChatMessageItem(
+ item,
+ titleList,
+ WeworkMessageBean.ROOM_TYPE_EXTERNAL_GROUP,
+ false
+ )
+ if (parseChatMessageItem.itemMessageList.find { it.feature == 2 && it.text?.toString() == startTime.toString() } != null) {
+ start = true
+ }
+ }
+ if (start) {
+ AccessibilityUtil.clickByNode(WeworkController.weworkService, item)
+ LogUtils.d("单击成功")
+ sleep(Constant.POP_WINDOW_INTERVAL / 2)
+ }
+ }
+ }
+ }
+ val bottomList = AccessibilityUtil.findOnceByClazz(getRoot(), Views.ViewGroup, minChildCount = 4)
+ if (AccessibilityUtil.performClickWithSon(bottomList)) {
+ if (AccessibilityUtil.findTextAndClick(getRoot(), key)) {
+ if (relaySelectTarget(nameList, extraText)) {
+ LogUtils.d("$groupName: 转发成功")
+ uploadCommandResult(message, ExecCallbackBean.SUCCESS, "$groupName: 转发成功", startTime, titleList, listOf())
+ return true
+ } else {
+ LogUtils.e("$groupName: 转发失败")
+ uploadCommandResult(message, ExecCallbackBean.ERROR_RELAY, "$groupName: 转发失败", startTime, listOf(), titleList)
+ return false
+ }
+ } else {
+ LogUtils.e("未找到逐条转发按钮")
+ uploadCommandResult(message, ExecCallbackBean.ERROR_BUTTON, "未找到逐条转发按钮", startTime, listOf(), titleList)
+ return false
+ }
+ } else {
+ LogUtils.e("未找到转发按钮")
+ uploadCommandResult(message, ExecCallbackBean.ERROR_BUTTON, "未找到转发按钮", startTime, listOf(), titleList)
+ return false
+ }
+ } else {
+ LogUtils.d("$groupName: 转发失败 未找到房间")
+ uploadCommandResult(message, ExecCallbackBean.ERROR_INTO_ROOM, "$groupName: 转发失败 未找到房间", startTime, listOf(), titleList)
+ return false
+ }
+ }
+
/**
* 批量转发 合并转发
*/
@@ -905,7 +1066,7 @@ object WeworkOperationImpl {
hasOpenMulti = true
} else {
LogUtils.e("$title: 多选失败")
- uploadCommandResult(message, ExecCallbackBean.ERROR_BUTTON, "多选失败 $$originalContent", startTime, listOf(), titleList)
+ uploadCommandResult(message, ExecCallbackBean.ERROR_BUTTON, "多选失败 $originalContent", startTime, listOf(), titleList)
return false
}
} else {
@@ -921,7 +1082,7 @@ object WeworkOperationImpl {
hasOpenMulti = true
} else {
LogUtils.e("$title: 多选失败")
- uploadCommandResult(message, ExecCallbackBean.ERROR_BUTTON, "多选失败 $$originalContent", startTime, listOf(), titleList)
+ uploadCommandResult(message, ExecCallbackBean.ERROR_BUTTON, "多选失败 $originalContent", startTime, listOf(), titleList)
return false
}
}
@@ -937,7 +1098,6 @@ object WeworkOperationImpl {
)
) {
LogUtils.d("单击成功 $originalContent")
- hasOpenMulti = true
sleep(Constant.POP_WINDOW_INTERVAL / 2)
} else {
LogUtils.e("$title: 单击失败")
@@ -953,7 +1113,6 @@ object WeworkOperationImpl {
)
) {
LogUtils.d("单击成功 $originalContent")
- hasOpenMulti = true
sleep(Constant.POP_WINDOW_INTERVAL / 2)
} else {
LogUtils.e("$title: 单击失败")
@@ -963,8 +1122,8 @@ object WeworkOperationImpl {
}
}
if (hasOpenMulti) {
- val list = AccessibilityUtil.findOnceByClazz(getRoot(), Views.ViewGroup, minChildCount = 4)
- if (AccessibilityUtil.performClickWithSon(list)) {
+ val bottomList = AccessibilityUtil.findOnceByClazz(getRoot(), Views.ViewGroup, minChildCount = 4)
+ if (AccessibilityUtil.performClickWithSon(bottomList)) {
if (AccessibilityUtil.findTextAndClick(getRoot(), key)) {
if (relaySelectTarget(nameList, extraText)) {
LogUtils.d("$title: 转发成功")
diff --git a/app/src/main/java/org/yameida/worktool/utils/HttpUtil.kt b/app/src/main/java/org/yameida/worktool/utils/HttpUtil.kt
index 44e8818..5b32ca6 100644
--- a/app/src/main/java/org/yameida/worktool/utils/HttpUtil.kt
+++ b/app/src/main/java/org/yameida/worktool/utils/HttpUtil.kt
@@ -158,7 +158,7 @@ object HttpUtil {
override fun onError(response: Response) {
ToastUtils.showLong("推送图片失败")
LogUtils.e("推送图片失败")
- error("推送图片失败: $${titleList.joinToString()} $receivedName")
+ error("推送图片失败: ${titleList.joinToString()} $receivedName")
}
})
}