diff --git a/README.md b/README.md index b0a70108..8ba7c1ac 100644 --- a/README.md +++ b/README.md @@ -56,7 +56,7 @@ bot.login(password); # npm test ``` -**文档:** +**相关文档:** [功能实现程度](./docs/project.md) [API](./docs/api.md) diff --git a/client.js b/client.js index 89f5fe2c..ebc9e402 100644 --- a/client.js +++ b/client.js @@ -246,17 +246,23 @@ class AndroidClient extends Client { this.doCircle(); try { await wt.heartbeat.call(this); + if (Date.now() - this.send_timestamp >= 59000) { + if (!await core.getMsg.call(this)) { + if (!await core.getMsg.call(this) && this.isOnline()) + this.destroy(); + } + } } catch { core.getMsg.call(this); try { await wt.heartbeat.call(this); } catch { this.logger.warn("Heartbeat timeout!"); - if (Date.now() - this.recv_timestamp > 3000) + if (Date.now() - this.recv_timestamp > 5000 && this.isOnline()) this.destroy(); } } - }, 60000); + }, 30000); } stopHeartbeat() { clearInterval(this.heartbeat); @@ -372,8 +378,6 @@ class AndroidClient extends Client { } doCircle() { wt.exchangeEMP.call(this); - if (Date.now() - this.send_timestamp >= 59000) - core.getMsg.call(this); for (let time of this.seq_cache.keys()) { if (timestamp() - time >= 60) this.seq_cache.delete(time); @@ -743,6 +747,3 @@ function createClient(uin, config = {}) { module.exports = { createClient, setGlobalConfig }; - -const c = new AndroidClient(123456) -c.login().then(console.log) diff --git a/docs/api.md b/docs/api.md index 85c03284..6b4275fb 100644 --- a/docs/api.md +++ b/docs/api.md @@ -4,7 +4,7 @@ # API -+ [启动-创建实例](#createClient(uin[,config])) ++ [启动-创建实例](#createclientuinconfig) + [系统类API](#系统类API) + [应用类API](#应用类API) + [获取列表和资料](#获取好友群群员列表和资料) @@ -29,7 +29,7 @@ const uin = 123456789, config = {}; const client = oicq.createClient(uin, config); ``` -关于config请参考头文件中的 [ConfBot](../client.d.ts#ConfBot) + > 关于config请参考头文件中的 [ConfBot](../client.d.ts#ConfBot) ---- @@ -62,8 +62,6 @@ const client = oicq.createClient(uin, config); } ``` -使用 [CQHTTP](https://github.com/howmanybots/onebot/blob/master/v11/specs/api/public.md) 风格的命名和参数。 - ---- ### 获取好友、群、群员列表和资料 @@ -93,7 +91,7 @@ message可以使用 `Array` 格式或 `String` 格式,支持CQ码 + async `client.sendDiscussMsg(discuss_id, user_id, message[, auto_escape])` + async `client.deleteMsg(message_id)` -※ auto_escape参数:是否原样输出CQ码(既不解析),默认false + > auto_escape参数:是否原样输出CQ码(既不解析),默认false ---- @@ -122,6 +120,8 @@ message可以使用 `Array` 格式或 `String` 格式,支持CQ码 ### 加群加好友、删好友、邀请好友、点赞 + > 注意:加群加好友本身是风险接口,频繁调用会被风控(表现为几天内别人无法看到你的请求) + + async `client.addGroup(group_id[, comment])` + async `client.addFriend(group_id, user_id[, comment])` + async `client.deleteFriend(user_id[, block])` block默认true @@ -159,7 +159,7 @@ message可以使用 `Array` 格式或 `String` 格式,支持CQ码 ### 重载好友列表、群列表 -注意:一旦调用,重载完成之前bot不接受其他任何请求,也不会上报任何事件 + > 注意:一旦调用,重载完成之前bot不接受其他任何请求,也不会上报任何事件 + async `client.reloadFriendList()` + async `client.reloadGroupList()` diff --git a/docs/event.md b/docs/event.md index df049bd4..364e82e3 100644 --- a/docs/event.md +++ b/docs/event.md @@ -55,8 +55,6 @@ client.on("notice", (data)=>console.log(data)); //监听所有的通知事件 ---- -以下事件使用 [CQHTTP](https://github.com/howmanybots/onebot/blob/master/v11/specs/event/README.md) 风格的命名和字段 - ## Event: `message` + **message.private** diff --git a/lib/core.js b/lib/core.js index f195d9db..9f13753e 100644 --- a/lib/core.js +++ b/lib/core.js @@ -144,9 +144,11 @@ async function getMsg(sync_flag = 0) { } if (rsp[4] !== 2) getMsg.call(this, rsp[4]); + return true; } catch (e) { this.logger.debug("getMsg发生错误。"); this.logger.debug(e); + return false; } } diff --git a/lib/resource.js b/lib/resource.js index ebb9a58a..1c5b4560 100644 --- a/lib/resource.js +++ b/lib/resource.js @@ -85,15 +85,15 @@ async function initFL() { */ async function initGL() { this.gl = new Map; - const GetTroopListReqV2Simplify = jce.encodeStruct([ + const GetTroopListReqV2 = jce.encodeStruct([ this.uin, 0, null, [], 1, 8, 0, 1, 1 ]); const extra = { req_id: this.seq_id + 1, service: "mqq.IMService.FriendListServiceServantObj", - method: "GetTroopListReqV2Simplify", + method: "GetTroopListReqV2", }; - const body = jce.encodeWrapper({GetTroopListReqV2Simplify}, extra); + const body = jce.encodeWrapper({GetTroopListReqV2}, extra); try { const blob = await this.sendUNI("friendlist.GetTroopListReqV2", body); const nested = jce.decodeWrapper(blob);