www.txtnovel.pro.js

// ==UserScript==
// @name              书香门第论坛
// @namespace         https://soulsign.inu1255.cn/scripts/690
// @version           1.0.1
// @author            yi-Xu-0100
// @loginURL          http://www.txtnovel.pro/
// @updateURL         https://soulsign.inu1255.cn/script/yi-Xu-0100/书香门第论坛
// @expire            900000
// @domain           www.txtnovel.pro
// @param            name gbk编码账户
// @param            pwd 密码
// ==/UserScript==

/**
 * @file 书香门第论坛签到脚本
 * @author yi-Xu-0100
 * @version 1.0.1
 */

/**
 * @module 书香门第论坛签到脚本
 * @description 本脚本提供设置用户名和密码方式自动登陆,用户名为 gbk 编码下的名称,建议在 devtool 中复制请求参数。
 * 脚本内容讨论请转至:[仓库 issue](https://github.com/yi-Xu-0100/soulsign-scripts/issues)
 *
 * 签到插件讨论请转至:[官方 issue](https://github.com/inu1255/soulsign-chrome/issues)
 * @param {string|string[]} [domain = www.txtnovel.pro] - 请求的域名
 * @param {string} [expire = 900000] - 在线检查频率
 * @param {string} [namespace = https://soulsign.inu1255.cn/scripts/690] - 脚本主页
 * @param {string} [loginURL = http://www.txtnovel.pro/] - 登录链接
 * @param {string} [updateURL = https://soulsign.inu1255.cn/script/yi-Xu-0100/书香门第论坛] - 脚本更新链接
 * @param {string} name - gbk编码账户
 * @param {string} pwd - 密码
 */

const domainurl = 'http://www.txtnovel.pro/';

let run = async function (param) {
  if (!check(param)) throw '需要登录';
  let resp = await axios.get(domainurl+ 'plugin.php?id=dsu_paulsign:sign');
  if (/需要先登录/.test(resp.data)) throw '需要登录';
  if (/已经签到/.test(resp.data)) return '重复签到';
  let formhash = /name="formhash" value="([^"]+)/.exec(resp.data)[1];
  let resp1 = await axios.post(
    domainurl + 'plugin.php?id=dsu_paulsign:sign&operation=qiandao&infloat=1&inajax=1',
    `formhash=${formhash}&qdxq=kx`
  );
  let reward = /<div class="c">[\r\s\n]*(.*?)<[\/]?div/.exec(resp1.data);
  if (reward && /已经签到/.test(reward[1])) return '重复签到';
  if (reward && /签到成功/.test(reward[1])) return /恭喜你签到成功![\s]?(.*)/.exec(reward[1])[1];
  throw '签到失败';
};

let check = async function (param) {
  let resp = await axios.get(domainurl + 'home.php?mod=spacecp&ac=usergroup', {
    headers: { Referer: domainurl }
  });
  if (!/我的用户组/.test(resp.data)) {
    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 = '7e9a73fb';
    if (loginhash) {
      console.log(`[info]: loginhash: ${loginhash[1]}`);
      loginhash = loginhash[1];
    } else loginhash = 'LrXk2';
    let resp1 = await axios.post(
      domainurl +
        `member.php?mod=logging&action=login&loginsubmit=yes&handlekey=login&loginhash=${loginhash}&inajax=1`,
      {
        formhash: formhash,
        referer: domainurl,
        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: domainurl,
          Referer: domainurl + 'member.php?mod=logging&action=login',
          'upgrade-insecure-requests': 1
        }
      }
    );
    return /欢迎您回来/.test(resp1.data);
  } else return true;
};

module.exports = { run, check };