Cat

AIOgram3 9. Команда start

API для регистрации пользователя написано, теперь нужно сделать команду /start. Эта команда выполняется при первой инициализации бота пользователем.

Все статьи

Icon Link

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

Icon Link

Реклама

Icon Link
Telegram-бот на AIOgram3 proDream 05 Сентябрь 2023 Просмотров: 2010

Без лишних слов. 

Откроем файл api_actions.py в пакете utils и напишем функцию register_user для отправки данных по API. В качестве аргументов, она будет принимать следующие данные: chat_id, first_name, last_name, username

Поскольку мы не получаем от API ничего, кроме статус-кода, создавать переменную, как в функции get_path, нет смысла. Сразу обращаемся к библиотеке requests.

В функции выше, мы отправляли GET запрос обращаясь к методу get из библиотеки requests. Сейчас нам необходимо отправить POST запрос, следовательно, использовать будем метод post

Первым параметром, как и ранее будет URL-адрес нашего API, можно взять его из предыдущей функции и изменить f-строку на URL для регистрации f"create-user/".
Вторым параметром будет ключевой параметр data, в котором создаём словарь с данными, где ключ - строка с названием переменной, а значение сама переменная.

def register_user(chat_id, first_name, last_name, username):
    requests.post(API_URL + f"create-user/",
                  data={
                      'chat_id': chat_id,
                      'first_name': first_name,
                      'last_name': last_name if last_name else '',
                      'username': username if username else '',
                  })

 

Стоит учесть, что поля last_name и username могут быть пустыми, по этому при помощи тернарного оператора, мы присваиваем значение переменной или пустую строку.

 

Создаём команду /start.

Обработчик написан, перейдём к созданию команды. 

В пакете handlers создадим файл simple.py. В этом файле мы будем писать простые команды, не требующие логики, такие как /start, /help, /about.

В файле напишем асинхронную функцию start_command, принимающую аргумент message.

В теле функции сразу вызываем нашу функцию register_user из файла api_actions.py, передавая в неё необходимые данные из объекта message.

chat_id мы получаем обратившись к полю id метода chat - message.chat.id

Остальные переменные получаем из одноимённых полей метода from_user, например, message.from_user.first_name.

После вызова функции отправляем пользователю приветственное сообщение, предварительно создав функцию start_message с текстом в файле views.py.

 

from aiogram.types import Message

from botlogic import views
from botlogic.utils.api_actions import register_user


async def start_command(message: Message):
    register_user(chat_id=message.chat.id,
                  first_name=message.from_user.first_name,
                  last_name=message.from_user.last_name,
                  username=message.from_user.username)
    await message.answer(views.start_message())

 

Регистрация команды.

Откроем файл main.py и зарегистрируем команду, добавив в функцию start_command после регистрации событий запуска/остановки, следующую строку:

from botlogic.handlers import send_file, simple

    dp.message.register(simple.start_command, Command(commands='start'))

 

Теперь протестируем работу.

Запустим Django и перейдём в панель администратора и откроем страницу модели Пользователи бота. Должно быть пусто.

В отдельном окне запустим бота и выполним команду /start.

Если, всё прошло удачно, то обновив страницу в панели администратора, увидите свой профиль.

Автор

    Нет комментариев

    Реклама