Код на салфетке
2.22K subscribers
746 photos
14 videos
2 files
788 links
Канал для тех, кому интересно программирование на Python и не только.

Сайт: https://pressanybutton.ru/
Чат: https://t.iss.one/+Li2vbxfWo0Q4ZDk6
Заметки автора: @writeanynotes

Реклама и взаимопиар: @Murzyev1995
Сотрудничество и др.: @proDreams
Download Telegram
В этом пакете создадим файл 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 добавляем пустую строку и вставляем туда код логгера, а в начло файла добавляем строку импорта:
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