本篇教程由作者设定使用 CC BY-NC-SA 协议。

 此跨服聊天基于MCDR,MCDR是生电服常用的工具,安装/使用说明在此,不再赘述 Fallen_Breath教程 哔哩哔哩教程 

为获得最好的观看体验,可移步至我的博客观看 BLOG

 1 前言

     Chatbridge是MCDR的插件,用于同步不同服务器之间的消息(以下简称CB)

    此篇教程并不难,对服务端管理不精通的也可以掌握,请耐心配置

 2 CB的配置

     请确保服务端已安装MCDR

     要运行CB,请执行以下命令来安装依赖


pip3 install pycryptodome
pip3 install colorlog


若出现以下问题,请查阅虚拟环境相关资料

❯ pip3 install json
error: externally-managed-environment

× This environment is externally managed
╰─> To install Python packages system-wide, try 'pacman -S
   python-xyz', where xyz is the package you are trying to
   install.

     假设有两个服务器,一个为生存服,一个为创造服

     此处需要三个screen来分别运行三个服务端,分别是CB服务端、生存服务端、创造服务端

     你可以把CB服务端和创造服务端塞一个服务器里来运行,以节省资源

 2.1 CB服务端的配置

     找到ChatBridge.pyz,丢进单独的文件夹内

     cd到该目录,运行

    

python3 ChatBridge.pyz server


     运行后会报错并退出,同时该目录下会生成ChatBridge_server.json

     修改该文件配置如下 

    

{
  "aes_key": "ThisIstheSecret",
  "hostname": "0.0.0.0",
  "port": 8124,
  "clients": [
    {
      "name": "生存服",
      "password": "Survival"
    },
    {
      "name": "创造服",
      "password": "Creative"
    },
    {
      "name": "QQChannel",
      "password": "QQ"
    }
  ],
  "show_chat": true,
  "log_chat": true
}

解释
- `"aes_key": "ThisIstheSecret"`:加密密钥,没特殊用途时保持默认。
- `"hostname": "0.0.0.0"`:本地地址,通常无需更改。
- `"port": 8124`:服务端端口号。
- `"clients"`:需要同步消息的服务器配置,包括名称和密码。
- `"show_chat": true`:是否在控制台显示聊天信息。
- `"log_chat": true`:是否记录聊天信息。

    

修改完成后重新运行


python3 ChatBridge.pyz server


    正常运行输出如下


AES Key = ThisIstheSecret
Server address = 0.0.0.0:8125
- Client #1: name = 生存服, password = Survival
- Client #2: name = 创造服, password = Creative
- Client #3: name = QQChannel, password = Creative
- Client #4: name = QQ, password = Creative

     

    把这个进程丢screen里边防止关闭终端时服务终止

    至此服务端的配置完成


 2.2 客户端的配置

     复制一份ChatBridge.pyz丢MCDR的插件目录里

     第一次运行服务端后会在 */mcdr安装目录/config/chatbridge/* 中生成ChatBridge_client.json

     修改创造服配置如下


{
  "aes_key": "ThisIstheSecret",
  "name": "创造服",
  "password": "Creative",
  "server_hostname": "0.0.0.0",
  "server_port": 8124
}

解释

- `"aes_key": "ThisIstheSecret"`:与服务端一致的加密密钥。
- `"name": "创造服"`:客户端的服务器名称。
- `"password": "Creative"`:与服务端一致的密码。
- `"server_hostname": "0.0.0.0"`:此处填生存服的IP。如果生存服和创造服在同一台服务器上,填`0.0.0.0`。
- `"server_port": 8124`:服务端的端口号。


    修改生存服配置如下


{
  "aes_key": "ThisIstheSecret",
  "name": "生存服",
  "password": "Survival",
  "server_hostname": "0.0.0.0",
  "server_port": 8124
}

- `"aes_key"`、`"server_port"`:与创造服配置一样即可。

     

    如果"name":后的参数如此文一样使用中文,请用utf-8编码保存,否则会乱码

     重启服务端或重载MCDR的config,配置正式完成,现在可以实现创造服与生存服消息互通了

 3 QQ机器人的配置

Go-CQhhtp协议库时代已经过去,想要追求稳定的QQ机器人服务,参见4小节

     QQ消息机器人需要两个screen来运行,分别是CBQQ端、go-cqhttps端,实测占用资源极低,可以全部塞一个服务器里

     你需要准备以下材料

    - QQ小号

    - go-cqhttp文件 [Github下载](https://github.com/Mrs4s/go-cqhttp/releases "Github下载"),解压后得到没有后缀的程序go-cqhttp

 3.1 配置go-cqhttps服务端

     将go-cqgttp文件丢一个单独的文件夹内

     运行


./go-cqhttp

 

出现以下文本


未找到配置文件,正在为您生成配置文件中!
请选择你需要的通信方式:
> 0: HTTP通信
> 1: 云函数服务
> 2: 正向 Websocket 通信
> 3: 反向 Websocket 通信

 

输入02,开启HTTP通信与正向 Websocket 通信

 程序会自动退出并生成config.yml

 编辑如下项


  uin: 123456 //123456换成你的QQ小号
  password: ''  //*替换为密码,密码为空时使用扫码登录


 此处大概率会登录失败,提示密码错误或者网络环境复杂,解决方案如下

 3.1.1 go-cqhttp密码正确但仍登录失败的解决方案

     在此处下载Windows版本的go-cqhttp,[Github下载](https://github.com/Mrs4s/go-cqhttp/releases "Github下载") 放到自己电脑里边,并将配置完成的config.yml复制到同目录下

     shift+鼠标右键该文件夹空白区域打开powershell,输入./go-cqhttp

     开始登录,但仍提示登陆失败,注意到目录下生成device.json文件

     打开device.json,把"protocol"项参数从5改成2


"protocol":2


     再次尝试登录发现登录成功

     将目录下生成的session.token和device.json丢服务器里覆盖原文件

     在服务器上重新运行go-cqhttp


./go-cqhttp


 此时大概率登录成功,丢screen挂着即可

 由于腾讯风控系统更改频率快,此方法在将来可能失效,如若上述步骤正确但仍无法登录,请自行谷歌解决方法

 3.2 配置CBQQ端

 前往步骤2.1中存放ChatBridge.pyz的目录,运行


python3 ChatBridge.pyz cqhttp_bot

 

与2.1配置时一样会崩溃并生成ChatBridge_CQHttp.json文件

 修改ChatBridge_CQHttp.json以下的配置

    "aes_key": "ThisIstheSecret", //不动
    "name": "QQChannel", //与CB服务端中name相同
    "password": "QQ",
    "server_hostname": "127.0.0.1", //如果CBQQ和CB在同一服务器上运行,此项不动,如不在一个服务器上运行,输入CB服务器的ip地址
    "server_port": 8124, //CB服务端的端口
    "ws_address": "127.0.0.1",
    "ws_port": 8080, //此项需修改
    "access_token": "", //不动
    "react_group_id": 123456, //123456改成需要同步消息的QQ群

 

保存后再次运行


python3 ChatBridge.pyz cqhttp_bot


 丢screen里边,此时QQ群能正常收到MC服务器中发送的消息

 CB的作者默认需要在MC中使用!!qq <消息>来发送至qq,在qq中需要使用!!mc <消息>来发送至MC

 如果想同步全部消息,请使用这个fork 

4. 补充内容:使用更好的QQ机器人服务

如果你的QQ机器人频繁报Code:45或是频繁触发封控掉登陆甚至于被封号,请采用下面的方案
若你的服务能正常运行,可以忽略这一小节


Go-CQhttp协议库如今已经停止维护,目前最好的解决方案是替换掉go-cqhttp,只要同样可以提供Onebot服务的方案就能完美对接Chatbridge

根据替代方案LiteloaderQQNT的提议,此处不给出具体的部署方案,如有需要请自行研究

> 核心思路是用LiteloaderQQNT-LLOnebot替换掉go-cqhttp,3.2中配置不变,替换掉3.1中提供的服务即可

相关链接:

[LiteloaderQQNT](https://github.com/LiteLoaderQQNT/LiteLoaderQQNT)

[LLOnebot](https://github.com/LLOneBot/LLOneBot)

请不要在 QQ 官方群聊和任何影响力较大的简中互联网平台(包括但不限于: 哔哩哔哩,微博,知乎,抖音等)发布和讨论任何与本插件存在相关性的信息

 5.总结


 如果配置正常,将会有以下screen运行


- MC生存服务端

- MC创造服务端

- CB服务端

- CBqq服务端

- go-cqhttp或是其他提供OnebotAPI的服务端


如果全部功能都正常运行,那么恭喜你,全部配置已完成

如若此文有误,或配置时出现问题,请联系Apricityx@qq.com 或是 [联系我]( "添加QQ")