Quellcode durchsuchen

feat(sessionimport): add Telegram DC address mapping

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
dot vor 2 Wochen
Ursprung
Commit
48409a4129

+ 23 - 0
internal/telegram/sessionimport/dcaddr.go

@@ -0,0 +1,23 @@
+// Package sessionimport converts third-party Telegram session formats
+// (Pyrogram SQLite, Telegram Desktop tdata) to gotd/td's native session.Data.
+package sessionimport
+
+import "fmt"
+
+// TGDCAddr maps a Telegram data-center id to its production IP:port.
+// Source: https://core.telegram.org/api/datacenter
+func TGDCAddr(dc int) (string, error) {
+	switch dc {
+	case 1:
+		return "149.154.175.53:443", nil
+	case 2:
+		return "149.154.167.51:443", nil
+	case 3:
+		return "149.154.175.100:443", nil
+	case 4:
+		return "149.154.167.91:443", nil
+	case 5:
+		return "91.108.56.130:443", nil
+	}
+	return "", fmt.Errorf("unsupported telegram dc_id: %d", dc)
+}

+ 28 - 0
internal/telegram/sessionimport/dcaddr_test.go

@@ -0,0 +1,28 @@
+package sessionimport
+
+import "testing"
+
+func TestTGDCAddr(t *testing.T) {
+	cases := []struct {
+		dc   int
+		want string
+	}{
+		{1, "149.154.175.53:443"},
+		{2, "149.154.167.51:443"},
+		{3, "149.154.175.100:443"},
+		{4, "149.154.167.91:443"},
+		{5, "91.108.56.130:443"},
+	}
+	for _, tc := range cases {
+		got, err := TGDCAddr(tc.dc)
+		if err != nil {
+			t.Fatalf("dc=%d unexpected err: %v", tc.dc, err)
+		}
+		if got != tc.want {
+			t.Errorf("dc=%d got %q want %q", tc.dc, got, tc.want)
+		}
+	}
+	if _, err := TGDCAddr(99); err == nil {
+		t.Error("expected err for unknown dc=99")
+	}
+}