www.93hsy.com.js

// ==UserScript==
// @name              好书友签到
// @namespace         https://soulsign.inu1255.cn/scripts/185
// @version           1.1.2
// @author            yi-Xu-0100
// @loginURL          https://www.93hsy.com/member.php?mod=logging&action=login
// @updateURL         https://soulsign.inu1255.cn/script/yi-Xu-0100/好书友签到
// @expire            900000
// @domain            www.93hsy.com
// @param            name 账户
// @param            pwd 加密密码
// @param            timeout 设置true提示timeout错误,其余改为false
// @param            code468 设置true提示code468错误,其余改为false
// ==/UserScript==

/**
 * @file 好书友签到脚本
 * @author yi-Xu-0100
 * @author Vicrack
 * @version 1.1.2
 */

/**
 * @module 好书友签到脚本
 * @description 本脚本借鉴 [Vicrack 的鱼C论坛脚本](https://soulsign.inu1255.cn/scripts/167),提供设置用户名和密码方式自动登陆,其中密码为真实密码的 MD5 加密后的密钥。
 *
 * 脚本内容讨论请转至:[仓库 issue](https://github.com/yi-Xu-0100/soulsign-scripts/issues)
 *
 * 签到插件讨论请转至:[官方 issue](https://github.com/inu1255/soulsign-chrome/issues)
 * @param {string|string[]} [domain = www.93hsy.com] - 请求的域名
 * @param {string} [expire = 900000] - 在线检查频率
 * @param {string} [namespace = https://soulsign.inu1255.cn/scripts/185] - 脚本主页
 * @param {string} [loginURL = https://www.93hsy.com/member.php?mod=logging&action=login] - 登录链接
 * @param {string} [updateURL = https://soulsign.inu1255.cn/script/yi-Xu-0100/好书友签到] - 脚本更新链接
 * @param {string} name - 账户
 * @param {string} pwd - 加密密码
 * @param {boolean} timeout - 设置为true提示timeout错误,其余改为false
// @param {boolean} code468 - 设置true提示code468错误,其余改为false
 */

let run = async function (param) {
  if (!(await check(param))) throw '需要登录';
  let resp = await axios.get('https://www.93hsy.com/plugin.php?id=k_misign:sign', {
    headers: { 'upgrade-insecure-requests': 1 }
  });
  if (resp.data.includes('您的签到排名')) return '重复签到';
  let result = resp.data.match(/<a id="JD_sign" href="(.*?)"/);
  if (result[1] == 'member.php?mod=logging&action=login') throw '需要登录';
  let resp1 = await axios.get('https://www.93hsy.com/' + result[1]);
  if (/需要先登录/.test(resp1.data)) throw '需要登录';
  let resp2 = await axios.get('https://www.93hsy.com/plugin.php?id=k_misign:sign', {
    headers: { 'upgrade-insecure-requests': 1 }
  });
  if (resp2.data.includes('您的签到排名')) {
    let result = resp2.data.match(/id="lxreward" value="(.*?)"/);
    return '积分奖励: ' + result[1] + ' 银币';
  } else throw '未成功签到';
};

let check = async function (param) {
  try {
    let resp = await axios.get('https://www.93hsy.com/home.php?mod=spacecp&ac=usergroup');

    if (/<div class="title">You have verified successfully/.test(resp.data)) {
      let __CBK = /__CBK=([\w]*)/.exec(resp.data);
      if (__CBK) {
        console.log(`[info]: __CBK: ${__CBK[1]}`);
        __CBK = __CBK[1];
      } else throw Error('Not Found __CBK');
      resp = await axios.get(
        `https://www.93hsy.com/home.php?mod=spacecp&ac=usergroup&__CBK=${__CBK}`
      );
    }
    resp = await axios.get('https://www.93hsy.com/home.php?mod=spacecp&ac=usergroup');
    if (/我的用户组/.test(resp.data)) return true;
    else {
      let resp = await axios.get(
        'https://www.93hsy.com/member.php?mod=logging&action=login&infloat=yes&frommessage&inajax=1&ajaxtarget=messagelogin'
      );
      let formhash = /name="formhash" value="([\w]*)"/.exec(resp.data);
      let loginhash = /loginform_([\w]*)/.exec(resp.data);
      if (formhash) {
        console.log(`[info]: formhash: ${formhash[1]}`);
        formhash = formhash[1];
      } else formhash = '374e6cbe';
      if (loginhash) {
        console.log(`[info]: loginhash: ${loginhash[1]}`);
        loginhash = loginhash[1];
      } else loginhash = 'LeAAj';
      await axios.post(
        `https://www.93hsy.com/member.php?mod=logging&action=login&loginsubmit=yes&loginhash=${loginhash}&inajax=1`,
        {
          formhash: formhash,
          referer: 'https://www.93hsy.com/home.php?mod=spacecp&ac=usergroup',
          loginfield: 'username',
          username: param.name,
          cookietime: '2592000',
          password: param.pwd,
          questionid: '0',
          answer: '',
          handlekey: 'ls'
        },
        {
          transformRequest: [
            function (data) {
              let ret = '';
              for (let it in data) {
                ret += encodeURIComponent(it) + '=' + encodeURIComponent(data[it]) + '&';
              }
              return ret.substring(0, ret.length - 1);
            }
          ],
          headers: {
            Origin: 'https://www.93hsy.com',
            Referer: 'https://www.93hsy.com/member.php?mod=logging&action=login',
            'upgrade-insecure-requests': 1
          }
        }
      );
      let resp1 = await axios.get('https://www.93hsy.com/home.php?mod=spacecp&ac=usergroup');
      return /我的用户组/.test(resp1.data);
    }
  } catch (e) {
    if (param.timeout === 'true') param.timeout = true;
    else param.timeout = false;
    if (param.code468 === 'true') param.code468 = true;
    else param.code468 = false;
    if (e.message === 'timeout of 10000ms exceeded' && !param.timeout) {
      console.log(`[info]: 好书友签到脚本检查在线状态超时`);
      return true;
    }
    if (e.message === 'Request failed with status code 468' && !param.code468) {
      console.log(`[info]: 好书友签到脚本检查在线状态失败,HTTP 响应码: 468`);
      return true;
    }
    console.log(e);
    console.log(e.message);
    console.log(e.code);
    throw e;
  }
};

module.exports = { run, check };