// ==UserScript==
// @name 巴哈姆特自動簽到(含公會)
// @namespace https://home.gamer.com.tw/moontai0724
// @version 3.2.2
// @description 巴哈姆特自動簽到(含公會) by.moontai0724
// @author moontai0724
// @match https://*.gamer.com.tw/*
// @grant GM_xmlhttpRequest
// @connect www.gamer.com.tw
// @connect guild.gamer.com.tw
// @supportURL https://home.gamer.com.tw/creationDetail.php?sn=3852242
// @downloadURL none
// ==/UserScript==
(function () {
'use strict';
// 是否自動簽到公會?如不需要自動簽到公會,請將下方 signguild 變數 true 改為 false
var signguild = true;
// 作者的話:本人僅於 Chrome 上測試,照理說應能通用,但如有錯誤,將不提供其他瀏覽器的完全支援與改動。
// (如果有錯誤還是可以回報,也許某天會改動。)
// ----------------------------------------------------------------------------------------------------
// 程式開始
var LastAutoSignTime = localStorage.getItem('LastAutoSignTime') ? Number(localStorage.getItem('LastAutoSignTime')) : 0;
var now = new Date();
var today = new Date(now.getFullYear(), now.getMonth(), now.getDay()).getTime();
if (!(today < LastAutoSignTime && LastAutoSignTime < today + 86400000)) {
checkSign().then(data => {
switch (data.signin) {
case 1:
console.log("Signed", data);
break;
case 0:
startSign().then(data => console.log(data));
break;
case -1:
console.log("Not logged in");
if (location.href != 'https://user.gamer.com.tw/login.php') {
if (window.confirm('您尚未登入!簽到作業無法正確執行。是否立刻導向至登入網頁?')) {
location.href = 'https://user.gamer.com.tw/login.php';
}
}
break;
}
if (signguild && data.signin != -1) {
GM_xmlhttpRequest({
method: "get",
url: "/ajax/topBar_AJAX.php?type=guild",
cache: false,
onload: data => {
data = data.response;
if (data != '') {
let guild_list = data.replace(/\n/g, '').split('
').map(value => value.split('sn=')[1].split('"')[0]);
console.log(guild_list, "length: " + guild_list.length);
guild_list.length > 0 ? (function sign(sort) {
sort = sort ? sort : 0;
GM_xmlhttpRequest({
method: 'POST',
url: 'https://guild.gamer.com.tw/ajax/guildSign.php',
cache: false,
data: 'sn=' + guild_list[sort],
headers: {
"Content-Type": "application/x-www-form-urlencoded",
},
onload: data => {
console.log("signed: ", guild_list[sort]);
sort < guild_list.length - 1 ? sign(sort + 1) : (console.log('Guild sign success!'), localStorage.getItem('LastAutoSignTime', (new Date()).getTime()));
}
})();
}) : console.log('No guild.');
}
}
});
}
});
}
// days: 已連續簽到天數
// check
// signed: {"signin": 1,"days": xxx}
// not signed: {"signin":0,"days":0}
// not logged in: {"signin":-1}
function checkSign() {
return new Promise(function (resolve) {
GM_xmlhttpRequest({
method: "POST",
url: "https://www.gamer.com.tw/ajax/signin.php",
headers: {
"Content-Type": "application/x-www-form-urlencoded;",
},
data: 'action=2',
responseType: "json",
cache: false,
onload: data => resolve(data.response)
});
});
}
// sign
// signed: {"code":-2,"message":"今天您已經簽到過了喔"}
// not signed: {"nowd": xxx,"days": xxx,"message":"簽到成功"}
// not logged in: {"signin":-1}
function startSign() {
return new Promise(function (resolve) {
GM_xmlhttpRequest({
method: "GET",
url: "https://www.gamer.com.tw/ajax/get_csrf_token.php",
cache: false,
onload: token => GM_xmlhttpRequest({
method: "POST",
url: "https://www.gamer.com.tw/ajax/signin.php",
headers: {
"Content-Type": "application/x-www-form-urlencoded;",
},
data: 'action=1&token=' + token.response,
responseType: "json",
cache: false,
onload: data => resolve(data.response)
})
});
});
}
})();