Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[提问] sig.bin 数据的获取方法是什么? #53

Open
WindowsSov8forUs opened this issue Jul 15, 2024 · 14 comments
Open

[提问] sig.bin 数据的获取方法是什么? #53

WindowsSov8forUs opened this issue Jul 15, 2024 · 14 comments

Comments

@WindowsSov8forUs
Copy link

在文档中只看到了如何将 sig.binSigInfo 进行互相转换,但是没有看到从哪里获取这个数据。

@Redmomn
Copy link
Collaborator

Redmomn commented Jul 15, 2024

如果不手动传入sigSigInfo会在登录时自动初始化,待登录完成之后可以通过QQClientSig()方法获取SigInfo

@WindowsSov8forUs
Copy link
Author

我使用如下代码尝试进行初次登录:

func main() {
	appInfo := auth.AppList["linux"]

	deviceInfo := auth.NewDeviceInfo(rand.Int())

	qqclient := client.NewClient(
		uint32(qqId),
		signAddress,
		appInfo,
	)
	qqclient.UseDevice(deviceInfo)

	qqclient.GroupMessageEvent.Subscribe(func(client *client.QQClient, event *message.GroupMessage) {
		if event.ToString() == "lgrping" {
			_, err := client.SendGroupMessage(event.GroupCode, []message.IMessageElement{&message.TextElement{Content: "pong"}})
			if err != nil {
				fmt.Printf("SendGroupMessage failed: %v\n", err)
				return
			}
		}
	})

	qrcode, url, err := qqclient.FetchQRCodeDefault()
	if err != nil {
		fmt.Printf("FetchQRCodeDefault failed: %v\n", err)
		panic(err)
	}
	reader := bytes.NewReader(qrcode)

	image, format, err := image.Decode(reader)
	if err != nil {
		fmt.Printf("Decode QRCode failed: %v\n", err)
		panic(err)
	}
	fmt.Println("QRCode format:", format)
	fmt.Println("QRCode url:", url)

	file, err := os.Create("qrcode.png")
	if err != nil {
		fmt.Printf("Create QRCode file failed: %v\n", err)
		panic(err)
	}
	defer file.Close()

	err = png.Encode(file, image)
	if err != nil {
		fmt.Printf("Encode QRCode file failed: %v\n", err)
		panic(err)
	}

	err = qqclient.Login(password, "qrcode.png")
	if err != nil {
		fmt.Printf("Login failed: %v\n", err)
		panic(err)
	}
	defer qqclient.Release()

	sigInfo := qqclient.Sig()
	data, err := sigInfo.Marshal()
	if err != nil {
		fmt.Printf("Marshal SigInfo failed: %v\n", err)
		panic(err)
	}
	err = os.WriteFile("sig.bin", data, 0644)
	if err != nil {
		fmt.Printf("Write SigInfo file failed: %v\n", err)
		panic(err)
	}

	// setup the main stop channel
	mc := make(chan os.Signal, 2)
	signal.Notify(mc, os.Interrupt, syscall.SIGTERM)
	for {
		switch <-mc {
		case os.Interrupt, syscall.SIGTERM:
			return
		}
	}
}

在扫码登录后,一段时间无响应输出后出现如下错误:

Login failed: Packet timed out
panic: Packet timed out

goroutine 1 [running]:
main.main()
        F:/VS Code File/go-test/main.go:81 +0x719
exit status 2

这是什么情况?

@WindowsSov8forUs
Copy link
Author

password 置空重新尝试后出现了如下错误:

Login failed: login fail on oicq (0x2d): [禁止登录]>[登录失败,请前往QQ官网im.qq.com下载最新版QQ后重试,或通过问题反馈与我们联系。]
panic: login fail on oicq (0x2d): [禁止登录]>[登录失败,请前往QQ官网im.qq.com下载最新版QQ后重试,或通过问题反馈与我们联系。]

goroutine 1 [running]:
main.main()
        F:/VS Code File/go-test/main.go:76 +0x70d
exit status 2

尝试改用文档中镜像地址也没用

@Redmomn
Copy link
Collaborator

Redmomn commented Jul 15, 2024

你是不是用的昨天的提交,那个版本太新和sign对不上,你再pull一下代码,把appInfo := auth.AppList["linux"]改成appInfo := auth.AppList["linux"]["3.2.10-25765"]

@Redmomn
Copy link
Collaborator

Redmomn commented Jul 15, 2024

不好意思,AppList这应该是3.1.2-13107不是3.2.10-25765

@WindowsSov8forUs
Copy link
Author

添加后确实能够成功登录了,但是在生成 sig.bin 文件后,尝试读取该文件并通过 UseSig 使用来重复登录时,出现了如下错误:
(除添加使用 sig.bin 文件代码外其余代码没有进行更改)

FetchQRCodeDefault failed: Packet timed out
panic: Packet timed out

goroutine 1 [running]:
main.main()
        F:/VS Code File/go-test/main.go:68 +0xbb9
exit status 2

是我的什么步骤进行错了吗?

@Redmomn
Copy link
Collaborator

Redmomn commented Jul 15, 2024

你这个登录流程不对,fetchqrcode和login不可以一起用,login方法里面自带了二维码登录,把fetchqrcode删掉试试

@Redmomn
Copy link
Collaborator

Redmomn commented Jul 15, 2024

在main.go也有登录示例,可以参考一下

@WindowsSov8forUs
Copy link
Author

你这个登录流程不对,fetchqrcode和login不可以一起用,login方法里面自带了二维码登录,把fetchqrcode删掉试试

二维码生成是在哪一步进行的?

@WindowsSov8forUs
Copy link
Author

我在文档的 main.go 里只看到了使用 "qrcode.png" 的地方,但是没有看到在什么时候生成这个二维码。它是只需要在初次使用的时候生成,还是在 sig.bin 失效或不存在的时候生成?生成的二维码需要保留吗?

@Redmomn
Copy link
Collaborator

Redmomn commented Jul 15, 2024

login里面会自动生成二维码,扫完码之后就不用保留二维码了,在siginfo有效的情况下会自动使用快速登录,无需扫码

@Redmomn
Copy link
Collaborator

Redmomn commented Jul 15, 2024

https://lagrangedev.github.io/LagrangeGo/
文档里都有写的

@2mf8
Copy link
Collaborator

2mf8 commented Jul 19, 2024

添加后确实能够成功登录了,但是在生成 sig.bin 文件后,尝试读取该文件并通过 UseSig 使用来重复登录时,出现了如下错误: (除添加使用 sig.bin 文件代码外其余代码没有进行更改)

FetchQRCodeDefault failed: Packet timed out
panic: Packet timed out

goroutine 1 [running]:
main.main()
        F:/VS Code File/go-test/main.go:68 +0xbb9
exit status 2

是我的什么步骤进行错了吗?

可以参看Go-Lagrange-Client

@2mf8
Copy link
Collaborator

2mf8 commented Jul 19, 2024

添加后确实能够成功登录了,但是在生成 sig.bin 文件后,尝试读取该文件并通过 UseSig 使用来重复登录时,出现了如下错误: (除添加使用 sig.bin 文件代码外其余代码没有进行更改)

FetchQRCodeDefault failed: Packet timed out
panic: Packet timed out

goroutine 1 [running]:
main.main()
        F:/VS Code File/go-test/main.go:68 +0xbb9
exit status 2

是我的什么步骤进行错了吗?

可以参看Go-Lagrange-Client

https://github.com/2mf8/Go-Lagrange-Client

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants