EFB V2 正式版简明安装教程:用 Telegram 收发微信 [基于 Docker]

:warning: 微信会针对使用第三方客户端的用户实行登录封禁,即无法再使用微信网页版登录,请自行考虑风险。

不喜欢 Docker 的同学可以参考手动安装

两年多前,青小蛙就在使用 EFB V1 了,并且还写过一篇比较详细的教程:

https://www.appinn.com/efb-tutorial-with-docker/

目前此版本仍然可用,但 EFB 已经升级到了 V2,虽然还处于 Beta,但基于 V2 的各种中间件,以及支持 QQ 互通,所以新用户还是使用 V2 吧。

介绍

EFB 全称 ehForwarderBot,是一个可扩展的信息隧道机器人开源框架,支持通过聊天机器人从不同的 IM 工具收发信息,比如通过 Telegram 收发微信消息,通过 Telegram 收发 QQ 消息,通过 Telegram 收发 Facebook Messenger 等。

安装 Docker,以 Ubuntu 为例

鉴于每个人的系统环境不同,无论多么详尽的安装教程都会产生各种各样的问题,而这些问题绝大多数都与 EFB 无关,更多的是系统环境配置问题,所以本着多一事不如少一事的原则,这里使用 docker 安装。而 Docker 能够有效避免不同用户系统环境不同导致的问题。

曾经写过 Docker 官方推荐的安装方式,不过目前的 Ubuntu 18.04+ 版本更推荐使用 apt 安装,简单快捷:

apt update
apt install docker.io
curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose

即可完成安装。

其它平台请参考官网,安装 Docker CE 即可。

配置 EFB V2

首先创建一个文件夹,要先创建几个文件:

├── blueset.telegram
│   ├── config.yaml
│   └── tgdata.db *
├── blueset.wechat *
│   ├── wxpy.pkl *
│   └── wxpy_puid.pkl *
├── config.yaml
└── docker-compose.yml **

标记 * 号为自动生成的路径和文件,可以不用管它,** 可见最后。

config.yaml

在当前路径下创建 config.yaml 文件

下面是一个拿来可用的 config.yaml 示例:

master_channel: blueset.telegram
slave_channels:
- blueset.wechat
middlewares:
- filter.FilterMiddleware

里面包含了 1 个中间件:过滤指定会话功能。

blueset.telegram/config.yaml

创建 Telegram 主频道配置文件 config.yaml

$ mkdir blueset.telegram
$ touch blueset.telegram/config.yaml

下面是需要修改的 blueset.telegram/config.yaml 示例文件:

token: "Telegram Bot's token"
admins:
 - 你的 Telegram User ID
  • Telegram User ID 与这个机器人 @get_id_bot 聊天,输入 /my_id 即可
  • Telegram Bot’s token 参考这篇文章,配置机器人部分

运行

修改 docker-compose.yml 文件:

efbv2:
  image: scavin/docker-efbv2
  container_name: efbv2
  restart: always
  volumes:
    - ./:/root/.ehforwarderbot/profiles/default/ 

然后运行:

docker-compose up -d

最后,使用下面的命令查看微信登录二维码:

docker logs efbv2

如何使用过滤

选择你要屏蔽的对象,直接回复 filter` 即可

(完)

有问题可直接回复。

批量绑定公众号

tag:REPL 支持批量绑定公众号

此方法需要一定的操作经验,请谨慎。最糟糕的结果是绑定混乱,有可能需要重新绑定所有联系人,如能承受此结果,可随意折腾。

以 REPL 模式启动 EFB

REPL 模式同样需要配置 EFB。可以在第一次运行 EFB 的使用,主要用来进入维护模式,比如:绑定公众号到某一个 Group。

$ docker run -d --name efbv2 $(pwd):/root/.ehforwarderbot/profiles/default/ scavin/docker-efbv2:REPL
以 REPL 模式启动 EFB
$ docker exec -it efbv2 ash

来源在这里,但注意这里有一些错误,以下面的为准:

EWS & ETM:批量绑定(公众号等)
Eana Hufwe edited this page on 25 Nov 2018 · 2 revisions
Written for EFB 2.0.0b10; ETM 2.0.0b11; EWS 2.0.0a12

注意:
本内容是一个非正式支持的 Hack,且未经过测试。项目维护者及作者没有义务对下述内容提供任何支持,且不对该内容产生的任何后果负任何责任。 请在充分理解下述内容原理的前提下操作。You have been warned.

将 ETM 的 Telegram Bot 添加到目标绑定群组、发送 /info 以获取该群组 ID。群组 ID 应是一个负整数。下面以 -3324225 为例。
在当前的 profile 中设置 ETM 为主端,并启用 EWS。
以 REPL 模式启动 EFB
python3 -i -m ehforwarderbot [-p PROFILE_NAME]
操作 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 = -123456
>>> 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 实例并以一般方式重新启动
>>> ^D

动态贴纸支持

tag:dev 支持动态贴纸

2021.12 更新

中间件 filter.FilterMiddleware 有几个特别应用:

EFB_DATA_PATH/profiles/YOUR_PROFILE/blueset.telegram/config.yaml 文件:

flags:
    your_message_on_slave: "mute" ## 不转发自己的消息:
    message_muted_on_slave: "mute" ## 不转发微信中设为静音的消息
    ews_mp: true ## 不转发公众号:

另外对于 Web 微信不能登录的问题,可参考:

最后,EFB V2 的 Docker 镜像也已更新:

https://hub.docker.com/r/scavin/docker-efbv2

2 个赞

两年前你给的就是基于docker 两年后还是基于docker 垃圾主机跑不了docker啊

不知道QQ互通怎么实现呢

2019-08-01 09:18:18,899 [Level 99]: ehforwarderbot.main (main.init; main.py:85)
Initializing slave blueset.wechat…
Traceback (most recent call last):
File “/usr/bin/ehforwarderbot”, line 11, in
load_entry_point(‘ehforwarderbot==2.0.0b16.dev1’, ‘console_scripts’, ‘ehforwarderbot’)()
File “/usr/lib/python3.7/site-packages/ehforwarderbot/main.py”, line 267, in main
init(conf)
File “/usr/lib/python3.7/site-packages/ehforwarderbot/main.py”, line 91, in init
coordinator.add_channel(cls(instance_id=instance_id))
File “/usr/lib/python3.7/site-packages/efb_wechat_slave/init.py”, line 174, in init
self.authenticate(‘console_qr_code’)
File “/usr/lib/python3.7/site-packages/efb_wechat_slave/init.py”, line 553, in authenticate
logout_callback=self.exit_callback)
File “/usr/lib/python3.7/site-packages/efb_wechat_slave/wxpy/api/bot.py”, line 87, in init
loginCallback=login_callback, exitCallback=logout_callback
File “/usr/lib/python3.7/site-packages/itchat/components/register.py”, line 29, in auto_login
loginCallback=loginCallback, exitCallback=exitCallback):
File “/usr/lib/python3.7/site-packages/itchat/components/hotreload.py”, line 54, in load_login_status
self.loginInfo[‘User’] = templates.User(self.loginInfo[‘User’])
KeyError: ‘User’

报错了,不知道哪里做错了。

EFB 2.0 正式版教程已更新,请去折腾。

tag:dev 支持动态贴纸
tag:REPL 支持批量绑定公众号

「虽然还处于 Beta」

可以啦可以啦,已经够用了。

网页版正常,efb出码,但扫码一直失败会是什么原因

更新下普通安装,毕竟 docker 有时候会有问题…愁人。

apt install python3-pil python3-setuptools python3-numpy python3-yaml python3-requests libmagic-dev libwebp-dev ffmpeg
pip3 list |awk '{print $1}' |xargs -n 1 pip3 install --upgrade
pip3 install ehforwarderbot efb-telegram-master efb-wechat-slave

mkdir -p /root/.ehforwarderbot/modules/
wget https://gist.githubusercontent.com/blueset/0084ab142e2213bca50d81d08753e564/raw/8699f4b7007b396ff06493eb3ded34402b19d5d0/filter.py -P /root/.ehforwarderbot/modules/

守护进程:

vi /etc/systemd/system/efbv2.service

[Unit]
Description=efbiv2 Service
After=network.target
Wants=network.target

[Service]
Type=simple
ExecStart=/usr/local/bin/ehforwarderbot
Restart=on-failure

[Install]
WantedBy=multi-user.target
systemctl enable efbv2.service // 开机启动  
systemctl start efbv2.service // 启动
journalctl -f -u efbv2.service // 查看二维码及运行日志,可根据日志排查错误 ctrl+c 退出

@Qingwam 你好!我看不太懂是怎么操作的,是要用什么软件写代码吗?因为刚接触,不太懂,很抱歉打扰了!

哪里不懂讲哪里,一句不懂无法解释。

是怎么安装的?一开始就看不懂了:cry:

这个需要 Linux,如果没接触过的话,还是别折腾,坑太多。劝退

微信好像停掉网页版了,这个还能用吗?

新用户没有网页版权限,部分老用户可以用。

内容小幅更新。

请问小青蛙,这个中间件配置格式是这样的吗?

master_channel: blueset.telegram
slave_channels:
- blueset.wechat
middlewares:
- filter.FilterMiddleware
  - message_muted_on_slave: "mute"

这里: Filter: A demo of advanced user interaction with master channel through middleware. · GitHub

配置文件在这里:

EFB_DATA_PATH/profiles/YOUR_PROFILE/filter.FilterMiddleware/config.yaml

If the QR code was not shown correctly, please visit:
https://login.weixin.qq.com/qrcode/ofBD1w_KCg==
2023-08-02 02:20:00,710 [Level 99]: plugins.blueset.wechat.WeChatChannel (__init__.console_qr_code; __init__.py:192)
    Confirm on your phone.
2023-08-02 02:20:03,513 [Level 99]: plugins.blueset.wechat.WeChatChannel (__init__.console_qr_code; __init__.py:195)
    Successfully logged in.
2023-08-02 02:20:04,788 [Level 99]: ehforwarderbot.__main__ (__main__.init; __main__.py:137)
     Slave channel WeChat Slave (blueset.wechat) # Default profile is initialized. 
2023-08-02 02:20:04,788 [Level 99]: ehforwarderbot.__main__ (__main__.init; __main__.py:142)
     Initializing master blueset.telegram... 
Exception in thread itchat polling thread (maintain_loop):
Traceback (most recent call last):
  File "/usr/lib/python3.9/threading.py", line 973, in _bootstrap_inner
    self.run()
  File "/usr/lib/python3.9/threading.py", line 910, in run
    self._target(*self._args, **self._kwargs)
  File "/usr/lib/python3.9/site-packages/efb_wechat_slave/vendor/itchat/components/login.py", line 314, in maintain_loop
    exitCallback()
  File "/usr/lib/python3.9/site-packages/efb_wechat_slave/__init__.py", line 261, in exit_callback
    raise Exception(
Exception: Web WeChat logged your account out before master channel is ready.
2023-08-02 02:20:05,451 [Level 99]: ehforwarderbot.__main__ (__main__.init; __main__.py:149)
     Master channel Telegram Master (blueset.telegram) # Default profile is initialized. 
2023-08-02 02:20:05,451 [Level 99]: ehforwarderbot.__main__ (__main__.init; __main__.py:155)
     All channels initialized. 
2023-08-02 02:20:05,451 [Level 99]: ehforwarderbot.__main__ (__main__.init; __main__.py:157)
     Initializing middleware filter.FilterMiddleware... 
2023-08-02 02:20:05,456 [Level 99]: ehforwarderbot.__main__ (__main__.init; __main__.py:164)
     Middleware Filter Middleware (filter.FilterMiddleware) # Default profile is initialized. 
2023-08-02 02:20:05,456 [Level 99]: ehforwarderbot.__main__ (__main__.init; __main__.py:169)
     All middlewares are initialized.

有如下报错,请问是什么原因呢?

https://login.weixin.qq.com/qrcode/ofBD1w_KCg==
这就是你的登录二维码啊