AIOgram3 9. Команда start
API для регистрации пользователя написано, теперь нужно сделать команду /start
. Эта команда выполняется при первой инициализации бота пользователем.
Дополнительные материалы
Для скачивания материалов необходимо войти или зарегистрироваться
Файлы также можно получить в Telegram-боте по коду: 260142
Реклама
Без лишних слов.
Откроем файл 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
.
Если, всё прошло удачно, то обновив страницу в панели администратора, увидите свой профиль.
Все статьи