Add some example code
This commit is contained in:
parent
82bdbff466
commit
7196ad9adc
15
README.md
15
README.md
|
@ -1 +1,14 @@
|
||||||
## Fork for [modded TDLib](https://github.com/c0re100/td)
|
## Forked library for [modded TDLib](https://github.com/c0re100/td)
|
||||||
|
|
||||||
|
When I'm refactoring my own bot from `Arman92/go-tdlib` to `zelenin/go-tdlib `
|
||||||
|
|
||||||
|
I realized that zelenin's library doesn't meet my need😕
|
||||||
|
|
||||||
|
So I fork it and make some changes
|
||||||
|
|
||||||
|
1. Static build by default
|
||||||
|
2. Add update event filter
|
||||||
|
3. Add command parser
|
||||||
|
4. Receive correct message id to patch text/dice message response.
|
||||||
|
|
||||||
|
[Here](example) are a few example codes about how to use **c0re100/gotdlib**.
|
17
example/README.md
Normal file
17
example/README.md
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
## Example
|
||||||
|
|
||||||
|
### Bot
|
||||||
|
Login to bot account.
|
||||||
|
|
||||||
|
### Command
|
||||||
|
Handle user command and reply it.
|
||||||
|
|
||||||
|
### Event Filter
|
||||||
|
Since we can have many update type in updates.
|
||||||
|
So we need to filter update events, like UpdateNewMessage, UpdateMessageSendSucceeded, UpdateMessageSendFailed, etc.
|
||||||
|
|
||||||
|
### Media
|
||||||
|
Send photo or album to chat.
|
||||||
|
|
||||||
|
### Raw Update
|
||||||
|
Get update without event filter.
|
102
example/bot/Bot.go
Normal file
102
example/bot/Bot.go
Normal file
|
@ -0,0 +1,102 @@
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"log"
|
||||||
|
"os"
|
||||||
|
"os/signal"
|
||||||
|
"syscall"
|
||||||
|
|
||||||
|
tdlib "github.com/c0re100/gotdlib/client"
|
||||||
|
)
|
||||||
|
|
||||||
|
func GetTdParameters() *tdlib.TdlibParameters {
|
||||||
|
return &tdlib.TdlibParameters{
|
||||||
|
UseTestDc: false,
|
||||||
|
DatabaseDirectory: "./tdlib-db",
|
||||||
|
FilesDirectory: "./tdlib-files",
|
||||||
|
UseFileDatabase: true,
|
||||||
|
UseChatInfoDatabase: true,
|
||||||
|
UseMessageDatabase: true,
|
||||||
|
UseSecretChats: false,
|
||||||
|
ApiId: 132712,
|
||||||
|
ApiHash: "e82c07ad653399a37baca8d1e498e472",
|
||||||
|
SystemLanguageCode: "en",
|
||||||
|
DeviceModel: "HuskyNG",
|
||||||
|
SystemVersion: "3.0",
|
||||||
|
ApplicationVersion: "3.0",
|
||||||
|
EnableStorageOptimizer: true,
|
||||||
|
IgnoreFileNames: false,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
tdlib.SetLogLevel(0)
|
||||||
|
tdlib.SetFilePath("./errors.txt")
|
||||||
|
|
||||||
|
botToken := "your_bot_token"
|
||||||
|
authorizer := tdlib.BotAuthorizer(botToken)
|
||||||
|
|
||||||
|
authorizer.TdlibParameters <- GetTdParameters()
|
||||||
|
|
||||||
|
client, err := tdlib.NewClient(authorizer)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalf("NewClient error: %s", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Handle SIGINT
|
||||||
|
ch := make(chan os.Signal, 2)
|
||||||
|
signal.Notify(ch, os.Interrupt, syscall.SIGINT)
|
||||||
|
signal.Notify(ch, os.Interrupt, syscall.SIGKILL)
|
||||||
|
signal.Notify(ch, os.Interrupt, syscall.SIGTERM)
|
||||||
|
signal.Notify(ch, os.Interrupt, syscall.SIGQUIT)
|
||||||
|
signal.Notify(ch, os.Interrupt, syscall.SIGSEGV)
|
||||||
|
go func() {
|
||||||
|
<-ch
|
||||||
|
client.Destroy()
|
||||||
|
}()
|
||||||
|
|
||||||
|
me, err := client.GetMe()
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalf("GetMe error: %s", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
log.Printf("%s connected", me.Username)
|
||||||
|
|
||||||
|
listener := client.AddEventReceiver(&tdlib.UpdateNewMessage{}, 1000)
|
||||||
|
|
||||||
|
defer listener.Close()
|
||||||
|
for update := range listener.Updates {
|
||||||
|
updateMsg := update.(*tdlib.UpdateNewMessage)
|
||||||
|
chatId := updateMsg.Message.ChatId
|
||||||
|
msgId := updateMsg.Message.Id
|
||||||
|
|
||||||
|
var msgText string
|
||||||
|
var msgEnt []*tdlib.TextEntity
|
||||||
|
|
||||||
|
switch updateMsg.Message.Content.MessageContentType() {
|
||||||
|
case "messageText":
|
||||||
|
msgText = updateMsg.Message.Content.(*tdlib.MessageText).Text.Text
|
||||||
|
msgEnt = updateMsg.Message.Content.(*tdlib.MessageText).Text.Entities
|
||||||
|
|
||||||
|
cmd := tdlib.CheckCommand(msgText, msgEnt)
|
||||||
|
switch cmd {
|
||||||
|
case "/ping":
|
||||||
|
text, _ := tdlib.ParseTextEntities(&tdlib.ParseTextEntitiesRequest{
|
||||||
|
Text: "<b>pong!</b>",
|
||||||
|
ParseMode: &tdlib.TextParseModeHTML{},
|
||||||
|
})
|
||||||
|
m, err := client.SendMessage(&tdlib.SendMessageRequest{
|
||||||
|
ChatId: chatId,
|
||||||
|
ReplyToMessageId: msgId,
|
||||||
|
InputMessageContent: &tdlib.InputMessageText{
|
||||||
|
Text: text,
|
||||||
|
},
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
log.Printf("Message sent, ID: %d", m.Id)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
113
example/command/ReplyCommand.go
Normal file
113
example/command/ReplyCommand.go
Normal file
|
@ -0,0 +1,113 @@
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"log"
|
||||||
|
"os"
|
||||||
|
"os/signal"
|
||||||
|
"syscall"
|
||||||
|
|
||||||
|
tdlib "github.com/c0re100/gotdlib/client"
|
||||||
|
)
|
||||||
|
|
||||||
|
func GetSenderId(sender tdlib.MessageSender) int64 {
|
||||||
|
if sender.MessageSenderType() == "messageSenderUser" {
|
||||||
|
return sender.(*tdlib.MessageSenderUser).UserId
|
||||||
|
} else {
|
||||||
|
return sender.(*tdlib.MessageSenderChat).ChatId
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetTdParameters() *tdlib.TdlibParameters {
|
||||||
|
return &tdlib.TdlibParameters{
|
||||||
|
UseTestDc: false,
|
||||||
|
DatabaseDirectory: "./tdlib-db",
|
||||||
|
FilesDirectory: "./tdlib-files",
|
||||||
|
UseFileDatabase: true,
|
||||||
|
UseChatInfoDatabase: true,
|
||||||
|
UseMessageDatabase: true,
|
||||||
|
UseSecretChats: false,
|
||||||
|
ApiId: 132712,
|
||||||
|
ApiHash: "e82c07ad653399a37baca8d1e498e472",
|
||||||
|
SystemLanguageCode: "en",
|
||||||
|
DeviceModel: "HuskyNG",
|
||||||
|
SystemVersion: "3.0",
|
||||||
|
ApplicationVersion: "3.0",
|
||||||
|
EnableStorageOptimizer: true,
|
||||||
|
IgnoreFileNames: false,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
tdlib.SetLogLevel(0)
|
||||||
|
tdlib.SetFilePath("./errors.txt")
|
||||||
|
|
||||||
|
authorizer := tdlib.ClientAuthorizer()
|
||||||
|
go tdlib.CliInteractor(authorizer)
|
||||||
|
|
||||||
|
authorizer.TdlibParameters <- GetTdParameters()
|
||||||
|
|
||||||
|
client, err := tdlib.NewClient(authorizer)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalf("NewClient error: %s", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Handle SIGINT
|
||||||
|
ch := make(chan os.Signal, 2)
|
||||||
|
signal.Notify(ch, os.Interrupt, syscall.SIGINT)
|
||||||
|
signal.Notify(ch, os.Interrupt, syscall.SIGKILL)
|
||||||
|
signal.Notify(ch, os.Interrupt, syscall.SIGTERM)
|
||||||
|
signal.Notify(ch, os.Interrupt, syscall.SIGQUIT)
|
||||||
|
signal.Notify(ch, os.Interrupt, syscall.SIGSEGV)
|
||||||
|
go func() {
|
||||||
|
<-ch
|
||||||
|
client.Destroy()
|
||||||
|
}()
|
||||||
|
|
||||||
|
me, err := client.GetMe()
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalf("GetMe error: %s", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
log.Printf("%s connected", me.Username)
|
||||||
|
|
||||||
|
listener := client.AddEventReceiver(&tdlib.UpdateNewMessage{}, 1000)
|
||||||
|
|
||||||
|
defer listener.Close()
|
||||||
|
for update := range listener.Updates {
|
||||||
|
updateMsg := update.(*tdlib.UpdateNewMessage)
|
||||||
|
chatId := updateMsg.Message.ChatId
|
||||||
|
senderId := GetSenderId(updateMsg.Message.SenderId)
|
||||||
|
msgId := updateMsg.Message.Id
|
||||||
|
|
||||||
|
if senderId == me.Id {
|
||||||
|
var msgText string
|
||||||
|
var msgEnt []*tdlib.TextEntity
|
||||||
|
|
||||||
|
switch updateMsg.Message.Content.MessageContentType() {
|
||||||
|
case "messageText":
|
||||||
|
msgText = updateMsg.Message.Content.(*tdlib.MessageText).Text.Text
|
||||||
|
msgEnt = updateMsg.Message.Content.(*tdlib.MessageText).Text.Entities
|
||||||
|
}
|
||||||
|
|
||||||
|
cmd := tdlib.CheckCommand(msgText, msgEnt)
|
||||||
|
switch cmd {
|
||||||
|
case "/test":
|
||||||
|
text, _ := tdlib.ParseTextEntities(&tdlib.ParseTextEntitiesRequest{
|
||||||
|
Text: "<b>Hi test user</b>",
|
||||||
|
ParseMode: &tdlib.TextParseModeHTML{},
|
||||||
|
})
|
||||||
|
m, err := client.SendMessage(&tdlib.SendMessageRequest{
|
||||||
|
ChatId: chatId,
|
||||||
|
ReplyToMessageId: msgId,
|
||||||
|
InputMessageContent: &tdlib.InputMessageText{
|
||||||
|
Text: text,
|
||||||
|
},
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
log.Printf("Message sent, ID: %d", m.Id)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
84
example/event/CustomEventFilter.go
Normal file
84
example/event/CustomEventFilter.go
Normal file
|
@ -0,0 +1,84 @@
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"log"
|
||||||
|
"os"
|
||||||
|
"os/signal"
|
||||||
|
"syscall"
|
||||||
|
|
||||||
|
tdlib "github.com/c0re100/gotdlib/client"
|
||||||
|
)
|
||||||
|
|
||||||
|
func GetSenderId(sender tdlib.MessageSender) int64 {
|
||||||
|
if sender.MessageSenderType() == "messageSenderUser" {
|
||||||
|
return sender.(*tdlib.MessageSenderUser).UserId
|
||||||
|
} else {
|
||||||
|
return sender.(*tdlib.MessageSenderChat).ChatId
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetTdParameters() *tdlib.TdlibParameters {
|
||||||
|
return &tdlib.TdlibParameters{
|
||||||
|
UseTestDc: false,
|
||||||
|
DatabaseDirectory: "./tdlib-db",
|
||||||
|
FilesDirectory: "./tdlib-files",
|
||||||
|
UseFileDatabase: true,
|
||||||
|
UseChatInfoDatabase: true,
|
||||||
|
UseMessageDatabase: true,
|
||||||
|
UseSecretChats: false,
|
||||||
|
ApiId: 132712,
|
||||||
|
ApiHash: "e82c07ad653399a37baca8d1e498e472",
|
||||||
|
SystemLanguageCode: "en",
|
||||||
|
DeviceModel: "HuskyNG",
|
||||||
|
SystemVersion: "3.0",
|
||||||
|
ApplicationVersion: "3.0",
|
||||||
|
EnableStorageOptimizer: true,
|
||||||
|
IgnoreFileNames: false,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
tdlib.SetLogLevel(0)
|
||||||
|
tdlib.SetFilePath("./errors.txt")
|
||||||
|
|
||||||
|
authorizer := tdlib.ClientAuthorizer()
|
||||||
|
go tdlib.CliInteractor(authorizer)
|
||||||
|
|
||||||
|
authorizer.TdlibParameters <- GetTdParameters()
|
||||||
|
|
||||||
|
client, err := tdlib.NewClient(authorizer)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalf("NewClient error: %s", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Handle SIGINT
|
||||||
|
ch := make(chan os.Signal, 2)
|
||||||
|
signal.Notify(ch, os.Interrupt, syscall.SIGINT)
|
||||||
|
signal.Notify(ch, os.Interrupt, syscall.SIGKILL)
|
||||||
|
signal.Notify(ch, os.Interrupt, syscall.SIGTERM)
|
||||||
|
signal.Notify(ch, os.Interrupt, syscall.SIGQUIT)
|
||||||
|
signal.Notify(ch, os.Interrupt, syscall.SIGSEGV)
|
||||||
|
go func() {
|
||||||
|
<-ch
|
||||||
|
client.Destroy()
|
||||||
|
}()
|
||||||
|
|
||||||
|
me, err := client.GetMe()
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalf("GetMe error: %s", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
log.Printf("%s connected", me.Username)
|
||||||
|
|
||||||
|
listener := client.AddEventReceiver(&tdlib.UpdateNewMessage{}, 1000)
|
||||||
|
|
||||||
|
defer listener.Close()
|
||||||
|
for update := range listener.Updates {
|
||||||
|
updateMsg := update.(*tdlib.UpdateNewMessage)
|
||||||
|
chatId := updateMsg.Message.ChatId
|
||||||
|
senderId := GetSenderId(updateMsg.Message.SenderId)
|
||||||
|
msgId := updateMsg.Message.Id
|
||||||
|
|
||||||
|
log.Printf("[Received new message from chat %d]: Sender ID: %d, Message ID: %d", chatId, senderId, msgId)
|
||||||
|
}
|
||||||
|
}
|
142
example/media/Photo_or_Album.go
Normal file
142
example/media/Photo_or_Album.go
Normal file
|
@ -0,0 +1,142 @@
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"log"
|
||||||
|
"os"
|
||||||
|
"os/signal"
|
||||||
|
"syscall"
|
||||||
|
|
||||||
|
tdlib "github.com/c0re100/gotdlib/client"
|
||||||
|
)
|
||||||
|
|
||||||
|
func GetSenderId(sender tdlib.MessageSender) int64 {
|
||||||
|
if sender.MessageSenderType() == "messageSenderUser" {
|
||||||
|
return sender.(*tdlib.MessageSenderUser).UserId
|
||||||
|
} else {
|
||||||
|
return sender.(*tdlib.MessageSenderChat).ChatId
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetTdParameters() *tdlib.TdlibParameters {
|
||||||
|
return &tdlib.TdlibParameters{
|
||||||
|
UseTestDc: false,
|
||||||
|
DatabaseDirectory: "./tdlib-db",
|
||||||
|
FilesDirectory: "./tdlib-files",
|
||||||
|
UseFileDatabase: true,
|
||||||
|
UseChatInfoDatabase: true,
|
||||||
|
UseMessageDatabase: true,
|
||||||
|
UseSecretChats: false,
|
||||||
|
ApiId: 132712,
|
||||||
|
ApiHash: "e82c07ad653399a37baca8d1e498e472",
|
||||||
|
SystemLanguageCode: "en",
|
||||||
|
DeviceModel: "HuskyNG",
|
||||||
|
SystemVersion: "3.0",
|
||||||
|
ApplicationVersion: "3.0",
|
||||||
|
EnableStorageOptimizer: true,
|
||||||
|
IgnoreFileNames: false,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
tdlib.SetLogLevel(0)
|
||||||
|
tdlib.SetFilePath("./errors.txt")
|
||||||
|
|
||||||
|
authorizer := tdlib.ClientAuthorizer()
|
||||||
|
go tdlib.CliInteractor(authorizer)
|
||||||
|
|
||||||
|
authorizer.TdlibParameters <- GetTdParameters()
|
||||||
|
|
||||||
|
client, err := tdlib.NewClient(authorizer)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalf("NewClient error: %s", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Handle SIGINT
|
||||||
|
ch := make(chan os.Signal, 2)
|
||||||
|
signal.Notify(ch, os.Interrupt, syscall.SIGINT)
|
||||||
|
signal.Notify(ch, os.Interrupt, syscall.SIGKILL)
|
||||||
|
signal.Notify(ch, os.Interrupt, syscall.SIGTERM)
|
||||||
|
signal.Notify(ch, os.Interrupt, syscall.SIGQUIT)
|
||||||
|
signal.Notify(ch, os.Interrupt, syscall.SIGSEGV)
|
||||||
|
go func() {
|
||||||
|
<-ch
|
||||||
|
client.Destroy()
|
||||||
|
}()
|
||||||
|
|
||||||
|
me, err := client.GetMe()
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalf("GetMe error: %s", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
log.Printf("%s connected", me.Username)
|
||||||
|
|
||||||
|
listener := client.AddEventReceiver(&tdlib.UpdateNewMessage{}, 1000)
|
||||||
|
|
||||||
|
defer listener.Close()
|
||||||
|
for update := range listener.Updates {
|
||||||
|
updateMsg := update.(*tdlib.UpdateNewMessage)
|
||||||
|
chatId := updateMsg.Message.ChatId
|
||||||
|
senderId := GetSenderId(updateMsg.Message.SenderId)
|
||||||
|
msgId := updateMsg.Message.Id
|
||||||
|
|
||||||
|
if senderId == me.Id {
|
||||||
|
var msgText string
|
||||||
|
var msgEnt []*tdlib.TextEntity
|
||||||
|
|
||||||
|
switch updateMsg.Message.Content.MessageContentType() {
|
||||||
|
case "messageText":
|
||||||
|
msgText = updateMsg.Message.Content.(*tdlib.MessageText).Text.Text
|
||||||
|
msgEnt = updateMsg.Message.Content.(*tdlib.MessageText).Text.Entities
|
||||||
|
}
|
||||||
|
|
||||||
|
cmd := tdlib.CheckCommand(msgText, msgEnt)
|
||||||
|
switch cmd {
|
||||||
|
case "/photo":
|
||||||
|
text, _ := tdlib.ParseTextEntities(&tdlib.ParseTextEntitiesRequest{
|
||||||
|
Text: "<b>test photo</b>",
|
||||||
|
ParseMode: &tdlib.TextParseModeHTML{},
|
||||||
|
})
|
||||||
|
m, err := client.SendMessage(&tdlib.SendMessageRequest{
|
||||||
|
ChatId: chatId,
|
||||||
|
ReplyToMessageId: msgId,
|
||||||
|
InputMessageContent: &tdlib.InputMessagePhoto{
|
||||||
|
Photo: &tdlib.InputFileLocal{
|
||||||
|
Path: "./myht9-1486821485193084928.jpg",
|
||||||
|
},
|
||||||
|
Caption: text,
|
||||||
|
},
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
log.Printf("Photo sent, ID: %d", m.Id)
|
||||||
|
case "/album":
|
||||||
|
text, _ := tdlib.ParseTextEntities(&tdlib.ParseTextEntitiesRequest{
|
||||||
|
Text: "<b>test album</b>",
|
||||||
|
ParseMode: &tdlib.TextParseModeHTML{},
|
||||||
|
})
|
||||||
|
m, err := client.SendMessageAlbum(&tdlib.SendMessageAlbumRequest{
|
||||||
|
ChatId: chatId,
|
||||||
|
ReplyToMessageId: msgId,
|
||||||
|
InputMessageContents: []tdlib.InputMessageContent{
|
||||||
|
&tdlib.InputMessagePhoto{
|
||||||
|
Photo: &tdlib.InputFileLocal{
|
||||||
|
Path: "./myht9-1486821485193084928.jpg",
|
||||||
|
},
|
||||||
|
Caption: text,
|
||||||
|
},
|
||||||
|
&tdlib.InputMessagePhoto{
|
||||||
|
Photo: &tdlib.InputFileLocal{
|
||||||
|
Path: "./hisagi_02-1486983199280738309.jpg",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
log.Printf("Media album sent, Album ID: %v", m.Messages[0].MediaAlbumId)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
BIN
example/media/hisagi_02-1486983199280738309.jpg
Normal file
BIN
example/media/hisagi_02-1486983199280738309.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 153 KiB |
BIN
example/media/myht9-1486821485193084928.jpg
Normal file
BIN
example/media/myht9-1486821485193084928.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 116 KiB |
81
example/raw_update/raw.go
Normal file
81
example/raw_update/raw.go
Normal file
|
@ -0,0 +1,81 @@
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"log"
|
||||||
|
"os"
|
||||||
|
"os/signal"
|
||||||
|
"syscall"
|
||||||
|
|
||||||
|
tdlib "github.com/c0re100/gotdlib/client"
|
||||||
|
)
|
||||||
|
|
||||||
|
func GetSenderId(sender tdlib.MessageSender) int64 {
|
||||||
|
if sender.MessageSenderType() == "messageSenderUser" {
|
||||||
|
return sender.(*tdlib.MessageSenderUser).UserId
|
||||||
|
} else {
|
||||||
|
return sender.(*tdlib.MessageSenderChat).ChatId
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetTdParameters() *tdlib.TdlibParameters {
|
||||||
|
return &tdlib.TdlibParameters{
|
||||||
|
UseTestDc: false,
|
||||||
|
DatabaseDirectory: "./tdlib-db",
|
||||||
|
FilesDirectory: "./tdlib-files",
|
||||||
|
UseFileDatabase: true,
|
||||||
|
UseChatInfoDatabase: true,
|
||||||
|
UseMessageDatabase: true,
|
||||||
|
UseSecretChats: false,
|
||||||
|
ApiId: 132712,
|
||||||
|
ApiHash: "e82c07ad653399a37baca8d1e498e472",
|
||||||
|
SystemLanguageCode: "en",
|
||||||
|
DeviceModel: "HuskyNG",
|
||||||
|
SystemVersion: "3.0",
|
||||||
|
ApplicationVersion: "3.0",
|
||||||
|
EnableStorageOptimizer: true,
|
||||||
|
IgnoreFileNames: false,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
tdlib.SetLogLevel(0)
|
||||||
|
tdlib.SetFilePath("./errors.txt")
|
||||||
|
|
||||||
|
authorizer := tdlib.ClientAuthorizer()
|
||||||
|
go tdlib.CliInteractor(authorizer)
|
||||||
|
|
||||||
|
authorizer.TdlibParameters <- GetTdParameters()
|
||||||
|
|
||||||
|
client, err := tdlib.NewClient(authorizer)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalf("NewClient error: %s", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Handle SIGINT
|
||||||
|
ch := make(chan os.Signal, 2)
|
||||||
|
signal.Notify(ch, os.Interrupt, syscall.SIGINT)
|
||||||
|
signal.Notify(ch, os.Interrupt, syscall.SIGKILL)
|
||||||
|
signal.Notify(ch, os.Interrupt, syscall.SIGTERM)
|
||||||
|
signal.Notify(ch, os.Interrupt, syscall.SIGQUIT)
|
||||||
|
signal.Notify(ch, os.Interrupt, syscall.SIGSEGV)
|
||||||
|
go func() {
|
||||||
|
<-ch
|
||||||
|
client.Destroy()
|
||||||
|
}()
|
||||||
|
|
||||||
|
me, err := client.GetMe()
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalf("GetMe error: %s", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
log.Printf("%s connected", me.Username)
|
||||||
|
|
||||||
|
listener := client.GetListener()
|
||||||
|
|
||||||
|
defer listener.Close()
|
||||||
|
for update := range listener.RawUpdates {
|
||||||
|
if update.GetClass() == tdlib.ClassUpdate {
|
||||||
|
log.Printf("%#v", update)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue