- 不是回复,不是转发
- 中文内容,未知内容语言则检测:需要包含汉语字符,不包含日语和韩语字符(排除日文和韩文)
- 当作者是机器人,post不包含external,过滤掉
- 当作者是机器人,post包含external链接,判断链接标题描述是否中文内容,不是过滤掉,是再判断hostname,是社区类网站或非中国网站,过滤掉
- 当post不包含图片,入post库
- 当post包含图片,且post自身没有标记,进入nsfw复核流程
- 定时任务:每隔1h删除post库12h前的内容
- regex
/^(?=.*\p{Script=Han})(?!.*[\p{Script=Hiragana}\p{Script=Katakana}\p{Script=Hangul}])[\s\S]*$/us
- 查黑白名单bot,不在名单中则往下执行
- get
https://public.api.bsky.app/xrpc/app.bsky.feed.getAuthorFeed?actor=did%3Aplc%3Ammbknffnysobiitlszjovm3w&filter=posts_no_replies&includePins=false&limit=30
- 获取到最近30条post
- a=最远创建时间
- b=最近创建时间
- 计算平均间隔时间(单位:小时)=(b-a)/post数量/1000/60/60
- 如果平均间隔时间小于1,判断为机器人,否则为正常人
- 将判断结果存到bw{today}.db
包含对作者的分类信息,schema如下
did | bot | nsfw |
---|---|---|
did:plc:xx | 1 | 0 |
1=black 0=white -1=unkonwn
- 查bw{today}.db,有结果则返回
- 继续查bw{today-1}.db/.../bw{today-6}.db共6个sqlite文件
- 有结果,将结果存到bw{today}.db,返回结果
- 定时任务,每天执行1次,删除bw{today-7}.db
此类网站无法判定数据来源或数据来源于外国人
- 基于国别域名后缀判断
- 如果是非中国国别域名,过滤
- 检查not.db中非中国网站名单,有结果过滤
- 其他情况则不是
not.db由gh actions生成, 非中国网站名单在pastbin维护
- 定时任务,每隔1h执行get not.db
- 查黑白名单nsfw,
- 在黑白名单中(老用户),查官方mod标签机,刷新标记结果,入post库结束
- 不在名单中(复活用户或新用户)则往下执行
- 查官方mod标签机,有标记则为黑,存到bw{today}.db,入post库结束
- 没有标记入mod库,由gh actions审核
- 审核结果存到bw{today}.db
- 从mod库复制数据到post库,然后删除mod库中数据
基于 not.db bw{time}.db 对外发布标记
- 噪声用户 (由@smitechow.com提供列表【不科学,不合法,不主流】,gh actions更新到not.db)
- 机器人 (由feed流事实生成【发言频率间隔<1h】,存储在bw{time}.db)
- 不是机器人 (由feed流事实生成【发言频率间隔>=1h】,存储在bw{time}.db)
- NSFW群体 (由feed流事实生成【发表过nsfw图片】,存储在bw{time}.db)
- 不是NSFW群体 (由feed流事实生成【发表过normal图片】,存储在bw{time}.db)
默认提供纯净版,即噪声用户,NSFW群体隐藏,机器人警告,不是机器人,不是NSFW群体忽略
- 允许用户报告机器人和nsfw群体
- 报告机器人则走
机器人判定规则
,按照不在名单中执行 - 报告nsfw群体则走
nsfw复核流程
,按照不在名单中执行
报告nsfw群体必须指定具体post,符合有图片的情况,存在另外一张表中