Владимир Фетисов

Прототипирование

Адаптивная вёрстка

Программирование

SEO продвижение

Реклама, таргет

UX/UI интерфейсы


СКРЫТЬ

ПОКАЗАТЬ
Владимир Фетисов

Прототипирование

Адаптивная вёрстка

Программирование

SEO продвижение

Реклама, таргет

UX/UI интерфейсы

Блог

PHP Telegram bot + Laravel разработка с нуля `Урок – 9`

PHP Telegram bot + Laravel разработка с нуля `Урок – 9`

Статья на Яндекс Дзен, подписывайтесь!

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

Как сделать мультиязычный телеграм бот?

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

Это можно реализовать несколькими способами:

  1. Отдельным таблицами telegram_users languages и их связкой через таблицу telegram_users_languages
  2. Одной таблицей с пользователями telegram_users и колонкой выбранного языка.

Я пойду по 2му пути, он более понятный да и нет смысла делать отдельную таблицу для нескольких языков.

В Laravel для работы с таблицами используют подход миграций, это некий контроль версий для бд. Чтобы создать миграцию существует команда php artisan make:migration migration_name Она имеет методы:

  1. up – который запускается вместе с запуском миграций командой php artisan migrate
  2. down – который испольняется при запуске php artisan migrate:rollback и откатывает внесенные изменения назад.

На официальном сайте есть подробная документация, а мы перейдем к делу.

Создание базы данных для пользователей телеграм через модель с миграцией Laravel.

В Laravel отлично реализована ORM-модель, которая позволяет при помощи Eloquent работать с таблицами баз данных через модель.

Вкратце у вы хотите создать таблицу cars с машинами, значит вы создаете модель Car, которая будет работать с таблицей cars. Подробнее можно почитать в официальной документации.

Создаем новую модель TelegramUser и сразу создаем к ней миграцию при помощи тега -m:

php artisan make:model TelegramUser -m

Создаем модель телеграм пользователей с миграцией
Создаем модель телеграм пользователей с миграцией

Получаем в ответ уведомления о том, что наша модель и миграция созданы и проверяем что они действительно создались в папках Models и Migrations соответственно.

Проверяем создалась ли модель и миграция
Проверяем создалась ли модель и миграция

Зайдем в класс нашей модели и добавим пару строчек.
$table – таблица, с которой будет работать модель.
$guarded – позволяет передать массив с колонками, которые нельзя заполнять, как некая защита, если заполнять можно все, поставим false

Добавляем свойства $table и $guarded к модели
Добавляем свойства $table и $guarded к модели

Теперь заглянем в миграцию и посмотрим из чего она состоит. Подробнее о типах колонок можно почитать в официальной доке. Я внес небольшие изменения для наглядности :

  1. Название создаваемой таблицы
  2. Тип колонки(строка, число, id, boolean) и т.д.
  3. Название колонки
  4. Доп свойство, например nullable, может ли быть значение null

Из чего состоит миграция после создания в laravel
Из чего состоит миграция после создания в laravel

Дальше нужно придумать какие колонки нам пригоядся и дописать их. На самом деле в документации Telegram Bot API указаны все поля, которые могут прийти, поэтому останется добавить выбранный язык и статус:

Подготовка миграции, добавление новых колонок
Подготовка миграции, добавление новых колонок

Получаем следующий список колонок, которые будут вставлены в таблицу telegram_users:

  1. $table->id(); – идентификатор, который будет автоматически проставляться всем записям
  2. $table->integer(‘user_id’); – идентификатор пользователя из телеграм
  3. $table->string(‘username’)->nullable(); – Ник пользователя, его может не быть, поэтому ставим nullable
  4. $table->string(‘first_name’)->nullable(); – Имя пользователя, так же необязательный параметр, может прийти null
  5. $table->string(‘last_name’)->nullable(); – Фамилия пользователя, так же необязательный
  6. $table->string(‘selected_language’)->default(‘ru’); – выбранный пользователем внутри нашего бота язык, который и будет отвечать за многоязычность, по умолчанию пусть будет ru
  7. $table->string(‘language_code’)->nullable(); – Языковой код пользователя, который пришел с вебхуком. Можно поиграться и выдавать контент сразу на языке пользователя, но раз он может не прийти, я решил от него не зависить, просто сохранить на будущее
  8. $table->boolean(‘is_premium’)->nullable(); – булевое значение, показывающее есть ли у пользователя премиум подписка
  9. $table->boolean(‘is_bot’)->nullable(); – булевое значение, показывающее написал нам бот или реальный человек
  10. $table->string(‘status’)->default(‘active’); – статус пользователя, точнее статус чата с ним, если он вышел или заблокировал бота, нам придет соответствующий вебхук и с этим можно что то придумать
  11. $table->timestamps(); – ларавелевская функция, которая создает еще две колонки в таблице created_at и updated_at, показывающие дату создания записи и дату её изменения соответственно.

Запуск миграции Laravel

Обратите внимание, список миграций можно посмотреть в папке database->migrations, помимо нашей есть еще несколько, которые создадут несколько дефолтный таблицу

Список миграций
Список миграций

Если наша миграция готова, можно запускать. Чтобы запустить все миграции, которые еще не отработали доступна команда:
php artisan migrate

Если вам нужно запустить конкретную миграцию, не трогая другие, можно написать так, добавив –path=Путь/Название:
php artisan migrate –path=database/migrations/2023_03_29_180253_create_telegram_users_table.php

Запускаем миграции
Запускаем миграции

Ссылка на commit из 9 урока

Полезные ссылки

Taggs:
Написать комментарий