开源的审核机器人

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

POLICR PROJECT

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

使用说明


权限要求

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

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

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

指令总览

名称 描述 类型 详情
/settings 主要设置项 综合开关
/ping 存活测试 状态
/from 设置来源调查 设置
/torture_time 更新验证时间 设置
/custom 定制验证方式 设置
/welcome 设置欢迎消息 设置
注意:不要在回复指令后编辑消息,这是不会生效的,请重新回复。

快速入门

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

/settings@policr_bot
  • 信任管理

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

  • 启用审核

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

  • 记录模式

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

  • 来源调查

    视需求。询问通过验证用户来自何处,通常用于统计热门宣传渠道。

  • 欢迎消息

    视需求。给通过验证用户显示欢迎消息,会替代验证成功的提示,并无视记录模式状态永久保留。

  • 容错模式

    推荐。验证错误发生时不武断封禁,继续多次验证以决定结果。在保证正确性的基础上更为人性化。但目前仅支持动态验证和图片验证

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

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

/torture_time@policr_bot
和很多机器人使用方式不同,请使用回复进行设置,而不是发送公屏消息。

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

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

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

/from@policr_bot

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

/ping@policr_bot

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

/custom@policr_bot

常见问题


功能详情

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

    当前的版本0.1.0-dev (b16905b)包括以下子功能:
    1. 新用户入群验证
    2. 入群机器人限制
    3. 清真检测并移除

    暂时不能独立定制子功能开关,但已有相关功能的实现计划

  • 为什么要验证?

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

    目前的版本0.1.0-dev (b16905b)支持以下几种不同机制的验证方式:
    1. 默认验证:存在两个答案,一个正确,一个错误的傻瓜式验证
    2. 定制验证:自定义问题和答案列表,让验证特立独行,可难可易
    3. 动态验证:通过随机生成计算公式和答案,或类似的纯动态验证
    4. 图片验证:与 Google 图片验证相反,提供一张图片和多个关键字

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

  • 为什么要消灭清真?

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

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

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

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

    目前0.1.0-dev (b16905b)版本机器人的默认有处于一种自动清理消息的工作行为,在早期被称作「干净模式」,它会延迟清理例如验证通过,自动放行,解除限制等消息。而记录模式则是关闭这种行为,不对任何类型的消息进行删除操作。最初机器人会保留所有中间消息,后来经过投票添加了自动清理消息的行为,所以产生了干净/记录两种工作模式。目前来讲,由于干净模式是默认的,所以你想保留所有消息的话,反而要启用记录模式。
    注意:干净模式不会清理任何附带「解除封禁」之类按钮的消息,因为要保证每一个被处理的帐号都被注意到,并始终认为存在误杀的可能,进而提供的人工解除途径。
  • 定制验证的最佳实践是什么?

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

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

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

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

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

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

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

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

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

高级教程

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

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

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

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

    [访问 Google](https://www.google.com)

未来计划

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

  • 是否考虑添加全网黑名单功能?

    有考虑。并且这种功能非常简单便能实现。目前没有提供相关功能是因为有一个叫做CNBlacklistR的项目作为前车之鉴,他们由于黑箱操作失掉了公信力。虽然我们一开始的构想就是避免集权化的,打算设计一套公投机制。但做到这一步,其构思和实现的力度都可能远大于实际效果,毕竟现在的广告机器人发了就自删帐号,黑名单什么的意义已经不那么大了。
    但,这仍然会是一个摆放在台面上的值得持续思考的计划。
  • 会支持图片验证码吗?

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

    关键字屏蔽是很常见的需求,这点我们很清楚。不提供这种功能的原因是:它不适合公共服务的机器人。因为公共服务机器人应用于大量的群组,如果每个群都设置关键字,会导致计算压力大幅度上升。而且群组数量和关键字数量是不可预估的,这会导致机器人无法完全保证处理速度和运行的稳定性。
    我们可能开发这种功能,但不是简单的关键字,而是通用的匹配规则。也有可能将相关功能仅在私有部署的版本上开放。

私有部署


需知

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

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

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

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

隐私政策


消息访问

任何将本项目实例提升为admin的群组产生的任何消息都会被实例机器人接收。

数据储存

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