https://youxam.one/posts/qq-to-telegram/qq-to-telegram.html

什么是 ehForwarderBot

EH Forwarder Bot(EFB)是一个可扩展的消息隧道聊天机器人框架。他有一个或多个从端和一个主端,我们可以从主端接受从端消息,也可以通过主端控制从端发送消息。

举例来说,这篇文章中,我将把 QQ 作为从端,Telegram 作为从端,然后将他们通过 EFB 连接起来。这样,我可以通过 Telegram 在 QQ 上聊天。

需要的东西

  1. 一个 Telegram 账号,一个 QQ 账号。
  2. 代理,或者一个可以访问 Telegram 的 Linux 服务器。 推荐使用国外的服务器。如果使用代理,那么需要通过轮询 Telegram 获取消息,还有图片,视频,文件等多媒体数据,对时延和带宽要求都比较大。而国外服务器可以使用 webhook, 占用资源比较少,带宽也比较大(比如说 azure 不限制带宽)。

文档

  1. EFB 文档 (大概率用不上,但是还是放一下)
  2. EFB Telegram Master 文档
  3. EFB QQ Slave 文档
  4. OICQ http-api 文档

第一步:安装依赖

  1. Python >= 3.6
  2. ffmpeg, libmagic, libwebp, libcairo, python3-dev

    bash

    sudo apt install ffmpeg libmagic-dev libwebp-dev libcairo-dev python3-dev
  3. pillow
  4. EH forwarder bot

    bash

    pip3 install ehforwarderbot
  5. efb-qq-slave (QQ 从端,我添加了视频和文件的支持)

    bash

    pip3 install -U git+https://github.com/YouXam/efb-qq-slave
  6. efb-telegram-master (Telegram 主端,我修复了一下关于视频和 extra command 的 bug)

    bash

    pip3 install git+https://github.com/YouXam/efb-telegram-master
  7. 升级 zipp

第二步:配置

1. EH forwarder bot

运行 efb-wizard, 它会指引你选择主端和从端,以及主端的基础设置(包括创建机器人等)。

配置文件名称,直接回车即可。

1. Choose master channel
● Telegram Master

选择主端,上下键选择 Telegram Master 按回车确定。

Instance name to use with Telegram Master: [default instance]

主端实例名称,直接回车即可。

2. Choose slave channels (at least one is required).
[ =: Shift up; -: Shift down; Backspace: Remove ]
● + Add
  ✓ Submit

上下键选择 Add 回车,选择 QQ Slave,按回车确定,Instance name 直接回车,再选择 Submit 提交。

3. Choose middlewares (optional).
[ =: Shift up; -: Shift down; Backspace: Remove ]
● + Add
  ✓ Submit

中间件,选择 Submit 回车即可。

You have chosen to enable the following modules for profile "default".

Master channel: Telegram Master

Slave channel:
- QQ Slave

Would you like to continue?
● Save and continue             
  Change master channel settings
  Change slave channel settings 
  Change middleware settings

直接回车。

...
We will now guide you to set up some modules you have enabled. But you
may still need to configure other modules manually if necessary.
Press ENTER/RETURN to start setting up blueset.telegram.

Telgram 主端设置,按回车进入。

...
[yN] Do you want to run ETM behind a proxy? [n]

如果你使用代理,那么选择 y,然后选择代理协议,主机,端口,用户名,密码。

Do you need help creating a bot?
● No, I have already made one according to the docs.
  Yes, please tell me how to make one.

这里如果你没有创建机器人,请选择 Yes。

>>> Step 1: Search @BotFather on Telegram, or follow the link below.
You should be able to see a bot named “BotFather”.
    https://t.me/BotFather

在 Telegram 中搜索 BotFather,或者点击链接

>>> Step 2: Send /newbot to BotFather to create a new bot. Follow its
prompts to give it a name and a username. Note that its username must
end with “bot”.

After setting its username, you should receive a long line of code
called “token”. Keep it with you securely, we will need that later on.

发送 /newbot 给 BotFather,按照提示创建机器人,注意机器人的用户名必须以 bot 结尾。

记录下来机器人的 token,我们后面会用到。

Send /setjoingroups to BotFather, choose the bot you just created,
then choose “Enable”. This will allow your bot to join groups.

Send /setprivacy to BotFather, choose the bot you just created, then
choose “Disable”. This will allow your bot to process all messages in
groups it joined, not just commands.

发送 /setjoingroups 给 BotFather,选择刚刚创建的机器人,选择 Enable,这样机器人就可以加入群组了。

发送 /setprivacy 给 BotFather,选择刚刚创建的机器人,选择 Disable,这样机器人就可以在群组中处理所有消息了。

输入刚刚记录的 token。

Do you want to update the list of commands of your bot?
● Yes, please update.                      
  No, I want to keep the old commands list.

是否更新机器人的命令列表,选择 Yes。

Do you need help getting your ID?
● No, I already know my ID.            
  Yes, I want to know how to get my ID.

是否需要获取自己的 ID,选择 Yes。

然后向机器人发送一条消息,把机器人回复的 ID 复制过来。

[yN] Do you want to config experimental features? [n]

是否配置实验性功能,看个人需求。

[yN] Do you want to adjust network configurations? (connection timeout) [n]

是否调整网络配置,回车即可。

[yN] Do you want to enable RPC interface? [n]

是否开启 RPC 接口,回车即可。

配置完成!

2. 配置客户端 (gocqhttp)

  1. 下载 go-cqhttp

GitHub Releases 下载。

  1. 编辑 config.yml 配置文件

注意这几个配置项。

yaml

account: # 账号相关
  uin: 1234567890 # QQ账号
  password: '' # 密码为空时使用扫码登录
servers:
  # 添加方式,同一连接方式可添加多个,具体配置说明请查看文档
  #- http: # http 通信
  #- ws:   # 正向 Websocket
  #- ws-reverse: # 反向 Websocket
  #- pprof: #性能分析服务器

  - http: # HTTP 通信设置
      address: 127.0.0.1:5700 # HTTP监听地址
      timeout: 5      # 反向 HTTP 超时时间, 单位秒,<5 时将被忽略
      long-polling:   # 长轮询拓展
        enabled: false       # 是否开启
        max-queue-size: 2000 # 消息队列大小,0 表示不限制队列大小,谨慎使用
      middlewares:
        <<: *default # 引用默认中间件
      post:           # 反向HTTP POST地址列表
        - url: 'http://127.0.0.1:8000'                # 地址
          secret: ''             # 密钥

3 运行 gocqhttp, ./gocqhttp

注意,如果你密码登录不上,就用扫码登录。但是扫码登录要求和手机必须在同一局域网,如果你有在服务器上运行的需求,可以先本地运行登录,再把 device.jsonsession.token 拷贝到服务器上。

3. 配置 efb-qq-slave

  1. 安装 efb-qq-plugin-go-cqhttp

bash

pip3 install git+https://github.com/YouXam/efb-qq-plugin-go-cqhttp.git
  1. milkice.qq 从端创建 config.yaml 配置文件

配置文件通常位于 ~/.ehforwarderbot/profiles/default/milkice.qq/config.yaml,若不存在则创建。

样例配置文件如下:

yaml

Client: GoCQHttp                      # 指定要使用的 QQ 客户端(此处为 GoCQHttp)
GoCQHttp:
    type: HTTP                        # 指定 efb-qq-plugin-go-cqhttp 与 GoCQHttp 通信的方式 现阶段仅支持 HTTP
    access_token:
    api_root: http://127.0.0.1:5700/  # GoCQHttp API接口地址/端口
    host: 127.0.0.1                   # efb-qq-slave 所监听的地址用于接收消息
    port: 8000
    remove_reply_at: true            # 是否移除发送到 QQ 中的回复消息中的 @

第三步: 运行

保证 gocqhttp 运行正常

此时看看 Telegram,应该就能收到消息了。

第四部:将 QQ 群和联系人绑定到 Telegram 群组

先建立一个 Telegram 群组,然后向机器人发送 /link(注意,后面可跟随正则表达式筛选群名/好友名)。

单击选择,绑定成功后,在 Telegram 群组中给机器人更改群组信息的权限,在群组中发送 /update_info 可将 QQ 的名称和头像同步至 Telegram。

其他的一些命令

直接向机器人回复,可发送到对应的 QQ 群或联系人,一定时间内,无需回复也可以继续聊天。

/chat

如果想主动发起聊天,可以使用 /chat 命令,后面跟随 QQ 群或联系人的名称(正则表达式)。

/rm

回复一条消息并使用 /rm, 可在从端撤销。直接编辑 Telegram 消息会先撤销旧的,再发送新的。

关于 webhook

默认情况下,主端使用的是轮询,想要使用 webhook,也很简单。

保证你的服务器有公网 IP,并且开放了 8443 端口(或者是 80,88,443,Telegram 只支持这 4 个)。

生成证书

bash

openssl req -newkey rsa:2048 -sha256 -nodes -keyout server.key -x509 -days 3650 -out server.crt

注意 CN(Common Name) 一定要填写你的公网 IP 或者域名。

然后在 config.yaml 中添加

yaml

webhook:
    start_webhook:
        listen: 0.0.0.0
        port: 8443
        url_path: TOKEN # 这个可以随便填,但是要和下面的一致
        key: /root/crt/server.key
        cert: /root/crt/server.crt
        webhook_url: https://<你的IP或域名>:8443/TOKEN

重启 ehforwarderbot 即可。

标签: none

评论已关闭