更新 'mcbbs/vending-machine.user.js'

This commit is contained in:
502647092 2020-12-21 14:28:34 +00:00
parent dee9fb2acd
commit 1ce4da222e

View File

@ -1,7 +1,7 @@
// ==UserScript== // ==UserScript==
// @name MCBBS自动售卖机 // @name MCBBS自动售卖机
// @namespace https://miaowoo.cc/ // @namespace https://miaowoo.cc/
// @version 0.5 // @version 0.6
// @description 自动售卖道具 // @description 自动售卖道具
// @author MiaoWoo // @author MiaoWoo
// @match https://www.mcbbs.net/home.php?mod=magic** // @match https://www.mcbbs.net/home.php?mod=magic**
@ -11,17 +11,21 @@
(async function () { (async function () {
let store = window.localStorage let store = window.localStorage
const lastOrderKey = 'circlebox:lastorder' const lastOrderKey = 'circlebox:lastorder'
let params = 0
let checkTimes = 0 let checkTimes = 0
let stock = 0 let stock = 0
let messagetext = undefined let messagetext = undefined
let storeUsername = undefined
async function sleep(time) { async function sleep(time) {
return new Promise((resolve, reject) => setTimeout(resolve, time)) return new Promise((resolve, reject) => setTimeout(resolve, time))
} }
async function main() { async function main() {
try { params = location.href.split('?')[1].split('&').map(s => s.split('=')).reduce((pre, cur, index) => { pre[cur[0]] = cur[1]; return pre }, {})
let params = location.href.split('?')[1].split('&').map(s => s.split('=')).reduce((pre, cur, index) => { pre[cur[0]] = cur[1]; return pre }, {}) if (!params.nodeType) { return console.log('nodeType is undefined skip...') }
if (!params.action) { return location.href = '/home.php?mod=magic&action=mybox' } if (!params.action) { return refresh() }
console.log(params) console.log(params)
try {
storeUsername = document.getElementsByClassName('username')[0].innerText
messagetext = document.getElementById('messagetext') messagetext = document.getElementById('messagetext')
if (messagetext) { if (messagetext) {
updateStatus(messagetext.innerText) updateStatus(messagetext.innerText)
@ -29,22 +33,58 @@
} else { } else {
updateStatus('') updateStatus('')
} }
switch (params.nodeType) {
case "master":
master(params)
break
case "slave":
slave(params)
break
}
} catch (ex) {
await sleep(1500)
refresh()
}
}
async function master(params) {
switch (params.action || "shop") { switch (params.action || "shop") {
case "shop": case "shop":
await shopAction(params) await shopAction(params)
break break
case "mybox": case "mybox":
stock = updateStock() stock = await updateStock()
await myboxAction(params) await myboxAction(params)
break break
case "log": case "log":
await logAction(params) await logAction(params)
break break
} }
} catch (ex) {
await sleep(1500)
location.href = '/home.php?mod=magic&action=mybox'
} }
async function slave(params) {
switch (params.action || "shop") {
case "shop":
case "log":
refresh()
break
case "mybox":
stock = await updateStock()
await needReplenishment()
break
}
}
async function needReplenishment() {
let timeoutTask = setTimeout(() => { refresh() }, 120000)
let result = await fetch('https://reward.yumc.pw/mcbbs/needReplenishment').then(r => r.json())
if (result.code != 200) {
if (++checkTimes > 5) { return refresh() }
clearTimeout(timeoutTask)
return setTimeout(() => needReplenishment(), 2000)
}
let masterInfo = result.data
sendItem(() => window.showWindow('magics', 'home.php?mod=magic&action=mybox&operation=give&magicid=32', 'get', 0), masterInfo.username, masterInfo.amount || stock)
}
async function refresh() {
location.href = '/home.php?mod=magic&action=mybox&nodeType=' + params.nodeType
} }
async function shopAction() { async function shopAction() {
await sendOrderAction(() => window.showWindow('magics', 'home.php?mod=magic&action=shop&operation=give&mid=mcbbs_mcserver_plus:serverBump'), true) await sendOrderAction(() => window.showWindow('magics', 'home.php?mod=magic&action=shop&operation=give&mid=mcbbs_mcserver_plus:serverBump'), true)
@ -57,15 +97,15 @@
let stock = 0 let stock = 0
if (serverBump) { if (serverBump) {
stock = serverBump.nextElementSibling.nextElementSibling.children[0].innerText stock = serverBump.nextElementSibling.nextElementSibling.children[0].innerText
await fetch(`https://reward.yumc.pw/mcbbs/updateStock/stock/${stock}`).then(r => r.json())
} }
await fetch(`https://reward.yumc.pw/mcbbs/updateStock/username/${storeUsername}/stock/${stock}`).then(r => r.json())
return stock return stock
} }
async function updateStatus(message) { async function updateStatus(message) {
await fetch(`https://reward.yumc.pw/mcbbs/updateStatus/message/${message}`).then(r => r.json()) await fetch(`https://reward.yumc.pw/mcbbs/updateStatus/username/${storeUsername}/message/${message}`).then(r => r.json())
} }
async function lowStockNotify(stock, order_id, goods_amount) { async function lowStockNotify(stock, order_id, goods_amount) {
await fetch(`https://reward.yumc.pw/mcbbs/lowStockNotify/stock/${stock}/order_id/${order_id}/goods_amount/${goods_amount}`).then(r => r.json()) await fetch(`https://reward.yumc.pw/mcbbs/lowStockNotify/username/${storeUsername}/stock/${stock}/order_id/${order_id}/goods_amount/${goods_amount}`).then(r => r.json())
} }
async function clearOrderCache(order_id) { async function clearOrderCache(order_id) {
await fetch('https://reward.yumc.pw/mcbbs/clearOrderCache/order_id/' + order_id).then(r => r.json()) await fetch('https://reward.yumc.pw/mcbbs/clearOrderCache/order_id/' + order_id).then(r => r.json())
@ -77,20 +117,65 @@
if (order.allowAutoBuy) { if (order.allowAutoBuy) {
await clearOrderCache(order.order_id) await clearOrderCache(order.order_id)
await sleep(1500) await sleep(1500)
location.href = '/home.php?mod=magic&action=shop' location.href = '/home.php?mod=magic&action=shop&nodeType=' + params.nodeType
} else { } else {
await lowStockNotify(stock, order.order_id, order.goods_amount) await lowStockNotify(stock, order.order_id, order.goods_amount)
await sleep(120000)
location.href = '/home.php?mod=magic&action=mybox'
} }
} }
async function sendItem(openFn, usernameValue, amountValue) {
try { openFn() } catch (ex) { }
amountValue = Math.min(stock, amountValue)
let username = undefined
let count = 0
while ((username = jq('#selectedusername')[0]) == undefined) {
if (count > 3) {
console.log('检测窗口超时!')
return false
}
await sleep(800)
count++
}
username.value = usernameValue
let amount = username.parentNode.parentNode.nextElementSibling.childNodes[3].childNodes[0]
amount.value = amountValue
let remark = username.parentNode.parentNode.nextElementSibling.nextElementSibling.childNodes[3].childNodes[0]
remark.value = `子节点补货 补货账号: ${storeUsername} 补货数量: ${amountValue}`
await sleep(300)
jq('#operatesubmit').click()
await sleep(500)
jq('#fwin_dialog_submit').click()
let info = ''
let error = ''
while ((info = jq('.alert_info').text()) == '') {
if (count > 3) {
error = jq('#ntcwin').text()
break
}
await sleep(800)
count++
}
if (error && error.startsWith('抱歉,对方道具包容量不足')) {
amountValue = error.replace(/[^0-9]/ig, "")
if (amountValue == 0) {
return refresh()
}
await sleep(200)
amount.value = amountValue
await sleep(300)
jq('#operatesubmit').click()
await sleep(500)
jq('#fwin_dialog_submit').click()
}
await sleep(800)
refresh()
}
async function sendOrderAction(openFn, back = false) { async function sendOrderAction(openFn, back = false) {
let timeoutTask = setTimeout(() => { location.href = '/home.php?mod=magic&action=mybox' }, 120000) let timeoutTask = setTimeout(() => { refresh() }, 120000)
let count = 0 let count = 0
let result = await fetch('https://reward.yumc.pw/mcbbs/needSendOrder').then(r => r.json()) let result = await fetch('https://reward.yumc.pw/mcbbs/needSendOrder').then(r => r.json())
if (result.code != 200) { if (result.code != 200) {
if (++checkTimes > 5 || back) { if (++checkTimes > 5 || back) {
location.href = '/home.php?mod=magic&action=mybox' refresh()
} }
clearTimeout(timeoutTask) clearTimeout(timeoutTask)
return setTimeout(() => sendOrderAction(openFn), 2000) return setTimeout(() => sendOrderAction(openFn), 2000)
@ -113,7 +198,7 @@
let amount = username.parentNode.parentNode.nextElementSibling.childNodes[3].childNodes[0] let amount = username.parentNode.parentNode.nextElementSibling.childNodes[3].childNodes[0]
amount.value = order.goods_amount amount.value = order.goods_amount
let remark = username.parentNode.parentNode.nextElementSibling.nextElementSibling.childNodes[3].childNodes[0] let remark = username.parentNode.parentNode.nextElementSibling.nextElementSibling.childNodes[3].childNodes[0]
remark.value = `圈云盒子 自动发货订单: ${order.order_id} 物品: ${order.goods_name} 数量: ${order.goods_amount}` remark.value = `圈云盒子 自动发货订单: ${order.order_id} 物品: ${order.goods_name} 数量: ${order.goods_amount} 发货账号: ${storeUsername}`
store.setItem(lastOrderKey, order.order_id) store.setItem(lastOrderKey, order.order_id)
await sleep(300) await sleep(300)
jq('#operatesubmit').click() jq('#operatesubmit').click()
@ -130,7 +215,10 @@
count++ count++
} }
if (error == "抱歉,操作数量不合法") { if (error == "抱歉,操作数量不合法") {
return await handleLowStock(order, stock) if (order.goods_amount > stock) {
error = `发货账号: ${storeUsername} 库存 ${stock} 不足 ${order.goods_amount} 已通知管理员(QQ: 502647092) 请等待...`
}
await handleLowStock(order, stock)
} }
try { try {
let finish = await fetch('https://reward.yumc.pw/mcbbs/updateOrder', { let finish = await fetch('https://reward.yumc.pw/mcbbs/updateOrder', {
@ -150,10 +238,7 @@
console.log(ex) console.log(ex)
} }
await sleep(800) await sleep(800)
if (back || error) { refresh()
return location.href = '/home.php?mod=magic&action=mybox'
}
jq('#fwin_dialog_submit').click()
} }
async function logAction(params) { async function logAction(params) {
switch (params.operation) { switch (params.operation) {