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 介绍

efb

代号 EH Forwarder Bot(EFB) 是一个可扩展的消息隧道聊天机器人框架,可在多个平台之间传递消息,并远程控制您的帐户。

官方文档 官方 wiki

说白了就是 利用 这个项目 把所有微信的信息 转发到 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 设置个好看的头像 比如说….

wechat 张小龙是垃圾

[](#一键脚本 "一键脚本")一键脚本

咕了一天一夜 终于 咕出来了

太难了

需要 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 遇到的那些坑")

标签: none

评论已关闭