Compare commits
1 commit
fresh-tdli
...
fresh-tdli
Author | SHA1 | Date | |
---|---|---|---|
47da331806 |
2
Makefile
2
Makefile
|
@ -1,4 +1,4 @@
|
|||
TAG := v1.8.0
|
||||
TAG := v1.8.14
|
||||
|
||||
schema-update:
|
||||
curl https://raw.githubusercontent.com/tdlib/td/${TAG}/td/generate/scheme/td_api.tl 2>/dev/null > ./data/td_api.tl
|
||||
|
|
|
@ -1,12 +1,12 @@
|
|||
# go-tdlib
|
||||
|
||||
Go wrapper for [TDLib (Telegram Database Library)](https://github.com/tdlib/td) with full support of TDLib v1.8.0
|
||||
Go wrapper for [TDLib (Telegram Database Library)](https://github.com/tdlib/td) with full support of TDLib v1.8.14
|
||||
|
||||
## TDLib installation
|
||||
|
||||
Use [TDLib build instructions](https://tdlib.github.io/td/build.html) with checkmarked `Install built TDLib to /usr/local instead of placing the files to td/tdlib`.
|
||||
|
||||
### Note: Compatible with TDLib v1.8.0 only!
|
||||
### Note: Compatible with TDLib v1.8.14 only!
|
||||
|
||||
### Windows
|
||||
|
||||
|
@ -143,7 +143,7 @@ tdlibClient, err := client.NewClient(authorizer, proxy)
|
|||
|
||||
```
|
||||
cd example
|
||||
docker build --network host --build-arg TD_TAG=v1.8.0 --tag tdlib-test .
|
||||
docker build --network host --build-arg TD_TAG=v1.8.14 --tag tdlib-test .
|
||||
docker run --rm -it -e "API_ID=00000" -e "API_HASH=abcdef0123456789" tdlib-test ash
|
||||
./app
|
||||
```
|
||||
|
|
|
@ -8,6 +8,42 @@ import (
|
|||
|
||||
var ErrNotSupportedAuthorizationState = errors.New("not supported state")
|
||||
|
||||
// Contains parameters for TDLib initialization
|
||||
type TdlibParameters struct {
|
||||
// Pass true to use Telegram test environment instead of the production environment
|
||||
UseTestDc bool `json:"use_test_dc"`
|
||||
// The path to the directory for the persistent database; if empty, the current working directory will be used
|
||||
DatabaseDirectory string `json:"database_directory"`
|
||||
// The path to the directory for storing files; if empty, database_directory will be used
|
||||
FilesDirectory string `json:"files_directory"`
|
||||
// Encryption key for the database. If the encryption key is invalid, then an error with code 401 will be returned
|
||||
DatabaseEncryptionKey []byte `json:"database_encryption_key"`
|
||||
// Pass true to keep information about downloaded and uploaded files between application restarts
|
||||
UseFileDatabase bool `json:"use_file_database"`
|
||||
// Pass true to keep cache of users, basic groups, supergroups, channels and secret chats between restarts. Implies use_file_database
|
||||
UseChatInfoDatabase bool `json:"use_chat_info_database"`
|
||||
// Pass true to keep cache of chats and messages between restarts. Implies use_chat_info_database
|
||||
UseMessageDatabase bool `json:"use_message_database"`
|
||||
// Pass true to enable support for secret chats
|
||||
UseSecretChats bool `json:"use_secret_chats"`
|
||||
// Application identifier for Telegram API access, which can be obtained at https://my.telegram.org
|
||||
ApiId int32 `json:"api_id"`
|
||||
// Application identifier hash for Telegram API access, which can be obtained at https://my.telegram.org
|
||||
ApiHash string `json:"api_hash"`
|
||||
// IETF language tag of the user's operating system language; must be non-empty
|
||||
SystemLanguageCode string `json:"system_language_code"`
|
||||
// Model of the device the application is being run on; must be non-empty
|
||||
DeviceModel string `json:"device_model"`
|
||||
// Version of the operating system the application is being run on. If empty, the version is automatically detected by TDLib
|
||||
SystemVersion string `json:"system_version"`
|
||||
// Application version; must be non-empty
|
||||
ApplicationVersion string `json:"application_version"`
|
||||
// Pass true to automatically delete old files in background
|
||||
EnableStorageOptimizer bool `json:"enable_storage_optimizer"`
|
||||
// Pass true to ignore original file names for downloaded files. Otherwise, downloaded files are saved under names as close as possible to the original name
|
||||
IgnoreFileNames bool `json:"ignore_file_names"`
|
||||
}
|
||||
|
||||
type AuthorizationStateHandler interface {
|
||||
Handle(client *Client, state AuthorizationState) error
|
||||
Close()
|
||||
|
@ -65,15 +101,27 @@ func (stateHandler *clientAuthorizer) Handle(client *Client, state Authorization
|
|||
|
||||
switch state.AuthorizationStateType() {
|
||||
case TypeAuthorizationStateWaitTdlibParameters:
|
||||
p := <-stateHandler.TdlibParameters
|
||||
_, err := client.SetTdlibParameters(&SetTdlibParametersRequest{
|
||||
Parameters: <-stateHandler.TdlibParameters,
|
||||
UseTestDc: p.UseTestDc,
|
||||
DatabaseDirectory: p.DatabaseDirectory,
|
||||
FilesDirectory: p.FilesDirectory,
|
||||
DatabaseEncryptionKey: p.DatabaseEncryptionKey,
|
||||
UseFileDatabase: p.UseFileDatabase,
|
||||
UseChatInfoDatabase: p.UseChatInfoDatabase,
|
||||
UseMessageDatabase: p.UseMessageDatabase,
|
||||
UseSecretChats: p.UseSecretChats,
|
||||
ApiId: p.ApiId,
|
||||
ApiHash: p.ApiHash,
|
||||
SystemLanguageCode: p.SystemLanguageCode,
|
||||
DeviceModel: p.DeviceModel,
|
||||
SystemVersion: p.SystemVersion,
|
||||
ApplicationVersion: p.ApplicationVersion,
|
||||
EnableStorageOptimizer: p.EnableStorageOptimizer,
|
||||
IgnoreFileNames: p.IgnoreFileNames,
|
||||
})
|
||||
return err
|
||||
|
||||
case TypeAuthorizationStateWaitEncryptionKey:
|
||||
_, err := client.CheckDatabaseEncryptionKey(&CheckDatabaseEncryptionKeyRequest{})
|
||||
return err
|
||||
|
||||
case TypeAuthorizationStateWaitPhoneNumber:
|
||||
_, err := client.SetAuthenticationPhoneNumber(&SetAuthenticationPhoneNumberRequest{
|
||||
PhoneNumber: <-stateHandler.PhoneNumber,
|
||||
|
@ -85,12 +133,21 @@ func (stateHandler *clientAuthorizer) Handle(client *Client, state Authorization
|
|||
})
|
||||
return err
|
||||
|
||||
case TypeAuthorizationStateWaitEmailAddress:
|
||||
return ErrNotSupportedAuthorizationState
|
||||
|
||||
case TypeAuthorizationStateWaitEmailCode:
|
||||
return ErrNotSupportedAuthorizationState
|
||||
|
||||
case TypeAuthorizationStateWaitCode:
|
||||
_, err := client.CheckAuthenticationCode(&CheckAuthenticationCodeRequest{
|
||||
Code: <-stateHandler.Code,
|
||||
})
|
||||
return err
|
||||
|
||||
case TypeAuthorizationStateWaitOtherDeviceConfirmation:
|
||||
return ErrNotSupportedAuthorizationState
|
||||
|
||||
case TypeAuthorizationStateWaitRegistration:
|
||||
return ErrNotSupportedAuthorizationState
|
||||
|
||||
|
@ -140,6 +197,12 @@ func CliInteractor(clientAuthorizer *clientAuthorizer) {
|
|||
|
||||
clientAuthorizer.PhoneNumber <- phoneNumber
|
||||
|
||||
case TypeAuthorizationStateWaitEmailAddress:
|
||||
return
|
||||
|
||||
case TypeAuthorizationStateWaitEmailCode:
|
||||
return
|
||||
|
||||
case TypeAuthorizationStateWaitCode:
|
||||
var code string
|
||||
|
||||
|
@ -148,6 +211,12 @@ func CliInteractor(clientAuthorizer *clientAuthorizer) {
|
|||
|
||||
clientAuthorizer.Code <- code
|
||||
|
||||
case TypeAuthorizationStateWaitOtherDeviceConfirmation:
|
||||
return
|
||||
|
||||
case TypeAuthorizationStateWaitRegistration:
|
||||
return
|
||||
|
||||
case TypeAuthorizationStateWaitPassword:
|
||||
fmt.Println("Enter password: ")
|
||||
var password string
|
||||
|
@ -185,15 +254,27 @@ func (stateHandler *botAuthorizer) Handle(client *Client, state AuthorizationSta
|
|||
|
||||
switch state.AuthorizationStateType() {
|
||||
case TypeAuthorizationStateWaitTdlibParameters:
|
||||
p := <-stateHandler.TdlibParameters
|
||||
_, err := client.SetTdlibParameters(&SetTdlibParametersRequest{
|
||||
Parameters: <-stateHandler.TdlibParameters,
|
||||
UseTestDc: p.UseTestDc,
|
||||
DatabaseDirectory: p.DatabaseDirectory,
|
||||
FilesDirectory: p.FilesDirectory,
|
||||
DatabaseEncryptionKey: p.DatabaseEncryptionKey,
|
||||
UseFileDatabase: p.UseFileDatabase,
|
||||
UseChatInfoDatabase: p.UseChatInfoDatabase,
|
||||
UseMessageDatabase: p.UseMessageDatabase,
|
||||
UseSecretChats: p.UseSecretChats,
|
||||
ApiId: p.ApiId,
|
||||
ApiHash: p.ApiHash,
|
||||
SystemLanguageCode: p.SystemLanguageCode,
|
||||
DeviceModel: p.DeviceModel,
|
||||
SystemVersion: p.SystemVersion,
|
||||
ApplicationVersion: p.ApplicationVersion,
|
||||
EnableStorageOptimizer: p.EnableStorageOptimizer,
|
||||
IgnoreFileNames: p.IgnoreFileNames,
|
||||
})
|
||||
return err
|
||||
|
||||
case TypeAuthorizationStateWaitEncryptionKey:
|
||||
_, err := client.CheckDatabaseEncryptionKey(&CheckDatabaseEncryptionKeyRequest{})
|
||||
return err
|
||||
|
||||
case TypeAuthorizationStateWaitPhoneNumber:
|
||||
_, err := client.CheckAuthenticationBotToken(&CheckAuthenticationBotTokenRequest{
|
||||
Token: <-stateHandler.Token,
|
||||
|
|
5071
client/function.go
5071
client/function.go
File diff suppressed because it is too large
Load diff
|
@ -2,6 +2,7 @@ package client
|
|||
|
||||
/*
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <td/telegram/td_json_client.h>
|
||||
*/
|
||||
import "C"
|
||||
|
@ -83,7 +84,8 @@ func (instance *tdlib) receive(timeout time.Duration) (*Response, error) {
|
|||
return nil, errors.New("update receiving timeout")
|
||||
}
|
||||
|
||||
data := []byte(C.GoString(result))
|
||||
resultLen := C.strlen(result)
|
||||
data := C.GoBytes(unsafe.Pointer(result), C.int(resultLen))
|
||||
|
||||
var resp Response
|
||||
|
||||
|
@ -107,7 +109,8 @@ func Execute(req Request) (*Response, error) {
|
|||
return nil, errors.New("request can't be parsed")
|
||||
}
|
||||
|
||||
data = []byte(C.GoString(result))
|
||||
resultLen := C.strlen(result)
|
||||
data = C.GoBytes(unsafe.Pointer(result), C.int(resultLen))
|
||||
|
||||
var resp Response
|
||||
|
||||
|
|
12267
client/type.go
12267
client/type.go
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
8909
data/td_api.json
8909
data/td_api.json
File diff suppressed because it is too large
Load diff
4474
data/td_api.tl
4474
data/td_api.tl
File diff suppressed because it is too large
Load diff
Loading…
Reference in a new issue