更新 'mcbbs/vending-machine.user.js'
This commit is contained in:
		@@ -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() {
 | 
				
			||||||
 | 
					        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 refresh() }
 | 
				
			||||||
 | 
					        console.log(params)
 | 
				
			||||||
        try {
 | 
					        try {
 | 
				
			||||||
            let params = location.href.split('?')[1].split('&').map(s => s.split('=')).reduce((pre, cur, index) => { pre[cur[0]] = cur[1]; return pre }, {})
 | 
					            storeUsername = document.getElementsByClassName('username')[0].innerText
 | 
				
			||||||
            if (!params.action) { return location.href = '/home.php?mod=magic&action=mybox' }
 | 
					 | 
				
			||||||
            console.log(params)
 | 
					 | 
				
			||||||
            messagetext = document.getElementById('messagetext')
 | 
					            messagetext = document.getElementById('messagetext')
 | 
				
			||||||
            if (messagetext) {
 | 
					            if (messagetext) {
 | 
				
			||||||
                updateStatus(messagetext.innerText)
 | 
					                updateStatus(messagetext.innerText)
 | 
				
			||||||
@@ -29,23 +33,59 @@
 | 
				
			|||||||
            } else {
 | 
					            } else {
 | 
				
			||||||
                updateStatus('')
 | 
					                updateStatus('')
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            switch (params.action || "shop") {
 | 
					            switch (params.nodeType) {
 | 
				
			||||||
                case "shop":
 | 
					                case "master":
 | 
				
			||||||
                    await shopAction(params)
 | 
					                    master(params)
 | 
				
			||||||
                    break
 | 
					                    break
 | 
				
			||||||
                case "mybox":
 | 
					                case "slave":
 | 
				
			||||||
                    stock = updateStock()
 | 
					                    slave(params)
 | 
				
			||||||
                    await myboxAction(params)
 | 
					 | 
				
			||||||
                    break
 | 
					 | 
				
			||||||
                case "log":
 | 
					 | 
				
			||||||
                    await logAction(params)
 | 
					 | 
				
			||||||
                    break
 | 
					                    break
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        } catch (ex) {
 | 
					        } catch (ex) {
 | 
				
			||||||
            await sleep(1500)
 | 
					            await sleep(1500)
 | 
				
			||||||
            location.href = '/home.php?mod=magic&action=mybox'
 | 
					            refresh()
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					    async function master(params) {
 | 
				
			||||||
 | 
					        switch (params.action || "shop") {
 | 
				
			||||||
 | 
					            case "shop":
 | 
				
			||||||
 | 
					                await shopAction(params)
 | 
				
			||||||
 | 
					                break
 | 
				
			||||||
 | 
					            case "mybox":
 | 
				
			||||||
 | 
					                stock = await updateStock()
 | 
				
			||||||
 | 
					                await myboxAction(params)
 | 
				
			||||||
 | 
					                break
 | 
				
			||||||
 | 
					            case "log":
 | 
				
			||||||
 | 
					                await logAction(params)
 | 
				
			||||||
 | 
					                break
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    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) {
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user