!67 icqq更新,适配新版签名api(unidbg-fetch-qsign-1.1.4~1.1.5),更新星铁1.2上半版本卡池,同步Yunzai-Bot的PR!93
Merge pull request !67 from touchscale/master
This commit is contained in:
		
						commit
						c6dec8635e
					
				|  | @ -21,7 +21,7 @@ | |||
|     "chalk": "^5.2.0", | ||||
|     "chokidar": "^3.5.3", | ||||
|     "https-proxy-agent": "5.0.1", | ||||
|     "icqq": "^0.4.10", | ||||
|     "icqq": "^0.4.11", | ||||
|     "image-size": "^1.0.2", | ||||
|     "inquirer": "^8.2.5", | ||||
|     "lodash": "^4.17.21", | ||||
|  |  | |||
|  | @ -27,7 +27,7 @@ export class payLog extends plugin { | |||
|         }, | ||||
|         { | ||||
|           // 优先级高于抽卡记录,但是发送抽卡链接时不会抢指令,对比过米游社链接和抽卡链接,该字段为米游社链接字段
 | ||||
|           reg: '(.*)(bill-record-user|customer-claim|player-log|user.mihoyo.com)(.*)', | ||||
|           reg: '(.*)(user-game-search|bill-record-user|customer-claim|player-log|user.mihoyo.com)(.*)', | ||||
|           fnc: 'getAuthKey' | ||||
|         }, | ||||
|         { | ||||
|  | @ -89,8 +89,12 @@ export class payLog extends plugin { | |||
|     } | ||||
| 
 | ||||
|     // 解析出authKey
 | ||||
|     let userUrl = this.e.msg.replace(/[\u4e00-\u9fa5]/g, '').replace(/\s+/g, '') | ||||
|     this.authKey = url.parse(userUrl, true, true).query.authkey | ||||
|     let match = this.e.msg.match(/&authkey=([^&\s\u4e00-\u9fa5]+)/) | ||||
|     if (!match) { | ||||
|       this.reply('链接无效,请重新发送') | ||||
|       return false | ||||
|     } | ||||
|     this.authKey = decodeURIComponent(match[1]) | ||||
| 
 | ||||
|     // 获取数据
 | ||||
|     this.reply('正在获取消费数据,可能需要30s~~') | ||||
|  | @ -143,7 +147,7 @@ export class payLog extends plugin { | |||
|   } | ||||
| 
 | ||||
|   payLogHelp (e) { | ||||
|     e.reply('安卓教程: https://b23.tv/K5qfLad\n苹果用户可【先】发送最新获取的抽卡记录链接,【再】发送【#充值记录】或【#更新充值统计】来获取') | ||||
|     e.reply('安卓教程: https://b23.tv/K5qfLad\n苹果用户可【先】发送最新获取的抽卡记录链接,【再】发送【#充值记录】或【#更新充值统计】来获取(注:通过抽卡链接获取充值记录大概率已失效)') | ||||
|   } | ||||
| 
 | ||||
|   /** 判断主uid,若没有则返回false,有则返回主uid */ | ||||
|  |  | |||
|  | @ -1,3 +1,12 @@ | |||
| - from: '2023-07-19 11:00:00' | ||||
|   to: '2023-08-09 11:59:59' | ||||
|   five: | ||||
|     - 刃 | ||||
|   four: | ||||
|     - 阿兰 | ||||
|     - 娜塔莎 | ||||
|     - 素裳 | ||||
|   name: 业途游魂 | ||||
| - from: '2023-06-28 12:00:00' | ||||
|   to: '2023-07-18 14:59:59' | ||||
|   five: | ||||
|  |  | |||
|  | @ -1,3 +1,12 @@ | |||
| - from: '2023-07-19 11:00:00' | ||||
|   to: '2023-08-09 11:59:59'' | ||||
|   five: | ||||
|     - 到不了的彼岸 | ||||
|   four: | ||||
|     - 秘密誓心 | ||||
|     - 同一种心情 | ||||
|     - 论剑 | ||||
|   name: 流光定影 | ||||
| - from: '2023-06-28 12:00:00' | ||||
|   to: '2023-07-18 14:59:59' | ||||
|   five: | ||||
|  |  | |||
|  | @ -22,11 +22,13 @@ export class PayData { | |||
|   async getOringinalData (id = '') { | ||||
|     let res = await fetch(this.getUrl() + id, this.headers) | ||||
|     let ret = await res.json() | ||||
|     // 加一个authkey不同情况
 | ||||
|     if (ret?.retcode === -101 || ret?.retcode === -100) { | ||||
|       return ret.retcode === -101 ? { errorMsg: '您的链接过期,请重新获取' } : { errorMsg: '链接不正确,请重新获取' } | ||||
|     let check = this.checkResult(ret) | ||||
|     if (check?.errorMsg) return check | ||||
|     let list = ret?.data?.list | ||||
|     if (!Array.isArray(list)) { | ||||
|       console.error(ret) | ||||
|       return { errorMsg: '获取失败,错误码:' + ret?.retcode } | ||||
|     } | ||||
|     let list = ret.data.list | ||||
|     if (list.length === 20) { | ||||
|       this.#oringinData.push(...list) | ||||
|       await this.getOringinalData(list[19].id) | ||||
|  | @ -41,7 +43,13 @@ export class PayData { | |||
|   async getPrimogemLog (id = '') { | ||||
|     let res = await fetch(this.getUrl('getPrimogemLog') + id, this.headers) | ||||
|     let ret = await res.json() | ||||
|     let list = ret.data.list | ||||
|     let check = this.checkResult(ret) | ||||
|     if (check?.errorMsg) return check | ||||
|     let list = ret?.data?.list | ||||
|     if (!Array.isArray(list)) { | ||||
|       console.error(ret) | ||||
|       return { errorMsg: '获取失败,错误码:' + ret?.retcode } | ||||
|     } | ||||
|     if (list.length === 20) { | ||||
|       list.forEach(v => { | ||||
|         if (v.add_num === '680') this.#oringinData.push(v) | ||||
|  | @ -56,18 +64,42 @@ export class PayData { | |||
|     } | ||||
|   } | ||||
| 
 | ||||
|   async getUserInfo() { | ||||
|     let res = await fetch(this.getUrl('getUserInfo'), this.headers) | ||||
|     let ret = await res.json() | ||||
|     let check = this.checkResult(ret) | ||||
|     if (check?.errorMsg) return check | ||||
|     let data = ret?.data | ||||
|     if (data?.uid) { | ||||
|       return data | ||||
|     } | ||||
|     return {errorMsg: '获取失败,可能是链接已过期或不正确'} | ||||
|   } | ||||
| 
 | ||||
|   checkResult(ret) { | ||||
|     if (ret?.retcode === -101 || ret?.retcode === -100) { | ||||
|       return ret.retcode === -101 ? {errorMsg: '您的链接过期,请重新获取'} : {errorMsg: '链接不正确,请重新获取'} | ||||
|     } | ||||
|     if (/unknown auth appid/.test(ret?.message)) { | ||||
|       return {errorMsg: '抽卡或其他链接现已无法获取充值记录,请发送客服页面的链接!'} | ||||
|     } | ||||
|     return {errorMsg: ''} | ||||
|   } | ||||
| 
 | ||||
|   /** 对原始数据进行筛选,组合 */ | ||||
|   async filtrateData () { | ||||
|     // 由于新接口不返回uid了,所以先查询出用户信息
 | ||||
|     const userInfo = await this.getUserInfo() | ||||
|     if (userInfo?.errorMsg) return userInfo | ||||
|     this.#genShinId = userInfo.uid | ||||
|     // 获取数据
 | ||||
|     let isSucceed = await this.getOringinalData() | ||||
|     // 判断数据是否获取成功
 | ||||
|     if (isSucceed?.errorMsg) return isSucceed | ||||
|     await this.getPrimogemLog() | ||||
|     // 获取uid,并判断零氪党的情况
 | ||||
|     if (this.#oringinData[0]?.uid) { | ||||
|       this.#genShinId = this.#oringinData[0].uid | ||||
|     } else { | ||||
|       return { errorMsg: '未获取到您的任何充值数据' } | ||||
|     // 判断零氪党的情况
 | ||||
|     if (this.#oringinData.length === 0) { | ||||
|       return {errorMsg: '未获取到您的任何充值数据'} | ||||
|     } | ||||
|     // 将原始数据按id排序
 | ||||
|     this.#oringinData = this.#oringinData.sort((a, b) => { | ||||
|  | @ -92,7 +124,9 @@ export class PayData { | |||
|       let num = Number(this.#oringinData[index].add_num) | ||||
|       if (num < 0) continue | ||||
|       // 获取月份
 | ||||
|       let thisMonth = ++moment(this.#oringinData[index].time).toArray()[1] | ||||
|       // let thisMonth = ++moment(this.#oringinData[index].time).toArray()[1]
 | ||||
|       // 新接口改名为:datetime
 | ||||
|       let thisMonth = ++moment(this.#oringinData[index].datetime).toArray()[1] | ||||
|       if (thisMonth !== month) { | ||||
|         i++ | ||||
|         month = thisMonth | ||||
|  | @ -136,10 +170,40 @@ export class PayData { | |||
|     credentials: 'include' | ||||
|   } | ||||
| 
 | ||||
|   // 两个api //原石 getPrimogemLog //结晶 getCrystalLog
 | ||||
|   getUrl (api = 'getCrystalLog') { | ||||
|     let type = api === 'getCrystalLog' ? 3 : 1 | ||||
|     return `https://hk4e-api.mihoyo.com/ysulog/api/${api}?selfquery_type=${type}&lang=zh-cn&sign_type=2&auth_appid=csc&authkey_ver=1&authkey=${this.#authkey}&game_biz=hk4e_cn&app_client=bbs&type=${type}&size=20&end_id=` | ||||
|   /** | ||||
|    * 获取url | ||||
|    * @param api 原石 getPrimogemLog // 结晶 getCrystalLog // 获取用户信息 getUserInfo
 | ||||
|    * @returns {string} | ||||
|    */ | ||||
|   getUrl(api = 'getCrystalLog') { | ||||
|     const baseUrl = 'https://hk4e-api.mihoyo.com/common/hk4e_self_help_query/User' | ||||
|     const isUserInfo = api === 'getUserInfo', isCrystalLog = api === 'getCrystalLog' | ||||
|     const url = isUserInfo ? '/GetUserInfo' : isCrystalLog ? '/GetCrystalLog' : '/GetPrimogemLog' | ||||
|     let params = '' | ||||
|     params += '?selfquery_type=1' | ||||
|     params += '&sign_type=2' | ||||
|     params += '&auth_appid=csc' | ||||
|     params += '&authkey_ver=1' | ||||
|     params += '&game_biz=hk4e_cn' | ||||
|     params += '&win_direction=portrait' | ||||
|     params += '&bbs_auth_required=true' | ||||
|     params += '&bbs_game_role_required=hk4e_cn' | ||||
|     params += '&app_client=bbs' | ||||
|     params += '&lang=zh-cn' | ||||
|     params += '&csc_authkey_required=true' | ||||
|     params += '&authkey=' + this.#authkey | ||||
|     params += '&page_id=1' | ||||
|     // 此条件限定只查询获取的
 | ||||
|     if (!isUserInfo) { | ||||
|       params += '&add_type=produce' | ||||
|       params += '&size=20' | ||||
|       // endId,外部拼接
 | ||||
|       params += '&end_id=' | ||||
|     } | ||||
|     return baseUrl + url + params | ||||
|     // 老API:
 | ||||
|     // let type = api === 'getCrystalLog' ? 3 : 1
 | ||||
|     // return `https://hk4e-api.mihoyo.com/ysulog/api/${api}?selfquery_type=${type}&lang=zh-cn&sign_type=2&auth_appid=csc&authkey_ver=1&authkey=${this.#authkey}&game_biz=hk4e_cn&app_client=bbs&type=${type}&size=20&end_id=`
 | ||||
|   } | ||||
| } | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue