
Informer (TGInformer) 是一个机器人库,允许你伪装成多个真实的 Telegram 用户,并监控 500+ 个 Telegram 频道 每个账号。详细信息记录到 MySQL 数据库、私密 Google Sheet 以及你自己的私人频道中,便于分析。
这是一个存在已知 bug 的功能性概念验证项目。欢迎 fork、分享,也欢迎与我联系。



支持基于正则表达式的关键词过滤
使用 SQLAlchemy 实现数据持久化,与数据库无关

将上下文消息和频道数据记录到私人频道和数据库
存储消息发送者、频道、频道参与人数等元信息


持久化已加入频道的会话
只需登录一次,机器人永久保持登录状态,无需重新进行双因素认证
每个账号最多可加入 500 个频道

编辑 informer.env 文件,其中包含 informer 所需的所有环境变量。
你可以在此处获取必要的 Telegram 相关信息:
https://my.telegram.org/auth 进行身份验证,提供手机号码以及发送到手机(或 Telegram)的验证码。


验证通过后,点击 "API Development Tools"

创建一个新的应用程序,填写下方所示的表单

现在你应该获得了 informer.env 文件中 TELEGRAM_API_HASH 和 TELEGRAM_API_APP_ID 字段所需的参数值。

TELEGRAM_ACCOUNT_PHONE_NUMBER,然后继续下一部分。
到目前为止,我们已经有了 Telethon 和 Informer 访问 Telegram API 所需的内容。接下来,我们需要获取你机器人账号的标识符。
userinfobot。


你会收到你的 Telegram 用户名和账号 ID。这很重要。

informer.env 文件,填入 TELEGRAM_ACCOUNT_ID(即上一步获取的 Telegram 账号 ID)和 TELEGRAM_ACCOUNT_USER_NAME。你也可以选择性地使用你的用户名或频道 ID 来填写 TELEGRAM_NOTIFICATIONS_CHANNEL_ID。
TELEGRAM_ACCOUNT_PHONE_NUMBER,因为这是生成会话的关键。如需创建多个账号,请参阅下方的 Burner App 说明。确保你正在运行 Python 3,然后在目录中直接运行 ./quick_start.sh。
你必须先运行此脚本,以便首次运行时与 Telegram 进行身份验证,并生成本地的会话文件。
之后,你可以将这些文件复制到不同账号的 app/session 目录中,并在使用 Docker 时挂载它们(如果你选择这样做)。

系统会提示你输入验证码,这要么是通过 Telegram 发送(如果你之前登录过),要么是通过 SMS 发送。

按回车键,你的会话将生成在 app/session 文件夹中,文件名是你提供的国际电话号码,带有 .session 扩展名。
继续下一部分,我们将使用 Docker Compose 设置数据库。
此步骤可选,但如果你想创建一个私密群组频道并获取群组 ID,请执行以下操作:

在 informer.env 文件的 TELEGRAM_NOTIFICATIONS_CHANNEL_URL 参数中设置该 URL。
要获取频道 ID,只需在 app 目录中运行 python3 bot.py <TELEGRAM_ACCOUNT_ID>,其中 <TELEGRAM_ACCOUNT_ID> 是你之前生成的账号 ID。
当脚本加载时,它会显示你所在的所有频道,复制此值并放入 informer.env 文件的 TELEGRAM_NOTIFICATIONS_CHANNEL_ID 参数中,然后终止脚本。现在你已经准备好运行 Informer。
运行 quick_start.sh 后,你可以通过以下命令运行 Docker Compose:
./start.sh 构建 Docker 容器,其中包括 MySQL 数据库。
运行 ./stop.sh 停止容器。
运行 ./clean.sh 移除所有悬空的容器和卷。注意:这会重置数据库,你将丢失所有数据。
需要注意几点:
之前你需要自己运行 MySQL 实例,这导致了一些连接字符串兼容性和版本问题。在此次更新中,MySQL 会自动为你创建并持久化到磁盘。
此外,Dozzle 已集成,你可以在浏览器中查看日志,只需访问 http://localhost:9999 并点击 app_informer 容器即可。
如果你不想使用自己的手机号码,并希望以某种程度的匿名性运行 Informer 机器人,可以使用 Burner App。该应用在 iOS 和 Android 上均可使用。
安装 Burner 应用

按照上述相同步骤,在 https://my.telegram.org/auth 提供新手机号码。
使用 Burner 验证。你会通过 SMS 收到一个验证码,需要提供该验证码。

登录 Telegram。
通过运行 python3 bot.py <api_user_id>(在 app 目录中)尝试使用该应用登录。
由于你使用 Telethon 登录,它会像之前一样在终端中询问你的验证码。
该验证码会通过 Telegram 消息或 SMS 发送。
提供验证码后,它将会话凭据保存在下面提到的会话文件中。只要你有会话文件,就无需再次进行身份验证。
会话保存在 app/session/ 文件夹中,文件名为 <telegram_phone_number>.session。
重复此过程,直到你拥有所有必要的会话文件,然后只需在 Docker 中挂载它们即可。
如何扩展账号数量曾让我头疼不已,因为我需要一个自动化的流程。Telegram 要求你使用一个真实的手机号码,并且能够接收来自短号码的短信。
不幸的是,Twilio 等带有 API 的服务由于防欺诈原因,在美国、加拿大和英国被禁止接收来自短号码的短信 https://support.twilio.com/hc/en-us/articles/223181668-Can-Twilio-numbers-receive-SMS-from-a-short-code-。这本来是理想的选择,唉,可惜不行。
我为此浪费了一整个晚上,直到我想起以前用过的一个很棒的应用:Burner (https://www.burnerapp.com/) —— 巧合的是,它确实有 API (https://developer.burnerapp.com/api-documentation/incoming-webhooks/)。这意味着你可以动态生成号码,创建新账号,并通过 Telegram 的 Python 客户端 SDK (Telethon: https://docs.telethon.dev/en/latest/) 完成身份验证。
最棒的是,Burner 号码在前14天是免费的。通过客户端 API 连接的 Telegram 账号只需登录一次,会话就会永久保存。我还没有集成 Burner API,但过程很直接。
该机器人基于 Telethon Python SDK 构建 (https://docs.telethon.dev/en/latest/)
在构建此概念验证时,遇到了一些需要注意的事项和陷阱:
当你在短时间内向 API 提交过多请求时(无论是查询用户信息还是过快加入过多频道),都可能触发 FloodWaitErrors。
TelegramClient(<session_file_name>, <api_user_id>, <api_user_hash>)
这个文件恰好是一个 SQLite 数据库,你可以连接它。它充当缓存,存储历史数据以及你的会话认证信息,这样你就不必再次通过 Telegram 的双因素认证。请注意,首次使用 API 时,你需要登录并进行身份验证。
当机器人运行并加入频道时,你会看到客户端实时更新,并显示你新加入的频道。

提示:TelegramX 是迄今为止最适合这些用途的客户端,因为它支持多账号登录。下载地址:
注意:Google Sheets 集成完全是可选的。 应用程序仅使用 MySQL 数据库即可完美运行。
如果你想启用 Google Sheets 日志记录:
app/credentials/README.md 中的详细设置指南操作。快速概述:
app/credentials/google_credentials.json这是可选的,机器人无需它也能运行。
bot.py:一次让它加入频道,另一次监控它们。我知道这个明显的 bug,将在下一版本中修复。你觉得这个项目有趣吗?如果觉得不错,请给它点个星。
这个项目是在两天内为一位加密货币领域的朋友制作的概念验证。如果你发现任何有趣或有利可图的应用,我很乐意合作。你可以通过以下方式联系我:
Twitter: @paulpierre 或 hi (at) paulpierre (dot) com
我大多数有趣的项目在 GitHub 上是私密的,但欢迎查看:http://www.github.com/paulpierre 或过往作品:http://www.paulpierre.com
版权所有 (c) 2020 Paul Pierre 特此免费授予任何获得本软件及相关文档文件(“软件”)副本的人,不受限制地处理本软件,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或销售本软件副本的权利,并允许获得本软件的人这样做,前提是符合以下条件: 上述版权声明和本许可声明应包含在软件的所有副本或实质性部分中。 本软件按“原样”提供,不提供任何明示或暗示的担保,包括但不限于适销性、特定用途适用性和非侵权性的担保。在任何情况下,作者或版权持有人均不对因本软件或本软件的使用或其他交易引起的任何索赔、损害或其他责任负责,无论是在合同诉讼、侵权诉讼还是其他诉讼中。