package main import ( "os" "time" "github.com/google/uuid" log "github.com/sirupsen/logrus" tb "gopkg.in/tucnak/telebot.v2" ) func main() { var ( // Universal markup builders. menu = &tb.ReplyMarkup{ResizeReplyKeyboard: true} // Reply buttons. btnHelp = menu.Text("ℹ Help") btnSettings = menu.Text("⚙ Settings") ) menu.Reply( menu.Row(btnHelp), menu.Row(btnSettings), ) b, err := tb.NewBot(tb.Settings{ // You can also set custom API URL. // If field is empty it equals to "https://api.telegram.org". // URL: "http://195.129.111.17:8012", Token: os.Getenv("TELEGRAM_BOT_TOKEN"), Poller: &tb.LongPoller{Timeout: 10 * time.Second}, // Synchronous: false, Verbose: false, // ParseMode: "", // Reporter: nil, // Client: nil, // Offline: false, }) if err != nil { log.Fatal(err) return } // Command: /start b.Handle("/start", func(m *tb.Message) { if !m.Private() { return } b.Send(m.Sender, "Hello!", menu) }) // On reply button pressed (message) b.Handle(&btnHelp, func(m *tb.Message) { log.Infof("btnHelp: %#v", m) var ( // Inline buttons. // // Pressing it will cause the client to // send the bot a callback. // // Make sure Unique stays unique as per button kind, // as it has to be for callback routing to work. // selector = &tb.ReplyMarkup{} btnPrev = selector.Data("⬅", "prev", "data1", "data2") btnNext = selector.Data("➡", "next", "data1", "data2") ) selector.Inline( selector.Row(btnPrev, btnNext), ) // On inline button pressed (callback) b.Handle(&btnPrev, func(c *tb.Callback) { // Always respond! b.Respond(c, &tb.CallbackResponse{ Text: "callback response", ShowAlert: false, // URL: "", }) }) b.Send(m.Sender, "help button clicked", selector) }) b.Handle("/hello", func(m *tb.Message) { log.Infof("/hello %#v", m) // b.Send(m.Sender, "Hello World!") }) b.Handle(tb.OnText, func(m *tb.Message) { log.Infof("[onText] %#v", m) // all the text messages that weren't // captured by existing handlers }) b.Handle(tb.OnQuery, func(q *tb.Query) { log.Infof("[onQuery] %#v", q) // r := &tb.ReplyMarkup{} // r.URL("test", "https://media.tenor.com/images/f176705ae1bb3c457e19d8cd71718ac0/tenor.gif") urls := []string{ // "https://media.tenor.com/images/aae0cdf3c5a291cd7b96432180f6eee3/tenor.png", // "https://media.tenor.com/images/905c1a9b1f56ae3c458b1ef58fd46357/tenor.png", "https://media.tenor.com/images/2e69768f9537957ed3015a80ebc3f0f1/tenor.gif", "https://media.tenor.com/images/6fcd72b29127a55e5c35db86d06d665c/tenor.gif", "https://media.tenor.com/images/05dbf5bf3a3b88275bb045691541dc53/tenor.gif", "https://media.tenor.com/images/0e1a52cfe5616c1509090d6ec2312db0/tenor.gif", "https://media.tenor.com/images/1ca04a449b26e1f7d45682a79d2c8697/tenor.gif", "https://media.tenor.com/images/a2844b186fb71c376226b56c4ea7730a/tenor.gif", "https://media.tenor.com/images/ec636a1ebce1a3fc1c795b851c125b31/tenor.gif", "https://media.tenor.com/images/ae103819cb05a0cf7497900b77b87d80/tenor.gif", } results := make(tb.Results, len(urls)) // []tb.Result for i, url := range urls { // result := &tb.PhotoResult{ result := &tb.GifResult{ ResultBase: tb.ResultBase{ // Type: "photo", // Content: nil, // ReplyMarkup: nil, ID: uuid.New().String(), }, URL: url, // required for photos ThumbURL: url, } results[i] = result // needed to set a unique string ID for each result // results[i].SetResultID(strconv.Itoa(i)) } err := b.Answer(q, &tb.QueryResponse{ QueryID: q.ID, Results: results, // CacheTime: 60, // a minute IsPersonal: true, }) if err != nil { log.Println(err) } }) b.Start() }