92 lines
3.4 KiB
JavaScript
92 lines
3.4 KiB
JavaScript
/*
|
|
* 启点读书 Cookie 自动获取/更新 - Quantumult X
|
|
* 只负责抓取 Cookie 并生成“复制给 Autman 机器人”的提交文本,不主动请求 Autman。
|
|
*
|
|
* 抓取:打开起点读书 App → 我的 → 福利中心。
|
|
* 抓到后会:
|
|
* 1. 保存/更新 QX 本地 QDREADER_COOKIE(JSON Map)
|
|
* 2. 写入 QDREADER_AUTMAN_SUBMIT_TEXT,内容可直接复制发给 Autman 机器人
|
|
* 3. 通知/弹窗里展示完整快速登录命令 + CK,便于直接复制
|
|
*/
|
|
|
|
const KEY = 'QDREADER_COOKIE'
|
|
const SUBMIT_KEY = 'QDREADER_AUTMAN_SUBMIT_TEXT'
|
|
|
|
function getHeader(headers, name) {
|
|
const lower = String(name).toLowerCase()
|
|
for (const k in (headers || {})) if (String(k).toLowerCase() === lower) return headers[k]
|
|
return ''
|
|
}
|
|
function parseCookie(cookie) {
|
|
const jar = {}
|
|
String(cookie || '').split(';').forEach(part => {
|
|
const i = part.indexOf('=')
|
|
if (i <= 0) return
|
|
const k = part.slice(0, i).trim()
|
|
const v = part.slice(i + 1).trim()
|
|
if (k) jar[k] = v
|
|
})
|
|
return jar
|
|
}
|
|
function b64decode(s) {
|
|
try { return decodeURIComponent(escape(atob(String(s || '')))) } catch (e) { return '' }
|
|
}
|
|
function uidFromQDHeader(qdheader) {
|
|
const decoded = b64decode(qdheader)
|
|
return decoded ? String(decoded.split('|')[0] || '').trim() : ''
|
|
}
|
|
function parseJson(s, def) { try { return JSON.parse(s) } catch (e) { return def } }
|
|
function getUid(cookie, body) {
|
|
const jar = parseCookie(cookie)
|
|
let uid = uidFromQDHeader(jar.QDHeader || jar.qdheader || jar.QDHEADER || '')
|
|
if (uid) return uid
|
|
if (jar.uid) return String(jar.uid)
|
|
const obj = parseJson(body || '', null)
|
|
uid = obj && obj.Data && obj.Data.UserInfo && (obj.Data.UserInfo.UserId || obj.Data.UserInfo.userId)
|
|
return uid ? String(uid) : ''
|
|
}
|
|
function notify(title, sub, msg, opts) {
|
|
try { $notify(title, sub || '', msg || '', opts || {}) } catch (e) { $notify(title, sub || '', msg || '') }
|
|
}
|
|
function copyAction(command) {
|
|
return {
|
|
'open-url': 'shortcuts://run-shortcut?name=Copy&input=text&text=' + encodeURIComponent(command),
|
|
'media-url': 'data:text/plain;charset=utf-8,' + encodeURIComponent(command)
|
|
}
|
|
}
|
|
|
|
const cookie = getHeader($request && $request.headers, 'Cookie')
|
|
if (!cookie) {
|
|
notify('启点读书', 'Cookie 获取失败', '请求中没有 Cookie')
|
|
$done({})
|
|
} else {
|
|
const body = typeof $response !== 'undefined' ? ($response.body || '') : ''
|
|
const uid = getUid(cookie, body)
|
|
if (!uid) {
|
|
notify('启点读书', 'Cookie 获取失败', '无法识别 uid,请确认已登录并进入福利中心')
|
|
$done({})
|
|
} else {
|
|
const old = parseJson($prefs.valueForKey(KEY) || '{}', {}) || {}
|
|
const isNew = !old[uid]
|
|
const changed = old[uid] !== cookie
|
|
old[uid] = cookie
|
|
const jsonMap = JSON.stringify(old)
|
|
$prefs.setValueForKey(jsonMap, KEY)
|
|
|
|
// 发给 Autman 机器人的完整快速登录命令。Autman 插件保留“启点ck <cookie>”快速提交通道。
|
|
const submitText = `启点ck ${cookie}`
|
|
$prefs.setValueForKey(submitText, SUBMIT_KEY)
|
|
|
|
const title = isNew ? 'Cookie 新增成功' : (changed ? 'Cookie 更新成功' : 'Cookie 未变化')
|
|
const msg = [
|
|
`Uid: ${uid}`,
|
|
`账号数: ${Object.keys(old).length}`,
|
|
`提交文本已写入 QX 变量: ${SUBMIT_KEY}`,
|
|
'下面是完整快速登录命令,可直接复制发给 Autman 机器人:',
|
|
submitText
|
|
].join('\n')
|
|
notify('启点读书', title, msg, copyAction(submitText))
|
|
$done({})
|
|
}
|
|
}
|