Files
bunny-bot/internal/moon/telegram.go
2025-05-09 18:14:45 +03:00

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))
}