move gotd fork into repo. (#111)
- update to latest telegram layer - remove some references to fields in tg.Entities that don't exist in the schema - originally added here: https://github.com/beeper/td/commit/820929062a2ba0104397bc01235ab58a9cff780e - referenced here - https://github.com/mautrix/telegramgo/commit/124f0967ed195b5a380c9bd02e170ada9710dde3 - https://github.com/mautrix/telegramgo/commit/4205047aab2e0639217148b5d125bfaab668bd8e
This commit is contained in:
@@ -0,0 +1,166 @@
|
||||
package telegram_test
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"context"
|
||||
"fmt"
|
||||
"log"
|
||||
"os"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
"go.mau.fi/mautrix-telegram/pkg/gotd/telegram"
|
||||
"go.mau.fi/mautrix-telegram/pkg/gotd/telegram/auth"
|
||||
"go.mau.fi/mautrix-telegram/pkg/gotd/telegram/auth/qrlogin"
|
||||
"go.mau.fi/mautrix-telegram/pkg/gotd/telegram/dcs"
|
||||
"go.mau.fi/mautrix-telegram/pkg/gotd/tg"
|
||||
)
|
||||
|
||||
func ExampleClient_Auth_codeOnly() {
|
||||
check := func(err error) {
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
|
||||
var (
|
||||
appIDString = os.Getenv("APP_ID")
|
||||
appHash = os.Getenv("APP_HASH")
|
||||
phone = os.Getenv("PHONE")
|
||||
)
|
||||
if appIDString == "" || appHash == "" || phone == "" {
|
||||
log.Fatal("PHONE, APP_ID or APP_HASH is not set")
|
||||
}
|
||||
|
||||
appID, err := strconv.Atoi(appIDString)
|
||||
check(err)
|
||||
|
||||
ctx := context.Background()
|
||||
client := telegram.NewClient(appID, appHash, telegram.Options{})
|
||||
codeAsk := func(ctx context.Context, sentCode *tg.AuthSentCode) (string, error) {
|
||||
fmt.Print("code:")
|
||||
code, err := bufio.NewReader(os.Stdin).ReadString('\n')
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
code = strings.ReplaceAll(code, "\n", "")
|
||||
return code, nil
|
||||
}
|
||||
|
||||
check(client.Run(ctx, func(ctx context.Context) error {
|
||||
return auth.NewFlow(
|
||||
auth.CodeOnly(phone, auth.CodeAuthenticatorFunc(codeAsk)),
|
||||
auth.SendCodeOptions{},
|
||||
).Run(ctx, client.Auth())
|
||||
}))
|
||||
}
|
||||
|
||||
func ExampleClient_Auth_password() {
|
||||
check := func(err error) {
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
|
||||
var (
|
||||
appIDString = os.Getenv("APP_ID")
|
||||
appHash = os.Getenv("APP_HASH")
|
||||
phone = os.Getenv("PHONE")
|
||||
pass = os.Getenv("PASSWORD")
|
||||
)
|
||||
if appIDString == "" || appHash == "" || phone == "" || pass == "" {
|
||||
log.Fatal("PHONE, PASSWORD, APP_ID or APP_HASH is not set")
|
||||
}
|
||||
|
||||
appID, err := strconv.Atoi(appIDString)
|
||||
check(err)
|
||||
|
||||
ctx := context.Background()
|
||||
client := telegram.NewClient(appID, appHash, telegram.Options{})
|
||||
codeAsk := func(ctx context.Context, sentCode *tg.AuthSentCode) (string, error) {
|
||||
fmt.Print("code:")
|
||||
code, err := bufio.NewReader(os.Stdin).ReadString('\n')
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
code = strings.ReplaceAll(code, "\n", "")
|
||||
return code, nil
|
||||
}
|
||||
|
||||
check(client.Run(ctx, func(ctx context.Context) error {
|
||||
return auth.NewFlow(
|
||||
auth.Constant(phone, pass, auth.CodeAuthenticatorFunc(codeAsk)),
|
||||
auth.SendCodeOptions{},
|
||||
).Run(ctx, client.Auth())
|
||||
}))
|
||||
}
|
||||
|
||||
func ExampleClient_Auth_test() {
|
||||
// Example of using test server.
|
||||
const dcID = 2
|
||||
|
||||
ctx := context.Background()
|
||||
client := telegram.NewClient(telegram.TestAppID, telegram.TestAppHash, telegram.Options{
|
||||
DC: dcID,
|
||||
DCList: dcs.Test(),
|
||||
})
|
||||
if err := client.Run(ctx, func(ctx context.Context) error {
|
||||
return client.Auth().Test(ctx, dcID)
|
||||
}); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
|
||||
func ExampleClient_Auth_bot() {
|
||||
ctx := context.Background()
|
||||
client := telegram.NewClient(telegram.TestAppID, telegram.TestAppHash, telegram.Options{})
|
||||
if err := client.Run(ctx, func(ctx context.Context) error {
|
||||
// Checking auth status.
|
||||
status, err := client.Auth().Status(ctx)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
// Can be already authenticated if we have valid session in
|
||||
// session storage.
|
||||
if !status.Authorized {
|
||||
// Otherwise, perform bot authentication.
|
||||
if _, err := client.Auth().Bot(ctx, os.Getenv("BOT_TOKEN")); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
// All good, manually authenticated.
|
||||
return nil
|
||||
}); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
|
||||
func ExampleQR_Auth() {
|
||||
ctx := context.Background()
|
||||
|
||||
d := tg.NewUpdateDispatcher()
|
||||
loggedIn := qrlogin.OnLoginToken(d)
|
||||
client := telegram.NewClient(telegram.TestAppID, telegram.TestAppHash, telegram.Options{
|
||||
UpdateHandler: d,
|
||||
})
|
||||
if err := client.Run(ctx, func(ctx context.Context) error {
|
||||
qr := client.QR()
|
||||
authorization, err := qr.Auth(ctx, loggedIn, func(ctx context.Context, token qrlogin.Token) error {
|
||||
fmt.Printf("Open %s using your phone\n", token.URL())
|
||||
return nil
|
||||
})
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
u, ok := authorization.User.AsNotEmpty()
|
||||
if !ok {
|
||||
return fmt.Errorf("unexpected type %T", authorization.User)
|
||||
}
|
||||
fmt.Println("ID:", u.ID, "Username:", u.Username, "Bot:", u.Bot)
|
||||
return nil
|
||||
}); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user