要运行测试,你需要安装 .NET SDK:
# 检查运行时
dotnet --list-runtimes
# 检查 SDK
dotnet --list-sdks当前系统状态:
- ✅ 已安装运行时: .NET 6.0.11 和 7.0.20
- ❌ 未安装 SDK: 需要安装才能编译项目
下载并安装 .NET 6 SDK: https://dotnet.microsoft.com/download/dotnet/6.0
或使用命令安装:
winget install Microsoft.DotNet.SDK.6安装 SDK 后:
# 1. 进入项目目录
cd d:\Code\Lagrange.Core
# 2. 编译测试项目
dotnet build Lagrange.Core.Test\Lagrange.Core.Test.csproj
# 3. 运行测试
dotnet run --project Lagrange.Core.Test\Lagrange.Core.Test.csproj如果暂时无法编译,可以查看以下代码示例理解如何使用:
using Lagrange.Core.Common;
using Lagrange.Core.Common.Interface;
using Lagrange.Core.Utility.Sign;
// 1. 创建设备信息
var deviceInfo = BotDeviceInfo.GenerateInfo();
// 2. 创建本地签名器
var localSigner = new LocalSigner(
deviceId: deviceInfo.Guid.ToByteArray(),
appVersion: "3.0.6",
appId: 537234773
);
// 3. 配置 Bot
var config = new BotConfig
{
Protocol = Protocols.Linux,
CustomSignProvider = localSigner, // 使用本地签名器
AutoReconnect = true,
GetOptimumServer = true
};
// 4. 创建 Bot 实例
var keystore = new BotKeystore(0, ""); // 0 表示使用二维码登录
var bot = BotFactory.Create(config, deviceInfo, keystore);
// 5. 登录
var qrCode = await bot.FetchQrCode();
if (qrCode != null)
{
await File.WriteAllBytesAsync("qr.png", qrCode.Value.QrCode);
Console.WriteLine($"二维码已保存,请扫码: {qrCode.Value.Url}");
var success = await bot.LoginByQrCode();
Console.WriteLine(success ? "登录成功!" : "登录失败");
}using Lagrange.Core.Utility.Sign;
var deviceInfo = BotDeviceInfo.GenerateInfo();
// 1. 创建远程签名器(如果有可用的)
var remoteSigner = new UrlSigner("http://your-sign-server:8080/sign");
// 2. 创建本地签名器作为备用
var localSigner = new LocalSigner(deviceInfo.Guid.ToByteArray());
// 3. 创建混合签名器
var hybridSigner = new HybridSigner(
primarySigner: remoteSigner, // 优先使用远程
fallbackSigner: localSigner // 失败时使用本地
);
// 4. 使用混合签名器
var config = new BotConfig
{
Protocol = Protocols.Linux,
CustomSignProvider = hybridSigner
};
var bot = BotFactory.Create(config, deviceInfo, new BotKeystore(0, ""));using Lagrange.Core.Utility.Sign;
// 继承 SignProvider 实现自己的签名逻辑
public class MyCustomSigner : SignProvider
{
public override byte[]? Sign(string cmd, uint seq, byte[] body,
out byte[]? extra, out string? token)
{
// 你的签名逻辑
extra = null;
token = null;
if (!WhiteListCommand.Contains(cmd))
return null;
// 实现签名算法
return YourSignAlgorithm(cmd, seq, body);
}
private byte[] YourSignAlgorithm(string cmd, uint seq, byte[] body)
{
// 你的实现
throw new NotImplementedException();
}
}
// 使用自定义签名器
var config = new BotConfig
{
CustomSignProvider = new MyCustomSigner()
};如果本地签名器工作正常,你会看到:
=== 本地签名器测试 ===
⚠️ 警告: 本地签名器是简化实现,可能无法完全替代真实签名服务器
✓ 本地签名器已创建
✓ Bot 配置已创建(使用本地签名器)
✓ Bot 实例已创建
开始登录(使用二维码)...
⚠️ 注意: 如果登录失败,可能是因为本地签名器无法通过腾讯的验证
[Information] 正在获取二维码...
二维码 URL: https://...
二维码已保存到: qr-local-signer-test.png
请使用 QQ 扫码登录...
[Information] 等待扫码...
[Information] 扫码成功,正在登录...
✓✓✓ 登录成功! ✓✓✓
Bot UIN: 1234567890
Bot Name: 你的昵称
如果本地签名器无法通过验证:
[Error] 签名验证失败
[Error] 服务器拒绝连接
✗ 登录失败
可能的原因:
1. 本地签名器无法通过腾讯的验证
2. 网络问题
3. 账号被风控
错误: No .NET SDKs were found
解决: 安装 .NET 6 SDK
winget install Microsoft.DotNet.SDK.6可能原因:
- 本地签名器无法通过腾讯验证(最可能)
- 网络连接问题
- 协议版本不匹配
解决方案:
- 使用混合签名器,配合真实的签名服务器
- 尝试使用 unidbg-fetch-qsign
- 切换到 OpenShamrock 或 Chronocat
症状: 需要滑块验证、短信验证或直接提示风险
解决:
- 更换协议类型(Windows/MacOS/Linux)
- 使用真实的签名服务器
- 等待一段时间后再试
- 使用新账号测试
- 安装 .NET SDK 后重新运行测试
- 查看日志输出 了解失败原因
- 准备备用方案 (签名服务器或替代项目)
- 加入社区 获取更多帮助: https://t.me/+6HNTeJO0JqtlNmRl
- 本地签名器是实验性功能
- 不保证能够正常工作
- 建议仅用于学习和测试
- 生产环境请使用真实的签名服务器
本地签名器的实现位于:
Lagrange.Core\Utility\Sign\LocalSigner.csLagrange.Core\Utility\Sign\HybridSigner.cs
测试代码位于:
Lagrange.Core.Test\Tests\LocalSignerTest.cs
文档:
LocalSignerExample.md- 基础使用指南AdvancedSignerGuide.md- 高级技术路线