// Fantasy World Zookeeper Helper Bot // Copyright (c) 2018-2019 Vladimir "fat0troll" Hodakov package announcesv1 import ( tdlib "github.com/Arman92/go-tdlib" "strings" ) func fwMessagesFilter(msg *tdlib.TdMessage) bool { updateMsg := (*msg).(*tdlib.UpdateNewMessage) // We need only messages, created by @FWorldBot return updateMsg.Message.ViaBotUserID == 6.74929718e+08 } // ZookeeperReceiver adds announcement functionality to bot func ZookeeperReceiver(client *tdlib.Client) { // Where to send announces announcerID := int64(665790161) log.Debug().Msg("Adding receiver for @FWorldBot messages...") // Here we can add a receiver to retreive any message type we want // We like to get UpdateNewMessage events and with a specific FilterFunc receiver := client.AddEventReceiver(&tdlib.UpdateNewMessage{}, fwMessagesFilter, 5) log.Debug().Msg("Receiver added") go func() { for newMsg := range receiver.Chan { updateMsg := (newMsg).(*tdlib.UpdateNewMessage) // Check if message text contains needed battle data msgText := updateMsg.Message.Content.(*tdlib.MessageText) if strings.HasPrefix(msgText.Text.Text, "Я встретил") { log.Debug().Msgf("%s", msgText.Text.Text) battleType := "" battleTag := "" if strings.Contains(msgText.Text.Text, "Огров") { battleType = "Огры!" } if strings.Contains(msgText.Text.Text, "Буйволов") { battleType = "Буйволы!" } if strings.Contains(msgText.Text.Text, "Кабанов") { battleType = "Кабаны!" } switch updateMsg.Message.ReplyMarkup.(type) { case *tdlib.ReplyMarkupInlineKeyboard: keyboard := updateMsg.Message.ReplyMarkup.(*tdlib.ReplyMarkupInlineKeyboard) if len(keyboard.Rows) > 0 { if len(keyboard.Rows[0]) > 0 { button := keyboard.Rows[0][0] switch button.Type.(type) { case *tdlib.InlineKeyboardButtonTypeSwitchInline: buttonQuery := button.Type.(*tdlib.InlineKeyboardButtonTypeSwitchInline) battleTag = string(buttonQuery.Query) default: log.Error().Msg("Invalid button type") } } } default: log.Error().Msg("Invalid keyboard type") } log.Debug().Msgf("Battle type: %s", battleType) log.Debug().Msgf("Battle tag: %s", battleTag) replyText := battleType + " " + battleTag reply := tdlib.NewInputMessageText(tdlib.NewFormattedText(replyText, nil), true, true) _, err := client.SendMessage(announcerID, 0, false, true, nil, reply) if err != nil { log.Error().Err(err) } } } }() }