Explorar el Código

feat(sessionimport): add tdata fallback via gotd tdesktop reader

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
dot hace 2 semanas
padre
commit
7333113eb8
Se han modificado 1 ficheros con 27 adiciones y 0 borrados
  1. 27 0
      internal/telegram/sessionimport/tdesktop.go

+ 27 - 0
internal/telegram/sessionimport/tdesktop.go

@@ -0,0 +1,27 @@
+package sessionimport
+
+import (
+	"fmt"
+
+	"github.com/gotd/td/session"
+	"github.com/gotd/td/session/tdesktop"
+)
+
+// ConvertTdataSession reads a Telegram Desktop tdata/ folder and builds a
+// gotd session.Data. localPassword is the local-storage password used to decrypt
+// the tdata blob; pass an empty string when the desktop client did not set a
+// local password (the common case for 协议号).
+func ConvertTdataSession(tdataDir, localPassword string) (*session.Data, error) {
+	accounts, err := tdesktop.Read(tdataDir, []byte(localPassword))
+	if err != nil {
+		return nil, fmt.Errorf("read tdata: %w", err)
+	}
+	if len(accounts) == 0 {
+		return nil, fmt.Errorf("no accounts found in tdata")
+	}
+	data, err := session.TDesktopSession(accounts[0])
+	if err != nil {
+		return nil, fmt.Errorf("convert tdesktop account: %w", err)
+	}
+	return data, nil
+}