Хабрахабр

Как я писал бота с ДЗ и менял базу данных

Здравствуйте, Хабровчане!
Сегодня я постараюсь поведать вам как школьник может наговнокодить написать бота для хранения домашки для VK.

Осторожно

Сразу обращу внимание, что для серьёзных проектов так строить инфраструктуру нельзя, весь этот проект создавался только для развлечения и убивания времени, ну и презентации на всяких школьных псевдо проектных конференциях.

Бот был написан на PHP, а ради эксперемента я решил получать обновления не с помощью вебхуков CallBack API, а используя LongPoll.

Теперь перейду к тому, как у меня зарождались идеи и как я их реализовывал. Из-за того, что я ни разу не писал ботов, используя этот метод получения обновлений, меня терзали смутные сомнения на счёт того, смогу ли я на PHP написать сего бота, но в итоге всё получилось.

Ну как хранить. Первой у меня, вообще, родилась идея написать бота для того, чтобы в нём хранить домашку. Что-то по типу заметок, но внутри VK, так как в заметки я редко захожу, да и не очень удобны они для меня.

Это описывать не очень интересно, поэтому опущу этот момент, но приведу мощную ER-диаграмму того, как выглядела база данных в самом начале. Для того, чтобы реализовать банального бота с домашкой я создал одну таблицу в базе данных, в которой хранились название предмета, сама домашка и на какое число всё это счастье задано.

image

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

image

Вход в уже существующую группу осуществляется по токену, а для каждой новой генерируется свой уникальный токен. Из ER-диаграммы можно понять, что каждый пользователь принадлежит какой-то группе. И сами задания тоже относятся к той или другой группе, чтобы пользователи не видели хаос из своих и чужих заданий.

Только сделал ещё так, чтобы старые задания не показывались, дабы не удалять вручную всё это дело, но, думаю, запрос SELECT в SQL написать достаточно просто. Дописал код, здесь тоже ничего интересного, в принципе нет.

(И есть ли она при таком использовании PHP?) А теперь пришло время для веселья: я начал добавлять функции, которые будут тормозить общую очередь сообщений, поэтому я принял решение выносить их в отдельные скрипты, так как в многопоточность я пока что не могу, но выбрал LongPoll.

И вот эти функции: рассылка сообщений всем участникам группы и генерация QR-кодов, в которых зашифрован ключ для вступления в группу.

База в итоге приняла такой вид. Для этого я просто создал ещё одну таблицу в базе данных, в которую заношу текст рассылки и кому она предназначена.

image

А генерация QR-кодов вынесена вообще в отдельный процесс, который тоже получает обновления от VK об исходящих сообщениях, и смотрит, в каком из сообщений есть ключ от группы.

Пока всё выглядит всё более-менее адекватно, но потом я пошёл нарушать реляционную модель, занося JSON в базу данных.

Я заношу параметр attachments, который получаю от VK, и дальше обрабатываю при рассылках сообщений, дабы не загружать основной процесс. Что же за JSON я могу заносить в базу?

В итоге всё это дело выглядит вот так.

image

Задание добавляется сразу, а файлы постепенно прикрепляются, если подходят по формату и проходят по размеру для Telegram Bot Api. Примерно таким же методом потом я добавил прикрепление файлов к заданиям в боте. Файлы я загружаю в Telegram через кластер ботов и сохраняю id файла.

Храню я файлы в Телеграме из-за того, что на сервере, на котором я всё это держу, не очень много места, а расширяться для меня очень сложно финансово.

Вся база начала выглядеть вот так:

image

Тут я сделал почти такую же логику, как и с добавлением файлов. Но теперь передо мной встала задача: как я буду отдавать файлы пользователям обратно?

image

Потом ещё добавился и бот для Телеги, но это я описывать пока не буду.

Возможно, кому-то из новичков будет полезно посмотреть как можно проектировать структуру БД по ходу развития идеи, а мне будет интересно послушать критику по организации моей базы и принять что-то на вооружение. В принципе, я считаю, что структура базы данных неплохая, но что-то мне здесь не нравится.

Статейка небольшая, но может на себя обрушить критику.

Клац 1

«Фулл до 5 вечера у меня на столе!»
Все исходники бота выложу на гит после защиты проекта, да и статью не грех будет написать.

Клац 2

Некоторые идеи, которые касаются работы с файлами, мне подсказали в чате Хабра в телеге, меня часто можно там увидеть.

Клац 3

Потыкать живого бота можно тут. Буду рад фидбэку.

Теги
Показать больше

Похожие статьи

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»
Закрыть