enderman_JC
本帖最后由 enderman_JC 于 2021-4-13 21:05 编辑

道具名:自证卡?
用途:在使用后输入自己的服务器帖子的tid然后检查自己的服务器帖是否有嫌疑账号(IP相同)(这些都得后端弄,防止破解)
价格:undefined
背包里只能同时存在一个
在使用一次后系统自动再给一个给自己(因为如果设置价格为金粒的话一个普通腐竹可能付不起(爱心更付不起))

或者是价格很低(金粒),然后一天只能买一个

一天只能使用一次


这样个人认为可以有效防止腐竹在不知情的情况下被异常账号顶帖,但是技术方面可能有困难,并且会一定程度上加剧服务器负担(但是我还是发出来看看可不可行罢)

Aurora_Feather
非常支持,不过技术上不知能否实现

居仕
支持,听上去是不错的。还要看技术上有没有问题。

ARSpark
支持
至于技术上,有什么能比锁帖还难应该是可行的

远远困了
挺支持的
但价格如果是金粒的话就失礼了
肝吐问答版计划√

enderman_JC
本帖最后由 enderman_JC 于 2021-4-13 21:15 编辑
远远困了 发表于 2021-4-13 21:01
挺支持的
但价格如果是金粒的话就失礼了
肝吐问答版计划√

除了金粒以外估计也没什么货币可以用了(
或许是爱心(?)假如是爱心的话如果那时候正在进行问答版活动

w6vDqw
没必要

还不如直接对楼主放开部分权限,然后通过转码之类的显示同IP顶帖

(话说这种顶不都是同IP的吗?

xmdhs
本帖最后由 xmdhs 于 2021-4-13 23:03 编辑

其实 ip 不一定会一样的,不如判断近多少天有无被警告,然后自行判断。

比如这样
  1. // ==UserScript==
  2. // @name         查看顶贴
  3. // @version      0.0.1
  4. // @include      https://www.mcbbs.net/*
  5. // @author       xmdhs
  6. // @description  查看顶贴。
  7. // @namespace    xmdhs.top
  8. // @grant        unsafeWindow
  9. // ==/UserScript==

  10. (async function () {
  11.     const range = 30 * 24 * 60 * 60

  12.     const r = /<a href="home.php\?mod=space&amp;uid=(\d{1,15})" target="_blank">.{1,15}<\/a>/g

  13.     async function getmod(url) {
  14.         let f = await fetch(url)
  15.         let t = await f.text()
  16.         let uids = new Map()
  17.         for (; ;) {
  18.             let l = r.exec(t)
  19.             if (l != null && l.length == 2) {
  20.                 uids.set(l[1], l[0])
  21.             } else {
  22.                 break
  23.             }
  24.         }
  25.         return uids
  26.     }

  27.     const time = /\d{4}-\d{1,2}-\d{1,2} \d{1,2}:\d{1,2}/g

  28.     async function warningInRange(uid, range) {
  29.         let f = await fetch(`https://www.mcbbs.net/forum.php?mod=misc&action=viewwarning&tid=233&uid=` + uid + `&inajax=1`)
  30.         let t = await f.text()
  31.         let s;
  32.         for (; ;) {
  33.             let l = time.exec(t)
  34.             if (l != null) {
  35.                 s = l[0]
  36.             } else {
  37.                 break
  38.             }
  39.         }
  40.         let j = await fetch("https://www.mcbbs.net/api/mobile/index.php?version=4&module=profile&uid=" + uid)
  41.         j = await j.json()
  42.         if (j.Variables.space.posts < 20) {
  43.             return true
  44.         }
  45.         return (new Date() / 1000 - (new Date(s).getTime() / 1000)) < range
  46.     }

  47.     async function sleep(t) {
  48.         return new Promise((rs, rj) => {
  49.             setTimeout(() => { rs() }, t)
  50.         })
  51.     }
  52.     let runing = false;
  53.     async function start() {
  54.         if (runing) {
  55.             alert("已经在运行了")
  56.             return
  57.         }
  58.         runing = true
  59.         let w = unsafeWindow || window
  60.         let tid = w.tid

  61.         let u = new Map()

  62.         let m = await getmod(`https://www.mcbbs.net/forum.php?mod=misc&action=viewthreadmod&tid=` + tid + `&inajax=1`)
  63.         let i = 0

  64.         for (const [uid, _] of m) {
  65.             let b = warningInRange(uid, range)
  66.             u.set(uid, b)
  67.             if (i >= 8) {
  68.                 await sleep(1000)
  69.                 i = 0
  70.             }
  71.             i++
  72.         }

  73.         let uids = []
  74.         for (const [uid, v] of u) {
  75.             let b = await v
  76.             if (b) {
  77.                 uids.push(uid)
  78.             }
  79.         }
  80.         if (uids.length == 0) {
  81.             alert("顶贴的所有用户,近三十天没有被警告")
  82.             runing = false
  83.             return
  84.         }

  85.         let d = document.createElement("div");
  86.         uids.forEach((v) => {
  87.             let u = `<a href="https://www.mcbbs.net/?` + v + `" target="_blank">` + v + "</a>"
  88.             let item = document.createElement("div");
  89.             item.innerHTML = u;
  90.             d.appendChild(item)
  91.         })
  92.         let b = new Blob([d.innerHTML], { type: 'text/html' })
  93.         let url = URL.createObjectURL(b);
  94.         const link = document.createElement('a');
  95.         link.href = url
  96.         link.target = "_blank"
  97.         link.click()
  98.         runing = false
  99.     }

  100.     try {
  101.         let d = document.querySelector("#my16modannouncement > a")
  102.         d.innerText = "查询"
  103.         d.addEventListener("click", (e) => {
  104.             e.preventDefault()
  105.             start()
  106.         })
  107.     } catch (e) {
  108.         console.debug(e)
  109.     }
  110. })();

复制代码


但是这个对服主有什么用呢。

enderman_JC
xmdhs 发表于 2021-4-13 22:46
其实 ip 不一定会一样的,不如判断近多少天有无被警告,然后自行判断。

比如这样

那些异常账号主要是签到机器人/无脑机器水
同一波这种账号一般都在一个服务器上运行,所以我觉得需要通过IP判断

xmdhs
enderman_JC 发表于 2021-4-13 22:54
那些异常账号主要是签到机器人/无脑机器水
同一波这种账号一般都在一个服务器上运行,所以我觉得需要通过 ...

签到机器人我这可以加一个判断回复数。无脑水总会被发卡。

另外 ip 的成本并不高,(比如说我的账户安全页面都打不开了)如果都是同一个 ip 的话,哪有这么麻烦。

xmdhs
本帖最后由 xmdhs 于 2021-4-13 23:11 编辑
enderman_JC 发表于 2021-4-13 22:54
那些异常账号主要是签到机器人/无脑机器水
同一波这种账号一般都在一个服务器上运行,所以我觉得需要通过 ...

这是现在的效果


查询的是最近末地贴申诉的,被封其实不冤,当然也解封了。

(测试其他服务器版的帖子,没有能出来这么多的)

west.myth
感觉不是很必要,原因如下:
1.被陷害是小概率事件(即使真被陷害了也还有申诉途径)
2.仅凭ip判断不准确
3.比对过程占用服务器资源(最近的504已经够多了)
4.对比过程需要调用ip,有无泄露风险?

enderman_JC
west.myth 发表于 2021-4-14 00:28
感觉不是很必要,原因如下:
1.被陷害是小概率事件(即使真被陷害了也还有申诉途径)
2.仅凭ip判断不准确

并不是仅凭IP,这个道只是让腐竹知道有异常账号顶帖,最终处理还是需要版主决定
关于泄露,我在帖子里说了,都要在后端进行,如果这还能泄露的话那

Aurora_Feather
enderman_JC 发表于 2021-4-13 22:54
那些异常账号主要是签到机器人/无脑机器水
同一波这种账号一般都在一个服务器上运行,所以我觉得需要通过 ...

然而机器人很多都会用7*木棍的,IP满世界跑,查出来也没法锤

enderman_JC
xiang_xge 发表于 2021-4-14 06:39
然而机器人很多都会用7*木棍的,IP满世界跑,查出来也没法锤

那种的似乎腐竹不会受到牵连(?)

第一页 上一页 下一页 最后一页