Skip to content

Разбор кода

Рассмотрим содержимое bot.py

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
from unibots.bots import StarletteBot

bot = StarletteBot()
app = bot.get_app()


@bot.global_handler
def hello(request, response, session):
    response.set_message('Hello world!')
    return True


if __name__ == '__main__':
    import uvicorn
    uvicorn.run('bot:app', reload=True, use_colors=True)

StarletteBot - основной класс, отвечающий за бота. Является композицией других классов, таких как SDK и SessionManager. Подробнее о нем написано в соответствуюзем разделе.

Бот

1
2
3
from unibots.bots import StarletteBot

bot = StarletteBot()

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

1
app = bot.get_app()

Объявляем переменную, содержащую Starlette серевер. Она нужна, для uvicorn

Обработчик

1
2
3
4
@bot.global_handler
def hello(request, response, session):
    response.set_message('Hello world!')
    return True

Здесь мы создаем обработчик сообщений и регистрируем его в нашем боте при помощи декоратора @bot.global_handler

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

  • request - информация от пользователя. Содержит его сообщение (request.user_message)
  • response - ответ, который будет отправлен пользователю. Может содержать как простой текст, так и картинки
  • session - сессия пользователя. Обладает хранилищем, которое можно наполнить произвольной информацией
1
2
response.set_message('Hello world!')
return True

Метод set_message задает сообщение, которое будет отправлено в ответ.
return True дает понять фреймворку, что сценарий этого обработчика выполнился корректно и ответ был успешно сформирован.

Зачем это нужно?

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

Uvicorn

1
2
3
if __name__ == '__main__':
    import uvicorn
    uvicorn.run('bot:app', reload=True, use_colors=True)

Эта последняя часть нужна для упрощенного старта работы. Благодря ней вы можете запустить бота прямо из PyCharm. При этом будет работать live reload, который сам перезапускает сервер, если в коде произойдут изменения.

Заключение

Вот мы и подошли к концу туториала. Теперь вы можете самостоятельно реализовать Эхо-бота.

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