Documentation ¶
Overview ¶
Package telegram implements Telegram client.
Index ¶
- Constants
- Variables
- func BotFromEnvironment(ctx context.Context, opts Options, ...) error
- func TestClient(ctx context.Context, opts Options, ...) error
- type AuthFlow
- type AuthFlowClient
- type AuthStatus
- type Client
- func (c *Client) AuthAcceptTOS(ctx context.Context, id tg.DataJSON) error
- func (c *Client) AuthBot(ctx context.Context, token string) error
- func (c *Client) AuthPassword(ctx context.Context, password string) error
- func (c *Client) AuthSendCode(ctx context.Context, phone string, options SendCodeOptions) (codeHash string, err error)
- func (c *Client) AuthSignIn(ctx context.Context, phone, code, codeHash string) error
- func (c *Client) AuthSignUp(ctx context.Context, s SignUp) error
- func (c *Client) AuthStatus(ctx context.Context) (*AuthStatus, error)
- func (c *Client) InvokeRaw(ctx context.Context, input bin.Encoder, output bin.Decoder) error
- func (c *Client) RandInt64() (int64, error)
- func (c *Client) Run(ctx context.Context, f func(ctx context.Context) error) error
- func (c *Client) Self(ctx context.Context) (*tg.User, error)
- func (c *Client) SendMessage(ctx context.Context, req *tg.MessagesSendMessageRequest) error
- type CodeAuthenticator
- type CodeAuthenticatorFunc
- type DeviceConfig
- type Error
- type FileSessionStorage
- type Options
- type SendCodeOptions
- type SessionStorage
- type SignUp
- type SignUpRequired
- type Transport
- type UpdateHandler
- type UserAuthenticator
- type UserInfo
Examples ¶
Constants ¶
const ( AddrProduction = "149.154.167.50:443" AddrTest = "149.154.167.40:443" )
Available MTProto default server addresses.
See https://my.telegram.org/apps.
const ( TestAppID = 17349 TestAppHash = "344583e45741c457fe1862106095a5eb" )
Test-only credentials. Can be used with AddrTest and TestAuth to test authentication.
Reference:
const Port = 443
Port is default port used by telegram.
Variables ¶
var ErrPasswordAuthNeeded = errors.New("2FA required")
ErrPasswordAuthNeeded means that 2FA auth is required.
Call Client.AuthPassword to provide 2FA password.
var ErrPasswordNotProvided = errors.New("password requested but not provided")
ErrPasswordNotProvided means that password requested by Telegram, but not provided by user.
Functions ¶
func BotFromEnvironment ¶ added in v0.19.0
func BotFromEnvironment(ctx context.Context, opts Options, cb func(ctx context.Context, client *Client) error) error
BotFromEnvironment creates bot client using ClientFromEnvironment connects to server and authenticates it.
Variables: BOT_TOKEN — token from BotFather.
Types ¶
type AuthFlow ¶ added in v0.14.0
type AuthFlow struct { Auth UserAuthenticator Options SendCodeOptions }
AuthFlow simplifies boilerplate for authentication flow.
func NewAuth ¶ added in v0.14.0
func NewAuth(auth UserAuthenticator, opt SendCodeOptions) AuthFlow
NewAuth initializes new authentication flow.
func (AuthFlow) Run ¶ added in v0.14.0
func (f AuthFlow) Run(ctx context.Context, client AuthFlowClient) error
Run starts authentication flow on client.
Example ¶
package main import ( "bufio" "context" "fmt" "log" "os" "strconv" "strings" "github.com/gotd/td/telegram" ) func main() { 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) (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 telegram.NewAuth( telegram.ConstantAuth(phone, pass, telegram.CodeAuthenticatorFunc(codeAsk)), telegram.SendCodeOptions{}, ).Run(ctx, client) })) }
Output:
type AuthFlowClient ¶ added in v0.14.0
type AuthFlowClient interface { AuthSignIn(ctx context.Context, phone, code, codeHash string) error AuthSendCode(ctx context.Context, phone string, options SendCodeOptions) (codeHash string, err error) AuthPassword(ctx context.Context, password string) error AuthSignUp(ctx context.Context, s SignUp) error }
AuthFlowClient abstracts telegram client for AuthFlow.
type AuthStatus ¶
type AuthStatus struct { // Authorized is true if client is authorized. Authorized bool // User is current User object. User *tg.User }
AuthStatus represents authorization status.
type Client ¶
type Client struct {
// contains filtered or unexported fields
}
Client represents a MTProto client to Telegram.
func ClientFromEnvironment ¶ added in v0.19.0
ClientFromEnvironment creates client using OptionsFromEnvironment but does not connect to server.
Variables: APP_ID — app_id of Telegram app. APP_HASH — app_hash of Telegram app.
func (*Client) AuthAcceptTOS ¶ added in v0.17.0
AuthAcceptTOS accepts version of Terms Of Service.
func (*Client) AuthPassword ¶ added in v0.10.0
AuthPassword performs login via secure remote password (aka 2FA).
Method can be called after AuthSignIn to provide password if requested.
func (*Client) AuthSendCode ¶ added in v0.10.0
func (c *Client) AuthSendCode(ctx context.Context, phone string, options SendCodeOptions) (codeHash string, err error)
AuthSendCode requests code for provided phone number, returning code hash and error if any. Use AuthFlow to reduce boilerplate.
This method should be called first in user authentication flow.
func (*Client) AuthSignIn ¶ added in v0.10.0
AuthSignIn performs sign in with provided user phone, code and code hash.
If ErrPasswordAuthNeeded is returned, call AuthPassword to provide 2FA password.
To obtain codeHash, use AuthSendCode.
func (*Client) AuthSignUp ¶ added in v0.17.0
AuthSignUp registers a validated phone number in the system.
To obtain codeHash, use AuthSendCode. Use AuthFlow helper to handle authentication flow.
func (*Client) AuthStatus ¶
func (c *Client) AuthStatus(ctx context.Context) (*AuthStatus, error)
AuthStatus gets authorization status of client.
func (*Client) InvokeRaw ¶
InvokeRaw sens input and decodes result into output.
NOTE: Assuming that call contains content message (seqno increment).
func (*Client) RandInt64 ¶
RandInt64 returns new random int64 from random source.
Useful helper for places in API where random int is required.
func (*Client) Run ¶ added in v0.18.0
Run starts client session and block until connection close. The f callback is called on successful session initialization and Run will return on f() result.
Context of callback will be canceled if fatal error is detected.
func (*Client) Self ¶ added in v0.11.0
Self returns current user.
You can use tg.User.Bot to check whether current user is bot.
func (*Client) SendMessage ¶
SendMessage sends message to peer.
type CodeAuthenticator ¶ added in v0.14.0
CodeAuthenticator asks user for received authentication code.
type CodeAuthenticatorFunc ¶ added in v0.14.0
CodeAuthenticatorFunc is functional wrapper for CodeAuthenticator.
type DeviceConfig ¶ added in v0.21.0
type DeviceConfig struct { // Device model DeviceModel string // Operation system version SystemVersion string // Application version AppVersion string // Code for the language used on the device's OS, ISO 639-1 standard SystemLangCode string // Language pack to use LangPack string // Code for the language used on the client, ISO 639-1 standard LangCode string }
DeviceConfig is config which send when Telegram connection session created.
type FileSessionStorage ¶
type FileSessionStorage = session.FileStorage
FileSessionStorage is alias of mtproto.FileSessionStorage.
Deprecated.
type Options ¶
type Options struct { // PublicKeys of telegram. // // If not provided, embedded public keys will be used. PublicKeys []*rsa.PublicKey // Addr to connect. // // If not provided, AddrProduction will be used by default. Addr string // Transport to use. Default dialer will be used if not provided. Transport Transport // Network to use. Defaults to tcp. Network string // Random is random source. Defaults to crypto. Random io.Reader // Logger is instance of zap.Logger. No logs by default. Logger *zap.Logger // SessionStorage will be used to load and save session data. // NB: Very sensitive data, save with care. SessionStorage SessionStorage // UpdateHandler will be called on received update. UpdateHandler UpdateHandler // AckBatchSize is maximum ack-s to buffer. AckBatchSize int // AckInterval is maximum time to buffer ack. AckInterval time.Duration RetryInterval time.Duration MaxRetries int // Device is device config. // Will be sent with session creation request. Device DeviceConfig MessageID mtproto.MessageIDSource Clock clock.Clock }
Options of Client.
func OptionsFromEnvironment ¶ added in v0.19.0
OptionsFromEnvironment fills unfilled field in opts parameter using environment variables.
Variables: SESSION_FILE: path to session file SESSION_DIR: path to session directory, if SESSION_FILE is not set ALL_PROXY, NO_PROXY: see https://pkg.go.dev/golang.org/x/net/proxy#FromEnvironment
type SendCodeOptions ¶ added in v0.10.0
type SendCodeOptions struct { // AllowFlashCall allows phone verification via phone calls. AllowFlashCall bool // Pass true if the phone number is used on the current device. // Ignored if AllowFlashCall is not set. CurrentNumber bool // If a token that will be included in eventually sent SMSs is required: // required in newer versions of android, to use the android SMS receiver APIs. AllowAppHash bool }
SendCodeOptions defines how to send auth code to user.
type SignUpRequired ¶ added in v0.17.0
type SignUpRequired struct {
TermsOfService tg.HelpTermsOfService
}
SignUpRequired means that log in failed because corresponding account does not exist, so sign up is required.
func (*SignUpRequired) Error ¶ added in v0.17.0
func (s *SignUpRequired) Error() string
func (*SignUpRequired) Is ¶ added in v0.17.0
func (s *SignUpRequired) Is(err error) bool
Is returns true if err is SignUpRequired.
type Transport ¶ added in v0.12.0
type Transport interface { Codec() transport.Codec DialContext(ctx context.Context, network, address string) (transport.Conn, error) }
Transport is MTProto connection creator.
type UpdateHandler ¶
UpdateHandler will be called on received updates from Telegram.
type UserAuthenticator ¶ added in v0.14.0
type UserAuthenticator interface { Phone(ctx context.Context) (string, error) Password(ctx context.Context) (string, error) AcceptTermsOfService(ctx context.Context, tos tg.HelpTermsOfService) error SignUp(ctx context.Context) (UserInfo, error) CodeAuthenticator }
UserAuthenticator asks user for phone, password and received authentication code.
func CodeOnlyAuth ¶ added in v0.14.0
func CodeOnlyAuth(phone string, code CodeAuthenticator) UserAuthenticator
CodeOnlyAuth creates UserAuthenticator with constant phone and no password.
func ConstantAuth ¶ added in v0.14.0
func ConstantAuth(phone, password string, code CodeAuthenticator) UserAuthenticator
ConstantAuth creates UserAuthenticator with constant phone and password.
func TestAuth ¶ added in v0.14.0
func TestAuth(randReader io.Reader, dc int) UserAuthenticator
TestAuth returns UserAuthenticator that authenticates via testing credentials.
Can be used only with testing server. Will perform sign up if test user is not registered.
Example ¶
package main import ( "context" "crypto/rand" "github.com/gotd/td/telegram" ) func main() { // Example of using test server. const dcID = 2 ctx := context.Background() client := telegram.NewClient(telegram.TestAppID, telegram.TestAppHash, telegram.Options{ Addr: telegram.AddrTest, }) if err := client.Run(ctx, func(ctx context.Context) error { return telegram.NewAuth( telegram.TestAuth(rand.Reader, dcID), telegram.SendCodeOptions{}, ).Run(ctx, client) }); err != nil { panic(err) } }
Output:
Source Files ¶
Directories ¶
Path | Synopsis |
---|---|
Code generated for package internal by go-bindata DO NOT EDIT.
|
Code generated for package internal by go-bindata DO NOT EDIT. |
e2etest
Package e2etest contains some helpers to make external E2E tests using Telegram staging server.
|
Package e2etest contains some helpers to make external E2E tests using Telegram staging server. |
tgtest
Package tgtest provides test Telegram server for end-to-end test.
|
Package tgtest provides test Telegram server for end-to-end test. |