136 lines
3.2 KiB
Go
136 lines
3.2 KiB
Go
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))
|
|
}
|