【油猴脚本】冷却后自动回复【站员30/小时贴版】
本帖最后由 安氏贵人鸟 于 2025-10-13 16:44 编辑来源:https://www.gamemale.com/forum.php?mod=viewthread&tid=147656
福黎的冷却后自动回复
原版是25/小时 Lv10最大等级的回帖脚本
闲的没事改了下数值变成适合站员的30/小时自动回帖脚本
具体功能没改,虽然改不难,不过为了方便其他有需要的站员
这鱼我摸了
有时间的给脚本原作者点点追随@@福黎
// ==UserScript==
// @Name CD后回复(固定30上限版)
// @namespace http://tampermonkey.net/
// @version 1.1.13
// @description防止CD期间误发帖,每小时固定30次回帖上限。
// @author 福黎 + Single Tonight修正版
// @match *://www.gamemale.com/thread*
// @match *://www.gamemale.com/forum.php?mod=viewthread&tid=*
// @grant GM_addStyle
// ==/UserScript==
(function () {
'use strict'
let replyMaxEnabled = true //是否启用上限判断
let checked = true //是否默认勾选“回帖后自动关闭页面”
GM_addStyle(`
#fastpostsubmit.dequeue{
background-color:#F49544;
border-color:#D17F3A;
}
#fastpostsubmit.dequeue:hover{
background-color:#AE6A30;
border-color:#8B5526;
}
#replyCount{
float:right;
margin-right:10px;
}
#clearReplyList{
display:block;
text-align:center;
float:right;
margin:0 20px;
}
`)
let replyList = JSON.parse(localStorage.getItem('replyList') || '[]')
let replyTime = JSON.parse(localStorage.getItem('replyTime') || '[]')
let tid = window.location.href.match(/thread-(\d+)|tid=(\d+)/)
tid = tid || tid
let type = true
let time = 0
// 固定每小时上限 30 次
const level = 0
const replyMax = replyMaxEnabled ? 30 : 10000000
const form = document.querySelector('#fastpostform')
const message = document.querySelector('#fastpostmessage')
const submit = document.querySelector('#fastpostsubmit')
const close = document.createElement('label')
const replyCountBox = document.createElement('div')
const clearReplyList = document.createElement('a')
clearReplyList.id = 'clearReplyList'
clearReplyList.href = 'javascript:;'
replyCountBox.id = 'replyCount'
form.onsubmit = ''
close.innerHTML = checked ? `<input id="close" type="checkbox" class="pc" checked>
回帖后自动关闭页面` : `<input id="close" type="checkbox" class="pc">
回帖后自动关闭页面`
clearReplyList.innerHTML = '清空队列'
document.querySelector('.ptm.pnpost').append(close, clearReplyList, replyCountBox)
updateReplyCount()
form.addEventListener('submit', e => e.preventDefault())
submit.addEventListener('click', () => { type ? enqueue() : dequeue() })
clearReplyList.addEventListener('click', delEnqueue)
function enqueue() {
if (!replyList.includes(tid) && replyTime.length + replyList.length < replyMax) {
if (new Blob().size < 30) {
alert(`您的帖子长度不足30字节,当前长度:${new Blob().size}`)
return
}
replyList.push(tid)
localStorage.setItem('replyList', JSON.stringify(replyList))
submit.classList.add('dequeue')
submit.innerHTML = '<strong>排队中...</strong>'
message.setAttribute('readonly', true)
type = false
if (replyList.length === 1) {
observeChanges()
send()
}
window.addEventListener('beforeunload', () => {
replyList = replyList.filter(item => item != tid)
localStorage.setItem('replyList', JSON.stringify(replyList))
})
updateReplyCount()
} else if (replyList.includes(tid)) {
alert('帖子已在队列中')
} else {
alert('您已达到1小时内30次回复上限!')
}
}
let formCheck1, formCheck2, isSubmitting = false
function send() {
form.onsubmit = sub()
const now = Math.floor(Date.now() / 1000)
replyTime = JSON.parse(localStorage.getItem('replyTime') || '[]')
time = time ? time : 60 - (now - replyTime)
formCheck1 = setTimeout(() => {
let t = 0
form.onsubmit = sub()
formCheck2 = setInterval(() => {
if (isSubmitting) return
if (t >= 24) {
dequeue()
alert('网络波动,请刷新页面重新排队')
clearTimeout(formCheck1)
clearTimeout(formCheck2)
}
form.onsubmit = sub()
t++
}, 5000)
}, time * 1000)
}
let isTriggered = false
function observeChanges() {
const targetNode = document.getElementById('append_parent')
const observer = new MutationObserver(() => {
if (document.getElementById("creditpromptdiv") && !isTriggered) {
isTriggered = true
const now = Math.floor(Date.now() / 1000)
replyTime.push(now)
localStorage.setItem('replyTime', JSON.stringify(replyTime))
clearInterval(formCheck1)
clearInterval(formCheck2)
observer.disconnect()
dequeue()
if (close.querySelector('input').checked) window.close()
}
})
observer.observe(targetNode, { childList: true })
}
function dequeue() {
submit.innerHTML = '<strong>发表回复</strong>'
submit.classList.remove('dequeue')
message.removeAttribute('readonly')
type = true
replyList = replyList.filter(item => item != tid)
localStorage.setItem('replyList', JSON.stringify(replyList))
clearTimeout(formCheck1)
clearTimeout(formCheck2)
}
window.addEventListener('storage', e => {
if (e.key === 'replyList' || e.key === 'replyTime') {
replyList = JSON.parse(localStorage.getItem('replyList') || '[]')
replyTime = JSON.parse(localStorage.getItem('replyTime') || '[]')
updateReplyCount()
if (e.key === 'replyList' && tid == replyList) {
observeChanges()
send()
} else if (e.key === 'replyList' && replyList.length === 0) {
dequeue()
}
}
})
async function sub() {
if (isSubmitting) return
isSubmitting = true
const isValid = await fastpostvalidate(form)
isSubmitting = false
console.log('提交中...')
return isValid
}
function updateReplyCount() {
const now = Math.floor(Date.now() / 1000)
replyTime = replyTime.filter(t => now - t <= 3600)
replyCountBox.innerHTML = `<span>${replyTime.length}/30 | 排队数:${replyList.length}</span>`
localStorage.setItem('replyTime', JSON.stringify(replyTime))
}
function delEnqueue() {
if (confirm('确定清空队列吗?')) {
replyList = []
dequeue()
updateReplyCount()
localStorage.setItem('replyList', JSON.stringify(replyList))
}
}
})()
https://img.gamemale.com/album/202508/27/154618wt52fzit25qb9aaf.jpg我用的25贴的 不过也够用了 站街还是很方便的{:6_167:} 30,感觉用起来更方便样子,试试看。 奇怪,我现在用的就自动匹配上限,但是看脚本好像还是等级+15,不知道是怎么判定的 我觉得坛花还是不希望作为管理员的用户在疯狂回帖灌水了 看来是适配站员权限的坛友做的脚本:o,能分开的话确实挺不错的 原来站员能提升上限至每小时30帖,一波吃完+2还是挺爽的惹,脚本对于站员很实用了 原版自动匹配的,会根据用户做修改。 站街好累。。回帖绞尽乳汁完全赶得上回帖CD。。 现在回帖频率其实没有那么高了,不过对热衷站街的几位大佬应该很有用 const level = Number(document.querySelector('.u-info-group font').innerText.match(/\d+/g)) || 15
replyMax = replyMax ? level + 15 : 10000000原脚本的代码已经自带识别站员用户组的功能了,其逻辑是:
如果在用户组的文本中检测到数字,则 level = 该数字,回帖上限 replyMax = level+15。以 Lv.10 为例,level = 10,replyMax = 25。
如果没检测到,则默认 level = 15(即第一行代码末尾的15)。以 站员 为例,由于没检测到数字,replyMax = 30。 https://i.111666.best/image/eJDzvxTCylqiOtdjhdkDgn.jpg
蛮有用的~soon用上~
其实现在还以为站员和十级一样25() 只有我是看不懂这是在干什么的吗 我每天努力手动站街等级还是那么低:'( 吃瓜ing还以为十级是每小时20帖的,记错了欸 突然觉得我这种手动回复好没有效率~ 原来只有我是手动站街的嘛:dizzy: 感谢分享~竟然有这么方便的利器 学到了!! 看来是一个很适合水怪的插件 很实用的站员小工具 费劲想半天才回帖 站街好累啊 https://img.gamemale.com/album/202408/03/102115fz2ncq4r7cz47o7f.gif站街利器啊,不用频繁点看冷却了