2019-11-03 22:15:43 +00:00
|
|
|
package telegram
|
|
|
|
|
|
|
|
import (
|
|
|
|
"fmt"
|
|
|
|
"github.com/pkg/errors"
|
|
|
|
"path/filepath"
|
|
|
|
"strconv"
|
|
|
|
|
|
|
|
"dev.narayana.im/narayana/telegabber/config"
|
|
|
|
|
|
|
|
"github.com/zelenin/go-tdlib/client"
|
|
|
|
)
|
|
|
|
|
|
|
|
var logConstants = map[string]int32{
|
2019-11-05 00:09:07 +00:00
|
|
|
":fatal": 0,
|
|
|
|
":error": 1,
|
|
|
|
":warn": 2,
|
|
|
|
":info": 3,
|
|
|
|
":debug": 4,
|
|
|
|
":verbose": 5,
|
|
|
|
":all": 1023,
|
2019-11-03 22:15:43 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
func stringToLogConstant(c string) int32 {
|
|
|
|
level, ok := logConstants[c]
|
|
|
|
if !ok {
|
|
|
|
level = 0
|
|
|
|
}
|
|
|
|
|
|
|
|
return level
|
|
|
|
}
|
|
|
|
|
2019-11-05 00:25:15 +00:00
|
|
|
// Client stores the metadata for lazily invoked TDlib instance
|
|
|
|
type Client struct {
|
2019-11-03 22:15:43 +00:00
|
|
|
client *client.Client
|
|
|
|
jid string
|
|
|
|
parameters *client.TdlibParameters
|
|
|
|
online bool
|
|
|
|
logVerbosity client.Option
|
|
|
|
}
|
|
|
|
|
|
|
|
// NewClient instantiates a Telegram App
|
2019-11-05 00:25:15 +00:00
|
|
|
func NewClient(conf config.TelegramConfig, jid string) (Client, error) {
|
2019-11-03 22:15:43 +00:00
|
|
|
logVerbosity := client.WithLogVerbosity(&client.SetLogVerbosityLevelRequest{
|
|
|
|
NewVerbosityLevel: stringToLogConstant(conf.Loglevel),
|
|
|
|
})
|
|
|
|
|
2019-11-05 00:25:15 +00:00
|
|
|
apiID, err := strconv.Atoi(conf.Tdlib.Client.APIID)
|
2019-11-03 22:15:43 +00:00
|
|
|
if err != nil {
|
2019-11-05 00:25:15 +00:00
|
|
|
return Client{}, errors.Wrap(err, "Wrong api_id")
|
2019-11-03 22:15:43 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
parameters := client.TdlibParameters{
|
|
|
|
UseTestDc: false,
|
|
|
|
|
|
|
|
DatabaseDirectory: filepath.Join("./sessions/", jid),
|
|
|
|
FilesDirectory: filepath.Join("./sessions/", jid, "/files/"),
|
|
|
|
|
|
|
|
UseFileDatabase: true,
|
|
|
|
UseChatInfoDatabase: conf.Tdlib.Client.UseChatInfoDatabase,
|
|
|
|
UseMessageDatabase: true,
|
|
|
|
UseSecretChats: conf.Tdlib.Client.UseSecretChats,
|
|
|
|
|
2019-11-05 00:25:15 +00:00
|
|
|
ApiId: int32(apiID),
|
2019-11-03 22:15:43 +00:00
|
|
|
ApiHash: conf.Tdlib.Client.APIHash,
|
|
|
|
|
|
|
|
SystemLanguageCode: "en",
|
|
|
|
DeviceModel: conf.Tdlib.Client.DeviceModel,
|
|
|
|
SystemVersion: "1.0.0",
|
|
|
|
ApplicationVersion: conf.Tdlib.Client.ApplicationVersion,
|
|
|
|
|
|
|
|
EnableStorageOptimizer: true,
|
|
|
|
IgnoreFileNames: false,
|
|
|
|
}
|
|
|
|
|
2019-11-05 00:25:15 +00:00
|
|
|
return Client{
|
2019-11-03 22:15:43 +00:00
|
|
|
parameters: ¶meters,
|
|
|
|
jid: jid,
|
|
|
|
logVerbosity: logVerbosity,
|
|
|
|
}, nil
|
|
|
|
}
|
|
|
|
|
|
|
|
func updateHandler(tdlibClient *client.Client) {
|
|
|
|
listener := tdlibClient.GetListener()
|
|
|
|
defer listener.Close()
|
|
|
|
|
|
|
|
for update := range listener.Updates {
|
|
|
|
if update.GetClass() == client.ClassUpdate {
|
|
|
|
fmt.Printf("%#v", update)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|