Hey there, fellow Go enthusiast! Ready to dive into the world of Telegram bots? You're in for a treat. We'll be using the awesome tgbotapi
package to create a Telegram bot that'll make your friends wonder if you've secretly been hired by Silicon Valley. Let's get cracking!
Before we start, make sure you've got:
First things first, let's set up our Go module:
mkdir telegram-bot cd telegram-bot go mod init github.com/yourusername/telegram-bot
Now, let's bring in the star of the show:
go get -u github.com/go-telegram-bot-api/telegram-bot-api/v5
Time to write some Go! Create a main.go
file and let's get this party started:
package main import ( "log" tgbotapi "github.com/go-telegram-bot-api/telegram-bot-api/v5" ) func main() { bot, err := tgbotapi.NewBotAPI("YOUR_BOT_TOKEN") if err != nil { log.Panic(err) } bot.Debug = true log.Printf("Authorized on account %s", bot.Self.UserName) }
Replace YOUR_BOT_TOKEN
with your actual token. Easy peasy!
Now, let's make our bot actually do something:
func main() { // ... previous code ... u := tgbotapi.NewUpdate(0) u.Timeout = 60 updates := bot.GetUpdatesChan(u) for update := range updates { if update.Message == nil { continue } log.Printf("[%s] %s", update.Message.From.UserName, update.Message.Text) msg := tgbotapi.NewMessage(update.Message.Chat.ID, "You said: "+update.Message.Text) bot.Send(msg) } }
Sending messages is a breeze. We've already done it in the previous step, but let's get fancy:
// Send a text message msg := tgbotapi.NewMessage(chatID, "Hello, World!") bot.Send(msg) // Send a photo photo := tgbotapi.NewPhoto(chatID, tgbotapi.FilePath("path/to/image.jpg")) bot.Send(photo) // Send a document doc := tgbotapi.NewDocument(chatID, tgbotapi.FilePath("path/to/doc.pdf")) bot.Send(doc)
Let's add some commands to our bot:
if update.Message.IsCommand() { switch update.Message.Command() { case "start": msg := tgbotapi.NewMessage(update.Message.Chat.ID, "Welcome! I'm your new bot.") bot.Send(msg) case "help": msg := tgbotapi.NewMessage(update.Message.Chat.ID, "I can help you with many things!") bot.Send(msg) } }
Spice things up with some inline keyboards:
keyboard := tgbotapi.NewInlineKeyboardMarkup( tgbotapi.NewInlineKeyboardRow( tgbotapi.NewInlineKeyboardButtonData("Option 1", "opt1"), tgbotapi.NewInlineKeyboardButtonData("Option 2", "opt2"), ), ) msg := tgbotapi.NewMessage(chatID, "Choose an option:") msg.ReplyMarkup = keyboard bot.Send(msg) // Handle the callback if update.CallbackQuery != nil { // Respond to the callback callback := tgbotapi.NewCallback(update.CallbackQuery.ID, update.CallbackQuery.Data) bot.Request(callback) // Send a message msg := tgbotapi.NewMessage(update.CallbackQuery.Message.Chat.ID, "You chose "+update.CallbackQuery.Data) bot.Send(msg) }
Always be prepared:
if err := bot.Send(msg); err != nil { log.Printf("Error sending message: %v", err) } log.Printf("Received a message from %s", update.Message.From.UserName)
Time to bring our creation to life:
func main() { // ... all your awesome code ... log.Println("Start polling") updates := bot.GetUpdatesChan(u) for update := range updates { // Handle updates } }
Run it with go run main.go
and watch your bot spring into action!
And there you have it! You've just created a Telegram bot using Go. Pretty cool, right? This is just the tip of the iceberg - there's so much more you can do. Why not try adding some natural language processing or integrating with other APIs?
Want to dive deeper? Check out these resources:
Now go forth and create some amazing bots! The Telegram world is your oyster. Happy coding!