На этом этапе мы запускаем самый простой рабочий бот: он читает токен из переменных окружения, стартует long polling и отвечает на базовые команды. Это фундамент, на котором мы будем наращивать архитектуру: каждый следующий этап добавляет функциональность, не ломая базовое поведение.
— способ получения обновлений от Telegram: бот открывает HTTP-запрос getUpdates с таймаутом; как только появляется апдейт, сервер отвечает. Бот обрабатывает событие и запрашивает следующую порцию с offset, чтобы не читать одно и то же дважды. Для локальной разработки это проще webhook: не нужен публичный URL и HTTPS.
pref := telebot.Settings{ Token: token, Poller: &telebot.LongPoller{Timeout: 10 * time.Second}, } bot, _ := telebot.NewBot(pref) bot.Handle("/ping", func(c telebot.Context) error { return c.Send("pong") }) bot.Start()
💡 Gotcha: Не храните токен в коде. Используйте
os.LookupEnv— она возвращает второе значениеbool, позволяющее отличить «переменная пустая» от «переменная не задана».
| Пакет | Назначение | Ключевые функции |
|---|---|---|
gopkg.in/telebot.v4 | Telegram Bot API | NewBot, Handle, Start |
os | Переменные окружения | LookupEnv |
Запустить минимального бота, отвечающего на базовые команды.
Что необходимо сделать:
Функция:
func LoadToken() (string, error)
Логика: прочитать TELEGRAM_BOT_TOKEN из переменных окружения через os.LookupEnv; если переменная не задана — вернуть ошибку.
В main: загрузить токен, создать бота через telebot.NewBot с LongPoller, зарегистрировать обработчики /start (приветствие) и /ping (ответ pong), запустить polling.
$ export TELEGRAM_BOT_TOKEN=123:ABC $ ./bot INFO bot started, polling updates # В Telegram: /start -> "Привет! Я готов. Используй /ping для проверки." /ping -> "pong"
При отсутствии токена:
$ ./bot ERROR TELEGRAM_BOT_TOKEN is not set exit status 1
LoadToken() (string, error) использует os.LookupEnv для чтения TELEGRAM_BOT_TOKENtelebot.NewBot с telebot.Settings и telebot.LongPoller/start и /ping зарегистрированы через bot.Handle