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 ad2d7d3..cae6545 100644 --- a/app/src/main/java/org/yameida/worktool/model/WeworkMessageBean.java +++ b/app/src/main/java/org/yameida/worktool/model/WeworkMessageBean.java @@ -38,6 +38,7 @@ public class WeworkMessageBean { * 打卡 CLOCK_IN * 切换企业 SWITCH_CORP * 推送链接 PUSH_LINK + * 修改群成员信息 MODIFY_GROUP_MEMBER_INFO * 撤回消息 RECALL_MESSAGE *
* 非操作类型 300 @@ -82,7 +83,8 @@ public class WeworkMessageBean { public static final int CLOCK_IN = 222; public static final int SWITCH_CORP = 223; public static final int PUSH_LINK = 224; - public static final int RECALL_MESSAGE = 225; + public static final int MODIFY_GROUP_MEMBER_INFO = 225; + public static final int RECALL_MESSAGE = 226; public static final int ROBOT_LOG = 301; public static final int ROBOT_ERROR_LOG = 302; 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 4d1479a..a09ba9d 100644 --- a/app/src/main/java/org/yameida/worktool/service/MyLooper.kt +++ b/app/src/main/java/org/yameida/worktool/service/MyLooper.kt @@ -175,6 +175,9 @@ object MyLooper { WeworkMessageBean.ADD_FRIEND_BY_GROUP -> { WeworkController.addFriendByGroup(message) } + WeworkMessageBean.MODIFY_GROUP_MEMBER_INFO -> { + WeworkController.modifyGroupMemberInfo(message) + } WeworkMessageBean.ADD_NEED_DEAL -> { WeworkController.addNeedDeal(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 d1079f5..e05db01 100644 --- a/app/src/main/java/org/yameida/worktool/service/WeworkController.kt +++ b/app/src/main/java/org/yameida/worktool/service/WeworkController.kt @@ -204,6 +204,22 @@ object WeworkController { ) } + /** + * 给群成员添加备注 + * @see WeworkMessageBean.MODIFY_GROUP_MEMBER_INFO + * @param message#groupName 外部群 + * @param message#friend 待添加用户 + */ + @RequestMapping + fun modifyGroupMemberInfo(message: WeworkMessageBean): Boolean { + LogUtils.d("modifyGroupMemberInfo(): ${message.groupName} ${message.friend}") + return WeworkOperationImpl.modifyGroupMemberInfo( + message, + message.groupName, + message.friend + ) + } + /** * 添加待办 * @see WeworkMessageBean.ADD_NEED_DEAL 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 debcaae..e3492ea 100644 --- a/app/src/main/java/org/yameida/worktool/service/WeworkOperationImpl.kt +++ b/app/src/main/java/org/yameida/worktool/service/WeworkOperationImpl.kt @@ -1039,6 +1039,86 @@ object WeworkOperationImpl { } } + /** + * 给群成员添加备注 + * @see WeworkMessageBean.MODIFY_GROUP_MEMBER_INFO + * @param groupName 外部群 + * @param friend 待添加用户 + */ + fun modifyGroupMemberInfo( + message: WeworkMessageBean, + groupName: String, + friend: WeworkMessageBean.Friend + ): Boolean { + val startTime = System.currentTimeMillis() + if (WeworkRoomUtil.intoRoom(groupName) && WeworkRoomUtil.intoGroupManager()) { + if (AccessibilityUtil.findTextAndClick(getRoot(), "查看全部群成员")) { + val title = friend.name + val list = AccessibilityUtil.findOneByClazz(getRoot(), Views.ListView) + if (list != null) { + val frontNode = AccessibilityUtil.findFrontNode(list) + val textViewList = AccessibilityUtil.findAllOnceByClazz(frontNode, Views.TextView) + .filter { it.text == null } + if (textViewList.size >= 2) { + val searchButton: AccessibilityNodeInfo = textViewList[textViewList.size - 1] + AccessibilityUtil.performClick(searchButton) + val needTrim = title.contains(Constant.regTrimTitle) + val trimTitle = title.replace(Constant.regTrimTitle, "") + AccessibilityUtil.findTextInput(getRoot(), trimTitle) + sleep(Constant.CHANGE_PAGE_INTERVAL) + //消息页搜索结果列表 + val selectListView = AccessibilityUtil.findOneByClazz(getRoot(), Views.ListView) + val reverseRegexTitle = RegexHelper.reverseRegexTitle(trimTitle) + val regex1 = (if (Constant.friendRemarkStrict) "^$reverseRegexTitle" else "^(微信昵称:)?$reverseRegexTitle") + + (if (needTrim) ".*?" else "(-.*)?(…)?(\\(.*?\\))?$") + val regex2 = ".*?\\($reverseRegexTitle\\)$" + val regex = "($regex1)|($regex2)" + val matchSelect = AccessibilityUtil.findOneByTextRegex( + selectListView, + regex, + timeout = 2000, + root = false + ) + if (selectListView != null && matchSelect != null) { + for (i in 0 until selectListView.childCount) { + val item = selectListView.getChild(i) + val searchResult = AccessibilityUtil.findOnceByTextRegex(item, regex) + //过滤异常好友 + if (searchResult?.parent != null && searchResult.parent.childCount < 3) { + item.refresh() + val imageView = + AccessibilityUtil.findOneByClazz(item, Views.ImageView, root = false) + AccessibilityUtil.performClick(imageView) + break + } + } + modifyFriendInfo(friend) + return false + } else { + LogUtils.e("未搜索到结果: ${friend.name}") + uploadCommandResult(message, ExecCallbackBean.ERROR_BUTTON, "未搜索到结果: ${friend.name}", startTime, listOf(), listOf(friend.name)) + return false + } + } else { + LogUtils.e("未发现搜索按钮") + uploadCommandResult(message, ExecCallbackBean.ERROR_BUTTON, "未发现搜索按钮", startTime, listOf(), listOf(friend.name)) + return false + } + } else { + LogUtils.e("未发现通讯录列表") + uploadCommandResult(message, ExecCallbackBean.ERROR_BUTTON, "未发现通讯录列表", startTime, listOf(), listOf(friend.name)) + return false + } + } else { + uploadCommandResult(message, ExecCallbackBean.ERROR_BUTTON, "未找到查看全部群成员按钮 $groupName", startTime, listOf(), listOf(friend.name)) + return false + } + } else { + uploadCommandResult(message, ExecCallbackBean.ERROR_INTO_ROOM, "进入房间失败 $groupName", startTime, listOf(), listOf(friend.name)) + return false + } + } + /** * 添加待办 * @see WeworkMessageBean.ADD_NEED_DEAL