Проект: ✖️ Фотки.Бот: телеграм-бот для проведения челленджей в клубном чате  Публичный пост
24 мая 2023  1206
ОХУЕННО
✖️ Фотки.Бот: телеграм-бот для проведения челленджей в клубном чате
https://github.com/vlle/Photoshnaya
Этот пост бота, которого мы сделали для проведения движухи в чате Клуба. 

Пост написали Артемий и Оля. Оля расскажет про идею и  операционно-продуктовое, а Артемий про техническое, планы и баги 🙃  

Полтора года мы с Аней @Sciannadev проводим челленджи в секретном чате с фотографиями. Раз в 2 недели всем чатом выбираем тему, фотографируем, присылаем фотки в чат, а потом голосуем за самую классную.

Предыстория

Все эти полтора года челленджи проводились руками. У меня было вот так:

  • я объявляла тему, тег и сроки челленджа;
  • в последний день сохраняла все фотки, загружала в гугл-форму и отправляла в чат для голосования;
  • потом подводила итоги: объявляла победителя, выдавала ачивки, меняла обложку чата на фотку-победителя;
  • результаты записывались в секретный спредшит, доставшийся в наследство от Ани. Ачивки за победу есть нескольких уровней, так что надо как-то вести учёт побед, чтобы понимать, кому пора выдавать новый уровень;
  • дальше голосовалка на выбор новой темы;
  • ну и всё по кругу.

Это вроде и не сложно, но требует терпения, времени и планирования. Я уже давно начала выбирать даты челленджей с оглядкой на отпуска и прочие планы, чтобы успевать вовремя собрать чёртову форму для голосования и отправить анонсы.

Идея

Я много ныла про всю эту ручную рутину в чате и просила, чтобы кто-то уже наконец написал бота, ведь кругом одни айтишники же ну!

Виталий @dmitvitalii посоветовал обратиться к Артемию @aapqwhat, который согласился помочь и написать бота.

Дальше я на коленке написала ТЗ: как всё работает сейчас, какие есть корнер-кейсы и где хочется автоматизации.

Что умеет бот

От первого сообщения Оли до релиза бота в чатике прошло 3 месяца и 3 недели. При этом мечтали управиться за 2 недели, ага. Всё по традициям скрама.

Половина времени была потрачена на прокрастинацию и другие учебные проекты. Другая половина на фичи и более-менее симпатичный интерфейс.

В итоге в боте есть базовая голосовалка, регистратор фотографий и админка. Где-то в день релиза ещё добавил лидерборд. И о-о-очень большое количество всяких сообщений для бота: для диалогов админки, где заводятся челленджи, для чата и голосовалки.

И это ещё не все вместились!
И это ещё не все вместились!

Сначала Оля написала серьёзных текстов для сообщений, но во время первого тестирования «в проде» некоторые начали бесить, так что на ходу начали менять на то-то более миленькое и заботливое.

Делаем комплименты авторам
Делаем комплименты авторам

Немножко интерфейса:

Админка
Админка

Голосовалка. Вот так я выглядел под конец проекта
Голосовалка. Вот так я выглядел под конец проекта

Технологии

Стек:

  • ТГ Фреймворк для бота Aiogram 3 (потому что умею);
  • Библиотека для работы с БД SQLAlchemy (потому что не очень умею);
  • PostgreSQL для асинхронности (которую тоже слабо умею!).

Была шальная идея взять что-то безумное в духе фреймворка для тг-ботов на ПЛЮСАХ, но затем я понял что и поддерживать бота придется мне одному до конца времен.

Боты на Aiogram 3 делаются довольно просто. Ты пишешь, на какие события должен реагировать бот, и что в этом случае он делает. Если делать красиво, с кнопочками и меню, выходит сложнее, так как надо продумать структуру что и за чем следует, полностью проверять каждое действие меню и т.д и т.д. Зато классный интерфейс вышел.

SQLAlchemy взял из-за того, что это удобная абстракция, под которой можно без особых проблем менять БД. Поэтому в середине разработки я перееехал с SQLite на PostgreSQL и практически не пострадал.

Еще тестики на pytest и классический докер.

Первый запуск в проде

5 мая заанонсили бота и через бота запустили новый челлендж, а 19 мая запустили голосовалку.

Фотки бот принимал радостно, а вот на голосовалке что-то пошло не так. Зачем Оля решила проводить голосование вечером в пятницу, непонятно до сих пор.

Что пошло не так

Случилось самое неожиданное — бот стал удалять чужие неотправленные голоса в процессе голосования (!).

Первые нерадостные сообщения
Первые нерадостные сообщения

Все из-за фатального проклятого бага при работе с SQL, который очень хорошо прятался и не высвечивал на тестах, так как тестировал всё я сам с собой и в маленьких чатах на 5 человек.

Все просто: в процессе голосования все лайки юзера сохраняются во временную табличку в БД. Так можно запомнить все лайки и отображать их нормально. И уже после отправления голоса лайки стирались с одной таблицы и попадали в другую, постоянную. Но лайки я стирал просто по айди фотки сразу в этой временной таблице. Поэтому если ты лайкнул фото гор и отправил свой голос, этот лайк сотрёт все чужие промежуточные лайки под этой горой. Бывает и такое.

Поэтому как только мы запустили голосовалку в Вастрик.Фотках — люди стали жаловаться на плавающие лайки.

Старые голоса потёрли, исправил ошибку, залили новое голосование, и я стал ждать новых ошибок. Ошибок не было.

Пока что.

Планы на будущее

В планах расширить админку до такого состояния, чтоб админ мог как угодно работать с челленджами и группами без моих рук в базе.

Ещё хочу переработать таблицы и сделать нормальные тесты для проверки телеграмной логики. Ещё можно переработать логику работы с БД, улучшить дашборды, придумать новые методы для классной статистики... дофига всего можно! Но пока лениво.

Нужны ли какие-то советы или помощь Клуба?

Сеньоры, подскажите! Как вообще писать тесты для такого бота? И где можно посмотреть примеры хороших тестов на pytest? Возьмете ли на стажировку/джуна?

Ну и приходите к нам на челленджи. Это весело! Мы тренируем насмотренность, выпихиваем друг друга из дома, чтобы пофотографировать и отвлечься, подбадриваем и помогаем советом.

Благодарности

  • Ане @Sciannadev за то, что ты есть;
  • Диме @dskr и Никите @naorlov за поддержку;
  • Илье @ifegee за аватарку бота;
  • ребятам из лучшего фото-чата просто потому, что вы классные 🖤
Связанные посты
3 комментария 👇
🕵️ Юзер скрыл свои комментарии от публичного просмотра...

Очень люблю такие проекты, которые созданы почесать конкретное место

  Развернуть 1 комментарий

Как красиво автоматизировано!
А ещё я не знал о существовании чата и челленджей. Очень отзывается. Бегу к вам реинкарнировать себя в фотографии

  Развернуть 1 комментарий

😎

Автор поста открыл его для большого интернета, но комментирование и движухи доступны только участникам Клуба

Что вообще здесь происходит?


Войти  или  Вступить в Клуб