开源的审核机器人

提供 Telegram 平台上的免费审核服务和应用程序

POLICR PROJECT

我厌烦广告,并痛恨四处乱入、广泛加群的垃圾帐号们。
我需要一个开放透明的审核制度,定制性强的验证机制。
  • 用代码证明可行性,用开源保证公信力
  • 加入我们,学习并建设这里
crystal 0.30.1
policr 0.1.5-dev (abad386)

使用说明


权限要求

使用之前需要一些前提,这些前提是保证机器人各功能运作的基础
  • 访问群消息(未关闭隐私模式)
  • 发送群消息(Send messages)
  • 删除群消息(Delete messages)
  • 封禁群成员(Ban users)

满足以上权限只需要将 PolicrBot 提升为 admin 即可。

以下权限并非必要,但不赋予将限制机器人的后台管理功能
  • 通过链接邀请用户(Invite users via link)
满足以上权限,机器人便可以全功能服务和工作
如果某些中文包个性化翻译导致找不到权限,请自行脑补。或,不限制任何权限

指令总览

名称 描述 类型 详情
/settings 主要设置项 综合开关
/ping 存活测试 状态
/from 设置来源调查 设置
/torture_time 更新验证时间 设置
/custom 定制验证方式 设置
/welcome 设置欢迎消息 设置
/report 举报垃圾内容 功能
/clean_mode 干净模式设定 设置
/strict_mode 严格模式设定 设置
/language 切换工作语言 设置
/anti_service_msg 删除服务消息 综合开关
/appeal 申诉解除黑名单 功能
/voting_apply 申请投票权 权限

快速入门

首先需要进行一些基本设置,建议按照推荐来做。当然你在明白这些设置项的含义的情况也可以随心所欲

/settings@policr_bot
  • 启用审核

    推荐。验证用户,打击清真等子功能的总开关,它能避免被垃圾内容或危险帐号打扰。

  • 信任管理

    推荐。让管理员们有控制机器人的权力,帮忙干活。

  • 私信设置

    推荐。 在群组中发送任何设置相关的指令,机器人会主动私聊发送设置菜单。有保护设置的私密性的作用,也避免了群聊中出现无关的设置过程消息。但设置不公开也意味着存在风险,因为无法得知哪个管理员设置过什么。

  • 记录模式

    不推荐。默认行为会自动清理例如验证通过,解除限制一类的提示消息。此选项将保留所有中间消息,显得比较刷存在感。

  • 容错模式

    推荐。验证错误发生时不武断封禁,继续多次验证以决定结果。在保证正确性的基础上更为人性化。但目前还不能支持自定义验证,因为无法添加多套验证问题

  • 静音模式

    推荐。 大部分与其他人无关的消息将以无声通知的方式发送,例如验证消息。因为验证是瞬间行为,即便没有声音通知也会被看到。所以理论上不会导致新群成员对验证的忽视。

如果不信任管理员,则管理员没有权限使用指令调整任何设置。

有些人反应很迟钝,默认验证时间55秒可能有点短

/torture_time@policr_bot
和很多机器人使用方式不同,请使用回复进行设置,而不是发送公屏消息。
允许在完成设置以后编辑消息,这是会生效的。编辑设置的回复能再次更新相关设置。

向新成员发送欢迎消息,带上你群规或帮助~

/welcome@policr_bot
请不要使用其它欢迎机器人。因为它们不会读取验证结果,只能无脑发送欢迎,哪怕没有通过验证。

群组正在四处宣传,很需要知晓入群成员来自何处

/from@policr_bot

怎么回事?机器人不干活嘞,检测它是否还活着

/ping@policr_bot

默认的验证方式太简单了,我想调整一下

/custom@policr_bot

有人发广告?看我举报它,让它进入黑名单!

/report@policr_bot
注意了,举报指令需要回复在被举报的消息上。

群组太冷门了,没人聊天。以至于总被验证失败的消息刷屏。能不能自动清理?

/clean_mode@policr_bot

想保留系统消息?哦不,我想保留入群消息,但不保留退群消息!

/anti_service_msg@policr_bot
请不要使用其它删除服务消息的机器人(例如 @AntiServiceMessageBot)。因为它们会影响依赖入群消息的验证功能(回复对象没有了,同时欢迎消息也获取不到入群用户)。通过本机器人自带的相关能力,将会在适当的时机下删除入群消息(例如完成验证),而不是无脑的立即删除。

常见问题


功能详情

  • 审核功能具体是指哪些?

    当前的版本0.1.5-dev (abad386)包括以下子功能:
    1. 新入群用户验证
    2. 入群机器人限制
    3. 封杀清真及消息
    4. 预封禁问题用户

    注意:每一个子功能都能单独关闭。

  • 为什么要验证?

    绝大部分垃圾内容发布者都是由程序运营的,它们虽然是普通用户类型但实质是机器人。这些广告机器人通过广泛加群以达到批量散播广告的目的。由于它们无法像人类一样回答验证问题,所以在入群发言之前就将其限制,验证超时或错误则将其移除,便达到了屏蔽的效果。
  • 各种验证方式分别是什么意思?那种更好?

    目前的版本0.1.5-dev (abad386)支持以下几种不同机制的验证方式:
    1. 默认验证:存在两个答案,一个正确,一个错误的傻瓜式验证
    2. 定制验证:自定义问题和答案列表,让验证特立独行,可难可易
    3. 算术验证:随机生成不会超出 100 范围内的两位数加法公式
    4. 图片验证:与 Google 图片验证相反,提供一张图片和多个关键字
    5. 棋局验证:随机生成五子棋棋局,只需要一步即可胜利。仅存在一个胜利的位置,且非常明显

    每一种验证方式偏重点各不相同,无法给出答案那一种最好。以后可能还会推出新的验证手段。而之所以提供不同的验证方式,就是为了让群主可以自己选择自认为更好的,或者更适合的。

    注意:本项目明确表示不会支持验证码,关于原因请看后面的「未来计划」部分。

  • 为什么要消灭清真?

    清真并非指穆斯林,也没有直接关系。清真指的是利用阿拉伯文字(包括波斯、维吾尔语等)发布广告的用户,这些用户的背后是黑客们批量注册并利用程序控制的小号。清真们数量巨大,广泛加群,已是电报平台最大的危害之一。至于他们究竟来自何处尚不清楚,也不重要。你只需要知道中文圈内出现阿拉伯语用户基本不用有多顾虑,他们就是机器人。清真二字是中文圈普遍认同的称呼,并非本项目原创。
  • 举报有什么好处?会产生什么后果?

    举报是将广告或垃圾内容发布者入库黑名单的最主要途径,是完全自助使用的功能。如果举报人是管理员(包括群主),完成举报以后将自动删除被举报消息并封禁被举报人,这比手动删除和封禁更加便捷。如果是普通群成员举报,不会对被举报对象做任何限制,但举报被受理之时将立即封禁举报对象并删除相关消息。所以举报可以让管理不在线时普通群成员间接的删封问题用户(这一点很重要)。
    举报产生以后,将会在黑名单公投频道进行投票。如果投票结果是「被受理」状态,被执行用户(即被举报人)将会入库黑名单。
  • 验证失败的一定是机器人吗?

    验证失败主要分两种情况。其一是最常见的验证超时,超时验证的帐号绝大多数是机器人,基本上不用去揣测是否误杀。其二则是错误验证,即回答错了问题。这种情况稍微复杂,取决于群组设定的问题的难度。默认验证是傻瓜式的,所以误杀可能性很小很小。
    如果您启用了容错模式,将会允许一定的验证错误。但会招致多次正确验证才能通过的更严苛条件。有点类似于根据考卷的正确率来决定是否合格,这种方式更为人性化,适合算术验证/图片验证/棋局验证。
  • 验证失败有什么后果?

    当前的版本0.1.5-dev (abad386)会对用户实施封禁,相当于管理员从成员列表中×掉了用户。不手动解封便无法再次加入。唯独有一种情况是例外:在接近超时时通过了验证,但网络原因导致超时触发时验证正确的请求还未到来,这种情况下他们仍然可以继续尝试加入。
  • 不限时验证有什么危害吗?

    为了满足零误杀的需求,提供了免去55秒验证倒计时机制。它的特点是不移除用户,但限制用户,除非他们主动验证才能解除限制。但被限制发言的潜在广告机器人可以邀请新用户,如果不移除它们就会导致更多的广告发布者被邀请进来,并越来越严重。所以一定要使用这种模式的话,请关闭邀请功能。
  • 「记录模式」是什么意思?

    目前0.1.5-dev (abad386)版本机器人的默认有一种自动清理消息的工作行为,它会延迟清理例如验证通过、自动放行、解除限制等消息。而记录模式则是关闭这种行为,不对任何类型的消息进行删除操作。如果想保留所有中间消息的话可以启用记录模式,但它的缺点是会让机器人显得特别刷存在感。
  • 「干净模式」是什么意思?

    机器人的默认行为不会清理任何附带「解除封禁」之类按钮的消息。原因是要保证每一个被处理的帐号都被注意到,并始终认为存在误杀的可能,进而提供的人工解除途径。但是这不表示我们不准备开放更深层的消息清理功能,而干净模式就是提供这种可以定制应该删除的消息类型的工作模式。
    使用干净模式指令,可以进一步定制需要删除的消息,例如默认行为不会清理的验证失败的消息。并且验证失败又独立区分出了超时和错误两种类型,每一种类型都能单独决定是否删除,以及延迟删除的时间。
  • 定制验证的最佳实践是什么?

    无论验证方式如何,第一目的当然是屏蔽非正常用户,所以定制验证可作为添加附加目的方式。以下例子分了三种情形,其附加目的都不同:
    1. 你知道本群讨论的是哪种编程语言吗?(Java 中文交流)
      • C#
      • C++
      • Java
    2. 你能保证不乱发广告并仔细阅读群规吗?(任意群组)
      • 保证
      • 不保证
    3. 点击点我按钮(任意群组)
      • 点我

    第一种是群组主题,第二种是入群前提,第三种则是无错误答案的纯主动验证。其强调的点各不相同,但都是值得推荐的设置方式。

  • 为什么建议信任管理员?

    如果不信任管理员,管理员将无法使用指令调整机器人的任何设置。因为群主只有一个,在线时间段的分布通常不如多个管理员密集,如果管理员有权限控制机器将能更即时的应对突发情况。当然,如果您的群比较特殊或者不是很信任管理员,自然可以无视这项设置。
  • 不被信任为什么管理员还能「人工封禁」和「人工通过」?

    封禁和解封权限对于PolicrBot而言和管理员是同级的。他们即便不使用这些按钮也能自行做到封禁和解封,只是不那么便捷罢了。所以信任管理员与否和消息内联键盘的许多按钮使用权限是无关的,主要和指令使用权相关。
  • 来源调查功能有什么意义?

    设置或启用来源调查以后,将会提供给每一个通过验证的用户一个可选择列表,用以告诉群成员他从哪个渠道进入(知道)这个群组的。若群组在四处宣传,知晓群成员来自何处很有意义。没有这个需求的话,则没必要啦。
  • 白名单的作用范围有多大?包括什么?

    白名单是所有群组共享的,准确的说本项目任何可能存在验证的位置共享。目前的版本0.1.5-dev (abad386)白名单主要存放被清真误杀的正常用户,这些正常用户可能是清真名称或发表过清真消息。只有群组管理员有权限将清真加入白名单,请不要滥用此功能,一经发现会取消机器人实例的使用权。
  • 内联键盘是什么?为什么会失效?

    内联键盘(InlineKeyboard)的形式为位于消息下方可点击的按钮,它们看起来就好像一副被消息附带上的小键盘。本项目广泛使用内联键盘,应用于各个功能的方方面面,例如选择验证答案,解除封禁等常见操作。如果发生了涉及到内联键盘按钮功能的变更,例如未来将解除封禁(仅举例用途,不会这么做)功能去掉了,那么现存的附带解除封禁按钮的消息的内联键盘就可能已经失去作用了。通常这种情况会在更新频道中专门说明。
  • 什么是事后审核?为什么会突然事后审核用户?

    事后审核相对的是即时审核,即时审核也就是默认的用户入群后立即审核用户,要求验证的行为,这是正常工作的表现。事后则是没有立即对入群用户启动审核的意外状况。为什么要独立分区事后审核?因为入群用户可能已经离线,无法立即完成验证。所以事后审核启动只会限制用户,不会移除用户,待用户主动完成验证才能解除限制。造成事后审核的原因一般是因为机器人程序中断运行一定的时间导致的,因为即便中断运行,在机器人重新启动之时仍然能接收到之前所有未接收的历史消息,这时候处理过时的入群消息自然就不能进行即时审核了。注意:机器人中断运行是意外情况,我们不会在不通知的情况下主动停止机器人程序,这是不负责任的行为。

高级教程

  • 如何只限制未验证用户而不移除用户?

    使用/torture_time指令,选择无验证倒计时即可。附加阅读请看常见问题中的不限时验证危害。
  • 如何设置不可能验证错误的效果?

    很简单。定制验证问题时只设置一个正确的答案即可。例如问题为:点击点我按钮,答案为点我。 因为除了点击「点我」按钮以外没有可能错误的答案,所以就变相的成为了一个纯主动验证,而非选择题。只要该用户是能交互的,便能通过验证。虽然这样做已经可以排除绝大部分垃圾帐号,但不排除未来出现能自动触发第一个按钮的机器人程序,所以默认验证仍然保留一个错误答案。
  • 如何在欢迎消息中嵌入链接?

    此处的链接并非单纯的可跳转的 URL 地址,而是指在显示上可以自定义文本类型的内联链接。没有什么黑魔法或自创标签,使用 Markdown 格式就够了。例如:

    [访问 Google](https://www.google.com)
  • 如何在欢迎消息中使用变量?

    假设一名叫做「哆啦A梦」的用户通过了验证,我们可以这样在欢迎中显示他的名字:

    欢迎{{fullname}}加入本群。
    其中{{fullname}}会被替换为「哆啦A梦」,所以欢迎内容实际为:欢迎多啦A梦加入本群。 其它变量的使用方法与之相同。
  • 如何在欢迎消息中添加按钮?

    假设群规链接为https://t.me/c/1244922484/10053,我们添加一个阅读群规的按钮:

    热烈欢迎 {{mention}} 加入本群!
    -b [阅读群规](https://t.me/c/1244922484/10053)
    其中-b开头的行表示生成一个按钮,在 -b 后面需要使用标准的 Markdown 链接语法。 按钮的数量不仅没有限制,位置也可以随意穿插,因为它们并不会成为欢迎文本内容的一部分。

未来计划

  • 目前有什么正在实现但还未开放的功能?

  • 会支持图片验证码吗?

    众所周知,验证码在网页上曾经非常流行,但是现在则逐渐被例如 Google 一键验证、滑动滑块等方式的淘汰掉了。原因是验证码是一种不人道的验证方式,体验极差。如果生成的图片质量过低,会让人觉得无比痛苦。我个人认为即便是随机生成简单计算公式都比验证码高明很多。所以基本永不考虑。值得重复一提的是,屏蔽广告等行为机器人只需要一个主动验证就行了,甚至简单到要求点击一个按钮即可。即验证码目前也是大材小用了。
  • 能支持关键字屏蔽吗?

    在早前一直有过说明不考虑支持相关功能,现在这个想法改变了。在上面的「未来计划」部分有一个相关的链接。但什么时候实现以及什么时候正式开放还需要时间。
    此功能实际上可以非常轻易的实现,但没有这么做的主要原因是稳定性考虑。还需要更多的测试以及稳定的常数级的实现方式,并且可能会增加一定的限制。

私有部署


需知

本项目主要使用Crystal语言编写,利用嵌入式数据库RocksDBSqlite3 储存数据。所以它能非常方便的进行部署。但在本项目1.0 版本释出之前并不准备发布预编译安装包或者容器镜像。

这主要是因为目前项目处在快速功能迭代的阶段,不适合规划具体版本。所以,这个阶段都使用官方实例才能满足快速的版本更替。并且会促进项目的进步和稳定。

当然,你可以自主编译和部署项目。但仍需强调的是不建议这么做。目前的源代码没有彻底分离官方实例和第三方构建,可能会存在功能异常,例如引用的各种链接。

并且在此阶段部署的公开服务的 PolicrBot 实例将不被本项目承认。

隐私政策


消息访问

所有将本项目实例提升为admin的群组产生的任何消息都会被机器人接收,但并不会转发或存储任何和功能无关的消息。为了提供人工服务,所有私聊机器人的功能无关消息将被转发给管理员。注意:只针对私聊机器人消息。
所谓「功能无关」消息指的是并非指令,也并非设置内容(例如回复欢迎消息或自定义问题)。此类消息机器人不会有任何响应,但若在私聊时发送此类消息将可能收到管理员的回复:)

数据储存

将持久化保存的数据包括有:
  • 机器人相关设置,例如来源调查和定制验证涉及到的群组信息
  • 白名单清真用户ID
  • 受管的群组ID、名称和链接
  • 受管群组的管理员用户ID、全名
  • 举报人ID、所属群组ID、被举报消息ID和被举报用户ID
在机器人程序运行周期内缓存的数据包括有:
  • 服务中的群组ID
  • 新加入用户系统消息
本项目当前版本0.1.5-dev (abad386)没有持久化储存任何用户普通消息,请安心。
以上内容由源代码保证,接受任何组织或个人的监督。