[WIP] Initial commit
This commit is contained in:
135
internal/moon/telegram.go
Normal file
135
internal/moon/telegram.go
Normal file
@@ -0,0 +1,135 @@
|
||||
package moon
|
||||
|
||||
import (
|
||||
"github.com/NicoNex/echotron/v3"
|
||||
"github.com/davecgh/go-spew/spew"
|
||||
)
|
||||
|
||||
// Telegram основная горутинка, реализующая бота.
|
||||
func Telegram(cfg MyConfig) {
|
||||
Tg = echotron.NewAPI(cfg.Token)
|
||||
|
||||
for u := range echotron.PollingUpdates(cfg.Token) {
|
||||
telegramMsgParser(u)
|
||||
}
|
||||
}
|
||||
|
||||
// telegramMsgParser parses events generated by echotron.
|
||||
func telegramMsgParser(msg *echotron.Update) {
|
||||
// We not interested in text message events, yet at least.
|
||||
if msg.Message.Text != "" {
|
||||
if msg.Message.ReplyToMessage == nil {
|
||||
Log.Infof(
|
||||
"User %s %s (username = %s, id = %d) in %s %s (%d) says: %s",
|
||||
msg.Message.From.FirstName,
|
||||
msg.Message.From.LastName,
|
||||
msg.Message.From.Username,
|
||||
msg.Message.From.ID,
|
||||
msg.Message.Chat.Type,
|
||||
msg.Message.Chat.Title,
|
||||
msg.Message.Chat.ID,
|
||||
msg.Message.Text,
|
||||
)
|
||||
} else {
|
||||
Log.Infof(
|
||||
"User %s %s (username = %s, id = %d) in %s %s (%d) replies to message %d by %s %s (username = %s, id = %d): %s",
|
||||
msg.Message.From.FirstName,
|
||||
msg.Message.From.LastName,
|
||||
msg.Message.From.Username,
|
||||
msg.Message.From.ID,
|
||||
msg.Message.Chat.Type,
|
||||
msg.Message.Chat.Title,
|
||||
msg.Message.Chat.ID,
|
||||
msg.Message.ReplyToMessage.ID,
|
||||
msg.Message.ReplyToMessage.From.FirstName,
|
||||
msg.Message.ReplyToMessage.From.LastName,
|
||||
msg.Message.ReplyToMessage.From.Username,
|
||||
msg.Message.ReplyToMessage.From.ID,
|
||||
msg.Message.Text,
|
||||
)
|
||||
}
|
||||
|
||||
Log.Info(spew.Sdump(msg.Message))
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
/*
|
||||
Итак, что нам интересно?
|
||||
1. Приход chat members
|
||||
2. Обновление chat members
|
||||
*/
|
||||
|
||||
// обновление
|
||||
if msg.ChatMember != nil {
|
||||
if msg.ChatMember.NewChatMember.User != nil {
|
||||
Log.Infof(
|
||||
"User %s %s (username = %s, id = %d) joined %s %s (%d)",
|
||||
msg.ChatMember.NewChatMember.User.FirstName,
|
||||
msg.ChatMember.NewChatMember.User.LastName,
|
||||
msg.ChatMember.NewChatMember.User.Username,
|
||||
msg.ChatMember.NewChatMember.User.ID,
|
||||
msg.ChatMember.Chat.Type,
|
||||
msg.ChatMember.Chat.Title,
|
||||
msg.ChatMember.Chat.ID,
|
||||
)
|
||||
} else {
|
||||
Log.Info(spew.Sdump(msg))
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
// новые люди (по документации)
|
||||
if msg.Message.NewChatMembers != nil {
|
||||
for _, user := range msg.Message.NewChatMembers {
|
||||
Log.Infof(
|
||||
"User %s %s (username = %s, id = %d) joined %s %s (%d)",
|
||||
user.FirstName,
|
||||
user.LastName,
|
||||
user.Username,
|
||||
user.ID,
|
||||
msg.Message.Chat.Type,
|
||||
msg.Message.Chat.Title,
|
||||
msg.Message.Chat.ID,
|
||||
)
|
||||
|
||||
resp, err := Tg.SendMessage(
|
||||
"Say forty two in numbers",
|
||||
msg.ChatID(),
|
||||
&echotron.MessageOptions{
|
||||
DisableNotification: true,
|
||||
ReplyParameters: echotron.ReplyParameters{
|
||||
AllowSendingWithoutReply: false,
|
||||
},
|
||||
},
|
||||
)
|
||||
|
||||
if err != nil {
|
||||
Log.Errorf("Unable to send greet for new user: %s", err)
|
||||
}
|
||||
|
||||
Log.Infof(spew.Sdump(resp))
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
// Chat member leaves.
|
||||
if msg.Message.LeftChatMember != nil {
|
||||
Log.Infof(
|
||||
"User %s %s (username = %s, id = %d) left %s %s (%d)",
|
||||
msg.Message.LeftChatMember.FirstName,
|
||||
msg.Message.LeftChatMember.LastName,
|
||||
msg.Message.LeftChatMember.Username,
|
||||
msg.Message.LeftChatMember.ID,
|
||||
msg.Message.Chat.Type,
|
||||
msg.Message.Chat.Title,
|
||||
msg.Message.Chat.ID,
|
||||
)
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
Log.Info(spew.Sdump(msg))
|
||||
}
|
||||
Reference in New Issue
Block a user