Watch
1
0
Fork
You've already forked mautrix-discord
0
mirror of https://github.com/mautrix/discord.git synced 2026-11-10 16:19:17 -05:00
mautrix-discord/pkg/remoteauth
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Gerardo Rodriguez effbd997df remoteauth: keep QR login sessions alive until they are scanned
The read loop held the client lock while blocked in Read, so heartbeats
could not be written and Discord closed every QR session after about a
minute. Read without the lock, and release the lock before closing on
the hello timeout so the timeout path cannot deadlock.
2026-11-09 14:07:57 +00:00
..
client.go login,remoteauth: fix unsafe login cancellation 2026-09-02 17:05:40 +03:00
clientpackets.go all: init v2 and delete old bridge 2024-08-15 16:44:23 +03:00
README.md all: init v2 and delete old bridge 2024-08-15 16:44:23 +03:00
serverpackets.go remoteauth: keep QR login sessions alive until they are scanned 2026-11-09 14:07:57 +00:00
user.go all: init v2 and delete old bridge 2024-08-15 16:44:23 +03:00

Discord Remote Authentication

This library implements the desktop side of Discord's remote authentication protocol.

It is completely based off of the Unofficial Discord API Documentation.

Example

package main

import (
	"context"
	"fmt"

	"github.com/skip2/go-qrcode"
)

func main() {
	client, err := New()
	if err != nil {
		fmt.Printf("error: %v\n", err)

		return
	}

	ctx := context.Background()

	qrChan := make(chan *qrcode.QRCode)
	go func() {
		qrCode := <-qrChan
		fmt.Println(qrCode.ToSmallString(true))
	}()

	doneChan := make(chan struct{})

	if err := client.Dial(ctx, qrChan, doneChan); err != nil {
		close(qrChan)
		close(doneChan)

		fmt.Printf("dial error: %v\n", err)

		return
	}

	<-doneChan

	user, err := client.Result()
	fmt.Printf("user: %q\n", user)
	fmt.Printf("err: %v\n", err)
}