update 合并发送

This commit is contained in:
gallonyin
2023-04-05 23:18:21 +08:00
parent 401cc25ca7
commit 38983294be
6 changed files with 220 additions and 8 deletions

View File

@@ -42,6 +42,8 @@ public class WeworkMessageBean {
* 撤回消息 RECALL_MESSAGE * 撤回消息 RECALL_MESSAGE
* 批量转发 RELAY_MULTI_MESSAGE * 批量转发 RELAY_MULTI_MESSAGE
* 合并转发 RELAY_MERGE_MESSAGE * 合并转发 RELAY_MERGE_MESSAGE
* 批量发送 SEND_MULTI_MESSAGE
* 合并发送 SEND_MERGE_MESSAGE
* <p> * <p>
* 非操作类型 300 * 非操作类型 300
* 机器人普通日志记录 ROBOT_LOG * 机器人普通日志记录 ROBOT_LOG
@@ -89,6 +91,8 @@ public class WeworkMessageBean {
public static final int RECALL_MESSAGE = 226; public static final int RECALL_MESSAGE = 226;
public static final int RELAY_MULTI_MESSAGE = 227; public static final int RELAY_MULTI_MESSAGE = 227;
public static final int RELAY_MERGE_MESSAGE = 228; 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_LOG = 301;
public static final int ROBOT_ERROR_LOG = 302; public static final int ROBOT_ERROR_LOG = 302;
@@ -219,6 +223,8 @@ public class WeworkMessageBean {
public String objectName; public String objectName;
//二维码转码 //二维码转码
public String qrcode; public String qrcode;
//批量发送
public List<WeworkMessageBean> weworkMessageList;
//添加好友 //添加好友
public Friend friend; public Friend friend;

View File

@@ -183,6 +183,12 @@ object MyLooper {
WeworkMessageBean.RELAY_MERGE_MESSAGE -> { WeworkMessageBean.RELAY_MERGE_MESSAGE -> {
WeworkController.relayMergeMessage(message) WeworkController.relayMergeMessage(message)
} }
WeworkMessageBean.SEND_MULTI_MESSAGE -> {
WeworkController.sendMultiMessage(message)
}
WeworkMessageBean.SEND_MERGE_MESSAGE -> {
WeworkController.sendMergeMessage(message)
}
WeworkMessageBean.DISMISS_GROUP -> { WeworkMessageBean.DISMISS_GROUP -> {
WeworkController.dismissGroup(message) WeworkController.dismissGroup(message)
} }

View File

@@ -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 * @see WeworkMessageBean.ADD_FRIEND_BY_PHONE

View File

@@ -620,7 +620,7 @@ object WeworkLoopImpl {
/** /**
* 解析消息列表里的一条消息 * 解析消息列表里的一条消息
*/ */
private fun parseChatMessageItem( fun parseChatMessageItem(
node: AccessibilityNodeInfo, node: AccessibilityNodeInfo,
titleList: ArrayList<String>, titleList: ArrayList<String>,
roomType: Int, roomType: Int,

View File

@@ -858,6 +858,167 @@ object WeworkOperationImpl {
return relayMultiMessage(message, titleList, messageList, nameList, extraText, "合并转发") 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<String>,
messageList: List<WeworkMessageBean.SubMessageBean>,
nameList: List<String>,
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<WeworkMessageBean>,
nameList: List<String>,
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<String>,
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 hasOpenMulti = true
} else { } else {
LogUtils.e("$title: 多选失败") LogUtils.e("$title: 多选失败")
uploadCommandResult(message, ExecCallbackBean.ERROR_BUTTON, "多选失败 $$originalContent", startTime, listOf(), titleList) uploadCommandResult(message, ExecCallbackBean.ERROR_BUTTON, "多选失败 $originalContent", startTime, listOf(), titleList)
return false return false
} }
} else { } else {
@@ -921,7 +1082,7 @@ object WeworkOperationImpl {
hasOpenMulti = true hasOpenMulti = true
} else { } else {
LogUtils.e("$title: 多选失败") LogUtils.e("$title: 多选失败")
uploadCommandResult(message, ExecCallbackBean.ERROR_BUTTON, "多选失败 $$originalContent", startTime, listOf(), titleList) uploadCommandResult(message, ExecCallbackBean.ERROR_BUTTON, "多选失败 $originalContent", startTime, listOf(), titleList)
return false return false
} }
} }
@@ -937,7 +1098,6 @@ object WeworkOperationImpl {
) )
) { ) {
LogUtils.d("单击成功 $originalContent") LogUtils.d("单击成功 $originalContent")
hasOpenMulti = true
sleep(Constant.POP_WINDOW_INTERVAL / 2) sleep(Constant.POP_WINDOW_INTERVAL / 2)
} else { } else {
LogUtils.e("$title: 单击失败") LogUtils.e("$title: 单击失败")
@@ -953,7 +1113,6 @@ object WeworkOperationImpl {
) )
) { ) {
LogUtils.d("单击成功 $originalContent") LogUtils.d("单击成功 $originalContent")
hasOpenMulti = true
sleep(Constant.POP_WINDOW_INTERVAL / 2) sleep(Constant.POP_WINDOW_INTERVAL / 2)
} else { } else {
LogUtils.e("$title: 单击失败") LogUtils.e("$title: 单击失败")
@@ -963,8 +1122,8 @@ object WeworkOperationImpl {
} }
} }
if (hasOpenMulti) { if (hasOpenMulti) {
val list = AccessibilityUtil.findOnceByClazz(getRoot(), Views.ViewGroup, minChildCount = 4) val bottomList = AccessibilityUtil.findOnceByClazz(getRoot(), Views.ViewGroup, minChildCount = 4)
if (AccessibilityUtil.performClickWithSon(list)) { if (AccessibilityUtil.performClickWithSon(bottomList)) {
if (AccessibilityUtil.findTextAndClick(getRoot(), key)) { if (AccessibilityUtil.findTextAndClick(getRoot(), key)) {
if (relaySelectTarget(nameList, extraText)) { if (relaySelectTarget(nameList, extraText)) {
LogUtils.d("$title: 转发成功") LogUtils.d("$title: 转发成功")

View File

@@ -158,7 +158,7 @@ object HttpUtil {
override fun onError(response: Response<String>) { override fun onError(response: Response<String>) {
ToastUtils.showLong("推送图片失败") ToastUtils.showLong("推送图片失败")
LogUtils.e("推送图片失败") LogUtils.e("推送图片失败")
error("推送图片失败: $${titleList.joinToString()} $receivedName") error("推送图片失败: ${titleList.joinToString()} $receivedName")
} }
}) })
} }