EFB for WeChat running via Docker

排版非常糟糕,但是我实在懒得修改排版了,因为少数派的在线编辑器实在是太难用了,也不支持 Markdown。

Prerequisite:

  1. 一个能安装 Docker 环境的服务器
  2. Telegram 账号,用你的个人账号申请一个 bot
  3. 对 Linux 有基本的了解和使用经验
  4. 遇到问题善于使用搜索工具

在 VPS 上部署 EFB 收发微信消息的优缺点:

优点:

  1. 全平台同步聊天记录
  2. 摆脱微信电脑客户端
  3. 如果有多个微信账号,可以在一个 Telegram 账户中轻松切换(但是需要另一个手机/iPod touch 登录账号)

缺点:

  1. 容易掉线,我自己的使用经验是一天需要重启至少一次
  2. 基于网页版微信,所以功能仅限网页版微信提供的功能
  3. 被封号的风险
如果无法忍受缺点,尤其是无法忍受容易掉线导致发送消息失败,请不要使用!

安装步骤:

1. 安装 Docker 环境:

这里以 Ubuntu 为例,如果是其他系统请参照 Docker 官方文档 Docker installation
先更新 apt
$ sudo apt-get update
然后安装:
$ sudo apt-get install docker-ce
如果想检查一下安装是否成功的话,运行一下官方提供的 hello world:
$ sudo docker run hello-world

2. 必要的 Telegram 信息

本质上 EFB 是一个在 Telegram bot 和微信网页版的中间人,所以,EFB 需要知道发给哪个 Telegram 账号,以及发给哪个微信账号。微信账号的认证在最后的扫码阶段,而 Telegram 的账号认证则写在 EFB 的配置文件里面。所以,现在使用 Telegram 获得所需要的 bot token 和你的 Telegram 账号 ID。

bot token:

  1. 在 Telegram 里搜索 BotFather,然后 /start
  2. 输入 /newbot,此时 Telegram 会要求你输入 bot 的 name 和 username。这两者的区别是 username 一定要以 bot 结尾。输一个简单好记的 name 作为 bot name
  3. 记下获得的 API
  4. 输入 /setprivacy,之后输入 Disable,这样才可以在 Telegram 里面使用群组连接微信联系人。

admin id:

  1. 搜索 get_id_bot,然后 /start
  2. 记下 Chat ID

3. 编辑配置文件:

配置文件:

master_channel = 'plugins.eh_telegram_master', 'TelegramChannel'

slave_channels = [('plugins.eh_wechat_slave', 'WeChatChannel')]

 

eh_telegram_master = {

    "token": "YOUR_TOKEN",

    "admins": [YOUR_CHAT_ID],

    "bing_speech_api": ["xxx", "xxx"],

    "baidu_speech_api": {

        "app_id": 0,

        "api_key": "xxx",

        "secret_key": "xxx"

    }

}

将里面的 YOUR_TOKEN 和 YOUR_CHAT_ID 的值分别换为前面获得的 token 和 Chat ID,保存为 config.py  然后将 config.py 保存到服务器上,记住这个文件的路径,需要填写到 docker run 的参数里面。

注意,配置文件中的 bing_speech_api 是语音转文字的 API,可选。

如果不确定路径的话用这个命令查找文件路径:
readlink -f config.py

4. 新建数据库文件:

touch tgdata.db

同样,需要记住这个文件的路径。

5. 将 Docker 镜像拉取到本地并运行:

假定 config.py 和 tgdata.db 的路径是 /root/config.py,/root/tgdata.db
docker pull royx/docker-efb
docker run -d --restart=always --name=ehforwarderbot \        -v /root/config.py:/opt/ehForwarderBot/config.py \        -v /root/tgdata.db:/opt/ehForwarderBot/plugins/eh_telegram_master/tgdata.db \        royx/docker-efb

6. 微信登录:

执行下面的命令:

docker logs ehforwarderbot

打开手机微信扫码,扫描屏幕上的二维码,然后确认登录。

隐藏 Poor Network 通知

进入 container:

docker exec -it YOUR_CONTAINER_ID sh

进入文件:

 vi /opt/ehForwarderBot/plugins/eh_telegram_master/__init__.py

将 1610 - 1616 行与 poor network 相关的通知全部注释掉(内容如下),这样就能避免频繁的 poor network 通知了。

#           if self.timeout_count >= 10:                                                                               
#                bot.send_message(getattr(config, self.channel_id)['admins'][0],                                       
#                                 "<b>EFB Telegram Master channel</b>\n"                                             
#                                 "You may have a poor internet connection on your server. "                                   
#                                 "Currently %s time-out errors are detected.\n"                                      
#                                 "For more details, please refer to the log." % (self.timeout_count),                         
#                                 parse_mode="HTML"

其他注意事项:

  1. 虽然不知道是谁的问题,但是建议每 12 个小时重启一次 container,否则可能会出现 Telegram 端无法把消息传送到微信的问题:docker container restart -t 2 YOUR_CONTAINER_NAME
  2. 微信的部分表情包无法在 Telegram 端显示,不过不影响整体使用。

参考:

EH Forwarder Bot




2

登录 使用文章全部功能