ehForwarderBot 遇到的那些坑
https://blog.shzxm.com/2020/12/31/efb/
ehForwarderBot 遇到的那些坑
2020-12-31- 2022-06-25
3.7k- 14m
[](#EH-Forwarder-Bot-介绍 "EH Forwarder Bot 介绍")EH Forwarder Bot 介绍
代号 EH Forwarder Bot(EFB) 是一个可扩展的消息隧道聊天机器人框架,可在多个平台之间传递消息,并远程控制您的帐户。
说白了就是 利用 这个项目 把所有微信的信息 转发到 telegram
[](#故事背景 "故事背景")故事背景
起源是因为 telegram 成为了生活中主要的 摸鱼 阵地
但是 微信 又有着很多的联系人 不管是工作 还是日常生活
在两个社交软件之间来回切换 不光麻烦 有时候甚至想彻底抛弃 微信 (张小龙是垃圾
最终找到了 efb 这个项目 从此 远离 离不开 但是 垃圾的要死 的 微信
我已经用了 3 年了 但是因为小鸡频繁迁移 导致我频繁部署
网上的关于 efb 的教程没少看 结果都是缺衣少食的感觉
今天就来详细的写一篇 关于 efb 的相关问题 和 部署的内容吧
[](#官方文档-官方-wiki "官方文档 官方 wiki")官方文档 官方 wiki
[](#第一要点 "第一要点")第一要点
如果你 不能登录 微信网页版 那也貌似没必要看下去了
或者你可以去查看相关 issue 来达到解封 微信网页版 的使用权限
[](#部署教程 "部署教程")部署教程
既然 centos 已经被 Red Hat 抛弃了
那我就以 ubuntu/debian 的部署教程为主 最后附上一点 centos 的教程 (毕竟我还爱着 centos
然后插一嘴 为什么没有 docker 的部署教程
附上 官方文档收集库 里边肯定有 docker 教程
[](#Telegram-bot-申请 "Telegram bot 申请")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 部署教程")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-配置文件 "default/config.yaml 配置文件")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-配置文件 "default/blueset.telegram/config.yaml 配置文件")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-部署教程-不完全版本 "centos 部署教程 (不完全版本)")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 "半个重点 在一台小鸡上运行多个 efb")半个重点 在一台小鸡上运行多个 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'])
请你去检查 [第一步](https://blog.shzxm.com/2020/12/31/efb/#%E7%AC%AC%E4%B8%80%E8%A6%81%E7%82%B9)!!!! 如果没问题 那么可能是因为服务器和你当前使用的环境不一致 导致了微信风控 那么你可以挂个全局代理 使用一会微信 就可以解决这个问题
+ 更多常见报错请查看 [官方 issue](https://github.com/ehForwarderBot/efb-wechat-slave/issues/55) [官方 wiki](https://github.com/ehForwarderBot/efb-wechat-slave/wiki/EFB%E2%80%86%E6%A1%86%E6%9E%B6%E5%8F%8A%E5%90%84%E7%BB%84%E4%BB%B6%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98)
### [](#备份 "备份")备份
先来说说为什么要备份 还是迁移的问题 但是也有可能会出现 迁移过程中 群聊名称变更 导致 绑定错误的问题
可以作为备份手段 但是不能100%保证 [备份文档](https://github.com/ehForwarderBot/efb-wechat-slave/wiki/EFB%E2%80%86%E6%A1%86%E6%9E%B6%E5%8F%8A%E5%90%84%E7%BB%84%E4%BB%B6%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98#q-%E5%A6%82%E4%BD%95%E5%A4%87%E4%BB%BD%E5%BE%AE%E4%BF%A1%E4%BB%8E%E7%AB%AF%E7%9A%84%E6%95%B0%E6%8D%AE)
## [](#efb-讨论相关 "efb 讨论相关")efb 讨论相关
[Github Discussions (论坛/社区)](https://github.com/ehForwarderBot/ehForwarderBot/discussions) *主要* 讨论社区
[Telegram 频道](https://t.me/EFBSupport)群组入口请从此处进入
## [](#赞助-支持-EFB "赞助/支持 EFB")[赞助/支持 EFB](https://github.com/blueset/.github)
## [](#缺点 "缺点")缺点
+ efb 的服务 是基于 网页版微信 所以目前很多功能做的不如 客户端版的微信 这是因为 网页版微信 压根没有提高那么多的 api 除非哪天真的出现 `linux 版微信`
+ 仅支持微信网页版所支持的功能以及消息类型,即
+ 没有朋友圈
+ 没有红包
+ 不能发语音
+ 不能发位置
+ ……等等诸如此类
+ 部分`文件`、`图片`、`表情`等多媒体文件会被网页版微信截断,即收不到任何数据, 尤以`表情`为甚。因此造成的偶发现象,会提醒用户使用移动客户端查看。
+ 使用 efb 的同时 不能使用 `客户端微信` / `ipad 微信` / `网页版微信`
+ **本文作者:**shzxm
+ **本文链接:**[https://blog.shzxm.com/2020/12/31/efb/](https://blog.shzxm.com/2020/12/31/efb/ "ehForwarderBot 遇到的那些坑")
评论已关闭