介绍

2021-01-18 爆出 QQ 事件,但是一部分人的生活中没办法离开QQ,毕竟是国内使用率仅次于 WeChat 的聊天软件。网上第一时间出现了好几种基于火绒的防扫描办法,但是终归治标不治本,你耐不住扫描更多和其不相干的文件。与其留着一颗定时炸弹,但是又不能彻底抛弃,不如换个办法。EFB-QQ-Slave,基于EH Forwarder Bot的 QQ 从端,转发 QQ 信息到 Telegram。我之前写了EFB WeChat Slave Channel的相关部署教程,今天就来说说 QQ 的部署指南(防 QQ 指南)。

相关阅读:QQ 正在尝试读取你的浏览记录 [原创]关于 QQ 读取 Chrome 历史记录的澄清

官方项目

efb
efq

部署教程

本项目不像 EFB WeChat Slave 有先决限制条件,任何人只要 QQ 可以正常使用,均可以使用。

  • linux 服务器一台

  • windows 桌面机一台(需要用来登录QQ)

  • 折腾的心(马化腾司马) 一颗

Telegram bot 申请

如果之前有部署过 EFB WeChat Slave 的孩子们,就不需要这一步了,可以直接跳过。

作为一款 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 的设置就完成了

头像的话,自己找一个就行~

ubuntu/debian 部署教程

首先,你得有一台装有 ubuntu/debian 的小鸡(其实 openwrt 都能跑貌似,但是我不会…)然后安装依赖 (我这个教程依赖装的有点多.为了确保不报错?

  • 请确保你有 root 权限 并执行一下代码来安装依赖

    sudo su
    apt full-upgrade -y
    apt install git nano python3 python3-pip python3-setuptools python3-yaml ffmpeg  libcairo2-dev libcairo2 openjdk-11-jre -y
    python3 -m pip install --upgrade pip
    python3 -m pip install --upgrade Pillow
  • 现在安装主体

    pip3 install ehforwarderbot
    pip3 install efb-telegram-master 
    pip3 install -U git+https://github.com/milkice233/efb-qq-slave
  • 再多一嘴,如果你爱折腾,喜欢最新版(功能多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 -U git+https://github.com/milkice233/efb-qq-slave

到这一步 相关依赖就安装完成了

CentOS 部署教程

内容大差不差的,就是依赖名字的问题,剩下的照抄ubuntu、debian的内容即可。

yum update
yum install python3 python3-pip python3-pil python3-setuptools python3-yaml python3-requests ffmpeg git cairo cairo-devel nano java-11-openjdk -y

Linux 配置文件

接着是配置文件,需要新建两个文件夹,用来存放配置文件,执行以下代码

mkdir -p /root/.ehforwarderbot/profiles/default/
mkdir -p /root/.ehforwarderbot/profiles/default/blueset.telegram
mkdir -p /root/.ehforwarderbot/profiles/default/milkice.qq

default/config.yaml 配置文件

修改第一个配置文件,直接粘贴进入编辑模式:

nano /root/.ehforwarderbot/profiles/default/config.yaml

个人配置文件中,直接复制粘贴进去:

master_channel: blueset.telegram
slave_channels:
- milkice.qq
#这一部分为插件,更多功能请查看文档

目前 QQ 不支持撤回,也不支持修改。更多内容请看常见问题

default/blueset.telegram/config.yaml 配置文件

修改第二个配置文件,直接粘贴进入编辑模式:

nano /root/.ehforwarderbot/profiles/default/blueset.telegram/config.yaml

最主要的分为三个部分

  • token:上边的api

  • admins:上边的个人id

  • flags:实验性功能

修改tokenadmins,直接粘贴进去修改 crtl+x 退出并保存

token: "" #在""中间 填入你之前找botfather申请的api
admins:
- 1234 #把数字修改为你的个人 telegram id 在上方获取过
#- 1279136259 #如果,想要多个账号使用同一个微信,可在这里加入第二个id或者多个id,去掉开头的#
flags:
  send_image_as_file: true
  #将所有图像消息作为文件发送,以防止主动报文的图像压缩.需要更多的流量,可以关闭,改为false
  default_media_prompt: text
  #图片/视频/文件消息没有标题时的占位符文本.

因为 telegram 对于中文的搜索支持,简直相当于没有,所以我开启了最后那个功能。这样在检索某人发送的同一类型的内容时,会变得十分方便,之所以不使用图像模式,是因为 telegram 的搜索对 emoji 的支持也不是很友好。

default/milkice.qq/config.yaml 配置文件

示例配置文件如下:

Client: CoolQ                         # 指定要使用的 QQ 客户端(此处为CoolQ)
CoolQ:
    type: HTTP                        # 指定 efb-qq-slave 与 酷Q 通信的方式 现阶段仅支持HTTP
    access_token: ac0f790e1fb74ebcaf45da77a6f9de47
    api_root: http://127.0.0.1:5700/  # 酷Q API接口地址/端口
    host: 127.0.0.1                   # efb-qq-slave 所监听的地址用于接收消息
    port: 8000                        # 同上
    is_pro: true                      # 若为酷Q Pro则为true,反之为false
    air_option:                       # 包含于 air_option 的配置选项仅当 is_pro 为 false 时才有效
        upload_to_smms: true          # 将来自 EFB主端(通常是Telegram) 的图片上传到 sm.ms 服务器并以链接的形式发送到 QQ 端

目前只支持http模式,access_token/port可以修改为任意,但是请和plugins/setting.yml中保持一致,下边会说。

下载 mirai-linux 模块,获取 device.json

重点,如果你的服务器不是在本地,那么请不要使用服务器获取 device.json。会导致下列报错,解决办法请看Windows操作指南如果服务器在本地可以忽略本提示

Login failed: Mirai 无法完成滑块验证. 使用协议 ANDROID_PHONE 强制要求滑块验证, 请更换协议后重试

可以从阿里云云效Maven查询最新模块,直接上下载地址(截至2021-01-18更新),下载三个java包,直接执行下列代码:

wget -P 123 https://maven.aliyun.com/repository/public/net/mamoe/mirai-console-terminal/2.0.0/mirai-console-terminal-2.0.0-all.jar

wget -P 123 https://maven.aliyun.com/repository/public/net/mamoe/mirai-console/2.0.0/mirai-console-2.0.0-all.jar

wget -P 123 https://maven.aliyun.com/repository/public/net/mamoe/mirai-core-all/2.0.0-dev-2/mirai-core-all-2.0.0-dev-2-all.jar

进入123目录,执行java -cp "./*" net.mamoe.mirai.console.terminal.MiraiConsoleTerminalLoader,如下图输入login QQ号码 QQ密码进行登录,并把回执的网址粘贴到电脑浏览器进行验证登录。

linux
yanzheng

登录成功后,立即退出,123目录中出现device.json文件,保存好后边要用到。

Windows 操作指南

java 环境

根据教程安装javaWindows 10 配置Java 环境变量选择相应版本安装并配置环境变量。之后有时间我在写一下这一部分的教程。

下载 mirai-windows 模块

可以从阿里云云效Maven查询最新模块,直接上下载地址(截至2021-01-18更新),下载三个java包:

https://maven.aliyun.com/repository/public/net/mamoe/mirai-console-terminal/2.0.0/mirai-console-terminal-2.0.0-all.jar

https://maven.aliyun.com/repository/public/net/mamoe/mirai-console/2.0.0/mirai-console-2.0.0-all.jar

https://maven.aliyun.com/repository/public/net/mamoe/mirai-core-all/2.0.0-dev-2/mirai-core-all-2.0.0-dev-2-all.jar

登录QQ

将下载的三个java包放在任意一个文件夹,随便一个非中文目录最好,例如123。并在地址栏输入powershell.exe之后回车运行。

powershell

在打开的powershell中输入下列代码来启动 mirai

java -cp ./* net.mamoe.mirai.console.terminal.MiraiConsoleTerminalLoader

并在命令行中输入 login qq号码 qq密码 如下图:

mirai

此时会出现报错,如下图,点击设备锁验证,选择任意认证方式验证。验证成功后在小框 回车返回登录界面。

error
yanzheng
successful

可以关闭powershell,重点此时123目录下多出一个device.json文件,保存好后边要用。windows 操作到此结束。

device.json 生成

有个项目,我没用过,提供个参考,生成device.json

efq 部署教程

修正单独使用 kotlin ,直接使用jre即可。

部署 OneBot kotlin

验证java是否可用,输入下列代码:

java -version

如图便是正确配置环境变量,版本不一定一样。

path

接着下载OneBot kotlin,执行下列代码:

wget https://github.com/yyuueexxiinngg/onebot-kotlin/releases/download/0.3.4/onebot-kotlin-0.3.4-all.jar

在同一目录下,运行java -jar onebot-kotlin-0.3.4-all.jar

ssh

不要登录,直接退出!,将上边获取到的device.json,放入当前目录下config/OneBot/,此时文件夹中有两个文件,分别为device.json/settings.yml

如果你之前的device.json是没有变更位置那么一句命令直接复制过来:cp ~/123/device.json ~/config/OneBot/device.json

config/OneBot/settings。yml 配置文件

修改settings.yml内容为下列:

proxy: ''
bots:
  此处修改为你的qq号码:
    cacheImage: false
    cacheRecord: false
    heartbeat:
      enable: false
      interval: 15000
    http:
      enable: true
      host: 127.0.0.1
      port: 5700
      accessToken: ac0f790e1fb74ebcaf45da77a6f9de47
      postUrl: 'http://127.0.0.1:8000'
      postMessageFormat: array
      #这里修改为array
      secret: ''
      # 上报超时时间, 单位毫秒, 须大于0才会生效
      timeout: 0
    ws_reverse:
      - enable: false
        postMessageFormat: string
        reverseHost: 127.0.0.1
        reversePort: 8080
        accessToken: ''
        reversePath: '/ws'
        reverseApiPath: '/api'
        reverseEventPath: '/event'
        useUniversal: true
        useTLS: false
        reconnectInterval: 3000
    ws:
      enable: false
      postMessageFormat: string
      wsHost: 0.0.0.0
      wsPort: 6700
      accessToken: ''

同 accessToken 修改为一致,保存并退出。

启动 efq

返回之前保存onebot-kotlin-0.3.4-all.jar的目录,再次运行java -jar onebot-kotlin-0.3.4-all.jar,正常登录QQ,此时应该可以直接登录,而不会提示报错。

efq

再次打开一个ssh窗口,运行ehforwarderbot,查看登录情况,正常应该无报错。

使用介绍

  • 在终端中 输入 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 查看 文档 并修改守护文件

  • 输入nano qq.service编写 qq 守护,并输入下列内容注意文中修改的地方

    [Unit]
    Description=mirai qq
    After=network.target
    
    [Install]
    WantedBy=multi-user.target
    
    [Service]
    Type=simple
    WorkingDirectory=你onebot-kotlin-0.3.4-all.jar所在的位置 
    ExecStart=这个地方输入which java获取 然后加上 onebot-kotlin-0.3.4-all.jar --account 123456789 --password 123456
    Restart=always

    更多启动选项请看 接受的参数

  • 接着 输入以下代码启动 efb、qq和开机自启 efb、qq

    #重新加载进程守护
    systemctl daemon-reload
    #进程守护 启动qq
    systemctl start qq.service
    #进程守护 启动efb
    systemctl start efb.service
    #进程守护 开机自启efb
    systemctl enable efb.service
    #进程守护 开机自启qq
    systemctl enable qq.service
  • 想要关闭 或者 查看当前状态 可以使用一下代码

    #进程守护 停止efb
    systemctl stop efb.service
    #进程守护 关闭开机自启efb
    systemctl disable efb.service
    #查看当前 efb 状态
    systemctl status efb.service
    #实时查看 efb 守护日志
    journalctl -f -u efb.service

常见问题

分离 WeChat 和 QQ

新建配置文件,分别启动不同的插件

master_channel: blueset.telegram
slave_channels:
- milkice.qq 这个地方,每个配置文件写的不一样就行了
- blueset.wechat 这个地方,每个配置文件写的不一样就行了
#这一部分为插件,更多功能请查看文档

efb 讨论相关

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

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

赞助/支持 EFB

mirai 讨论相关

Github Discussions (论坛/社区)

目前支持的协议

消息相关

  • 文字
  • 原生表情
  • 商城表情
  • 戳一戳
  • 图片 (自定义表情)
  • XML,JSON 等富文本消息
  • 长消息(5000 字符 + 50 图片)
  • 引用回复
  • 合并转发
  • 撤回
  • 提及群员
  • 提及全体成员
  • 语音
  • 闪照
  • 撤回群员消息
  • 自定义消息

群相关

  • 群列表
  • 成员列表
  • 群员权限
  • 禁言
  • 全体禁言
  • 群公告管理
  • 群设置(自动审批、入群公告、坦白说、成员邀请、匿名聊天)
  • 处理入群申请
  • 移除群员

好友相关

  • 完整好友列表
  • 处理新好友申请
  • 删除好友

其他客户端

  • 同步其他客户端的消息
  • 向其他客户端发送消息

不会支持的协议

  • 金钱相关,如点赞、收付款
  • 敏感操作,如主动添加好友、主动加入群、主动邀请好友加群
  • 安全相关,获取账号登录凭证(token,cookie 等)

缺点

efq 的项目是基于 Android 的 api,所以无法手机同时登录。