From 38983294be0e55fde059da5128311f1a7a597f74 Mon Sep 17 00:00:00 2001 From: gallonyin Date: Wed, 5 Apr 2023 23:18:21 +0800 Subject: [PATCH] =?UTF-8?q?update=20=E5=90=88=E5=B9=B6=E5=8F=91=E9=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../worktool/model/WeworkMessageBean.java | 6 + .../org/yameida/worktool/service/MyLooper.kt | 6 + .../worktool/service/WeworkController.kt | 41 +++++ .../worktool/service/WeworkLoopImpl.kt | 2 +- .../worktool/service/WeworkOperationImpl.kt | 171 +++++++++++++++++- .../org/yameida/worktool/utils/HttpUtil.kt | 2 +- 6 files changed, 220 insertions(+), 8 deletions(-) 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") } }) }