aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--go.mod2
-rw-r--r--telegram/client.go4
-rw-r--r--telegram/connect.go80
3 files changed, 81 insertions, 5 deletions
diff --git a/go.mod b/go.mod
index fe60906..7f0bbc9 100644
--- a/go.mod
+++ b/go.mod
@@ -14,5 +14,3 @@ require (
)
replace gosrc.io/xmpp => github.com/bodqhrohro/go-xmpp v0.1.4-0.20191106203535-f3b463f3b26c
-
-replace github.com/zelenin/go-tdlib => github.com/bodqhrohro/go-tdlib v0.1.2-0.20191121233100-48d2382034fb
diff --git a/telegram/client.go b/telegram/client.go
index c8187fc..072f4b9 100644
--- a/telegram/client.go
+++ b/telegram/client.go
@@ -35,7 +35,7 @@ func stringToLogConstant(c string) int32 {
// Client stores the metadata for lazily invoked TDlib instance
type Client struct {
client *client.Client
- authorizer *client.ClientAuthorizerType
+ authorizer *clientAuthorizer
xmpp *xmpp.Component
jid string
parameters *client.TdlibParameters
@@ -93,7 +93,7 @@ func updateHandler(tdlibClient *client.Client) {
for update := range listener.Updates {
if update.GetClass() == client.ClassUpdate {
- fmt.Printf("%#v", update)
+ fmt.Printf("%#v\n", update)
}
}
}
diff --git a/telegram/connect.go b/telegram/connect.go
index 7e92bc8..4f509d2 100644
--- a/telegram/connect.go
+++ b/telegram/connect.go
@@ -9,6 +9,78 @@ import (
"github.com/zelenin/go-tdlib/client"
)
+type clientAuthorizer struct {
+ TdlibParameters chan *client.TdlibParameters
+ PhoneNumber chan string
+ Code chan string
+ State chan client.AuthorizationState
+ Password chan string
+}
+
+func (stateHandler *clientAuthorizer) Handle(c *client.Client, state client.AuthorizationState) error {
+ stateHandler.State <- state
+
+ switch state.AuthorizationStateType() {
+ case client.TypeAuthorizationStateWaitTdlibParameters:
+ _, err := c.SetTdlibParameters(&client.SetTdlibParametersRequest{
+ Parameters: <-stateHandler.TdlibParameters,
+ })
+ return err
+
+ case client.TypeAuthorizationStateWaitEncryptionKey:
+ _, err := c.CheckDatabaseEncryptionKey(&client.CheckDatabaseEncryptionKeyRequest{})
+ return err
+
+ case client.TypeAuthorizationStateWaitPhoneNumber:
+ _, err := c.SetAuthenticationPhoneNumber(&client.SetAuthenticationPhoneNumberRequest{
+ PhoneNumber: <-stateHandler.PhoneNumber,
+ Settings: &client.PhoneNumberAuthenticationSettings{
+ AllowFlashCall: false,
+ IsCurrentPhoneNumber: false,
+ AllowSmsRetrieverApi: false,
+ },
+ })
+ return err
+
+ case client.TypeAuthorizationStateWaitCode:
+ _, err := c.CheckAuthenticationCode(&client.CheckAuthenticationCodeRequest{
+ Code: <-stateHandler.Code,
+ })
+ return err
+
+ case client.TypeAuthorizationStateWaitRegistration:
+ return client.ErrNotSupportedAuthorizationState
+
+ case client.TypeAuthorizationStateWaitPassword:
+ _, err := c.CheckAuthenticationPassword(&client.CheckAuthenticationPasswordRequest{
+ Password: <-stateHandler.Password,
+ })
+ return err
+
+ case client.TypeAuthorizationStateReady:
+ return nil
+
+ case client.TypeAuthorizationStateLoggingOut:
+ return client.ErrNotSupportedAuthorizationState
+
+ case client.TypeAuthorizationStateClosing:
+ return client.ErrNotSupportedAuthorizationState
+
+ case client.TypeAuthorizationStateClosed:
+ return client.ErrNotSupportedAuthorizationState
+ }
+
+ return client.ErrNotSupportedAuthorizationState
+}
+
+func (stateHandler *clientAuthorizer) Close() {
+ close(stateHandler.TdlibParameters)
+ close(stateHandler.PhoneNumber)
+ close(stateHandler.Code)
+ close(stateHandler.State)
+ close(stateHandler.Password)
+}
+
// Connect starts TDlib connection
func (c *Client) Connect() error {
if c.online {
@@ -17,7 +89,13 @@ func (c *Client) Connect() error {
log.Warn("Connecting to Telegram network...")
- c.authorizer = client.ClientAuthorizer()
+ c.authorizer = &clientAuthorizer{
+ TdlibParameters: make(chan *client.TdlibParameters, 1),
+ PhoneNumber: make(chan string, 1),
+ Code: make(chan string, 1),
+ State: make(chan client.AuthorizationState, 10),
+ Password: make(chan string, 1),
+ }
go c.interactor()