EH Forwarder Bot 介绍

efb

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

官方文档 官方 wiki

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

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 的小鸡 (其实 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'

    请你去检查 第一步!!!! 如果没问题 那么可能是因为服务器和你当前使用的环境不一致 导致了微信风控 那么你可以挂个全局代理 使用一会微信 就可以解决这个问题

  • 更多常见报错请查看 官方 issue 官方 wiki

    备份

    先来说说为什么要备份 还是迁移的问题 但是也有可能会出现 迁移过程中 群聊名称变更 导致 绑定错误的问题

    可以作为备份手段 但是不能100%保证 备份文档

    efb 讨论相关

    Github Discussions (论坛/社区) 主要 讨论社区

    Telegram 频道群组入口请从此处进入

    赞助/支持 EFB

    缺点

    • efb 的服务 是基于 网页版微信 所以目前很多功能做的不如 客户端版的微信 这是因为 网页版微信 压根没有提高那么多的 api 除非哪天真的出现 linux 版微信

    • 仅支持微信网页版所支持的功能以及消息类型,即
      • 没有朋友圈
      • 没有红包
      • 不能发语音
      • 不能发位置
      • ……等等诸如此类
    • 部分文件图片表情等多媒体文件会被网页版微信截断,即收不到任何数据, 尤以表情为甚。因此造成的偶发现象,会提醒用户使用移动客户端查看。

    • 使用 efb 的同时 不能使用 客户端微信 / ipad 微信 / 网页版微信