update 合并发送
This commit is contained in:
@@ -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;
|
||||||
|
|||||||
@@ -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)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
@@ -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: 转发成功")
|
||||||
|
|||||||
@@ -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")
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user