// ==UserScript== // @name 圈云盒子顶帖器 // @namespace https://circlecloud.ltd/ // @version 0.1.2 // @description 自动顶贴 // @author MiaoWoo // @match https://www.mcbbs.net/forum-server-1.html** // @grant none // ==/UserScript== /* global jq */ (function () { 'use strict' let store = window.localStorage let nextPage = undefined async function sleep(time) { return new Promise((resolve, reject) => setTimeout(resolve, time)) } async function waitNextPage() { nextPage.click() await sleep(200) while (nextPage.innerText != "下一页 »") { await sleep(100) } } async function readServers() { let servers = jq('td.icn').splice(2) return servers.map(function (server) { let serverInfo = {} let line = server.nextElementSibling serverInfo.tid = parseInt(line.children[0].id.split('_')[1]) serverInfo.title = line.children[3].innerText serverInfo.view = line.parentNode.children[3].children[1].innerText let timeInfo = line.parentNode.children[4].children[1].children[0].children[0] if (timeInfo) { serverInfo.lastpost_time = timeInfo.title serverInfo.topmost = 0 } else { serverInfo.lastpost_time = line.parentNode.children[4].children[1].children[0].innerText serverInfo.topmost = 1 } return serverInfo }) } async function post(method, data) { return await fetch('https://reward.yumc.pw/mcbbs/' + method, { method: "POST", headers: { 'Accept': 'application/json', 'Content-Type': 'application/json' }, body: JSON.stringify(data) }).then(r => r.json()) } async function main() { if (document.getElementsByTagName('h1')[0].innerText.startsWith(504)) { return refresh() } let params = location.href.split('?')[1]?.split('&').map(s => s.split('=')).reduce((pre, cur, index) => { pre[cur[0]] = cur[1]; return pre }, {}) || {} nextPage = document.getElementById('autopbn') let servers = await readServers() post('alive', { type: 'servers' }) if (store.lastPostServer != servers[25].tid) { await post('updateServers', servers) } store.lastPostServer = servers[25].tid if (!params.autoRefresh) { return } console.log('数据上报完成 已开启自动刷新!') await sleep(60000) refresh() } async function refresh() { try { await fetch('/api/mobile/index.php?version=4&module=credit') location.href = 'https://www.mcbbs.net/forum-server-1.html?autoRefresh=true' } catch (error) { setTimeout(refresh, 5000) } } main() })()