go-tdlib/example/command/ReplyCommand.go

132 lines
3.3 KiB
Go
Raw Normal View History

2022-01-29 19:51:49 +00:00
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
}
}
2022-09-18 01:49:37 +00:00
func GetTdParameters() *tdlib.SetTdlibParametersRequest {
return &tdlib.SetTdlibParametersRequest{
2022-01-29 19:51:49 +00:00
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.Close()
2022-01-29 19:51:49 +00:00
}()
me, err := client.GetMe()
if err != nil {
log.Fatalf("GetMe error: %s", err)
}
2023-03-11 11:13:40 +00:00
log.Printf("%v connected", me.Usernames)
2022-01-29 19:51:49 +00:00
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{
2023-07-24 18:35:55 +00:00
ChatId: chatId,
2023-11-06 21:47:05 +00:00
ReplyTo: &tdlib.InputMessageReplyToMessage{
2023-07-24 18:35:55 +00:00
ChatId: chatId,
MessageId: msgId,
},
2022-01-29 19:51:49 +00:00
InputMessageContent: &tdlib.InputMessageText{
Text: text,
},
})
if err != nil {
continue
}
log.Printf("Message sent, ID: %d", m.Id)
2022-02-06 03:25:46 +00:00
case "/repeat":
m, err := client.SendMessage(&tdlib.SendMessageRequest{
2023-07-24 18:35:55 +00:00
ChatId: chatId,
2023-11-06 21:47:05 +00:00
ReplyTo: &tdlib.InputMessageReplyToMessage{
2023-07-24 18:35:55 +00:00
ChatId: chatId,
MessageId: msgId,
},
2022-02-06 03:25:46 +00:00
InputMessageContent: &tdlib.InputMessageText{
Text: &tdlib.FormattedText{Text: tdlib.CommandArgument(msgText)},
},
})
if err != nil {
continue
}
log.Printf("Message sent, ID: %d", m.Id)
2022-01-29 19:51:49 +00:00
}
}
}
}