C-like:
package main
import (
"log"
tgbotapi "github.com/go-telegram-bot-api/telegram-bot-api/v5"
)
var userStates = make(map[int64]string)
func main() {
bot, err := tgbotapi.NewBotAPI("MyAwesomeBotToken")
if err != nil {
log.Panic(err)
}
bot.Debug = false
log.Printf("Авторизовался как %s", bot.Self.UserName)
u := tgbotapi.NewUpdate(0)
u.Timeout = 60
updates := bot.GetUpdatesChan(u)
for update := range updates {
if update.Message != nil { // Если получено сообщение
if update.Message.IsCommand() { // Если сообщение - команда
switch update.Message.Command() {
case "start":
sendMainMenu(update.Message.Chat.ID, bot)
userStates[update.Message.Chat.ID] = ""
default:
msg := tgbotapi.NewMessage(update.Message.Chat.ID, "Неизвестная команда. Используйте /start для начала.")
bot.Send(msg)
}
} else {
// Проверяем состояние пользователя
state, exists := userStates[update.Message.Chat.ID]
if exists && state == "awaiting_name" {
userName := update.Message.Text
msg := tgbotapi.NewMessage(update.Message.Chat.ID, "Привет, "+userName+"!")
bot.Send(msg)
// Сбрасываем состояние
userStates[update.Message.Chat.ID] = ""
} else {
msg := tgbotapi.NewMessage(update.Message.Chat.ID, "Пожалуйста, используйте меню или команды.")
bot.Send(msg)
}
}
} else if update.CallbackQuery != nil { // Если получен callback из инлайн-кнопки
callback := update.CallbackQuery
log.Printf("Нажата кнопка: %s", callback.Data)
var responseText string
switch callback.Data {
case "option1":
responseText = "Вы выбрали Опцию 1. Пожалуйста, введите ваше имя."
userStates[callback.Message.Chat.ID] = "awaiting_name"
case "option2":
responseText = "Вы выбрали Опцию 2"
case "option3":
responseText = "Вы выбрали Опцию 3"
default:
responseText = "Неизвестная опция."
}
// Отправляем уведомление пользователю
msg := tgbotapi.NewMessage(callback.Message.Chat.ID, responseText)
bot.Send(msg)
// Удостоверяемся, что уведомление обработано
callbackConfig := tgbotapi.NewCallback(callback.ID, "")
bot.Request(callbackConfig)
}
}
}
func sendMainMenu(chatID int64, bot *tgbotapi.BotAPI) {
// Создаём кнопки меню
keyboard := tgbotapi.NewInlineKeyboardMarkup(
tgbotapi.NewInlineKeyboardRow(
tgbotapi.NewInlineKeyboardButtonData("Опция 1", "option1"),
tgbotapi.NewInlineKeyboardButtonData("Опция 2", "option2"),
),
tgbotapi.NewInlineKeyboardRow(
tgbotapi.NewInlineKeyboardButtonData("Опция 3", "option3"),
),
)
msg := tgbotapi.NewMessage(chatID, "Выберите опцию:")
msg.ReplyMarkup = keyboard
bot.Send(msg)
}