Skip to content

Commit

Permalink
update: LagrangeGo
Browse files Browse the repository at this point in the history
  • Loading branch information
Redmomn committed Jan 11, 2025
1 parent 1f68d03 commit 8b69410
Show file tree
Hide file tree
Showing 5 changed files with 211 additions and 107 deletions.
4 changes: 0 additions & 4 deletions docs/.vitepress/nav.ts
Original file line number Diff line number Diff line change
Expand Up @@ -64,10 +64,6 @@ export const goNav = {
text: "LagrangeGo",
link: "/LagrangeGo/",
},
{
text: "Bot 实例",
link: "/LagrangeGo/CreateBot/",
},
{
text: "登录",
link: "/LagrangeGo/Login/",
Expand Down
67 changes: 0 additions & 67 deletions docs/LagrangeGo/CreateBot/index.md

This file was deleted.

129 changes: 115 additions & 14 deletions docs/LagrangeGo/Example/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,10 @@
项目提供了示例模板`main.go`,可供开发者进行概念验证和功能测试

```go
// nolint
package main

import (
"errors"
"fmt"
"os"
"os/signal"
Expand All @@ -15,42 +15,57 @@ import (
"syscall"
"time"

"github.com/mattn/go-colorable"
"github.com/sirupsen/logrus"

"github.com/LagrangeDev/LagrangeGo/client"
"github.com/LagrangeDev/LagrangeGo/client/auth"
"github.com/LagrangeDev/LagrangeGo/message"
"github.com/LagrangeDev/LagrangeGo/utils"
"github.com/mattn/go-colorable"
"github.com/sirupsen/logrus"
)

var (
dumpspath = "dump"
)

func main() {
appInfo := auth.AppList["linux"]["3.1.2-13107"]
// 使用特定的协议版本
appInfo := auth.AppList["linux"]["3.2.15-30366"]
// 创建设备信息
deviceInfo := &auth.DeviceInfo{
Guid: "cfcd208495d565ef66e7dff9f98764da",
GUID: "cfcd208495d565ef66e7dff9f98764da",
DeviceName: "Lagrange-DCFCD07E",
SystemKernel: "Windows 10.0.22631",
KernelVersion: "10.0.22631",
}

qqclient := client.NewClient(0, appInfo, "https://sign.lagrangecore.org/api/sign")

// 创建qqclient实例
qqclient := client.NewClient(0, "")
// 设置qqclient的logger
qqclient.SetLogger(protocolLogger{})
// 使用协议版本
qqclient.UseVersion(appInfo)
// 添加signserver,注意要和appinfo版本匹配
qqclient.AddSignServer("https://sign.lagrangecore.org/api/sign/30366")
// 使用设备信息
qqclient.UseDevice(deviceInfo)

// 从保存的sig.bin文件读取登录信息
data, err := os.ReadFile("sig.bin")
if err != nil {
logrus.Warnln("read sig error:", err)
} else {
// 将登录信息反序列化
sig, err := auth.UnmarshalSigInfo(data, true)
if err != nil {
logrus.Warnln("load sig error:", err)
} else {
// 如果登录信息有效,则使用登录信息登录
qqclient.UseSig(sig)
}
}


// 订阅群消息事件
qqclient.GroupMessageEvent.Subscribe(func(client *client.QQClient, event *message.GroupMessage) {
if event.ToString() == "114514" {
img, _ := message.NewFileImage("testgroup.png")
Expand All @@ -69,26 +84,113 @@ func main() {
}
})

err = qqclient.Login("", "qrcode.png")
qqclient.DisconnectedEvent.Subscribe(func(client *client.QQClient, event *client.DisconnectedEvent) {
logger.Infof("连接已断开:%v", event.Message)
})

err = func(c *client.QQClient, passwordLogin bool) error {
logger.Info("login with password")
// 如果登录信息存在,可以使用fastlogin
err := c.FastLogin()
if err == nil {
return nil
}

if passwordLogin {
// 密码登录,目前无法使用
ret, err := c.PasswordLogin()
for {
if err != nil {
logger.Errorf("密码登录失败: %s", err)
break
}
if ret.Success {
return nil
}
switch ret.Error {
case client.SliderNeededError:
logger.Warnln("captcha verification required")
logger.Warnln(ret.VerifyURL)
aid := strings.Split(strings.Split(ret.VerifyURL, "sid=")[1], "&")[0]
logger.Warnln("ticket?->")
ticket := utils.ReadLine()
logger.Warnln("rand_str?->")
randStr := utils.ReadLine()
ret, err = c.SubmitCaptcha(ticket, randStr, aid)
continue
case client.UnsafeDeviceError:
vf, err := c.GetNewDeviceVerifyURL()
if err != nil {
return err
}
logger.Infoln(vf)
err = c.NewDeviceVerify(vf)
if err != nil {
return err
}
default:
logger.Errorf("Unhandled exception raised: %s", ret.ErrorMessage)
}
}
}
logger.Infoln("login with qrcode")

// 扫码登录流程
// 首先获取二维码
png, _, err := c.FetchQRCodeDefault()
if err != nil {
return err
}
qrcodePath := "qrcode.png"
// 保存到本地以供扫码
err = os.WriteFile(qrcodePath, png, 0666)
if err != nil {
return err
}
logger.Infof("qrcode saved to %s", qrcodePath)
for {
// 轮询二维码扫描结果
retCode, err := c.GetQRCodeResult()
if err != nil {
logger.Errorln(err)
return err
}
// 等待扫码
if retCode.Waitable() {
time.Sleep(3 * time.Second)
continue
}
if !retCode.Success() {
return errors.New(retCode.Name())
}
break
}
// 扫码完成后就可以进行登录
_, err = c.QRCodeLogin()
return err
}(qqclient, false)

if err != nil {
logrus.Errorln("login err:", err)
logger.Errorln("login err:", err)
return
}
logger.Infoln("login successed")

defer qqclient.Release()

defer func() {
// 序列化登录信息以便下次使用
data, err = qqclient.Sig().Marshal()
if err != nil {
logrus.Errorln("marshal sig.bin err:", err)
logger.Errorln("marshal sig.bin err:", err)
return
}
err = os.WriteFile("sig.bin", data, 0644)
if err != nil {
logrus.Errorln("write sig.bin err:", err)
logger.Errorln("write sig.bin err:", err)
return
}
logrus.Infoln("sig saved into sig.bin")
logger.Infoln("sig saved into sig.bin")
}()

// setup the main stop channel
Expand Down Expand Up @@ -179,5 +281,4 @@ func (f *ColoredFormatter) Format(entry *logrus.Entry) ([]byte, error) {
return utils.S2B(fmt.Sprintf("[%s] [%s%s%s]: %s\n",
timestamp, levelColor, strings.ToUpper(entry.Level.String()), colorReset, entry.Message)), nil
}

```
Loading

0 comments on commit 8b69410

Please sign in to comment.