package handlers import ( "bytes" "context" "gitea.russia9.dev/russia9/muskrat/storage" "github.com/gotd/td/session" "github.com/gotd/td/telegram" "github.com/gotd/td/telegram/auth" "gopkg.in/telebot.v3" "os" "regexp" "strconv" ) func Phone(ctx telebot.Context) error { if !regexp.MustCompile("^[+]?[(]?[0-9]{3}[)]?[-\\s.]?[0-9]{3}[-\\s.]?[0-9]{4,8}$").MatchString(ctx.Text()) { _ = storage.ClearState(context.Background(), ctx.Sender().ID) return List(ctx) } s := session.StorageMemory{} appID, err := strconv.Atoi(os.Getenv("TELEGRAM_APP_ID")) if err != nil { _ = storage.ClearState(context.Background(), ctx.Sender().ID) return err } client := telegram.NewClient(appID, os.Getenv("TELEGRAM_APP_HASH"), telegram.Options{ SessionStorage: &s, }) err = client.Run(context.Background(), func(c context.Context) error { code, err := client.Auth().SendCode(c, ctx.Text(), auth.SendCodeOptions{}) if err != nil { return err } err = storage.SetState(context.Background(), ctx.Sender().ID, "code", ctx.Text(), code.PhoneCodeHash) if err != nil { return err } return nil }) if err != nil { _ = storage.ClearState(context.Background(), ctx.Sender().ID) return List(ctx) } b := new(bytes.Buffer) err = s.Dump(b) if err != nil { _ = storage.ClearState(context.Background(), ctx.Sender().ID) return err } if len(storage.Registration) == 0 { storage.Registration = make(map[int64][]byte) } storage.Registration[ctx.Sender().ID] = b.Bytes() return ctx.Send("Введите код из личных сообщений в формате 1 2 3 4 5:") }