old_01
This commit is contained in:
532
README.md
532
README.md
@@ -1,157 +1,375 @@
|
||||
# BOTKlining
|
||||
|
||||
## Структура
|
||||
|
||||
1. `main.py`: основной файл для запуска бота.
|
||||
2. `handlers.py`: обработчики команд и состояний.
|
||||
3. `database.py`: взаимодействие с базой данных.
|
||||
4. `logger.py`: логирование действий пользователей.
|
||||
5. `.env`: файл для хранения конфиденциальных данных.
|
||||
|
||||
Для создания бота с указанной функциональностью и логикой, а также использования файла .env для хранения конфиденциальных данных, мы разобьем задачу на несколько шагов:
|
||||
|
||||
Настройка окружения и установка зависимостей
|
||||
Создание базы данных
|
||||
Разработка основных обработчиков команд и колбэков
|
||||
Создание функций для работы с базой данных
|
||||
Настройка логирования
|
||||
Реализация основной логики бота
|
||||
|
||||
Вот подробное описание структуры и логики бота:
|
||||
|
||||
## Inline клавиатура бота:
|
||||
1. Учетные данные
|
||||
|
||||
- Изменить ФИО: Пользователь может изменить свое ФИО.
|
||||
- Изменить номер телефона: Позволяет изменить номер телефона.
|
||||
- Добавить адрес: Пользователь может добавить новый адрес.
|
||||
- Удалить адрес: Пользователь может удалить ранее добавленный адрес.
|
||||
- Поделиться контактом: Позволяет поделиться контактными данными, для автоматического заполнения в базе данных.
|
||||
|
||||
2. Сделать заказ
|
||||
|
||||
- Добавить учетные данные: Если у пользователя нет учетных данных, он должен их добавить. Если данные есть они заполняются автоматически.
|
||||
- Выбрать адрес: Пользователь выбирает адрес или добавляет новый.
|
||||
- Выбрать время уборки: Предлагает утро, день, вечер.
|
||||
- Выбрать тип уборки: Влажная, сухая, генеральная.
|
||||
- Выбрать способ оплаты: Картой, наличными.
|
||||
- Подтвердить заказ: Подтверждает заказ или позволяет изменить ответы. После подтверждения заказа автоматически отправлять уведомление в группу операторов, а также добавлять заказ в историю.
|
||||
- Заказу присваивается ID номер
|
||||
|
||||
3. История заказов
|
||||
|
||||
- Просмотреть историю заказов: Позволяет пользователю просмотреть свою историю заказов.
|
||||
- Добавить функцию повторного заказа на основе предыдущих заказов.
|
||||
|
||||
4. Заказать звонок
|
||||
|
||||
- Добавить учетные данные: Если у пользователя нет учетных данных, он должен их добавить. Если данные есть они заполняются автоматически.
|
||||
- Заказать звонок: Отправляет учетные данные (ФИО, номер телефона) в группу операторов, с подписью об звонке. Пользователь видит сообщение "ожидайте звонок в течении 30 минут"
|
||||
|
||||
5. Начать разговор с оператором
|
||||
|
||||
- Добавить учетные данные: Если у пользователя нет учетных данных, он должен их добавить. Если данные есть они заполняются автоматически.
|
||||
- Начать разговор: Отправляет учетные данные (ФИО, номер телефона, ID номер крайнего заказа) в группу операторов.
|
||||
- Завершить разговор: Пользователь завершает разговор.
|
||||
- После завершения разговора автоматически отправлять анкету о качестве обслуживания пользователю для обратной связи. Автоматически закрыть анкету в случае не ответа 2 часов.
|
||||
|
||||
6. Назад
|
||||
|
||||
- Возврат к предыдущему набору кнопок: Позволяет вернуться к предыдущему меню кнопок.
|
||||
|
||||
## Логика нажатия кнопок и сохранения данных:
|
||||
- При первом использовании бота запросить у пользователя учетные данные (ФИО, номер телефона) и сохранить их для последующих заказов. Можно использовать личные данные из Telegram (если пользователь разрешил) для заполнения некоторых полей автоматически.
|
||||
- При нажатии кнопок пользователем, бот запоминает предыдущий выбор и отображает следующий набор кнопок соответственно.
|
||||
- Когда пользователь нажимает на любую из кнопок, предыдущий выбор автоматически скрывается, а вместо него появляется следующий набор кнопок. Кнопка "Назад" позволяет вернуться к предыдущему набору кнопок в случае необходимости. Это помогает сделать интерфейс более удобным и интуитивно понятным для пользователей.
|
||||
- Данные пользователя (учетные данные, адреса, заказы и т.д.) сохраняются в базе данных SQLite3 для последующего использования.
|
||||
- Логирование действий пользователей осуществляется путем записи информации о каждом действии в лог-файлы, включая дату, время, ID пользователя и другие параметры.
|
||||
## Управление из группы и внутри бота:
|
||||
- Группа для заказов управляется операторами и администраторами, которые имеют доступ к соответствующим функциям.
|
||||
- Операторы могут просматривать историю заказов пользователей, отвечать на сообщения, завершать разговоры и управлять заказами.
|
||||
- Администраторы имеют дополнительные функции, такие как выгрузка переписки в формате JSON.
|
||||
- Бот на aiogram используется для более эффективной работы и реализации функций бота через асинхронные методы.
|
||||
- Эта структура и логика позволят создать функционального бота для управления заказами и общения с операторами, обеспечивая удобство пользователей и контроль над данными.
|
||||
- Данные токена id групп, id администраторов, операторов дложны храниться в файле env
|
||||
## Автоматизация
|
||||
|
||||
- Добавить таймеры для отслеживания неактивности пользователя и предложения начать разговор с оператором или оформить заказ при необходимости.
|
||||
- Использовать базу данных для хранения информации о пользователях, заказах и истории коммуникации с операторами.
|
||||
- Реализовать механизм автоматического анализа данных о заказах для предложения персонализированных услуг или скидок.
|
||||
- Создаем базу данных SQLite3 для хранения информации о пользователях, их учетных данных, заказах и истории сообщений с операторами.
|
||||
- Создаем таблицы для каждой категории данных: пользователи, заказы, история сообщений и т.д.
|
||||
- Связываем таблицы между собой по ключам (например, по ID пользователя).
|
||||
- При каждом действии пользователя (нажатие кнопки, отправка сообщения) записываем соответствующую информацию в лог-файлы.
|
||||
- Логируем дату, время действия, ID пользователя, текстовые данные (если есть) и другие необходимые параметры.
|
||||
- Создаем специальную группу для приема заказов, где только операторы и администраторы имеют доступ.
|
||||
- Назначаем операторов и администраторов, которые могут управлять заказами в этой группе.
|
||||
|
||||
1. Функционал операторов:
|
||||
- Операторы могут просматривать историю заказов конкретного пользователя по его ID.
|
||||
- Операторы могут отвечать пользователю из группы используя функцию ответа (replay).
|
||||
- Операторы могут завершать разговор с пользователем с помощью соответствующей кнопки.
|
||||
|
||||
2. Функционал администраторов:
|
||||
- Администраторы имеют все функции операторов.
|
||||
- Дополнительно администраторы могут выгружать переписку операторов и пользователя в виде JSON файла.
|
||||
|
||||
|
||||
|
||||
Логика Бота
|
||||
есть inline клавиотура со следующими кнопками:
|
||||
Учетные данные
|
||||
Изменить ФИО
|
||||
Изменить номер телефона
|
||||
Добавит адрес
|
||||
Поделиться контактом
|
||||
сделать заказ
|
||||
Добавит учетные данные, если данные не введены, если введены то пропустить вопрос.
|
||||
выбрать адрес или указать новый адрес. все веденные адреса сохраняються.
|
||||
спросить время для уборки: утро/День/вечер
|
||||
Спросить тип уборки: Влажная/Сухая/Генеральная
|
||||
Спросить способ оплаты: Картой/Наличными
|
||||
Подьвердить заказ, или предложить изменить ответ на вопрос. далее кнопки вопросов что бы изменить один ответ и после изменения повторно подтвердить.
|
||||
После подтверждения, сообщения с ответами отправляеться группу операторов.
|
||||
История заказов
|
||||
Все отправленные ответы в группу сохраняются как заказ и храниться в базе данных.
|
||||
Заказать звонок
|
||||
Добавит учетные данные, если данные не введены, если введены то пропустить вопрос.
|
||||
Кнопка заказать звонок, отправляет учетные данные (ФИО, номер телефона) в группу операторов.
|
||||
Начать разговор с оератором
|
||||
Добавит учетные данные, если данные не введены, если введены то пропустить вопрос.
|
||||
Кнопка начать разговор, отправляет учетные данные (ФИО, номер телефона) в группу операторов.
|
||||
Оператор из группы нажимает ответить(replay) и пишет сообщение, сообшение отправляеться пользователю
|
||||
пользователь пишет сообщение и оно отправляеться в группу до дех под пока пользователь не нажмет завершить разговор.
|
||||
Если кнопка завершить разговор не нажато, то через 1 час разговор с оператором завершаеться автоматически.
|
||||
При заходе пользователя через 2 часа появляеться первоначальное меню кнопок.
|
||||
Допиши логику, слелай её более автоматизированной.
|
||||
|
||||
ChatGPT
|
||||
Ты создал очень хорошую базу для логики бота! Вот несколько дополнений и идей для автоматизации:
|
||||
|
||||
Учетные данные:
|
||||
|
||||
При первом использовании бота запросить у пользователя учетные данные (ФИО, номер телефона) и сохранить их для последующих заказов. Можно использовать личные данные из Telegram (если пользователь разрешил) для заполнения некоторых полей автоматически.
|
||||
Добавить возможность изменения учетных данных через команду или кнопку "Изменить учетные данные".
|
||||
Сделать заказ:
|
||||
|
||||
После выбора адреса показывать пользователю карту с указанным адресом для подтверждения или возможности изменения.
|
||||
Автоматически предлагать время уборки в зависимости от текущего времени (например, если пользователь заходит в 9 утра, предложить утреннее время уборки).
|
||||
После подтверждения заказа автоматически отправлять уведомление в группу операторов, а также добавлять заказ в историю.
|
||||
История заказов:
|
||||
|
||||
Позволить пользователю просматривать историю своих заказов через бота.
|
||||
Добавить функцию повторного заказа на основе предыдущих заказов.
|
||||
Заказать звонок:
|
||||
|
||||
Позволить пользователю выбрать время для звонка (например, "Заказать звонок через 30 минут").
|
||||
Автоматически отправлять уведомление о заказе звонка в группу операторов с указанием времени.
|
||||
Начать разговор с оператором:
|
||||
|
||||
Добавить возможность выбора темы разговора (например, "Техническая поддержка", "Вопрос по заказу" и т. д.).
|
||||
После завершения разговора автоматически отправлять анкету о качестве обслуживания пользователю для обратной связи.
|
||||
Автоматизация:
|
||||
|
||||
Добавить таймеры для отслеживания неактивности пользователя и предложения начать разговор с оператором или оформить заказ при необходимости.
|
||||
Использовать базу данных для хранения информации о пользователях, заказах и истории коммуникации с операторами.
|
||||
Реализовать механизм автоматического анализа данных о заказах для предложения персонализированных услуг или скидок.
|
||||
Эти функции помогут сделать бота более удобным и эффективным для пользователей и операторов.
|
||||
# BOTKlining
|
||||
|
||||
## Структура
|
||||
|
||||
1. `main.py`: основной файл для запуска бота.
|
||||
2. `handlers.py`: обработчики команд и состояний.
|
||||
3. `database.py`: взаимодействие с базой данных.
|
||||
4. `logger.py`: логирование действий пользователей.
|
||||
5. `.env`: файл для хранения конфиденциальных данных.
|
||||
|
||||
Для создания бота с указанной функциональностью и логикой, а также использования файла .env для хранения конфиденциальных данных, мы разобьем задачу на несколько шагов:
|
||||
|
||||
Настройка окружения и установка зависимостей
|
||||
Создание базы данных
|
||||
Разработка основных обработчиков команд и колбэков
|
||||
Создание функций для работы с базой данных
|
||||
Настройка логирования
|
||||
Реализация основной логики бота
|
||||
|
||||
Вот подробное описание структуры и логики бота:
|
||||
|
||||
## Inline клавиатура бота:
|
||||
1. Учетные данные
|
||||
|
||||
- Изменить ФИО: Пользователь может изменить свое ФИО.
|
||||
- Изменить номер телефона: Позволяет изменить номер телефона.
|
||||
- Добавить адрес: Пользователь может добавить новый адрес.
|
||||
- Удалить адрес: Пользователь может удалить ранее добавленный адрес.
|
||||
- Поделиться контактом: Позволяет поделиться контактными данными, для автоматического заполнения в базе данных.
|
||||
|
||||
2. Сделать заказ
|
||||
|
||||
- Добавить учетные данные: Если у пользователя нет учетных данных, он должен их добавить. Если данные есть они заполняются автоматически.
|
||||
- Выбрать адрес: Пользователь выбирает адрес или добавляет новый.
|
||||
- Выбрать время уборки: Предлагает утро, день, вечер.
|
||||
- Выбрать тип уборки: Влажная, сухая, генеральная.
|
||||
- Выбрать способ оплаты: Картой, наличными.
|
||||
- Подтвердить заказ: Подтверждает заказ или позволяет изменить ответы. После подтверждения заказа автоматически отправлять уведомление в группу операторов, а также добавлять заказ в историю.
|
||||
- Заказу присваивается ID номер
|
||||
|
||||
3. История заказов
|
||||
|
||||
- Просмотреть историю заказов: Позволяет пользователю просмотреть свою историю заказов.
|
||||
- Добавить функцию повторного заказа на основе предыдущих заказов.
|
||||
|
||||
4. Заказать звонок
|
||||
|
||||
- Добавить учетные данные: Если у пользователя нет учетных данных, он должен их добавить. Если данные есть они заполняются автоматически.
|
||||
- Заказать звонок: Отправляет учетные данные (ФИО, номер телефона) в группу операторов, с подписью об звонке. Пользователь видит сообщение "ожидайте звонок в течении 30 минут"
|
||||
|
||||
5. Начать разговор с оператором
|
||||
|
||||
- Добавить учетные данные: Если у пользователя нет учетных данных, он должен их добавить. Если данные есть они заполняются автоматически.
|
||||
- Начать разговор: Отправляет учетные данные (ФИО, номер телефона, ID номер крайнего заказа) в группу операторов.
|
||||
- Завершить разговор: Пользователь завершает разговор.
|
||||
- После завершения разговора автоматически отправлять анкету о качестве обслуживания пользователю для обратной связи. Автоматически закрыть анкету в случае не ответа 2 часов.
|
||||
|
||||
6. Назад
|
||||
|
||||
- Возврат к предыдущему набору кнопок: Позволяет вернуться к предыдущему меню кнопок.
|
||||
|
||||
## Логика нажатия кнопок и сохранения данных:
|
||||
- При первом использовании бота запросить у пользователя учетные данные (ФИО, номер телефона) и сохранить их для последующих заказов. Можно использовать личные данные из Telegram (если пользователь разрешил) для заполнения некоторых полей автоматически.
|
||||
- При нажатии кнопок пользователем, бот запоминает предыдущий выбор и отображает следующий набор кнопок соответственно.
|
||||
- Когда пользователь нажимает на любую из кнопок, предыдущий выбор автоматически скрывается, а вместо него появляется следующий набор кнопок. Кнопка "Назад" позволяет вернуться к предыдущему набору кнопок в случае необходимости. Это помогает сделать интерфейс более удобным и интуитивно понятным для пользователей.
|
||||
- Данные пользователя (учетные данные, адреса, заказы и т.д.) сохраняются в базе данных SQLite3 для последующего использования.
|
||||
- Логирование действий пользователей осуществляется путем записи информации о каждом действии в лог-файлы, включая дату, время, ID пользователя и другие параметры.
|
||||
## Управление из группы и внутри бота:
|
||||
- Группа для заказов управляется операторами и администраторами, которые имеют доступ к соответствующим функциям.
|
||||
- Операторы могут просматривать историю заказов пользователей, отвечать на сообщения, завершать разговоры и управлять заказами.
|
||||
- Администраторы имеют дополнительные функции, такие как выгрузка переписки в формате JSON.
|
||||
- Бот на aiogram используется для более эффективной работы и реализации функций бота через асинхронные методы.
|
||||
- Эта структура и логика позволят создать функционального бота для управления заказами и общения с операторами, обеспечивая удобство пользователей и контроль над данными.
|
||||
- Данные токена id групп, id администраторов, операторов дложны храниться в файле env
|
||||
## Автоматизация
|
||||
|
||||
- Добавить таймеры для отслеживания неактивности пользователя и предложения начать разговор с оператором или оформить заказ при необходимости.
|
||||
- Использовать базу данных для хранения информации о пользователях, заказах и истории коммуникации с операторами.
|
||||
- Реализовать механизм автоматического анализа данных о заказах для предложения персонализированных услуг или скидок.
|
||||
- Создаем базу данных SQLite3 для хранения информации о пользователях, их учетных данных, заказах и истории сообщений с операторами.
|
||||
- Создаем таблицы для каждой категории данных: пользователи, заказы, история сообщений и т.д.
|
||||
- Связываем таблицы между собой по ключам (например, по ID пользователя).
|
||||
- При каждом действии пользователя (нажатие кнопки, отправка сообщения) записываем соответствующую информацию в лог-файлы.
|
||||
- Логируем дату, время действия, ID пользователя, текстовые данные (если есть) и другие необходимые параметры.
|
||||
- Создаем специальную группу для приема заказов, где только операторы и администраторы имеют доступ.
|
||||
- Назначаем операторов и администраторов, которые могут управлять заказами в этой группе.
|
||||
|
||||
1. Функционал операторов:
|
||||
- Операторы могут просматривать историю заказов конкретного пользователя по его ID.
|
||||
- Операторы могут отвечать пользователю из группы используя функцию ответа (replay).
|
||||
- Операторы могут завершать разговор с пользователем с помощью соответствующей кнопки.
|
||||
|
||||
2. Функционал администраторов:
|
||||
- Администраторы имеют все функции операторов.
|
||||
- Дополнительно администраторы могут выгружать переписку операторов и пользователя в виде JSON файла.
|
||||
|
||||
|
||||
|
||||
Логика Бота
|
||||
есть inline клавиотура со следующими кнопками:
|
||||
Учетные данные
|
||||
Изменить ФИО
|
||||
Изменить номер телефона
|
||||
Добавит адрес
|
||||
Поделиться контактом
|
||||
сделать заказ
|
||||
Добавит учетные данные, если данные не введены, если введены то пропустить вопрос.
|
||||
выбрать адрес или указать новый адрес. все веденные адреса сохраняються.
|
||||
спросить время для уборки: утро/День/вечер
|
||||
Спросить тип уборки: Влажная/Сухая/Генеральная
|
||||
Спросить способ оплаты: Картой/Наличными
|
||||
Подьвердить заказ, или предложить изменить ответ на вопрос. далее кнопки вопросов что бы изменить один ответ и после изменения повторно подтвердить.
|
||||
После подтверждения, сообщения с ответами отправляеться группу операторов.
|
||||
История заказов
|
||||
Все отправленные ответы в группу сохраняются как заказ и храниться в базе данных.
|
||||
Заказать звонок
|
||||
Добавит учетные данные, если данные не введены, если введены то пропустить вопрос.
|
||||
Кнопка заказать звонок, отправляет учетные данные (ФИО, номер телефона) в группу операторов.
|
||||
Начать разговор с оератором
|
||||
Добавит учетные данные, если данные не введены, если введены то пропустить вопрос.
|
||||
Кнопка начать разговор, отправляет учетные данные (ФИО, номер телефона) в группу операторов.
|
||||
Оператор из группы нажимает ответить(replay) и пишет сообщение, сообшение отправляеться пользователю
|
||||
пользователь пишет сообщение и оно отправляеться в группу до дех под пока пользователь не нажмет завершить разговор.
|
||||
Если кнопка завершить разговор не нажато, то через 1 час разговор с оператором завершаеться автоматически.
|
||||
При заходе пользователя через 2 часа появляеться первоначальное меню кнопок.
|
||||
Допиши логику, слелай её более автоматизированной.
|
||||
|
||||
ChatGPT
|
||||
Ты создал очень хорошую базу для логики бота! Вот несколько дополнений и идей для автоматизации:
|
||||
|
||||
Учетные данные:
|
||||
|
||||
При первом использовании бота запросить у пользователя учетные данные (ФИО, номер телефона) и сохранить их для последующих заказов. Можно использовать личные данные из Telegram (если пользователь разрешил) для заполнения некоторых полей автоматически.
|
||||
Добавить возможность изменения учетных данных через команду или кнопку "Изменить учетные данные".
|
||||
Сделать заказ:
|
||||
|
||||
После выбора адреса показывать пользователю карту с указанным адресом для подтверждения или возможности изменения.
|
||||
Автоматически предлагать время уборки в зависимости от текущего времени (например, если пользователь заходит в 9 утра, предложить утреннее время уборки).
|
||||
После подтверждения заказа автоматически отправлять уведомление в группу операторов, а также добавлять заказ в историю.
|
||||
История заказов:
|
||||
|
||||
Позволить пользователю просматривать историю своих заказов через бота.
|
||||
Добавить функцию повторного заказа на основе предыдущих заказов.
|
||||
Заказать звонок:
|
||||
|
||||
Позволить пользователю выбрать время для звонка (например, "Заказать звонок через 30 минут").
|
||||
Автоматически отправлять уведомление о заказе звонка в группу операторов с указанием времени.
|
||||
Начать разговор с оператором:
|
||||
|
||||
Добавить возможность выбора темы разговора (например, "Техническая поддержка", "Вопрос по заказу" и т. д.).
|
||||
После завершения разговора автоматически отправлять анкету о качестве обслуживания пользователю для обратной связи.
|
||||
Автоматизация:
|
||||
|
||||
Добавить таймеры для отслеживания неактивности пользователя и предложения начать разговор с оператором или оформить заказ при необходимости.
|
||||
Использовать базу данных для хранения информации о пользователях, заказах и истории коммуникации с операторами.
|
||||
Реализовать механизм автоматического анализа данных о заказах для предложения персонализированных услуг или скидок.
|
||||
Эти функции помогут сделать бота более удобным и эффективным для пользователей и операторов.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Конечно, вот структура файлов для Telegram бота, который использует aiogram, PostgreSQL, logging, inline-кнопки и .env файл для хранения информации о группах админов и операторов. Бот будет делать опросы.
|
||||
|
||||
markdown
|
||||
Копировать код
|
||||
my_telegram_bot/
|
||||
├── .env
|
||||
├── bot.py
|
||||
├── config.py
|
||||
├── database.py
|
||||
├── handlers/
|
||||
│ ├── __init__.py
|
||||
│ ├── admin.py
|
||||
│ ├── polls.py
|
||||
│ ├── start.py
|
||||
├── keyboards/
|
||||
│ ├── __init__.py
|
||||
│ └── inline.py
|
||||
├── middlewares/
|
||||
│ ├── __init__.py
|
||||
│ └── logging.py
|
||||
├── models/
|
||||
│ ├── __init__.py
|
||||
│ └── poll.py
|
||||
├── utils/
|
||||
│ ├── __init__.py
|
||||
│ └── misc.py
|
||||
└── requirements.txt
|
||||
Описание файлов и директорий
|
||||
.env: файл с переменными окружения. Пример содержания:
|
||||
|
||||
env
|
||||
Копировать код
|
||||
BOT_TOKEN=<your_bot_token>
|
||||
DATABASE_URL=postgresql://user:password@localhost:5432/mydatabase
|
||||
ADMINS=123456789,987654321
|
||||
OPERATORS=123123123,321321321
|
||||
bot.py: основной файл для запуска бота.
|
||||
|
||||
python
|
||||
Копировать код
|
||||
import logging
|
||||
from aiogram import Bot, Dispatcher, executor
|
||||
from aiogram.contrib.fsm_storage.memory import MemoryStorage
|
||||
from config import load_config
|
||||
from database import setup_database
|
||||
from middlewares.logging import LoggingMiddleware
|
||||
from handlers import start, admin, polls
|
||||
|
||||
logging.basicConfig(level=logging.INFO)
|
||||
|
||||
config = load_config()
|
||||
bot = Bot(token=config['BOT_TOKEN'])
|
||||
dp = Dispatcher(bot, storage=MemoryStorage())
|
||||
|
||||
dp.middleware.setup(LoggingMiddleware())
|
||||
|
||||
start.register_handlers(dp)
|
||||
admin.register_handlers(dp)
|
||||
polls.register_handlers(dp)
|
||||
|
||||
setup_database()
|
||||
|
||||
if __name__ == '__main__':
|
||||
executor.start_polling(dp, skip_updates=True)
|
||||
config.py: файл для загрузки конфигурации из .env.
|
||||
|
||||
python
|
||||
Копировать код
|
||||
from dotenv import load_dotenv
|
||||
import os
|
||||
|
||||
load_dotenv()
|
||||
|
||||
def load_config():
|
||||
return {
|
||||
'BOT_TOKEN': os.getenv('BOT_TOKEN'),
|
||||
'DATABASE_URL': os.getenv('DATABASE_URL'),
|
||||
'ADMINS': list(map(int, os.getenv('ADMINS').split(','))),
|
||||
'OPERATORS': list(map(int, os.getenv('OPERATORS').split(','))),
|
||||
}
|
||||
database.py: файл для настройки базы данных.
|
||||
|
||||
python
|
||||
Копировать код
|
||||
import sqlalchemy as sa
|
||||
from sqlalchemy.ext.declarative import declarative_base
|
||||
from sqlalchemy.orm import sessionmaker
|
||||
from config import load_config
|
||||
|
||||
Base = declarative_base()
|
||||
|
||||
config = load_config()
|
||||
engine = sa.create_engine(config['DATABASE_URL'])
|
||||
Session = sessionmaker(bind=engine)
|
||||
|
||||
def setup_database():
|
||||
Base.metadata.create_all(engine)
|
||||
handlers/__init__.py: инициализация пакета хэндлеров.
|
||||
|
||||
python
|
||||
Копировать код
|
||||
from aiogram import Dispatcher
|
||||
|
||||
def register_handlers(dp: Dispatcher):
|
||||
from . import start, admin, polls
|
||||
start.register_handlers(dp)
|
||||
admin.register_handlers(dp)
|
||||
polls.register_handlers(dp)
|
||||
handlers/admin.py: хэндлеры для админов.
|
||||
|
||||
python
|
||||
Копировать код
|
||||
from aiogram import types, Dispatcher
|
||||
from config import load_config
|
||||
|
||||
config = load_config()
|
||||
|
||||
async def admin_command(message: types.Message):
|
||||
if message.from_user.id not in config['ADMINS']:
|
||||
await message.reply("You are not an admin!")
|
||||
return
|
||||
await message.reply("Hello, Admin!")
|
||||
|
||||
def register_handlers(dp: Dispatcher):
|
||||
dp.register_message_handler(admin_command, commands=['admin'])
|
||||
handlers/polls.py: хэндлеры для опросов.
|
||||
|
||||
python
|
||||
Копировать код
|
||||
from aiogram import types, Dispatcher
|
||||
from aiogram.types import InlineKeyboardMarkup, InlineKeyboardButton
|
||||
from models.poll import Poll
|
||||
from database import Session
|
||||
|
||||
async def create_poll(message: types.Message):
|
||||
markup = InlineKeyboardMarkup()
|
||||
markup.add(InlineKeyboardButton('Option 1', callback_data='vote_1'))
|
||||
markup.add(InlineKeyboardButton('Option 2', callback_data='vote_2'))
|
||||
await message.reply("Choose an option:", reply_markup=markup)
|
||||
|
||||
async def handle_vote(callback_query: types.CallbackQuery):
|
||||
option = callback_query.data.split('_')[1]
|
||||
with Session() as session:
|
||||
poll = Poll(option=option)
|
||||
session.add(poll)
|
||||
session.commit()
|
||||
await callback_query.answer(f"You voted for option {option}")
|
||||
|
||||
def register_handlers(dp: Dispatcher):
|
||||
dp.register_message_handler(create_poll, commands=['poll'])
|
||||
dp.register_callback_query_handler(handle_vote, lambda c: c.data.startswith('vote_'))
|
||||
handlers/start.py: хэндлер для команды /start.
|
||||
|
||||
python
|
||||
Копировать код
|
||||
from aiogram import types, Dispatcher
|
||||
|
||||
async def start_command(message: types.Message):
|
||||
await message.reply("Hello! I am your polling bot.")
|
||||
|
||||
def register_handlers(dp: Dispatcher):
|
||||
dp.register_message_handler(start_command, commands=['start'])
|
||||
keyboards/inline.py: файл для создания inline-клавиатур.
|
||||
|
||||
python
|
||||
Копировать код
|
||||
from aiogram.types import InlineKeyboardMarkup, InlineKeyboardButton
|
||||
|
||||
def create_poll_keyboard():
|
||||
markup = InlineKeyboardMarkup()
|
||||
markup.add(InlineKeyboardButton('Option 1', callback_data='vote_1'))
|
||||
markup.add(InlineKeyboardButton('Option 2', callback_data='vote_2'))
|
||||
return markup
|
||||
middlewares/logging.py: файл для логирования.
|
||||
|
||||
python
|
||||
Копировать код
|
||||
from aiogram.dispatcher.middlewares import BaseMiddleware
|
||||
import logging
|
||||
|
||||
class LoggingMiddleware(BaseMiddleware):
|
||||
async def on_process_message(self, message, data):
|
||||
logging.info(f"Received message from {message.from_user.id}: {message.text}")
|
||||
models/poll.py: модель для хранения данных опросов.
|
||||
|
||||
python
|
||||
Копировать код
|
||||
from sqlalchemy import Column, Integer, String
|
||||
from database import Base
|
||||
|
||||
class Poll(Base):
|
||||
__tablename__ = 'polls'
|
||||
|
||||
id = Column(Integer, primary_key=True)
|
||||
option = Column(String, nullable=False)
|
||||
utils/misc.py: утилитарные функции.
|
||||
|
||||
python
|
||||
Копировать код
|
||||
# В этом файле можно разместить различные вспомогательные функции.
|
||||
requirements.txt: зависимости проекта.
|
||||
|
||||
Копировать код
|
||||
aiogram
|
||||
python-dotenv
|
||||
sqlalchemy
|
||||
Эта структура предоставляет базу для дальнейшего расширения функциональности бота. Вы можете добавлять дополнительные обработчики, модели и утилиты по мере необходимости.
|
||||
Reference in New Issue
Block a user