diff options
author | Bohdan Horbeshko <bodqhrohro@gmail.com> | 2023-06-16 07:34:49 +0300 |
---|---|---|
committer | Bohdan Horbeshko <bodqhrohro@gmail.com> | 2023-06-16 07:34:49 +0300 |
commit | fdd867cf7a435346a552a8da7f446b59b5e1213e (patch) | |
tree | 2bab821cf7419a5b9f16c43cab137a13fb4490ad /telegram/connect.go | |
parent | edf2c08a5b46e48277a5173653cfe8b156a412e5 (diff) |
Add /cancelauth command
Diffstat (limited to 'telegram/connect.go')
-rw-r--r-- | telegram/connect.go | 30 |
1 files changed, 25 insertions, 5 deletions
diff --git a/telegram/connect.go b/telegram/connect.go index 2633980..8324319 100644 --- a/telegram/connect.go +++ b/telegram/connect.go @@ -24,6 +24,9 @@ type clientAuthorizer struct { } func (stateHandler *clientAuthorizer) Handle(c *client.Client, state client.AuthorizationState) error { + if stateHandler.isClosed { + return errors.New("Channel is closed") + } stateHandler.State <- state switch state.AuthorizationStateType() { @@ -84,6 +87,9 @@ func (stateHandler *clientAuthorizer) Handle(c *client.Client, state client.Auth } func (stateHandler *clientAuthorizer) Close() { + if stateHandler.isClosed { + return + } stateHandler.isClosed = true close(stateHandler.TdlibParameters) close(stateHandler.PhoneNumber) @@ -191,11 +197,7 @@ func (c *Client) Disconnect(resource string, quit bool) bool { ) } - _, err := c.client.Close() - if err != nil { - log.Errorf("Couldn't close the Telegram instance: %v; %#v", err, c) - } - c.forceClose() + c.close() return true } @@ -242,6 +244,24 @@ func (c *Client) forceClose() { c.authorizer = nil } +func (c *Client) close() { + if c.authorizer != nil && !c.authorizer.isClosed { + c.authorizer.Close() + } + if c.client != nil { + _, err := c.client.Close() + if err != nil { + log.Errorf("Couldn't close the Telegram instance: %v; %#v", err, c) + } + } + c.forceClose() +} + +func (c *Client) cancelAuth() { + c.close() + c.Session.Login = "" +} + // Online checks if the updates listener is alive func (c *Client) Online() bool { return c.online |