EH Forwarder Bot 介绍
代号 EH Forwarder Bot(EFB) 是一个可扩展的消息隧道聊天机器人框架,可在多个平台之间传递消息,并远程控制您的帐户。
说白了就是 利用 这个项目 把所有微信的信息 转发到 telegram
故事背景
起源是因为 telegram 成为了生活中主要的 摸鱼 阵地
但是 微信 又有着很多的联系人 不管是工作 还是日常生活
在两个社交软件之间来回切换 不光麻烦 有时候甚至想彻底抛弃 微信 (张小龙是垃圾
最终找到了 efb 这个项目 从此 远离 离不开 但是 垃圾的要死 的 微信
我已经用了 3 年了 但是因为小鸡频繁迁移 导致我频繁部署
网上的关于 efb 的教程没少看 结果都是缺衣少食的感觉
今天就来详细的写一篇 关于 efb 的相关问题 和 部署的内容吧
官方文档 官方 wiki
第一要点
如果你 不能登录 微信网页版 那也貌似没必要看下去了
或者你可以去查看相关 issue 来达到解封 微信网页版 的使用权限
部署教程
既然 centos 已经被 Red Hat 抛弃了
那我就以 ubuntu/debian 的部署教程为主 最后附上一点 centos 的教程 (毕竟我还爱着 centos
然后插一嘴 为什么没有 docker 的部署教程
附上 官方文档收集库 里边肯定有 docker 教程
Telegram bot 申请
作为一款 telegram 的项目 肯定是通过 bot 来实现控制和使用的(大误
-
获取 个人 telegram 账号 id 在 telegram 中搜索 @WooMaiBot 点我直达 发送
/id
其中的
chat
下方的第一个id
内的数字为 个人 id - 在 telegram 搜索 Botfather ([或者点我直达](https://t.me/BotFather)) 和他对话 发送一下内容 一行一次对话
/start /newbot
-
这时候给你的 bot 起个名字吧 比如说
squirrelWeChat
-
接着他会让你给 bot 起一个id (第一个只是显示名称 可以修改 id 不可修改 唯一) 必须以 bot 作为结尾比如说
squirrelWeChat_bot
- 这个时候会就出现 api 把那一串 数字:英文 123123123:asdfasdf 的保存下来或者不保存继续
-
因为更好的使用群组聊天功能,所以需要开启允许将 Bot 添加进群组,给机器人发送指令
/setjoingroups
选择enable
设置 Bot 隐私权限,默认 Bot 可能无法接收非/开头的消息,所以需要设置隐私权限。向该机器人发送指令
/setprivacy
选择刚刚创建的机器人 选Disable
。 -
最后你的 bot 怎么能没有命令呢。发送
/setcommand
然后在发送以下内容:help - 显示命令列表. link - 将远程会话绑定到 Telegram 群组 chat - 生成会话头 recog - 回复语音消息以进行识别 info - 显示当前 Telegram 聊天的信息. unlink_all - 将所有远程会话从 Telegram 群组解绑. update_info - 更新群组名称和头像 extra - 获取更多功能
到这一步 telegram bot 的设置就完成了
当然 你也可以给 bot 设置个好看的头像 比如说….
一键脚本
咕了一天一夜 终于 咕出来了
太难了
需要 root 权限运行
wget https://raw.githubusercontent.com/shzxm/efb-install/main/install.sh -O install.sh && chmod +x install.sh && bash install.sh
ubuntu/debian 部署教程
依赖安装
首先 你得有一台装有 ubuntu/debian 的小鸡 (其实 openwrt 都能跑貌似 但是我不会…
-
请确保你有 root 权限 并执行一下代码来安装依赖
sudo su apt full-upgrade -y apt install python3 python3-pip python3-setuptools python3-yaml ffmpeg libcairo2-dev libcairo2 nano -y python3 -m pip install --upgrade pip python3 -m pip install --upgrade Pillow
-
现在安装主体
pip3 install ehforwarderbot pip3 install efb-telegram-master pip3 install efb-wechat-slave pip3 install --upgrade Pillow
-
这里提一嘴 有一个插件是 选装
这个插件的作用是 你可以把 tg 的贴纸发送到微信 然后你得确保你安装成功 libcairo2 之后执行一下代码
pip3 install "efb-telegram-master[tgs]"
-
再多一嘴 如果你爱折腾 喜欢最新版(功能多
bug可能也多修复可能也快~可以用一下代码安装 开发版
apt install git -y pip3 install git+https://github.com/blueset/ehforwarderbot.git pip3 install git+https://github.com/ehForwarderBot/efb-telegram-master pip3 install git+https://github.com/ehForwarderBot/efb-wechat-slave
然后安装依赖 (我这个教程依赖装的有点多.为了确保不报错?
到这一步 相关依赖就安装完成了
配置文件
接着是配置文件 需要新建两个文件夹 用来存放配置文件
-
执行以下代码
mkdir -p /root/.ehforwarderbot/profiles/default/ mkdir -p /root/.ehforwarderbot/profiles/default/blueset.telegram
default/config.yaml 配置文件
修改第一个 配置文件 直接粘贴 进入编辑模式
nano /root/.ehforwarderbot/profiles/default/config.yaml
个人 配置文件中需要注意的地方只有一个 flags
中的内容 我觉得只需要开启这一个就可以很舒服的使用了 直接粘贴进去修改 crtl+x
退出并保存
更加详细的功能介绍 实验性功能
master_channel: blueset.telegram
slave_channels:
- blueset.wechat
#这一部分为插件,更多功能请查看文档
flags:
delete_on_edit: true
#以撤回并重新发送的方式代替编辑消息
更多插件请查看官方模块库
因为 web 微信 的 api 是不支持修改的 所以添加最后一个功能 来变相的实现修改
default/blueset.telegram/config.yaml 配置文件
修改第二个 配置文件 直接粘贴 进入编辑模式
nano /root/.ehforwarderbot/profiles/default/blueset.telegram/config.yaml
最主要的分为三个部分
-
token:上边的api
-
admins:上边的个人id
-
flags:实验性功能
个人认为只需要开启如下功能便可以很好的使用了 直接粘贴进去修改 crtl+x
退出并保存
更加详细的功能介绍 实验性功能
token: "" #在""中间 填入你之前找botfather申请的api
admins:
- 1234 #把数字修改为你的个人 telegram id 在上方获取过
#- 1279136259 #如果,想要多个账号使用同一个微信,可在这里加入第二个id或者多个id,去掉开头的#
flags:
send_image_as_file: true
#将所有图像消息作为文件发送,以防止主动报文的图像压缩.需要更多的流量,可以关闭,改为false
animated_stickers: true
#启用对动画贴纸的实验性支持启用对动画贴纸的实验性支持,该依赖已包含在教程依赖
default_media_prompt: text
#图片/视频/文件消息没有标题时的占位符文本.
因为 telegram 对于中文的搜索支持 简直相当于没有 所以我开启了最后那个功能
这样 在检索 某人发送的同一类型的内容时 会变得十分方便 之所以不使用图像模式 是因为 telegram 的搜索对 emoji 的支持也不是很友好
到此 配置文件全部修改完毕
centos 部署教程 (不完全版本)
其实没什么太大的区别 主要是在与 依赖文件的名称不同
附上依赖安装代码 配置请照抄 配置文件 部分
yum update
yum install python3 python3-pip python3-pil python3-setuptools python3-yaml python3-requests ffmpeg git cairo cairo-devel nano -y
使用介绍
-
在终端中 输入
ehforwarderbot
会出现二维码 扫描登录 -
接着和你 之前申请的bot 对话 发送
/start
-
/chat
为 和谁对话 具体使用为/chat 松小鼠
或/chat 松小
此命令会搜索最近联系人中带有相关字符的联系人 因为加载的问题 长时间不联系的人可能不太好找 -
/link
为 绑定对话到某个群组 你可以新建群组来绑定 群聊/私聊 到特定群组 具有搜索功能同上条 具体使用为/link 松小
之后选择绑定或者静音 记着要给 bot 管理员权限 -
/rm
为 撤回某条消息 和微信的规则是一样的 2 分钟内 具体使用为回复要撤回的内容 发送/rm
-
/extra
主要为掉线重新登录 或者 强制刷新对话列表使用 -
/update_info
为当前的群组更新 微信信息 在群组中使用 可以更新群聊头像为群组成员 群组名称为微信群聊名称
以上为主要功能 其他更多功能可以安装 官方模块库 来实现
到此就可以退出运行的 efb ctrl+c
然后输入 回车
退出 实在不行多按几次
为什么???你总不能一直开着终端吧?要是网络不稳定 efb 就关闭了 这个时候 往下看吧
进程守护 后台运行
进程守护 可以确保 efb 在后台运行
-
直接上代码
cd /etc/systemd/system/ nano efb.service
-
进入编辑界面后 复制粘贴下列代码
ctrl+x
保存退出[Unit] Description=ehforwarderbot After=network.target [Install] WantedBy=multi-user.target [Service] Type=simple WorkingDirectory=/root ExecStart=/usr/local/bin/ehforwarderbot Restart=always
此处需要注意 如果想要运行多个 efb 查看 文档 并修改守护文件
-
接着 输入一下代码启动 efb 开机自启 efb
#重新加载进程守护 systemctl daemon-reload #进程守护 启动efb systemctl start efb.service #进程守护 开机自启efb systemctl enable efb.service
-
想要关闭 或者 查看当前状态 可以使用一下代码
#进程守护 停止efb systemctl stop efb.service #进程守护 关闭开机自启efb systemctl disable efb.service #查看当前 efb 状态 systemctl status efb.service #实时查看 efb 守护日志 journalctl -f -u efb.service
半个重点 启动选项
-
-h
/--help
:显示帮助信息 -
-p PROFILE
/--profile PROFILE
:切换配置文件默认的配置档案名称为 default 。
-
-V
/--version
: 打印版本信息显示您的 Python、EFB 框架、以及所有已启用的信道和中间件的版本号。
-
-v
/--verbose
: 打印详细日志开启该选项会记录 EFB 及所有已启用的模块的详细日志。该选项和 –version 一同,对于调试及问题反馈有着极大帮助。
-
--trace-threads
:跟踪阻塞线程当您遇到必须强制退出 EFB 的情况时,此选项可用于确定问题的来源。启用此选项后,在发送第一个停止信号(SIGINT 或 SIGTERM)之后,将会每 10 秒识别一次休眠中的线程,直到收到下一个停止信号。
要使用此选项,您需要使用以下命令来安装额外的 Python 依赖关系
pip3 install 'ehforwarderbot[trace]'
半个重点 在一台小鸡上运行多个 efb
-
关键在于 配置文件的路径 默认的路径为
/root/.ehforwarderbot/profiles/default/
那么 你想要运行第二个 efb 就需要把之前的这个 配置文件改为专属名称/root/.ehforwarderbot/profiles/专属名称/
这样就可以开无限个 efb (前提是小鸡其实是老母鸡 -
运行的时候 在代码
ehforwardbot
后 加上 专属名称 比如ehforwardbot -p 专属名称
进程守护也是一样的修改方式
半个重点 公众号绑定 批量绑定
因为默认为 bot 转发所有的信息 群组绑定了 私聊也绑定了 这个时候你就会发现
无止境的 订阅号/公众号 无时不刻的不停的给你发消息 (烦死了!!!! 一个个手动静音?(累死了!!!
那么就需要批量绑定 具体操作如下 官方批量绑定公众号
-
首先创建一个群组 然后把 bot 添加到当前群组 并给予管理员权限 发送
/info
来获取群组 id -
以 REPL 模式启动 EFB
python3 -i -m ehforwarderbot [-p PROFILE_NAME 如果你不是一台小鸡运行多个 这里可以不填 多个请修改PROFILE_NAME为配置名称] 示例为 python3 -i -m ehforwarderbot 或 python3 -i -m ehforwarderbot -p 配置文件名称
-
操作 REPL 进行批量绑定 一行输一个 终端每行前会显示
>>>
#为注释 不需要输入 (粘贴from ehforwarderbot import coordinator from efb_telegram_master import utils # 获取 ETM, EWS 运行实例 etm = coordinator.master ews = coordinator.slaves['blueset.wechat'] # 如有运行多个实例,需追加实例 ID # 获取会话列表 chats = ews.get_chats() # 提取出所有需要批量绑定的会话,例如这里要提取所有公众号 # 具体可使用的参数请参考 EFB 和 EWS 的说明文档 to_link = [i.uid for i in chats if i.vendor_specific.get('is_mp', False)] # 绑定到指定会话 tg_grp_id = -3324225 #这里id后边更改为 你刚才创建的群组id for i in to_link: etm.db.add_chat_assoc(master_uid=utils.chat_id_to_str(etm.channel_id, tg_grp_id), slave_uid=utils.chat_id_to_str(ews.channel_id, i), multiple_slave=True) # 退出 EFB 实例并以一般方式重新启动 #ctrl+d 来退出
升级相关
升级代码
pip3 install --upgrade ehforwarderbot
pip3 install --upgrade efb-telegram-master
pip3 install --upgrade efb-wechat-slave
常见报错
-
File "/user/lib/python3.7/site-packeges/itchat/components/hotreload.py" self.loginInfo['User'] = templates.User(self.loginInfo['User']) KeyError: 'User'
请你去检查 第一步!!!! 如果没问题 那么可能是因为服务器和你当前使用的环境不一致 导致了微信风控 那么你可以挂个全局代理 使用一会微信 就可以解决这个问题
-
备份
先来说说为什么要备份 还是迁移的问题 但是也有可能会出现 迁移过程中 群聊名称变更 导致 绑定错误的问题
可以作为备份手段 但是不能100%保证 备份文档
efb 讨论相关
Github Discussions (论坛/社区) 主要 讨论社区
Telegram 频道群组入口请从此处进入
赞助/支持 EFB
缺点
-
efb 的服务 是基于 网页版微信 所以目前很多功能做的不如 客户端版的微信 这是因为 网页版微信 压根没有提高那么多的 api 除非哪天真的出现
linux 版微信
- 仅支持微信网页版所支持的功能以及消息类型,即
- 没有朋友圈
- 没有红包
- 不能发语音
- 不能发位置
- ……等等诸如此类
-
部分
文件
、图片
、表情
等多媒体文件会被网页版微信截断,即收不到任何数据, 尤以表情
为甚。因此造成的偶发现象,会提醒用户使用移动客户端查看。 -
使用 efb 的同时 不能使用
客户端微信
/ipad 微信
/网页版微信
-
- 本文链接:https://blog.shzxm.com/2020/12/31/efb/
- 版权声明:本博客所有文章除特别声明外,均默认采用 许可协议。
若没有本文 Issue,您可以使用 Comment 模版新建。
GitHub IssuesGitHub Discussions