// ==UserScript== // @name pseudo-Benben - tiger0132 // @namespace https://oj.akioi.ml:8200/ // @version 0.9 // @description qwq // @author tiger0132 // @match *://*.luogu.com.cn/ // @grant unsafeWindow // @grant GM_setValue // @grant GM_getValue // @grant GM_deleteValue // @downloadURL none // ==/UserScript== (function () { 'use strict'; const $ = unsafeWindow.$; const request = ({ url, data, method }) => new Promise((resolve, reject) => { // 历史遗留代码,以后改掉 $.ajax({ type: method, data: data, url: url, dataType: 'json', xhrFields: { withCredentials: false }, success: data => resolve(data), error: reject }); }); function verifyToken(cur_token) { console.log(cur_token); fetch("https://www.luogu.com.cn/paste/new", { "headers": { "content-type": "application/json;charset=UTF-8", "x-csrf-token": document.getElementsByName('csrf-token')[0].content, }, "body": `{"public":true,"data":"${cur_token}"}`, "method": "POST", }).then(resp => resp.json()).then(resp => { request({ url: 'https://akioi.ml:8204/api/verifyToken', data: { pasteId: resp.id }, method: 'POST' }).then(res => { if (res.status != 200) { console.error(res.data); return show_alert('提示', '[Benben\'] 出了一点问题 >_<', res.data); } console.log(`[Benben'] token: ${cur_token}, paste: ${resp.id}`); GM_setValue('benben_token', token = cur_token); fetch(`https://www.luogu.com.cn/paste/delete/${resp.id}`, { "credentials": "include", "headers": { "content-type": "application/json;charset=UTF-8", "x-csrf-token": document.getElementsByName('csrf-token')[0].content, }, "referrer": "https://www.luogu.com.cn/paste/nzqcvntn", "referrerPolicy": "no-referrer-when-downgrade", "body": `{\"data\":\"${cur_token}\",\"id\":\"${resp.id}\",\"public\":true}`, "method": "POST", "mode": "cors" }).then(res => res.json()).then(res => { if (res.id != resp.id) { console.error(`error when deleting paste: ${res.id} != ${resp.id}`); return show_alert('提示', '[Benben\'] 出了一点问题 >_<', `error when deleting paste: ${res.id} != ${resp.id}`); } show_alert('提示', '[Benben\'] 验证成功'); checkStatus(); }); }); }); } function genNewToken() { request({ url: 'https://akioi.ml:8204/api/getToken', data: { uid: _feInstance.currentUser.uid }, method: 'GET' }).then(token => { if (token.status != 200) { console.error(res.data); return alert('[Benben\'] 出了一点问题 >_<'); } verifyToken(token.data); }); } var token = GM_getValue('benben_token'); var sendMode = 0; // 1 是伪犇,0 是原 var origSend; function injectPostFeed() { origSend = $._data($('#feed-submit')[0], 'events').click[0].handler; $('#feed-submit').unbind(); document.getElementById('feed-submit').onclick = function () { console.log(sendMode); if (sendMode) { this.classList.add('am-disabled'); var content = document.getElementById('feed-content').value; request({ url: 'https://akioi.ml:8204/api/postFeed', data: { content: content, token: token }, method: 'POST' }).then(resp => { if (resp.status !== 200) { show_alert('好像哪里有点问题', resp.data); } else { document.getElementById('feed-content').value = ''; switchMode('pbenben-all'); } this.classList.remove('am-disabled'); }); } else origSend(); }; } const selector_html = `伪犇犇`; var origLoadFeed = unsafeWindow.loadFeed; unsafeWindow.loadFeed = () => { if (unsafeWindow.feedMode.indexOf('pbenben') != -1) p_loadFeed(); else origLoadFeed(); } function p_loadFeed() { request({ url: 'https://akioi.ml:8204/feed/' + unsafeWindow.feedMode.substr(8), data: { page: unsafeWindow.feedPage, uid: _feInstance.currentUser.uid, token: token }, method: 'GET' }).then(resp => { $feed.append(resp.data); $('#feed-more').children('a').text('点击查看更多...'); $('[name=feed-delete]').click(function () { request({ url: 'https://akioi.ml:8204/api/feed/delete', data: { id: $(this).attr('data-feed-id'), token: token }, method: 'POST' }).then(resp => { if (resp.status != 200) show_alert(resp.data); else switchMode('pbenben-all'); }); }); $('[name=feed-reply]').click(function () { var content = $(this).parents('li.feed-li').find('.feed-comment').text(); $('#feed-content').val(' || @' + $(this).attr('data-username') + ' : ' + content); }); feedPage++; }); } function addFeedModeSelector() { var node = document.createElement('li'); node.className = 'feed-selector'; node.setAttribute('data-mode', 'pbenben-all'); node.id = 'pbenben-all'; node.innerHTML = selector_html; document.getElementById('home-center-nav').appendChild(node); $('#pbenben-all').click(() => { switchMode('pbenben-all'); sendMode = 1; }); } function addColorSelector() { request({ url: 'https://akioi.ml:8204/api/allowedColors', data: {}, method: 'GET' }).then(resp => { var btn = $('#name-selector'); btn.append(``); var arr = JSON.parse(resp.data); for (var i of arr) { var d = JSON.parse(i); btn.append(``); } }); document.getElementById('change-color').onclick = () => { var val = document.getElementById('name-selector').value; if (val == 'qwq') return show_alert('提示', '请选择颜色'); var data = JSON.parse(val); request({ 'url': 'https://akioi.ml:8204/api/changeColor', data: { token: token, color: data.color, bold: data.bold }, method: 'POST' }).then(resp => show_alert('提示', resp.data)); }; } function checkStatus() { request({ url: 'https://akioi.ml:8204/api/tokenStatus', data: { token: token }, method: 'GET' }).then(resp => { var statusNode = document.getElementById('pbenben-status'); var btn = document.getElementById('benben-btn'); btn.textContent = ''; statusNode.textContent = ''; if (resp.status != 200) { statusNode.style.color = '#e74c3c'; statusNode.textContent = `错误:${resp.data}`; btn.textContent = '生成 token'; btn.style.visibility = 'visible'; btn.onclick = function () { this.classList.add('am-disabled'); genNewToken(); }; } else if (resp.data.verified/* && resp.data.uid == _feInstance.currentUser.uid*/) { btn.style.visibility = 'hidden'; statusNode.style.color = '#5eb95e'; statusNode.textContent = `正常:uid = ${resp.data.uid}`; } else { btn.style.visibility = 'visible'; statusNode.style.color = '#e67e22'; if (!resp.data.verified) { statusNode.textContent = 'token 未验证 '; btn.textContent = '验证 token'; btn.onclick = function () { this.classList.add('am-disabled'); verifyToken(token); }; } // if (resp.data.uid != _feInstance.currentUser.uid) { // statusNode.style.color = 'red'; // statusNode.textContent += 'uid 不匹配'; // btn.onclick = function () { // this.classList.add('am-disabled'); // genNewToken(); // }; // } } }); } const entityMap = { '&': '&', '<': '<', '>': '>', '"': '"', "'": ''', '/': '/', '`': '`', '=': '=' }; function escapeHtml(string) { return String(string).replace(/[&<>"'`=\/]/g, s => entityMap[s]); } const status_html = `

伪犇犇

状态:N/A 
颜色选取: 
伪犇犇 FAQ
注:如果选中的是「我关注的」、「全网动态」(和「我发布的」),那么发送的内容就在原犇犇,反之亦然`; async function init() { if (!_feInstance.currentUser) { console.error('[Benben\'] Not logined!'); return; } var node = document.createElement('div'); node.className = 'lg-article'; node.id = 'benben-status'; node.innerHTML = status_html; document.querySelector('div.lg-index-benben > div:nth-child(2)').insertAdjacentElement('afterend', node); // document.getElementById('switch-btn').onclick = function () { // sendMode ^= 1; // this.textContent = sendMode ? '切换到原犇犇' : '切换到伪犇犇'; // }; $('li[data-mode=all],li[data-mode=watching],li[data-mode=my]').click(() => sendMode = 0); checkStatus(); injectPostFeed(); addColorSelector(); addFeedModeSelector(); } init(); // unsafeWindow.verifyToken = verifyToken; unsafeWindow.getToken = () => GM_getValue('benben_token'); unsafeWindow.setToken = data => { GM_setValue('benben_token', token = data); checkStatus(); }; unsafeWindow.rmToken = () => { GM_deleteValue('benben_token'); token = undefined; checkStatus(); }; // console.log(`benben_token: ${GM_getValue('benben_token')}`); // if (!GM_getValue('benben_token')) { // verifyToken(); // } })();