Fisher

Эволюция JokeBot: от XMPP к Telegram и Go-вайбу

Ранее я запустил бота, который присылал шутки из API-Ninjas и просил LLM объяснить их смысл. Всё работало через XMPP, но аудитория там небольшая. Чтобы охватить больше людей, я добавил отправку в Telegram-канал «Шутка дня и интертрепация» (надеюсь, игра слов понятна 😉).

Вместо того чтобы дописывать старые скрипты, я решил поэкспериментировать и переписать всё на Go. Это отличный момент, чтобы изучить язык глубже: разобраться с HTTP-клиентами, работой с JSON и многопоточностью в компилируемой среде. Для моего сервера на Alpine Linux это плюс — один маленький бинарник вместо тяжелых интерпретаторов.

andrey@31350: ~
CGO_ENABLED=0 go build -o joke_bot main.go

Как это работает (кратко по коду)

Весь процесс уложен в один файл main.go:

  1. Конфигурация: Бот читает токены и адреса из .env файла. Если чего-то не хватает — сразу ругается и выходит.
  2. Получение шутки: Делается запрос к API-Ninjas.
  3. AI-обработка: Текст летит в RouterAI (модель gpt-4o-mini). Промпт настроен так, чтобы нейросеть сначала перевела шутку, а потом объяснила, почему она смешная.
  4. Доставка:
    • XMPP: Подключаемся к Prosody через библиотеку gosrc.io/xmpp, заходим в MUC-комнату и кидаем сообщение.
    • Telegram: Формируем JSON для Bot API, экранируем спецсимволы под MarkdownV2 и отправляем.
  5. Архив: Каждая шутка сохраняется в jokes.json. Этот файл я потом использую на сайте (Hugo), чтобы выводить историю шуток.

Пример «лукавства» ИИ

Шутка дня и интертрепация

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

Итог

Бот получился легким, надежным и почти не ест ресурсы сервера. Теперь шутки с пояснениями приходят и в Jabber, и в Telegram.

👉 Подписывайтесь на канал «Шутка дня и интертрепация» , чтобы смеяться и учить английский!

Шутка дня и интертрепация