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