Обновление 4.2

This commit is contained in:
sergey
2025-02-08 19:12:38 +07:00
parent 6e2e7bdc0f
commit ef6906b240
39 changed files with 730 additions and 553 deletions

View File

@@ -2,7 +2,6 @@
# Инициализация пакета keyboards, для работы с клавиатурами # Инициализация пакета keyboards, для работы с клавиатурами
from aiogram import Router from aiogram import Router
from .inline_kb import router as inline_kb_router
from .reply_kb import router as reply_kb_router from .reply_kb import router as reply_kb_router
from .inline_kb import * from .inline_kb import *
from .reply_kb import * from .reply_kb import *
@@ -13,7 +12,4 @@ router = Router(name="kb_router")
# Список подключаемых роутеров сверху-вниз # Список подключаемых роутеров сверху-вниз
router.include_routers( router.include_routers(reply_kb_router)
inline_kb_router,
reply_kb_router,
)

View File

@@ -1,10 +1,8 @@
# BotCode/keyboards/inline_kb/__init__.py # BotCode/keyboards/inline_kb/__init__.py
# Инициализация пакета inline_keyboards, для работы с инлайн клавиатурами # Инициализация пакета inline_keyboards, для работы с инлайн клавиатурами
from aiogram import Router
from .actor_kb import * from .actor_kb import *
from .randnum_kb import * from .randnum_kb import *
# Объявление роутера и настройка экспорта модулей # Объявление роутера и настройка экспорта модулей
__all__ = ("router", "actor_kb", "ButtonInl") __all__ = ("randnum_kb", "actor_kb")
router = Router(name="inline_kb_router")

View File

@@ -1,14 +1,11 @@
# BotCode/keyboards/inline_kb/actor_kb.py # BotCode/keyboards/inline_kb/actor_kb.py
# Создания инлайн-клавиатуры на команду: /actor # Создания инлайн-клавиатуры на команду: /actor
from aiogram import Router
from aiogram.types import InlineKeyboardMarkup from aiogram.types import InlineKeyboardMarkup
from aiogram.utils.keyboard import InlineKeyboardBuilder from BotLibrary import ikb
# Создание роутера и настройка экспорта # Создание роутера и настройка экспорта
__all__ = ("router", "get_actor_kb", "kb_text", "ButtonInl",) __all__ = ("get_actor_kb", "ButtonInl")
kb_text = "ActorKb"
router = Router(name="actor_kb_router")
# Класс с параметрами кнопок # Класс с параметрами кнопок
@@ -35,20 +32,14 @@ class ButtonInl:
# Функция создания клавиатуры на команду: /actor # Функция создания клавиатуры на команду: /actor
def get_actor_kb() -> InlineKeyboardMarkup: def get_actor_kb() -> InlineKeyboardMarkup:
# Создаем билдер клавиатуры
builder = InlineKeyboardBuilder()
# Добавляем кнопки, группируя их по строкам # Добавляем кнопки, группируя их по строкам
builder.button(text=ButtonInl.tg_chn, url=ButtonInl.tg_chn_url) ikb.button(text=ButtonInl.tg_chn, url=ButtonInl.tg_chn_url)
builder.button(text=ButtonInl.tg_chat, url=ButtonInl.tg_chat_url) ikb.button(text=ButtonInl.tg_chat, url=ButtonInl.tg_chat_url)
builder.button(text=ButtonInl.web_text, url=ButtonInl.web_url)
builder.button(text=ButtonInl.random_site, callback_data=ButtonInl.random_site_cbd)
builder.button(text=ButtonInl.random_num_dice, callback_data=ButtonInl.random_num_dice_cbd)
builder.button(text=ButtonInl.random_num_modal, callback_data=ButtonInl.random_num_modal_cdb)
builder.adjust(2, 1)
return builder.as_markup()
ikb.button(text=ButtonInl.web_text, url=ButtonInl.web_url)
ikb.button(text=ButtonInl.random_site, callback_data=ButtonInl.random_site_cbd)
ikb.button(text=ButtonInl.random_num_dice, callback_data=ButtonInl.random_num_dice_cbd)
ikb.button(text=ButtonInl.random_num_modal, callback_data=ButtonInl.random_num_modal_cdb)
ikb.adjust(2, 1)
return ikb.as_markup()

View File

@@ -1,27 +1,21 @@
# BotCode/keyboards/inline_kb/randnum_kb.py # BotCode/keyboards/inline_kb/randnum_kb.py
# Создания инлайн-клавиатуры на команду: /randnum # Создания инлайн-клавиатуры на команду: /randnum
from aiogram import Router
from aiogram.types import InlineKeyboardMarkup from aiogram.types import InlineKeyboardMarkup
from aiogram.utils.keyboard import InlineKeyboardBuilder from BotLibrary import ikb
# Создание роутера и настройка экспорта # Создание роутера и настройка экспорта
__all__ = ("router", "get_randnum_kb", "kb_text", "ButtonInl",) __all__ = ("get_randnum_kb", "ButtonInl")
kb_text = "RandNumKb"
router = Router(name="actor_kb_router")
# Класс с параметрами кнопок # Класс с параметрами кнопок
class ButtonInl: class ButtonInl:
text = "Получить ответ"
mark_cbd = "mark_cbd" mark_cbd = "mark_cbd"
# Функция создания клавиатуры на команду: /actor # Функция создания клавиатуры на команду: /actor
def get_randnum_kb(text_msg="Получить ответ") -> InlineKeyboardMarkup: def get_randnum_kb() -> InlineKeyboardMarkup:
# Создаем билдер клавиатуры ikb.button(text=ButtonInl.text, callback_data=ButtonInl.mark_cbd)
builder = InlineKeyboardBuilder() ikb.add_row(1)
return ikb.as_markup()
# Добавляем кнопки, группируя их по строкам
builder.button(text=text_msg, callback_data=ButtonInl.mark_cbd)
return builder.as_markup()

View File

@@ -2,19 +2,13 @@
# Инициализация пакета reply_kb, для работы с клавиатурами # Инициализация пакета reply_kb, для работы с клавиатурами
from aiogram import Router from aiogram import Router
from .start_kb import router as start_kb_router
from .help_kb import router as help_kb_router from .help_kb import router as help_kb_router
from .more_kb import router as more_kb_router
# Объявление роутера и настройка экспорта модулей # Объявление роутера и настройка экспорта модулей
__all__ = ("router",) __all__ = ("router",)
router = Router(name="reply_kb_router") router = Router(name=__name__)
# Список подключаемых роутеров сверху-вниз # Список подключаемых роутеров сверху-вниз
router.include_routers( router.include_routers(help_kb_router)
start_kb_router,
help_kb_router,
more_kb_router,
)

View File

@@ -1,13 +1,13 @@
# BotCode/keyboards/reply_kb/help_kb.py # BotCode/keyboards/reply_kb/help_kb.py
# Создание клавиатуры для сообщения: "Помогите!" # Создание клавиатуры для сообщения: "Помогите!"
# Создает небольшую числовую клавиатуру для тестов
from aiogram import Router, F from aiogram import Router, F
from aiogram.types import ReplyKeyboardMarkup, KeyboardButton from aiogram.types import ReplyKeyboardMarkup, KeyboardButton
from aiogram.utils.keyboard import ReplyKeyboardBuilder from BotLibrary import rkb
# Создание роутера и настройка экспорта модулей # Создание роутера и настройка экспорта модулей
__all__ = ("router", "get_help_kb", "kb_text",) __all__ = ("router", "get_help_kb")
kb_text = "HelpKb"
router = Router(name="help_kb_router") router = Router(name="help_kb_router")
@@ -18,15 +18,13 @@ def get_help_kb() -> ReplyKeyboardMarkup:
"1", "2", "3", "1", "2", "3",
"4", "5", "6", "4", "5", "6",
"7", "8", "9", "7", "8", "9",
"0", "0",
] ]
# Создание кнопки каждого числа по отдельности
buttons_row = [KeyboardButton(text=num) for num in numbers] buttons_row = [KeyboardButton(text=num) for num in numbers]
builder = ReplyKeyboardBuilder()
for num in numbers: for num in numbers:
builder.button(text=num) rkb.button(text=num)
builder.adjust(3)
builder.row(buttons_row[3], buttons_row[9])
builder.add(buttons_row[-1])
return builder.as_markup(resize_keyboard=True) rkb.adjust(3)
return rkb.as_markup(resize_keyboard=True)

View File

@@ -1,39 +1,25 @@
# BotCode/keyboards/reply_kb/more_kb.py # BotCode/keyboards/reply_kb/more_kb.py
# Создания клавиатуры на команду: /more # Создания клавиатуры на команду: /more
# Для проверки отправки информации о пользователе
from aiogram import Router from aiogram.types import KeyboardButtonPollType, ReplyKeyboardMarkup
from aiogram.types import KeyboardButtonPollType from BotLibrary import rkb
from aiogram.utils.keyboard import ReplyKeyboardBuilder
# Создание роутера и настройка экспорта модулей # Настройка экспорта из этого модуля
__all__ = ("router", "get_more_kb", "kb_text",) __all__ = ("get_more_kb", "ButtonText")
kb_text = "HelpKb"
router = Router(name="more_kb_router")
# Класс с названиями кнопок # Создание класса со значениями кнопок
class ButtonText: class ButtonText:
More = "More"
Location = "Отправить локацию" Location = "Отправить локацию"
Contact = "Отправить контакт" Contact = "Отправить контакт"
Chat = "Отправить чат???"
Poll = "Отправить опрос" Poll = "Отправить опрос"
Users = "Что то с common"
# Функция создания клавиатуры на команду: /more # Функция создания клавиатуры на команду: /more
def get_more_kb() -> ReplyKeyboardBuilder: def get_more_kb() -> ReplyKeyboardMarkup:
builder = ReplyKeyboardBuilder() rkb.button(text=ButtonText.Location, request_location=True)
# builder.add(KeyboardButton(text=ButtonText.Location, request_location=True)) rkb.button(text=ButtonText.Contact, request_contact=True)
builder.button(text=ButtonText.Location, request_location=True) rkb.button(text=ButtonText.Poll, request_poll=KeyboardButtonPollType())
builder.button(text=ButtonText.Contact, request_contact=True) rkb.adjust(1)
builder.button(text=ButtonText.Poll, request_poll=KeyboardButtonPollType()) return rkb.as_markup(resize_keyboard=True, one_time_keyboard=True)
builder.adjust(1)
return builder.as_markup(resize_keyboard=True)
# Один из вариантов создание клавиатуры
# markup = ReplyKeyboardMarkup(
# keyboard=[]
# )
# return markup

View File

@@ -1,17 +1,15 @@
# BotCode/keyboards/reply_kb/start_kb.py # BotCode/keyboards/reply_kb/start_kb.py
# Создания клавиатуры на команду: /start # Создания клавиатуры на команду: /start
# Для создания базовой клавиатуры с некими элементами
from aiogram import Router from aiogram.types import ReplyKeyboardMarkup
from aiogram.types import ReplyKeyboardMarkup, KeyboardButton from BotLibrary import rkb
from aiogram.utils.keyboard import ReplyKeyboardBuilder
# Создание роутера и настройка экспорта # Настройка экспорта из этого модуля
__all__ = ("router", "get_start_kb", "kb_text", "ButtonText",) __all__ = ("get_start_kb", "ButtonText")
kb_text = "StartKb"
router = Router(name="start_kb_router")
# Класс с названиями кнопок # Создание класса со значениями кнопок
class ButtonText: class ButtonText:
Hello = "Привет!" Hello = "Привет!"
Help = "Помогите!" Help = "Помогите!"
@@ -19,16 +17,9 @@ class ButtonText:
# Функция создания клавиатуры на команду: /start # Функция создания клавиатуры на команду: /start
def get_start_kb() -> ReplyKeyboardBuilder: def get_start_kb() -> ReplyKeyboardMarkup:
button_hello = KeyboardButton(text=ButtonText.Hello) rkb.button(text=ButtonText.Hello)
button_help = KeyboardButton(text=ButtonText.Help) rkb.button(text=ButtonText.Help)
button_bye = KeyboardButton(text=ButtonText.Bye) rkb.button(text=ButtonText.Bye)
rkb.adjust(2)
buttons_first_row = [button_hello, button_help] return rkb.as_markup(resize_keyboard=True, one_time_keyboard=True)
buttons_second_row = [button_bye]
markup = ReplyKeyboardMarkup(
keyboard=[buttons_first_row, buttons_second_row],
resize_keyboard=True,
one_time_keyboard=True,
)
return markup

View File

@@ -0,0 +1,23 @@
# BotCode/keyboards/reply_kb/survey_yesno_kb.py
# Создания клавиатуры на команду: /survey
# Для того, чтобы определить отправлять ли сообщения в будущем
from aiogram.types import ReplyKeyboardMarkup
from BotLibrary import rkb
# Настройка экспорта из этого модуля
__all__ = ("get_survey_email_kb", "ButtonText")
# Создание класса со значениями кнопок
class ButtonText:
Yes = "Да"
No = "Нет"
# Функция создания клавиатуры на команду: /survey
def get_survey_email_kb() -> ReplyKeyboardMarkup:
rkb.button(text=ButtonText.Yes)
rkb.button(text=ButtonText.No)
rkb.adjust(1)
return rkb.as_markup(resize_keyboard=True, one_time_keyboard=True)

View File

@@ -6,6 +6,7 @@ from .callback_handlers import router as callback_handlers_router
from .commands.bot_command import set_commands from .commands.bot_command import set_commands
from .administration import router as admin_head_router from .administration import router as admin_head_router
from .commands import router as commands_head_router from .commands import router as commands_head_router
from .survey import router as survey_head_router
from .downloads import router as downloads_head_router from .downloads import router as downloads_head_router
from .common import router as users_head_router from .common import router as users_head_router
@@ -19,6 +20,7 @@ router = Router(name="main_router")
router.include_routers( router.include_routers(
callback_handlers_router, callback_handlers_router,
admin_head_router, admin_head_router,
survey_head_router,
commands_head_router, commands_head_router,
downloads_head_router, downloads_head_router,
) )

View File

@@ -4,12 +4,10 @@
from aiogram import Router, types, F from aiogram import Router, types, F
from aiogram.filters import Command from aiogram.filters import Command
from BotLibrary import * from BotLibrary import *
from BotCode.routers.msg_default import msg_default
# Создание роутера и настройка экспорта модулей # Создание роутера и настройка экспорта модулей
__all__ = ("router",) __all__ = ("router",)
from routers.msg_default import msg_default
router = Router(name="secret_message_router") router = Router(name="secret_message_router")
log_type = "Admin" log_type = "Admin"

View File

@@ -4,7 +4,7 @@
from aiogram import Router, types, F from aiogram import Router, types, F
from aiogram.enums import ChatAction from aiogram.enums import ChatAction
from BotLibrary import * from BotLibrary import *
from routers.msg_default import msg_default from BotCode.routers.msg_default import msg_default
# Создание роутера и настройка экспорта # Создание роутера и настройка экспорта
__all__ = ("router",) __all__ = ("router",)

View File

@@ -4,7 +4,7 @@
from random import randint from random import randint
from aiogram import Router, F from aiogram import Router, F
from aiogram.types import CallbackQuery from aiogram.types import CallbackQuery
from keyboards.inline_kb.actor_kb import ButtonInl from BotCode.keyboards.inline_kb.actor_kb import ButtonInl
# Создание роутера и настройка экспорта модулей # Создание роутера и настройка экспорта модулей
__all__ = ("router",) __all__ = ("router",)

View File

@@ -4,7 +4,7 @@
from random import randint from random import randint
from aiogram import Router, F from aiogram import Router, F
from aiogram.types import CallbackQuery from aiogram.types import CallbackQuery
from keyboards.inline_kb.randnum_kb import ButtonInl, get_randnum_kb from BotCode.keyboards.inline_kb.randnum_kb import ButtonInl, get_randnum_kb
# Создание роутера и настройка экспорта модулей # Создание роутера и настройка экспорта модулей
__all__ = ("router",) __all__ = ("router",)

View File

@@ -4,8 +4,8 @@
from aiogram import Router, types, F from aiogram import Router, types, F
from aiogram.filters import Command from aiogram.filters import Command
from BotLibrary import * from BotLibrary import *
from keyboards.inline_kb.actor_kb import get_actor_kb from BotCode.keyboards.inline_kb.actor_kb import get_actor_kb
from routers.msg_default import * from BotCode.routers.msg_default import *
# Создание роутера, переменных и настройка экспорта модулей # Создание роутера, переменных и настройка экспорта модулей
__all__ = ("router", "cmd_actor", "log_type",) __all__ = ("router", "cmd_actor", "log_type",)

View File

@@ -4,7 +4,7 @@
from aiogram import Router, types, F from aiogram import Router, types, F
from aiogram.filters import Command from aiogram.filters import Command
from BotLibrary import * from BotLibrary import *
from routers.msg_default import msg_default from BotCode.routers.msg_default import msg_default
# Создание роутера, переменных и экспорта модулей # Создание роутера, переменных и экспорта модулей
__all__ = ("router", "exit_cmd", "log_type", "description") __all__ = ("router", "exit_cmd", "log_type", "description")

View File

@@ -4,8 +4,8 @@
from aiogram import Router, types, F from aiogram import Router, types, F
from aiogram.filters import Command from aiogram.filters import Command
from BotLibrary import * from BotLibrary import *
from keyboards.reply_kb.help_kb import get_help_kb from BotCode.keyboards.reply_kb.help_kb import get_help_kb
from routers.msg_default import msg_default from BotCode.routers.msg_default import msg_default
# Создание роутера, переменных и экспорта модулей # Создание роутера, переменных и экспорта модулей
__all__ = ("router", "cmd_help", "log_type", "description") __all__ = ("router", "cmd_help", "log_type", "description")

View File

@@ -4,8 +4,8 @@
from aiogram import Router, types, F from aiogram import Router, types, F
from aiogram.filters import Command from aiogram.filters import Command
from BotLibrary import * from BotLibrary import *
from keyboards.reply_kb.more_kb import get_more_kb from BotCode.keyboards.reply_kb.more_kb import get_more_kb
from routers.msg_default import msg_default from BotCode.routers.msg_default import msg_default
# Создание роутера, переменных и экспорта модулей # Создание роутера, переменных и экспорта модулей
__all__ = ("router", "cmd_start", "log_type",) __all__ = ("router", "cmd_start", "log_type",)

View File

@@ -4,8 +4,8 @@
from aiogram import Router, types, F from aiogram import Router, types, F
from aiogram.filters import Command from aiogram.filters import Command
from BotLibrary import * from BotLibrary import *
from keyboards.inline_kb.randnum_kb import get_randnum_kb from BotCode.keyboards.inline_kb.randnum_kb import get_randnum_kb
from routers.msg_default import msg_default from BotCode.routers.msg_default import msg_default
# Создание роутера, переменных и экспорта модулей # Создание роутера, переменных и экспорта модулей
__all__ = ("router", "cmd_randnum", "log_type",) __all__ = ("router", "cmd_randnum", "log_type",)

View File

@@ -4,8 +4,8 @@
from aiogram import Router, types, F from aiogram import Router, types, F
from aiogram.filters import Command, CommandStart from aiogram.filters import Command, CommandStart
from BotLibrary import * from BotLibrary import *
from keyboards.reply_kb.start_kb import get_start_kb from BotCode.keyboards.reply_kb.start_kb import get_start_kb
from routers.msg_default import msg_default from BotCode.routers.msg_default import msg_default
# Создание роутера, переменных и настройка экспорта модулей # Создание роутера, переменных и настройка экспорта модулей
__all__ = ("router", "cmd_start", "log_type", "description") __all__ = ("router", "cmd_start", "log_type", "description")

View File

@@ -4,7 +4,7 @@
from aiogram import Router, types, F from aiogram import Router, types, F
from aiogram.filters import Command from aiogram.filters import Command
from BotLibrary import * from BotLibrary import *
from routers.msg_default import msg_default from BotCode.routers.msg_default import msg_default
# Создание роутера, переменных и настройка экспорта модулей # Создание роутера, переменных и настройка экспорта модулей
__all__ = ("router", "start_time", "log_type", "description") __all__ = ("router", "start_time", "log_type", "description")

View File

@@ -4,7 +4,7 @@
from BotLibrary import * from BotLibrary import *
from aiogram import Router, types from aiogram import Router, types
from routers.msg_default import * from BotCode.routers.msg_default import *
# Настройка экспорта модулей и роутера # Настройка экспорта модулей и роутера
__all__ = ("router",) __all__ = ("router",)
@@ -15,7 +15,7 @@ log_type = "Messages"
# Хэндлер на все сообщения и записывает данные # Хэндлер на все сообщения и записывает данные
@router.message() @router.message()
async def handle_all_messages(message: types.Message): async def handle_all_messages(message: types.Message):
user_name = find_imp_id(message.from_user.id) user_name = find_imp_id(message.chat.id)
message_type = types_message(message) message_type = types_message(message)
await common_msg_logginger(message, user_name, message_type, log_type) await common_msg_logginger(message, user_name, message_type, log_type)

View File

@@ -4,9 +4,9 @@
from aiogram import Router, types, F from aiogram import Router, types, F
from aiogram.types import ReplyKeyboardRemove from aiogram.types import ReplyKeyboardRemove
from routers.msg_default import * from BotCode.routers.msg_default import *
from BotLibrary import find_imp_id, types_message, common_msg_logginger from BotLibrary import find_imp_id, types_message, common_msg_logginger
from keyboards.reply_kb.start_kb import ButtonText from BotCode.keyboards.reply_kb.start_kb import ButtonText
# Настройка экспорта модулей и роутера # Настройка экспорта модулей и роутера
__all__ = ("router",) __all__ = ("router",)

View File

@@ -2,7 +2,7 @@
# Небольшое облегчение для команд # Небольшое облегчение для команд
from loguru import logger from loguru import logger
from routers.downloads.download_avatar_all import download_avatar from BotCode.routers.downloads.download_avatar_all import download_avatar
from BotLibrary.analitics.message_to_file import write_message_to_file from BotLibrary.analitics.message_to_file import write_message_to_file
from BotLibrary.analitics.user_data_to_file import write_user_info_to_file from BotLibrary.analitics.user_data_to_file import write_user_info_to_file

View File

@@ -0,0 +1,15 @@
# BotCode/routers/survey/__init__.py
# Инициализация пакета survey, для работы с закачкой данных
from aiogram import Router
from .handlers import router as handlers_router
# Объявление роутера и настройка экспорта модулей
__all__ = ("router", )
router = Router(name="survey_head_router")
# Список подключаемых роутеров сверху-вниз
router.include_routers(
handlers_router,
)

View File

@@ -0,0 +1,89 @@
from aiogram import Router, types, F
from aiogram.filters import Command
from aiogram.fsm.context import FSMContext
from aiogram.utils import markdown
from BotLibrary import BotVariables
from email_validators import valid_email
from keyboards.reply_kb.survey_yesno_kb import get_survey_email_kb
from .states import Survey
router = Router(name=__name__)
@router.message(Command("survey", prefix=BotVariables.prefixs))
async def handler_survey(message: types.Message, state: FSMContext):
await state.set_state(Survey.full_name)
await message.answer(
text="Приветствую тебя в нашем маленьком раю! Подожди, я кажется не знаю твоего имени.. Как тебя зовут?",
reply_markup=types.ReplyKeyboardRemove(),
)
@router.message(Survey.full_name, F.text)
async def handler_survey_user_name(message: types.Message, state: FSMContext):
await state.update_data(full_name=message.text)
await message.answer(
f"Привет, {markdown.hbold(message.text)}! Скажи свою почту)",
)
await state.set_state(Survey.email)
@router.message(Survey.full_name)
async def handler_survey_user_name_invalid(message: types.Message):
await message.answer(
f"Извините, но кажется я вас не понимаю.. Повторите свое имя, пожалуйста!!!",
)
@router.message(Survey.email, F.text.cast(valid_email).as_("email"))
async def handler_survey_email(message: types.Message, state: FSMContext, email: str):
await state.update_data(email=email)
await message.answer(
text=f"Отличная почта: {markdown.hcode(message.text)}! "
f"\nХочешь ли получать письма от меня?",
reply_markup=get_survey_email_kb()
)
await state.set_state(Survey.email_newsletter)
async def send_survey_results(message: types.Message, data: dict) -> None:
text = markdown.text(
"Ваши результаты: \n",
markdown.text(f"Имя: {markdown.hbold(data['full_name'])}"),
markdown.text(f"Почта: {markdown.hcode(data['email'])}"),
(
"Отлично, теперь ждите новых сообщений)"
if data["news_letter"]
else "Что-ж, мы не будем писать вам!"
),
sep='\n'
)
await message.answer(text=text, reply_markup=types.ReplyKeyboardRemove())
@router.message(Survey.email)
async def handler_survey_email_invalid(message: types.Message):
await message.answer(
text="Почта не подошла, попробуйте еще раз!",
)
@router.message(Survey.email_newsletter, F.text.casefold() == "да")
async def handle_survey_email_newsletter_ok(message: types.Message, state: FSMContext):
data = await state.update_data(news_letter=True)
await state.clear()
await send_survey_results(message, data)
@router.message(Survey.email_newsletter, F.text.casefold() == "нет")
async def handle_survey_email_newsletter_no(message: types.Message, state: FSMContext):
data = await state.update_data(news_letter=False)
await state.clear()
await send_survey_results(message, data)
@router.message(Survey.email_newsletter)
async def handle_survey_email_newsletter_not_understand(message: types.Message, state: FSMContext):
await message.answer(
text=f"Простите, я не понимаю пожалуйста ответьте {markdown.hcode("да")} или {markdown.hcode("нет")}!"
)

View File

@@ -0,0 +1,15 @@
from enum import StrEnum
from aiogram.fsm.state import StatesGroup, State
class Survey(StatesGroup):
full_name = State()
age = State()
email = State()
sport = State()
email_newsletter = State()
class Sports(StrEnum):
tennis = "Теннис"
football = "Футбол"
fomula_one = "Гонки"

View File

@@ -6,3 +6,4 @@ from .analitics import *
from .library import * from .library import *
from .media import * from .media import *
from .configs import * from .configs import *
from .validators import *

View File

@@ -2,7 +2,7 @@
# Определение типа сообщения # Определение типа сообщения
from aiogram.types import ContentType from aiogram.types import ContentType
from configs import * from ..configs import *
from .find_ids import find_imp_id from .find_ids import find_imp_id
# Настройка экспорта модулей и логирования # Настройка экспорта модулей и логирования

View File

@@ -6,7 +6,7 @@ import json
import datetime import datetime
from aiogram.types import User, Birthdate from aiogram.types import User, Birthdate
from configs import * from ..configs import *
from ..library.time import TimeVariable from ..library.time import TimeVariable
# Настройка экспорта модулей и логирования # Настройка экспорта модулей и логирования

View File

@@ -68,4 +68,4 @@ class DataID:
groups = data_list_id.get("important_groups_ids", {}) groups = data_list_id.get("important_groups_ids", {})
users = data_list_id.get("important_users_list_ids", {}) users = data_list_id.get("important_users_list_ids", {})
channels = data_list_id.get("important_channel_ids", {}) channels = data_list_id.get("important_channel_ids", {})
important = {**admins, **groups, **users, **channels} important = {**groups, **admins, **users, **channels}

View File

@@ -2,20 +2,25 @@
# Создание и настройка бота в одном файле # Создание и настройка бота в одном файле
from aiogram import Dispatcher, Bot, F from aiogram import Dispatcher, Bot, F
from aiogram.client.default import DefaultBotProperties
from aiogram.enums import ParseMode from aiogram.enums import ParseMode
from aiogram.client.default import DefaultBotProperties
from aiogram.utils.keyboard import ReplyKeyboardBuilder, InlineKeyboardBuilder
from apscheduler.schedulers.asyncio import AsyncIOScheduler from apscheduler.schedulers.asyncio import AsyncIOScheduler
from .time import * from .time import *
from configs import bot_token, BotVariables from ..configs import bot_token, BotVariables
# Настройка экспорта модулей и логирования # Настройка экспорта из этого модуля
__all__ = ("dp", "bot", "scheduler", "F_Media", "BotInfo", "bot_get_info") __all__ = ("dp", "rkb", "ikb", "bot", "scheduler",
log_type = "Bot" "F_Media", "F_All", "BotInfo", "bot_get_info")
# Создание экземпляра диспатчера и его параметров # Создание экземпляра диспатчера, строителей кнопок
dp = Dispatcher() dp = Dispatcher()
rkb = ReplyKeyboardBuilder()
ikb = InlineKeyboardBuilder()
# Настройка параметров диспатчера
dp["started_at"] = host_time dp["started_at"] = host_time
dp["started_at_msk"] = get_choice_time(TimeVariable.choice_utc_msk) dp["started_at_msk"] = get_choice_time(TimeVariable.choice_utc_msk)
dp["is_active"] = True # Флаг активности бота dp["is_active"] = True # Флаг активности бота
@@ -46,6 +51,7 @@ bot_properties = DefaultBotProperties(
bot = Bot(token=bot_token, default=bot_properties) # Объявление бота bot = Bot(token=bot_token, default=bot_properties) # Объявление бота
scheduler = AsyncIOScheduler(timezone=get_time_zone()) # Создание планировщика scheduler = AsyncIOScheduler(timezone=get_time_zone()) # Создание планировщика
F_Media = F.photo | F.files | F.video | F.animation | F.voice | F.video_note # Фильтр-медиа F_Media = F.photo | F.files | F.video | F.animation | F.voice | F.video_note # Фильтр-медиа
F_All = F.text | F.photo | F.files | F.video | F.animation | F.voice | F.video_note # Фильтр на все
# Класс для хранения данных о боте (некоторые переменные даны как шаблон) # Класс для хранения данных о боте (некоторые переменные даны как шаблон)

View File

@@ -0,0 +1,5 @@
# BotLibrary/validators/__init__.py
# Инициализация пакета validator, для работы с валидацией данных
# Импортируем библиотеки для экспорта
from .email_validators import *

View File

@@ -0,0 +1,15 @@
# BotLibrary/validators/email_validators.py
# Создание валидации почты для проекта
from email_validator import validate_email, EmailNotValidError
# Настройка экспорта из этого модуля
__all__ = ("valid_email",)
def valid_email(text: str) -> str | None:
try:
email = validate_email(text)
except EmailNotValidError:
return None
return email.normalized

View File

@@ -42,4 +42,10 @@
- [ ] Сделать проверку на ошибки в edit_bot? (Там также добавлена команда set_commands) - [ ] Сделать проверку на ошибки в edit_bot? (Там также добавлена команда set_commands)
--- ---
07.02.2025
- [ ] Сделать проверку на личные сообщения
- [ ] Починить start_time и отображение времени
- [ ] Модуль день рождение
- [ ] FSM

View File

@@ -9,11 +9,13 @@
"1398573474": "Финаки", "1398573474": "Финаки",
"1851081467": "Финик", "1851081467": "Финик",
"929782381": "Хиде", "929782381": "Хиде",
"6714237814": "Слешик" "6714237814": "Слешик",
"1686743480": "Полина",
"1184519857": "Катаз"
}, },
"important_groups_ids": { "important_groups_ids": {
"1087968824": "GroupAnonymousBot", "1087968824": "GroupAnonymousBot",
"-1002247934490": "Сплетни_лавочек", "-1002442589033": "Любовники Сергея",
"-1002124483077": "Труба_Сквад", "-1002124483077": "Труба_Сквад",
"-1002123850090": "Тест_Чат", "-1002123850090": "Тест_Чат",
"-1001552311087": "Всеудет_Хорошо" "-1001552311087": "Всеудет_Хорошо"

874
poetry.lock generated

File diff suppressed because it is too large Load Diff

View File

@@ -19,7 +19,6 @@ pytz = "^2024.2"
termcolor = "^2.5.0" termcolor = "^2.5.0"
colorama = "^0.4.6" colorama = "^0.4.6"
art = "^6.4" art = "^6.4"
cowsay = "^6.1"
python-dotenv = "^1.0.1" python-dotenv = "^1.0.1"
pydantic-settings = "^2.7.0" pydantic-settings = "^2.7.0"
python-decouple = "^3.8" python-decouple = "^3.8"
@@ -29,6 +28,7 @@ customtkinter = "^5.2.2"
pillow = "^11.0.0" pillow = "^11.0.0"
certifi = "^2024.12.14" certifi = "^2024.12.14"
idna = "^3.10" idna = "^3.10"
email-validator = "^2.2.0"
[build-system] [build-system]