diff --git a/README.md b/README.md
index 6b3ef55..df8dea3 100644
--- a/README.md
+++ b/README.md
@@ -8,12 +8,15 @@
**发送消息**
-
注:动图为机器人自动运行
-
更多演示看这里
https://www.apifox.cn/apidoc/project-1035094/doc-840833
+
+
+机器人集成ChatGPT效果
+
+
## 兼容版本(重要)
经过测试验证的版本:企业微信 4.0.2 至 4.1.0 (1月10日上架)、企业微信政务版
diff --git a/app/src/main/java/org/yameida/worktool/Constant.kt b/app/src/main/java/org/yameida/worktool/Constant.kt
index 7c73280..cf24353 100644
--- a/app/src/main/java/org/yameida/worktool/Constant.kt
+++ b/app/src/main/java/org/yameida/worktool/Constant.kt
@@ -4,7 +4,7 @@ import com.blankj.utilcode.util.SPUtils
object Constant {
- val AVAILABLE_VERSION = arrayListOf("4.0.2", "4.0.6", "4.0.8", "4.0.10", "4.0.12", "4.0.16", "4.0.18", "4.0.19", "4.0.20", "4.1.0")
+ val AVAILABLE_VERSION = arrayListOf("4.0.2", "4.0.6", "4.0.8", "4.0.10", "4.0.12", "4.0.16", "4.0.18", "4.0.19", "4.0.20", "4.1.0", "4.1.2")
const val PACKAGE_NAMES = "com.tencent.wework"
const val WEWORK_NOTIFY = "wework_notify"
const val LONG_INTERVAL = 5000L
diff --git a/app/src/main/java/org/yameida/worktool/MyApplication.kt b/app/src/main/java/org/yameida/worktool/MyApplication.kt
index 0348827..b753bf8 100644
--- a/app/src/main/java/org/yameida/worktool/MyApplication.kt
+++ b/app/src/main/java/org/yameida/worktool/MyApplication.kt
@@ -51,7 +51,7 @@ class MyApplication : Application() {
if (SPUtils.getInstance().getString("uminit", "1") == "1") {
UMConfigure.init(this, key, channel, UMConfigure.DEVICE_TYPE_PHONE, "")
}
- TalkingDataSDK.init(this, "80E9C84E39904DAFB28562910FF7C86C", "worktool_master", Constant.robotId);
+ TalkingDataSDK.init(this, "80E9C84E39904DAFB28562910FF7C86C", "worktool_master", Constant.robotId)
//初始化企业微信sdk
IWWAPIUtil.init(this)
//初始化自动更新
diff --git a/app/src/main/java/org/yameida/worktool/activity/ListenActivity.kt b/app/src/main/java/org/yameida/worktool/activity/ListenActivity.kt
index a94d144..112b90c 100644
--- a/app/src/main/java/org/yameida/worktool/activity/ListenActivity.kt
+++ b/app/src/main/java/org/yameida/worktool/activity/ListenActivity.kt
@@ -24,6 +24,8 @@ import org.yameida.worktool.utils.envcheck.CheckRoot
class ListenActivity : AppCompatActivity() {
+ var riskRetry: Int = 0
+
companion object {
/**
* @param type 0=游客登录
@@ -132,8 +134,17 @@ class ListenActivity : AppCompatActivity() {
ToastUtils.showLong("请先填写并保存链接号~")
} else if (!PermissionHelper.isAccessibilitySettingOn()) {
if (SPUtils.getInstance().getBoolean("risk", false)) {
+ if (riskRetry > 10) {
+ ToastUtils.showLong("再点${20 - riskRetry}次 允许本次运行")
+ } else {
+ ToastUtils.showLong("新号请勿使用模拟器/云手机!")
+ }
+ if (++riskRetry > 20) {
+ SPUtils.getInstance().put("risk", false)
+ startActivity(Intent(this, AccessibilityGuideActivity::class.java))
+ ToastUtils.showLong("风险提示:临时允许本次运行")
+ }
sw_accessibility.isChecked = false
- ToastUtils.showLong("新号请勿使用模拟器/云手机!")
} else {
startActivity(Intent(this, AccessibilityGuideActivity::class.java))
}
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 9701fc0..cae6545 100644
--- a/app/src/main/java/org/yameida/worktool/model/WeworkMessageBean.java
+++ b/app/src/main/java/org/yameida/worktool/model/WeworkMessageBean.java
@@ -39,6 +39,7 @@ public class WeworkMessageBean {
* 切换企业 SWITCH_CORP
* 推送链接 PUSH_LINK
* 修改群成员信息 MODIFY_GROUP_MEMBER_INFO
+ * 撤回消息 RECALL_MESSAGE
*
* 非操作类型 300
* 机器人普通日志记录 ROBOT_LOG
@@ -83,6 +84,7 @@ public class WeworkMessageBean {
public static final int SWITCH_CORP = 223;
public static final int PUSH_LINK = 224;
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;
@@ -298,7 +300,6 @@ public class WeworkMessageBean {
//我的信息
public static class MyInfo {
- //{姓名=企微RPA机器人, 工作签名=添加工作签名…, 手机=17326101105, 别名=企微RPA机器人, 对外信息显示=企微RPA机器人@擎盾数据, 职务=企微RPA机器人, 所在企业=TEST 擎盾数据, 性别=男}
public String name;
public String alias;
public String gender;
@@ -362,12 +363,12 @@ public class WeworkMessageBean {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
WeworkMessageBean that = (WeworkMessageBean) o;
- return Objects.equals(messageId, that.messageId) && Objects.equals(titleList, that.titleList) && Objects.equals(messageList, that.messageList) && Objects.equals(log, that.log) && Objects.equals(roomType, that.roomType) && Objects.equals(receivedName, that.receivedName) && Objects.equals(receivedContent, that.receivedContent) && Objects.equals(at, that.at) && Objects.equals(atList, that.atList) && Objects.equals(originalContent, that.originalContent) && Objects.equals(nameList, that.nameList) && Objects.equals(extraText, that.extraText) && Objects.equals(textType, that.textType) && Objects.equals(groupName, that.groupName) && Objects.equals(groupOwner, that.groupOwner) && Objects.equals(selectList, that.selectList) && Objects.equals(groupNumber, that.groupNumber) && Objects.equals(groupAnnouncement, that.groupAnnouncement) && Objects.equals(groupRemark, that.groupRemark) && Objects.equals(groupTemplate, that.groupTemplate) && Objects.equals(newGroupName, that.newGroupName) && Objects.equals(newGroupAnnouncement, that.newGroupAnnouncement) && Objects.equals(removeList, that.removeList) && Objects.equals(showMessageHistory, that.showMessageHistory) && Objects.equals(myInfo, that.myInfo) && Objects.equals(objectName, that.objectName) && Objects.equals(qrcode, that.qrcode) && Objects.equals(friend, that.friend) && Objects.equals(fileBase64, that.fileBase64) && Objects.equals(fileUrl, that.fileUrl) && Objects.equals(fileType, that.fileType) && Objects.equals(type, that.type);
+ return Objects.equals(titleList, that.titleList) && Objects.equals(messageList, that.messageList) && Objects.equals(log, that.log) && Objects.equals(roomType, that.roomType) && Objects.equals(receivedName, that.receivedName) && Objects.equals(receivedContent, that.receivedContent) && Objects.equals(at, that.at) && Objects.equals(atList, that.atList) && Objects.equals(originalContent, that.originalContent) && Objects.equals(nameList, that.nameList) && Objects.equals(extraText, that.extraText) && Objects.equals(textType, that.textType) && Objects.equals(groupName, that.groupName) && Objects.equals(groupOwner, that.groupOwner) && Objects.equals(selectList, that.selectList) && Objects.equals(groupNumber, that.groupNumber) && Objects.equals(groupAnnouncement, that.groupAnnouncement) && Objects.equals(groupRemark, that.groupRemark) && Objects.equals(groupTemplate, that.groupTemplate) && Objects.equals(newGroupName, that.newGroupName) && Objects.equals(newGroupAnnouncement, that.newGroupAnnouncement) && Objects.equals(removeList, that.removeList) && Objects.equals(showMessageHistory, that.showMessageHistory) && Objects.equals(myInfo, that.myInfo) && Objects.equals(objectName, that.objectName) && Objects.equals(qrcode, that.qrcode) && Objects.equals(friend, that.friend) && Objects.equals(fileBase64, that.fileBase64) && Objects.equals(fileUrl, that.fileUrl) && Objects.equals(fileType, that.fileType) && Objects.equals(type, that.type);
}
@Override
public int hashCode() {
- return Objects.hash(messageId, titleList, messageList, log, roomType, receivedName, receivedContent, at, atList, originalContent, nameList, extraText, textType, groupName, groupOwner, selectList, groupNumber, groupAnnouncement, groupRemark, groupTemplate, newGroupName, newGroupAnnouncement, removeList, showMessageHistory, myInfo, objectName, qrcode, friend, fileBase64, fileUrl, fileType, type);
+ return Objects.hash(titleList, messageList, log, roomType, receivedName, receivedContent, at, atList, originalContent, nameList, extraText, textType, groupName, groupOwner, selectList, groupNumber, groupAnnouncement, groupRemark, groupTemplate, newGroupName, newGroupAnnouncement, removeList, showMessageHistory, myInfo, objectName, qrcode, friend, fileBase64, fileUrl, fileType, type);
}
@Override
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 6354ee6..a09ba9d 100644
--- a/app/src/main/java/org/yameida/worktool/service/MyLooper.kt
+++ b/app/src/main/java/org/yameida/worktool/service/MyLooper.kt
@@ -99,8 +99,9 @@ object MyLooper {
} else {
WeworkController.mainLoopRunning = false
LogUtils.v("加入指令到执行队列", if (message.fileBase64.isNullOrEmpty()) GsonUtils.toJson(message) else message.type)
+ getInstance().removeMessages(message.type * message.hashCode() + (System.currentTimeMillis() / 10000).toInt())
getInstance().sendMessage(Message.obtain().apply {
- what = message.type * message.hashCode()
+ what = message.type * message.hashCode() + (System.currentTimeMillis() / 10000).toInt()
obj = message.apply {
messageId = messageList.messageId
apiSend = messageList.apiSend
@@ -165,6 +166,9 @@ object MyLooper {
WeworkMessageBean.PUSH_LINK -> {
WeworkController.pushLink(message)
}
+ WeworkMessageBean.RECALL_MESSAGE -> {
+ WeworkController.recallMessage(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 856edca..e05db01 100644
--- a/app/src/main/java/org/yameida/worktool/service/WeworkController.kt
+++ b/app/src/main/java/org/yameida/worktool/service/WeworkController.kt
@@ -379,6 +379,25 @@ object WeworkController {
)
}
+ /**
+ * 撤回消息
+ * @see WeworkMessageBean.RECALL_MESSAGE
+ * @param message#titleList 房间名称
+ * @param message#originalContent 原始消息的内容
+ * @param message#textType 原始消息的消息类型
+ * @see WeworkMessageBean.TEXT_TYPE
+ */
+ @RequestMapping
+ fun recallMessage(message: WeworkMessageBean): Boolean {
+ LogUtils.d("recallMessage(): ${message.titleList} ${message.originalContent} ${message.textType}")
+ return WeworkOperationImpl.recallMessage(
+ message,
+ message.titleList,
+ message.originalContent,
+ message.textType
+ )
+ }
+
/**
* 按手机号添加好友
* @see WeworkMessageBean.ADD_FRIEND_BY_PHONE
diff --git a/app/src/main/java/org/yameida/worktool/service/WeworkGetImpl.kt b/app/src/main/java/org/yameida/worktool/service/WeworkGetImpl.kt
index e013504..7ccf5c7 100644
--- a/app/src/main/java/org/yameida/worktool/service/WeworkGetImpl.kt
+++ b/app/src/main/java/org/yameida/worktool/service/WeworkGetImpl.kt
@@ -285,6 +285,13 @@ object WeworkGetImpl {
}
}
}
+ val tvCountFlag = AccessibilityUtil.findOnceByText(getRoot(), "查看全部群成员", exact = true)
+ val tvCount = AccessibilityUtil.findBackNode(tvCountFlag)
+ if (tvCount != null && tvCount.text != null) {
+ LogUtils.d("群成员: " + tvCount.text)
+ val count = tvCount.text.toString().replace("人", "")
+ weworkMessageBean.groupNumber = count.toIntOrNull()
+ }
val gridView = AccessibilityUtil.findOneByClazz(getRoot(), Views.GridView)
if (gridView != null && gridView.childCount >= 2) {
val tvOwnerName = AccessibilityUtil.findOnceByClazz(gridView.getChild(0), Views.TextView)
@@ -292,13 +299,17 @@ object WeworkGetImpl {
LogUtils.d("群主: " + tvOwnerName.text)
weworkMessageBean.groupOwner = tvOwnerName.text.toString()
}
- }
- val tvCountFlag = AccessibilityUtil.findOnceByText(getRoot(), "查看全部群成员", exact = true)
- val tvCount = AccessibilityUtil.findBackNode(tvCountFlag)
- if (tvCount != null && tvCount.text != null) {
- LogUtils.d("群成员: " + tvCount.text)
- val count = tvCount.text.toString().replace("人", "")
- weworkMessageBean.groupNumber = count.toIntOrNull()
+ if (!saveMembers && weworkMessageBean.groupNumber ?: 0 <= 8) {
+ val set = linkedSetOf