Skip to content

Latest commit

 

History

History
117 lines (81 loc) · 4.57 KB

README_cn.org

File metadata and controls

117 lines (81 loc) · 4.57 KB

火星 Bot

一个 Telegram bot,在群里反复收到群友转发同一个频道消息时提醒他火星了,并且把之前转发消息的链接拍在他脸上。 English Readme

设计

本 bot 设计对下述转发做出反应:

  • 整条消息都是一个 URL
  • 消息转发自一个 公开频道

本 bot 不对下述转发做出反应:

  • 消息转发自其他群
  • 消息转发自 本群 。避免群友“转发复读机”
  • 消息转发自 私有频道

    当一条消息被转发到当前群组时,我们获取一个指向原频道中该消息的链接。之前看到的链接作为 key 存在一个 KV store 里,其值包括看到的次数。如果新消息的链接在 KV store 中可以找到,那么说明我们见过这条消息,应该增加计数,并且把之前转发消息的链接拍在他脸上。如果没看见,就默默记下来,次数为 1。URL 链接的处理与之类似。

部署

如下是一个将本 bot 部署在一台 Ubuntu 20.04 LTS 服务器的例子。

准备 bot

要开始火星救援,你必须通过 @BotFather 申请一个 Telegram bot。阅读官方文档以获取更多信息。

本 bot 设计为在群组中使用。将 bot 加入你的群组后,在 BotFather - /mybots - @your_bot - Bot Settings 中检查 bot 的如下设置:

  • 在你已将 bot 加入你的群组的情况下,=Allow Groups?= 需设置为 =off=。这将避免你的 bot 被其他人滥用。
  • Group Privacy 需设置为 =disabled=。 这将保证 bot 有足够的权限访问群组内的消息。

方便起见,你可以告诉 @BotFather 此 bot 所支持的命令,这样当用户在群组中输入 / 时,Telegram 会提供命令的自动补全功能。 只需进入 @BotFather 后输入 =/setcommands=,再选择你 bot 的 username,最后复制下列文本并发送即可完成设置。设置会在几分钟后生效。

help - Get help
delete - [admin only] Reply to a bot message to delete it
top - Show users with most duplicated messages
topics - Show most duplicated messages
me - Show the number of duplicate messages I sent
resettop - [admin only] Reset the top record for the current chat

获取代码

git clone https://github.com/yangsheng6810/no_dup_bot.git
cd no_dup_bot # 假设这个文件夹在 <YOUR_PATH> 中

安装 Rust 与依赖

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
sudo apt-get update
sudo apt install build-essential pkg-config libssl-dev

修改与编译 bot

你需要修改 main.rs 第26行no_dup_bot 为你自己 bot 的 username (以 bot 结尾的那个)。

static BOT_NAME: &str = "no_dup_bot";

使用你自己喜欢的编辑器修改完成后,开始编译 bot。

cargo check # 检查 bot 与其依赖
cargo build --release
cd <YOUR_PATH>/no_dup_bot/target/release

设置环境变量并启动 bot

你可以在 @BotFather 处获得 <YOUR_BOT_TOKEN> ,并在 @userinfobot 处获得 <ADMIN_USER_ID>

export TELOXIDE_TOKEN=<YOUR_BOT_TOKEN>
export NO_DUP_BOT_ADMIN=<ADMIN_USER_ID>

最后,启动 bot 并立即开始火星救援吧!

cd <YOUR PATH>/no_dup_bot/target/release && ./no_dup_bot

使用

在一个群组中,使用如下的命令格式与 bot 交互。

/<COMMAND> @<YOUR_BOT_USERNAME>

例如,假设 bot 的 username 为 =no_dup_bot=,你可以在群组中使用如下的命令显示帮助:

/help @no_dup_bot

你将会得到如下回复:

These commands are supported:
/help - Get help
/delete - Reply to a bot message to delete it
/top - Show users with most duplicated messages
/topics - Show most duplicated messages
/me - Show the number of duplicate messages I sent
/resettop - Reset the top record for the current chat

当通过回复 bot 的消息来向 bot 发送命令时,无需在 /<COMMAND> 之后加上 @<YOUR_BOT_USERNAME>

如果你已经在 BotFather 中设置了 bot 所支持的命令(参见准备 bot),你只需要输入 / 即可借助 Telegram 的自动补全功能快速输入命令。