Эволюция JokeBot: от XMPP к Telegram и Go-вайбу
Ранее я запустил бота, который присылал шутки из API-Ninjas и просил LLM объяснить их смысл. Всё работало через XMPP, но аудитория там небольшая. Чтобы охватить больше людей, я добавил отправку в Telegram-канал «Шутка дня и интертрепация» (надеюсь, игра слов понятна 😉).
Вместо того чтобы дописывать старые скрипты, я решил поэкспериментировать и переписать всё на Go. Это отличный момент, чтобы изучить язык глубже: разобраться с HTTP-клиентами, работой с JSON и многопоточностью в компилируемой среде. Для моего сервера на Alpine Linux это плюс — один маленький бинарник вместо тяжелых интерпретаторов.
CGO_ENABLED=0 go build -o joke_bot main.goКак это работает (кратко по коду)
Весь процесс уложен в один файл main.go:
- Конфигурация: Бот читает токены и адреса из
.envфайла. Если чего-то не хватает — сразу ругается и выходит. - Получение шутки: Делается запрос к API-Ninjas.
- AI-обработка: Текст летит в RouterAI (модель
gpt-4o-mini). Промпт настроен так, чтобы нейросеть сначала перевела шутку, а потом объяснила, почему она смешная. - Доставка:
- XMPP: Подключаемся к Prosody через библиотеку
gosrc.io/xmpp, заходим в MUC-комнату и кидаем сообщение. - Telegram: Формируем JSON для Bot API, экранируем спецсимволы под MarkdownV2 и отправляем.
- XMPP: Подключаемся к Prosody через библиотеку
- Архив: Каждая шутка сохраняется в
jokes.json. Этот файл я потом использую на сайте (Hugo), чтобы выводить историю шуток.
Пример «лукавства» ИИ

Иногда модель пытается найти глубокий смысл там, где его нет. Например, про парня в Walmart, который прячется от «некрасивых людей». ИИ начал рассуждать об абсурдности ситуации, хотя на деле это просто отсылка к мемному сайту People of Walmart, где собирают фото странных покупателей. Но именно такие ошибки делают процесс наблюдения за AI увлекательным.
Итог
Бот получился легким, надежным и почти не ест ресурсы сервера. Теперь шутки с пояснениями приходят и в Jabber, и в Telegram.
👉 Подписывайтесь на канал «Шутка дня и интертрепация» , чтобы смеяться и учить английский!


