通过内置gocq+qsign接入QQ

观前提示:

  1. 本教程采用的方法可能会导致作为机器人的账号被冻结或封禁,请谨慎考虑并愿意承担风险后再尝试此方法,本教程对账号冻结或封禁造成的损失不负责任

  2. 鱿鱼我没用过除Windows外的其他系统,所以本教程仅适用于Windows系统,其他系统请自行查阅相关文档,本教程不对其他系统负责(内置qsign除外,内置qsign支持windows-x64 linux-x64 aarch64)
    Linux部署qsign官方文档:部署在Linux · fuqiuluo/unidbg-fetch-qsign Wiki · GitHub

  3. 本教程使用了内置gocq+内置/外置qsign的方法接入QQ,属于【308规则】,已经严重违反koishi用户群规定,请勿在koishi用户群讨论本项目提到的任何内容!因在koishi用户群讨论本项目提到的任何内容导致被ban或踢出,请自行承担后果!

  4. 蛋柿!虽然koishi官方交流群不能聊,可我们有非官方交流群!
    群号:590104798
    在这里可以交流对接QQ/微信之类的在官方群不能聊的东西!
    如果教程有问题也可以来拷打我()

5 个赞

准备工作:

  1. 你需要:了解如何使用koishi,普通QQ(非QQNT),一个将要作为机器人的账号,能访问github(推荐使用瓦特工具箱)
    普通QQ下载链接:QQ PC版官方网站 (请勿选择全新架构QQ)
    瓦特工具箱下载地址:https://steampp.net/

  2. 前往koishi插件市场下载gocqhttp-dev(如果下载时提示不兼容,你需要去更新依赖)

  3. 右键开始菜单,打开命令提示符,输入java --version,如果正常显示了你的java版本,请略过以下的准备工作

  4. 请确认你安装了java,如果你不确定你有没有安装,那就去安装,可自行搜索教程
    推荐教程:Java安装教程2023 - 知乎

  5. 安装完成后请配置JAVA_HOME环境变量,可自行搜索教程
    推荐教程:还是Java安装教程2023 - 知乎

  6. 重复第3步,你理应正常显示,如果不显示,我也不知道怎么办了()

4 个赞

第零章 内置qsign:

  1. 现在有更加方便的内置qsign,所以更新了这个教程,如果你不想使用内置qsign,可跳过此章节。内置qsign有一定失败率,如果无法正常登录,可尝试更换端口或使用外置qsign

  2. koishi插件市场搜索qsign,添加@yunkuangao/qsign

  3. 进入插件配置,点开你刚刚下载的qsign插件

  4. qsign_version选至最新,下方新弹出的版本也选至最新
    (首选8.9.63版本,如果遇到问题可尝试更换除8.9.71/73外的版本)

  5. 启用qsign插件,然后你可以跳到第四章了

3 个赞

第一章 配置:

  1. Releases · fuqiuluo/unidbg-fetch-qsign · GitHub 在此下载最新版本的qsign压缩包(有两层压缩包)

  2. 将压缩包解压,并打开其中的文件夹,以下将这个文件夹称为【项目根目录

  3. 打开txlib,记住版本号最新的文件夹,以下将这个文件夹称为【配置文件夹
    (首选8.9.63版本,如果遇到问题可尝试更换除8.9.71/73外的版本)

  4. 下文提到的“项目根目录”以及“配置文件夹”均为上述的两个文件夹,而并非文字本身

3 个赞

第二章 启动:

  1. 项目根目录里创建一个新的文本文档,命名随意

  2. 使用记事本打开这个文本文档,并在里面输入:

bin\unidbg-fetch-qsign.bat --basePath=txlib\配置文件夹
pause
  1. 保存文件,并将文件后缀名txt改为bat

  2. 双击运行这个bat文件,显示Responding at http://127.0.0.1:8080,就代表此时qsign已经正常启动了

  3. 如果刷了一大串东西但没有显示,可能是端口被占用,你需要用记事本打开配置文件夹里的 config.json,将port项的数字改为其他1024-65535范围内的任意数字,并再次尝试第3步,直至正常显示Responding at http://127.0.0.1:[数字]

  4. 启动完成后,请勿关闭qsign的命令提示符窗口,否则qsign将被关闭

  5. 往后你想启动qsign,直接运行上述的bat文件即可

3 个赞

第三章 后台运行&自启动:

  1. 此章节内容并非必须,但完成此章节后,通过使用WinSW将qsign程序打包成Windows服务,你重启电脑后不需要再次启动qsign

  2. GitHub - winsw/winsw: A wrapper executable that can run any executable as a Windows service, in a permissive license. 在此下载适用于你操作系统的最新正式版WinSW

  3. 解压缩你下载的文件,将其移动到项目根目录并连同其后缀名一起重命名为qsign.exe;如果你发现下载到的文件已经是exe,则不需要解压

  4. 项目根目录创建一个文本文档,连同其后缀名一起重命名为qsign.xml

  5. 使用记事本打开qsign.xml,并在里面输入:

<service>
  <id>unidbg-fetch-qsign</id>
  <name>unidbg-fetch-qsign</name>
  <description>unidbg-fetch-qsign Service</description>
  <executable>bin\unidbg-fetch-qsign.bat</executable>
  <arguments>--basePath=txlib\配置文件夹</arguments>
  <logmode>rotate</logmode>
</service>
  1. 保存并关闭文件

  2. 同时按下Windows徽标键+S打开搜索,输入cmd后右键命令提示符,点击以管理员身份运行

  3. 在新弹出来的命令提示符窗口里输入 cd 项目根目录的路径 并回车以前往项目根目录 (如果你发现输入完命令后并没有前往项目根目录,只需输入项目根目录的盘符并回车即可,例如 D:

  4. 输入 .\qsign.exe install qsign.xml 并回车以安装服务

  5. 输入 .\qsign.exe start qsign.xml 并回车以启动服务

  6. 使用以下命令管理服务:
    ●停止服务:.\qsign.exe stop qsign.xml
    ●重新启动服务:.\qsign.exe restart qsign.xml
    ●卸载服务:.\qsign.exe uninstall qsign.xml

3 个赞

第四章 koishi:

  1. 回到koishi,关闭gocqhttp,然后启用你刚刚下载的go-cqhttp-dev,不需要修改任何配置(如果你在config.jsonqsign插件内更改了port,就需要将signServer里的8080改为你设置的port

  2. 点开adapter-onebot插件,输入你将要作为机器人的账号和密码,并启用 自动创建go-cqhttp子进程 选项,如果你使用的是内置qsign,则需要启用qsignInlay选项

  3. 如果你曾经将登录协议替换为手表协议,你需要换回除手表协议外的任意协议(推荐使用Android pad),否则你会遇到风控问题

  4. 启用adapter-onebot插件,并按照提示执行,你应该会看到 已成功连接go-cqhttp子进程 的提示,并且窗口底部亮起绿灯,此时你已经将koishi接入QQ。
    下次启动时,无需额外操作

4 个赞

尾声:

  1. 本教程编写者为风切
    排版优化者为锺緒
    协助我编写的是交流群内的一众大佬
    参考了qsign的官方教程

  2. 完全按照本教程做的话,应该是能正常接入QQ的吧()
    如果哪里出问题可以进群拷打我(

  3. 如果你看到这里了,那就告诉你几个群号吧
    非官方koishi交流群:590104798
    QQ对接交流群:399899914
    rr-su-chat交流群:775791760
    blockly交流群:387487234
    以上群聊均不受koishi群规限制(但有自己的群规!)

教程版本:v1.3.2

登录过程中遇到的问题可以在本帖下方提问

2 个赞

请问gocq-dev是如何切换qq协议版本的呢?
平台: Armbian(ubuntu) arm64 22.04
jdk 1.8.x openjdk-8-jre
node v18 lts
默认打开gocqdev, log都是使用协议8.9.63.xxxxx
然后按教程部署内置qsign-1.1.7-8.9.71,手动抓取ticket,最后会报

2023-08-28 21:14:00 [I] qsign stdout: JNIEnv->NewByteArray(64) was called from RX@0x404332fc[libfekit.so]0xb32fc
2023-08-28 21:14:00 [I] qsign stdout: 
                        JNIEnv->SetByteArrayRegion([B@58682a87, 0, 64, RW@0x4035e500) was called from RX@0x40433438[libfekit.so]0xb3438
                        JNIEnv->ReleaseStringUTFChars("wtlogin.login") was called from RX@0x407225b8[libfekit.so]0x3a25b8
                        
2023-08-28 21:14:00 [I] qsign stdout: JNIEnv->SetObjectField(com.tencent.mobileqq.sign.QQSecuritySign$SignResult@79fdb94b, sign [B => [B@58682a87) was called from RX@0x404ea498[libfekit.so]0x16a498
                        
2023-08-28 21:14:00 [I] qsign stdout: JNIEnv->ReleaseStringUTFChars("V1_AND_SQ_8.9.63_4194_YYB_D") was called from RX@0x404ea0a0[libfekit.so]0x16a0a0
                        JNIEnv->ReleaseStringUTFChars("wtlogin.login") was called from RX@0x404ea0b8[libfekit.so]0x16a0b8
                        JNIEnv->ReleaseStringUTFChars("2856667301") was called from RX@0x404ea0e4[libfekit.so]0x16a0e4
                        
2023-08-28 21:14:00 [W] gocqhttp-dev 登录失败: 登录失败,请前往QQ官网im.qq.com下载最新版QQ后重试,或通过问题反馈与我们联系。 Code: 45 
2023-08-28 21:14:00 [W] gocqhttp-dev 你的账号被限制登录, 请配置 SignServer 后重试 
2023-08-28 21:14:00 [I] gocqhttp-dev 你的账号被限制登录, 请配置 SignServer 后重试 

并且code45,qsign server疑似挂掉
(虽然但是我能本地部署1.1.9-8.9.63成功登录.jpg)
我的gocqdev为最新,@…/qsign刚下的新
请问是否为配置问题?
gocqdev如何检测并切换协议?
如果不能自动切换,是否会存在误导?

2 个赞

为什么要使用手动抓取ticket,直接自动不就好了

2 个赞

gocq 官方的自动验证已下线,能够手动抓的话一般不是使用 Koishi 登录的情况

2 个赞

你的签名版本必须对应才可以生效啊
QQ协议使用8.9.63,那么你qsign也必须使用8.9.63协议,上下不可视为兼容。
能用63用63就可以了,qsign支持多个版本的QQ协议可能是为了兼容除了gocq以外的其他协议端,比如某端会强制锁8.9.68之类的。

3 个赞

我知道要对应这点,
但如果cqdev不会更改版本,而是锁63
那么教程中 都选最新 是否有歧义/误导?

3 个赞

如果http://127.0.0.1:8080正常显示的话,可以尝试切换为8.9.63版本,如果还是无法登录,就只能使用外置了

1 个赞

(((
我本来就是外置正常的
我是想实践测试下cqdev协议问题(
那我有时间测试一下
还有,我改了端口(
qsign-8.9.73 → :8973

3 个赞

如果8.9.63不能正常登录,那就说明不是协议版本问题(
我使用最新版本是没有问题的(
但我目前因为不明原因所有版本内置外置都code237(

2 个赞

反转了,本来gocq的协议版本应该跟着qsign的,但因为gocq的问题只能8.9.63,只能等更新,也就是说我教程目前确实要改

1 个赞

教程已经更改,我道歉,可能误导了一部分人)

2 个赞

emm
内个,内置qsign改一下谢谢:)

2 个赞

草草草,改了)

1 个赞