В этом пакете создадим файл
В этом файле будут располагаться, при необходимости, настройки бота. Пока, что мы перенесём в него токен бота и добавим ID администратора.
Тут, для удобства применим ООП.
Те, кто уже успели испугаться, расслабьтесь, в создании бота ООП либо крайне мало, либо нет вовсе. Тут я применяю его банально для удобства.
Создадим дата-класс
Мы создали класс
- Строковое
- Целочисленное
Далее должно было быть несколько методов, таких как
Декоратор
Когда применяется декоратор
1.
2.
И ряда других.
Кроме того, декоратор
Продолжение в следующем посте.
Файлы к посту, можно получить в боте по коду: 488659
Пост на сайте.
Поддержать канал.
#aiogram #python #python_package #структура #dataclass
settings.py.В этом файле будут располагаться, при необходимости, настройки бота. Пока, что мы перенесём в него токен бота и добавим ID администратора.
Тут, для удобства применим ООП.
Те, кто уже успели испугаться, расслабьтесь, в создании бота ООП либо крайне мало, либо нет вовсе. Тут я применяю его банально для удобства.
Создадим дата-класс
Secrets и в нём два поля token и admin_id:from dataclasses import dataclassРазберём, что тут происходит.
@dataclass
class Secrets:
token: str = 'ваш_токен'
admin_id: int = 12345
Мы создали класс
Secrets и определили два поля:- Строковое
token в котором указываем полученный от BotFather токен бота.- Целочисленное
admin_id в котором необходимо указать ваш Telegram-ID, но это будет несколькими постами далее, пока просто заполните любым числом.Далее должно было быть несколько методов, таких как
__init__ и геттеры полей, но нам тут всё это не нужно. Для избегания большого количества кода, мы используем декоратор @dataclass.Декоратор
@dataclass - позволяет автоматически сгенерировать методы класса для работы с данными.Когда применяется декоратор
@dataclass к классу, он автоматически добавляет реализацию необходимых методов, таких как:1.
__init__: Создает конструктор класса, принимающий значения для каждого атрибута.2.
__repr__: Создает строковое представление объекта, которое используется при вызове repr().И ряда других.
Кроме того, декоратор
@dataclass позволяет использовать аннотации типов для объявления типов полей класса, что упрощает чтение кода.Продолжение в следующем посте.
Файлы к посту, можно получить в боте по коду: 488659
Пост на сайте.
Поддержать канал.
#aiogram #python #python_package #структура #dataclass
👍4
Как вы помните, при запуске бота, не понятно, запустился он или нет, поскольку в терминале не было никаких данных. Давайте это исправим, добавив базовый логгер.
Перед переменной dp добавляем пустую строку и вставляем туда код логгера, а в начло файла добавляем строку импорта:
-
-
С уровнем логирования всё понятно, он будет выводить данные уровня
Строка лога состоит из 7ми переменных:
-
-
-
-
-
-
-
В следующем посте, продолжим формировать структуру и сделаем оповещение администратора о запуске или остановке бота.
Файлы к посту, можно получить в боте по коду: 488659
Пост на сайте.
Поддержать канал.
#aiogram #python #python_package #структура #logging
Перед переменной dp добавляем пустую строку и вставляем туда код логгера, а в начло файла добавляем строку импорта:
import loggingПри запуске бота, будет инициализироваться метод
logging.basicConfig(
level=logging.INFO,
format="%(asctime)s - [%(levelname)s] - %(name)s - (%(filename)s).%(funcName)s(%(lineno)d) - %(message)s"
)
basicConfig из втроенной библиотеки logging. В него мы передаём два параметра:-
level - определяющий уровень выводимой информации. Основные уровни информирования: DEBUG, INFO, WARNING, ERROR.-
format - определяющий формат выводимой информации.С уровнем логирования всё понятно, он будет выводить данные уровня
INFO, то о переменных в формате стоит рассказать подробнее.Строка лога состоит из 7ми переменных:
-
%(asctime)s — заменяется на текущее время в формате "год-месяц-день час:минута:секунда";-
%(levelname)s — заменяется на уровень важности лога, в нашем случае INFO;-
%(name)s — заменяется на имя логгера, который записывает сообщение;-
%(filename)s — заменяется на имя файла, в котором была вызвана функция логирования;-
%(funcName)s — заменяется на имя функции, в которой была вызвана функция логирования;-
%(lineno)d — заменяется на номер строки, в которой была вызвана функция логирования;-
%(message)s — заменяется на текст сообщения, переданного для записи в лог.В следующем посте, продолжим формировать структуру и сделаем оповещение администратора о запуске или остановке бота.
Файлы к посту, можно получить в боте по коду: 488659
Пост на сайте.
Поддержать канал.
#aiogram #python #python_package #структура #logging
👍5