Greasy Fork is available in English.
A script to perform the Douyu prize conversion function.
当前为
// ==UserScript==
// @name 斗鱼鱼塘商城兑换工具
// @namespace YourNamespaceHere
// @version 1.0
// @description A script to perform the Douyu prize conversion function.
// @match https://www.douyu.com/pages/fish-act/mine*
// @grant GM_addStyle
// @grant GM_xmlhttpRequest
// @license MIT
// ==/UserScript==
(function() {
'use strict';
const ctnid = `72e357ae075816fbdebd0950930`; ///用户ID
const roomid = `12345`; //房间ID
// 用于判断页面是否加载完成的标志变量
let pageLoaded = false;
// 监听页面加载状态改变事件
window.addEventListener('load', function () {
pageLoaded = true;
initScript();
});
// 初始化脚本的函数,在页面加载完成后执行具体操作
function initScript() {
// 添加悬浮窗样式
GM_addStyle(`
#overlay {
position: fixed;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
background-color: rgba(255, 255, 255, 0.9);
padding: 20px;
border-radius: 10px;
box-shadow: 0 0 10px rgba(0, 0, 0, 0.2);
display: none;
z-index: 9999;
}
button {
margin: 5px;
padding: 10px 20px;
font-size: 16px;
cursor: pointer;
border: none;
border-radius: 5px;
}
button.start {
background-color: green;
color: white;
}
button.stop {
background-color: red;
color: white;
}
select {
margin: 5px;
padding: 10px;
font-size: 16px;
border: 1px solid #ccc;
border-radius: 5px;
}
`);
// 创建悬浮窗元素及按钮
const overlay = document.createElement('div');
overlay.id = 'overlay';
const startButton = document.createElement('button');
startButton.textContent = '启动';
startButton.className = 'start';
const stopButton = document.createElement('button');
stopButton.textContent = '停止';
stopButton.className = 'stop';
// 创建下拉菜单元素
const selectMenu = document.createElement('select');
// 从图片中提取的名字及对应的值
const items = [
{ value: 'PROP_1', text: '3级粉丝牌 初级水手' },
{ value: 'PROP_2', text: '3级粉丝牌 精英士官' },
{ value: 'PROP_3', text: '6级粉丝牌 心动卡' },
{ value: 'FREE_PROP_1', text: '10 陪伴印章' },
{ value: 'FREE_PROP_2', text: '30 陪伴印章' },
{ value: 'FREE_PROP_3', text: '50 陪伴印章' },
{ value: 'YC_TY_1', text: '0.1 鱼翅' },
{ value: 'YC_TY_2', text: '0.5 鱼翅' },
{ value: 'YC_TY_3', text: '1 鱼翅' },
{ value: 'YW_1', text: '100 鱼丸' },
{ value: 'YW_2', text: '200 鱼丸' },
{ value: 'YW_3', text: '500 鱼丸' },
{ value: 'YC_CHIP_1', text: '2 鱼翅碎片' },
{ value: 'YC_CHIP_2', text: '5 鱼翅碎片' }
];
// 循环创建下拉菜单选项
items.forEach(item => {
const option = document.createElement('option');
option.value = item.value;
option.textContent = item.text;
selectMenu.appendChild(option);
});
overlay.appendChild(selectMenu);
overlay.appendChild(startButton);
overlay.appendChild(stopButton);
document.body.appendChild(overlay);
// 用于存储当前选择的index值的变量
let selectedIndexValue = 'PROP_1';
// 监听下拉菜单选项改变事件,更新选中的index值
selectMenu.addEventListener('change', function () {
selectedIndexValue = this.value;
});
// 用于控制兑换代码是否执行的标志变量
let isRunning = false;
// 显示悬浮窗
function showOverlay() {
overlay.style.display = 'block';
}
// 隐藏悬浮窗
function hideOverlay() {
overlay.style.display = 'none';
}
// 点击启动按钮的处理函数
startButton.addEventListener('click', function () {
isRunning = true;
runExchangeLoop();
});
// 点击停止按钮的处理函数
stopButton.addEventListener('click', function () {
isRunning = false;
});
// 模拟兑换代码执行的函数(这里简化了之前的fetch请求,实际要替换成完整准确的)
async function exchange() {
try {
await GM_xmlhttpRequest({
method: 'POST',
url: "https://www.douyu.com/japi/revenuenc/web/actfans/convert/convertOpt",
headers: {
"accept": "application/json, text/plain, */*",
"accept-language": "en-US,en;q=0.9,zh-CN;q=0.8,zh;q=0.7",
"content-type": "application/x-www-form-urlencoded",
"priority": "u=1, i",
"sec-ch-ua": "\"Google Chrome\";v=\"131\", \"Chromium\";v=\"131\", \"Not_A Brand\";v=\"24\"",
"sec-ch-ua-mobile": "?0",
"sec-ch-ua-platform": "\"Windows\"",
"sec-fetch-dest": "empty",
"sec-fetch-mode": "cors",
"sec-fetch-site": "same-origin"
},
referrer: "https://www.douyu.com/pages/fish-act/shop",
referrerPolicy: "strict-origin-when-cross-origin",
data: `ctn=${ctnid}&rid=${roomid}&index=${selectedIndexValue}`,
onload: function (response) {
console.log('兑换请求响应:', response);
},
onerror: function (error) {
console.error('兑换出现错误:', error);
}
});
} catch (error) {
console.error('兑换出现错误:', error);
}
}
// 循环执行兑换代码的函数(根据标志变量控制)
async function runExchangeLoop() {
let count = 0;
while (isRunning && count < 200) {
await exchange();
count++;
}
if (count >= 200) {
isRunning = false;
}
}
// 页面加载完成后显示悬浮窗
showOverlay();
}
})();