История бота подзатянулась, поэтому сегодня нас ждет экспресс-тур сразу по трем чатам. Бот, кстати, идет стабильно. 250 уникальных пользователей, 30–40 запросов ежедневно и 1200 запросов с момента релиза (~3 недели).
Чат 4: переезд в АмстердамПосле отказа Gemini решили сменить LLM. Выбор пал на дружественный DeepSeek, но оплату с турецкой карты он не хотел принимать ни в какую. Тут Клод мне намекнул: «Дружище, а не хочешь ли ты попробовать мой API?». Я решил не отказываться. Переписали llm_client.py под Anthropic SDK, залили на сервер, но там снова 403 Forbidden. Клод предложил поднять Tor прямо на сервере в качестве прокси. Установили одной командой, тестовый запрос прошел, но при запуске бота — опять 403. Оказалось, Tor плохо дружит с асинхронным Python. Прокси видит тестовый скрипт, но игнорирует aiogram.
Стало ясно, что проблему решит только переезд. Арендовал сервер в Амстердаме с теми же характеристиками за 780 рублей в месяц (чуть дороже из-за бэкапов). Скачал базу со старого сервера и залил всё на новый. Запустили бота на новом сервере. И наконец-то! Ура! Всё работает!
Дальше взялись за словари. Диагностика шрифтов показала, что в PDF затесался спецсимвол \uf401, который разрывал слова на части. Добавили удаление символа — толковый словарь вырос с 2 487 до 26 087 статей. Орфографический — со 114 981 до 147 508.
Итого в базе 216 349 статей.
Чат 5: старые баги, новые фичи и релизПервым делом прошлись по трем косметическим, но бесячим багам:
• Клод в промпте вел себя как добросовестный редактор: молча исправлял опечатки и переводил то, что пользователь имел в виду, а не то, что написал. Добавили жесткий запрет не додумывать и не «спасать», работать строго с тем, что прислали.
• Варианты перевода писались вразнобой в регистре. Починили одной строчкой кода .lower() на весь список.
• Мем появлялся не там. По задумке он должен был выскакивать после выдачи аналогов, а он вылезал просто при опечатке. Переставили вызов функции на место.
Пока разбирались с багами, заодно добавили несколько новых функций:
• Сделали для меня тариф «безлимит» на запросы.
• Настроили предупреждение для пользователей, когда сгорает половина лимита.
• Прикрутили статистику. Теперь я знаю все цифры и вижу, что больше всего людей волнует слово «кешбэк».
• Добавили команду /history — показывает последние 5 слов и их статус (найдено/не найдено).
• Сделали проверку целого текста (до 500 слов). Бот прогоняет его по словарям и выдает список ненайденного. Считается как один запрос из лимита.
А главное — состоялся релиз бота в чатике рекламного права. Коллеги быстро нашли ему применение и за сутки аудитория бота выросла с одного меня до 98 человек.
Чат 6: финальные штрихиПоскольку аудитория бота активно росла, решили добавить обратную связь. Я хотел сделать полноценное окно ввода, но Клод объяснил, что так не получится — это ограничение Telegram. Сошлись на inline-кнопке «Оставить отзыв».
Дальше починили режим проверки текстов. Раньше бот честно заносил в «ненайденные» все местоимения, союзы, частицы и предлоги. Подключили pymorphy3. Теперь бот отсеивает всю служебную лексику еще до поиска.
Ну и в завершение подняли дневной лимит с 10 до 20 запросов.
На этом основная работа над ботом была завершена. Теперь я только лениво поглядываю на его статистику и строю дальнейшие планы (об этом потом).
Ах, да, чуть не забыл. Теперь у меня есть кое-что общее с
Миллой Йовович — первый комит на GitHub. Сам не верю, но такие дела. Такой вот дивный новый мир!