Обновление 4.2
This commit is contained in:
@@ -2,7 +2,6 @@
|
||||
# Инициализация пакета keyboards, для работы с клавиатурами
|
||||
|
||||
from aiogram import Router
|
||||
from .inline_kb import router as inline_kb_router
|
||||
from .reply_kb import router as reply_kb_router
|
||||
from .inline_kb import *
|
||||
from .reply_kb import *
|
||||
@@ -13,7 +12,4 @@ router = Router(name="kb_router")
|
||||
|
||||
|
||||
# Список подключаемых роутеров сверху-вниз
|
||||
router.include_routers(
|
||||
inline_kb_router,
|
||||
reply_kb_router,
|
||||
)
|
||||
router.include_routers(reply_kb_router)
|
||||
|
||||
@@ -1,10 +1,8 @@
|
||||
# BotCode/keyboards/inline_kb/__init__.py
|
||||
# Инициализация пакета inline_keyboards, для работы с инлайн клавиатурами
|
||||
|
||||
from aiogram import Router
|
||||
from .actor_kb import *
|
||||
from .randnum_kb import *
|
||||
|
||||
# Объявление роутера и настройка экспорта модулей
|
||||
__all__ = ("router", "actor_kb", "ButtonInl")
|
||||
router = Router(name="inline_kb_router")
|
||||
__all__ = ("randnum_kb", "actor_kb")
|
||||
|
||||
@@ -1,14 +1,11 @@
|
||||
# BotCode/keyboards/inline_kb/actor_kb.py
|
||||
# Создания инлайн-клавиатуры на команду: /actor
|
||||
|
||||
from aiogram import Router
|
||||
from aiogram.types import InlineKeyboardMarkup
|
||||
from aiogram.utils.keyboard import InlineKeyboardBuilder
|
||||
from BotLibrary import ikb
|
||||
|
||||
# Создание роутера и настройка экспорта
|
||||
__all__ = ("router", "get_actor_kb", "kb_text", "ButtonInl",)
|
||||
kb_text = "ActorKb"
|
||||
router = Router(name="actor_kb_router")
|
||||
__all__ = ("get_actor_kb", "ButtonInl")
|
||||
|
||||
|
||||
# Класс с параметрами кнопок
|
||||
@@ -35,20 +32,14 @@ class ButtonInl:
|
||||
|
||||
# Функция создания клавиатуры на команду: /actor
|
||||
def get_actor_kb() -> InlineKeyboardMarkup:
|
||||
# Создаем билдер клавиатуры
|
||||
builder = InlineKeyboardBuilder()
|
||||
|
||||
# Добавляем кнопки, группируя их по строкам
|
||||
builder.button(text=ButtonInl.tg_chn, url=ButtonInl.tg_chn_url)
|
||||
builder.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.tg_chn, url=ButtonInl.tg_chn_url)
|
||||
ikb.button(text=ButtonInl.tg_chat, url=ButtonInl.tg_chat_url)
|
||||
|
||||
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()
|
||||
|
||||
@@ -1,27 +1,21 @@
|
||||
# BotCode/keyboards/inline_kb/randnum_kb.py
|
||||
# Создания инлайн-клавиатуры на команду: /randnum
|
||||
|
||||
from aiogram import Router
|
||||
from aiogram.types import InlineKeyboardMarkup
|
||||
from aiogram.utils.keyboard import InlineKeyboardBuilder
|
||||
from BotLibrary import ikb
|
||||
|
||||
# Создание роутера и настройка экспорта
|
||||
__all__ = ("router", "get_randnum_kb", "kb_text", "ButtonInl",)
|
||||
kb_text = "RandNumKb"
|
||||
router = Router(name="actor_kb_router")
|
||||
__all__ = ("get_randnum_kb", "ButtonInl")
|
||||
|
||||
|
||||
# Класс с параметрами кнопок
|
||||
class ButtonInl:
|
||||
text = "Получить ответ"
|
||||
mark_cbd = "mark_cbd"
|
||||
|
||||
|
||||
# Функция создания клавиатуры на команду: /actor
|
||||
def get_randnum_kb(text_msg="Получить ответ") -> InlineKeyboardMarkup:
|
||||
# Создаем билдер клавиатуры
|
||||
builder = InlineKeyboardBuilder()
|
||||
|
||||
# Добавляем кнопки, группируя их по строкам
|
||||
builder.button(text=text_msg, callback_data=ButtonInl.mark_cbd)
|
||||
|
||||
return builder.as_markup()
|
||||
def get_randnum_kb() -> InlineKeyboardMarkup:
|
||||
ikb.button(text=ButtonInl.text, callback_data=ButtonInl.mark_cbd)
|
||||
ikb.add_row(1)
|
||||
return ikb.as_markup()
|
||||
|
||||
@@ -2,19 +2,13 @@
|
||||
# Инициализация пакета reply_kb, для работы с клавиатурами
|
||||
|
||||
from aiogram import Router
|
||||
from .start_kb import router as start_kb_router
|
||||
from .help_kb import router as help_kb_router
|
||||
from .more_kb import router as more_kb_router
|
||||
|
||||
|
||||
# Объявление роутера и настройка экспорта модулей
|
||||
__all__ = ("router",)
|
||||
router = Router(name="reply_kb_router")
|
||||
router = Router(name=__name__)
|
||||
|
||||
|
||||
# Список подключаемых роутеров сверху-вниз
|
||||
router.include_routers(
|
||||
start_kb_router,
|
||||
help_kb_router,
|
||||
more_kb_router,
|
||||
)
|
||||
router.include_routers(help_kb_router)
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
# BotCode/keyboards/reply_kb/help_kb.py
|
||||
# Создание клавиатуры для сообщения: "Помогите!"
|
||||
# Создает небольшую числовую клавиатуру для тестов
|
||||
|
||||
from aiogram import Router, F
|
||||
from aiogram.types import ReplyKeyboardMarkup, KeyboardButton
|
||||
from aiogram.utils.keyboard import ReplyKeyboardBuilder
|
||||
from BotLibrary import rkb
|
||||
|
||||
# Создание роутера и настройка экспорта модулей
|
||||
__all__ = ("router", "get_help_kb", "kb_text",)
|
||||
kb_text = "HelpKb"
|
||||
__all__ = ("router", "get_help_kb")
|
||||
router = Router(name="help_kb_router")
|
||||
|
||||
|
||||
@@ -21,12 +21,10 @@ def get_help_kb() -> ReplyKeyboardMarkup:
|
||||
"0️⃣",
|
||||
]
|
||||
|
||||
# Создание кнопки каждого числа по отдельности
|
||||
buttons_row = [KeyboardButton(text=num) for num in numbers]
|
||||
builder = ReplyKeyboardBuilder()
|
||||
for num in numbers:
|
||||
builder.button(text=num)
|
||||
builder.adjust(3)
|
||||
builder.row(buttons_row[3], buttons_row[9])
|
||||
builder.add(buttons_row[-1])
|
||||
rkb.button(text=num)
|
||||
|
||||
return builder.as_markup(resize_keyboard=True)
|
||||
rkb.adjust(3)
|
||||
return rkb.as_markup(resize_keyboard=True)
|
||||
|
||||
@@ -1,39 +1,25 @@
|
||||
# BotCode/keyboards/reply_kb/more_kb.py
|
||||
# Создания клавиатуры на команду: /more
|
||||
# Для проверки отправки информации о пользователе
|
||||
|
||||
from aiogram import Router
|
||||
from aiogram.types import KeyboardButtonPollType
|
||||
from aiogram.utils.keyboard import ReplyKeyboardBuilder
|
||||
from aiogram.types import KeyboardButtonPollType, ReplyKeyboardMarkup
|
||||
from BotLibrary import rkb
|
||||
|
||||
# Создание роутера и настройка экспорта модулей
|
||||
__all__ = ("router", "get_more_kb", "kb_text",)
|
||||
kb_text = "HelpKb"
|
||||
router = Router(name="more_kb_router")
|
||||
# Настройка экспорта из этого модуля
|
||||
__all__ = ("get_more_kb", "ButtonText")
|
||||
|
||||
|
||||
# Класс с названиями кнопок
|
||||
# Создание класса со значениями кнопок
|
||||
class ButtonText:
|
||||
More = "More"
|
||||
Location = "Отправить локацию"
|
||||
Contact = "Отправить контакт"
|
||||
Chat = "Отправить чат???"
|
||||
Poll = "Отправить опрос"
|
||||
Users = "Что то с common"
|
||||
|
||||
|
||||
# Функция создания клавиатуры на команду: /more
|
||||
def get_more_kb() -> ReplyKeyboardBuilder:
|
||||
builder = ReplyKeyboardBuilder()
|
||||
# builder.add(KeyboardButton(text=ButtonText.Location, request_location=True))
|
||||
builder.button(text=ButtonText.Location, request_location=True)
|
||||
builder.button(text=ButtonText.Contact, request_contact=True)
|
||||
builder.button(text=ButtonText.Poll, request_poll=KeyboardButtonPollType())
|
||||
|
||||
builder.adjust(1)
|
||||
return builder.as_markup(resize_keyboard=True)
|
||||
|
||||
# Один из вариантов создание клавиатуры
|
||||
# markup = ReplyKeyboardMarkup(
|
||||
# keyboard=[]
|
||||
# )
|
||||
# return markup
|
||||
def get_more_kb() -> ReplyKeyboardMarkup:
|
||||
rkb.button(text=ButtonText.Location, request_location=True)
|
||||
rkb.button(text=ButtonText.Contact, request_contact=True)
|
||||
rkb.button(text=ButtonText.Poll, request_poll=KeyboardButtonPollType())
|
||||
rkb.adjust(1)
|
||||
return rkb.as_markup(resize_keyboard=True, one_time_keyboard=True)
|
||||
|
||||
@@ -1,17 +1,15 @@
|
||||
# BotCode/keyboards/reply_kb/start_kb.py
|
||||
# Создания клавиатуры на команду: /start
|
||||
# Для создания базовой клавиатуры с некими элементами
|
||||
|
||||
from aiogram import Router
|
||||
from aiogram.types import ReplyKeyboardMarkup, KeyboardButton
|
||||
from aiogram.utils.keyboard import ReplyKeyboardBuilder
|
||||
from aiogram.types import ReplyKeyboardMarkup
|
||||
from BotLibrary import rkb
|
||||
|
||||
# Создание роутера и настройка экспорта
|
||||
__all__ = ("router", "get_start_kb", "kb_text", "ButtonText",)
|
||||
kb_text = "StartKb"
|
||||
router = Router(name="start_kb_router")
|
||||
# Настройка экспорта из этого модуля
|
||||
__all__ = ("get_start_kb", "ButtonText")
|
||||
|
||||
|
||||
# Класс с названиями кнопок
|
||||
# Создание класса со значениями кнопок
|
||||
class ButtonText:
|
||||
Hello = "Привет!"
|
||||
Help = "Помогите!"
|
||||
@@ -19,16 +17,9 @@ class ButtonText:
|
||||
|
||||
|
||||
# Функция создания клавиатуры на команду: /start
|
||||
def get_start_kb() -> ReplyKeyboardBuilder:
|
||||
button_hello = KeyboardButton(text=ButtonText.Hello)
|
||||
button_help = KeyboardButton(text=ButtonText.Help)
|
||||
button_bye = KeyboardButton(text=ButtonText.Bye)
|
||||
|
||||
buttons_first_row = [button_hello, button_help]
|
||||
buttons_second_row = [button_bye]
|
||||
markup = ReplyKeyboardMarkup(
|
||||
keyboard=[buttons_first_row, buttons_second_row],
|
||||
resize_keyboard=True,
|
||||
one_time_keyboard=True,
|
||||
)
|
||||
return markup
|
||||
def get_start_kb() -> ReplyKeyboardMarkup:
|
||||
rkb.button(text=ButtonText.Hello)
|
||||
rkb.button(text=ButtonText.Help)
|
||||
rkb.button(text=ButtonText.Bye)
|
||||
rkb.adjust(2)
|
||||
return rkb.as_markup(resize_keyboard=True, one_time_keyboard=True)
|
||||
|
||||
23
BotCode/keyboards/reply_kb/survey_yesno_kb.py
Normal file
23
BotCode/keyboards/reply_kb/survey_yesno_kb.py
Normal 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)
|
||||
@@ -6,6 +6,7 @@ from .callback_handlers import router as callback_handlers_router
|
||||
from .commands.bot_command import set_commands
|
||||
from .administration import router as admin_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 .common import router as users_head_router
|
||||
|
||||
@@ -19,6 +20,7 @@ router = Router(name="main_router")
|
||||
router.include_routers(
|
||||
callback_handlers_router,
|
||||
admin_head_router,
|
||||
survey_head_router,
|
||||
commands_head_router,
|
||||
downloads_head_router,
|
||||
)
|
||||
|
||||
@@ -4,12 +4,10 @@
|
||||
from aiogram import Router, types, F
|
||||
from aiogram.filters import Command
|
||||
from BotLibrary import *
|
||||
from BotCode.routers.msg_default import msg_default
|
||||
|
||||
# Создание роутера и настройка экспорта модулей
|
||||
__all__ = ("router",)
|
||||
|
||||
from routers.msg_default import msg_default
|
||||
|
||||
router = Router(name="secret_message_router")
|
||||
log_type = "Admin"
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
from aiogram import Router, types, F
|
||||
from aiogram.enums import ChatAction
|
||||
from BotLibrary import *
|
||||
from routers.msg_default import msg_default
|
||||
from BotCode.routers.msg_default import msg_default
|
||||
|
||||
# Создание роутера и настройка экспорта
|
||||
__all__ = ("router",)
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
from random import randint
|
||||
from aiogram import Router, F
|
||||
from aiogram.types import CallbackQuery
|
||||
from keyboards.inline_kb.actor_kb import ButtonInl
|
||||
from BotCode.keyboards.inline_kb.actor_kb import ButtonInl
|
||||
|
||||
# Создание роутера и настройка экспорта модулей
|
||||
__all__ = ("router",)
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
from random import randint
|
||||
from aiogram import Router, F
|
||||
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",)
|
||||
|
||||
@@ -4,8 +4,8 @@
|
||||
from aiogram import Router, types, F
|
||||
from aiogram.filters import Command
|
||||
from BotLibrary import *
|
||||
from keyboards.inline_kb.actor_kb import get_actor_kb
|
||||
from routers.msg_default import *
|
||||
from BotCode.keyboards.inline_kb.actor_kb import get_actor_kb
|
||||
from BotCode.routers.msg_default import *
|
||||
|
||||
# Создание роутера, переменных и настройка экспорта модулей
|
||||
__all__ = ("router", "cmd_actor", "log_type",)
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
from aiogram import Router, types, F
|
||||
from aiogram.filters import Command
|
||||
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")
|
||||
|
||||
@@ -4,8 +4,8 @@
|
||||
from aiogram import Router, types, F
|
||||
from aiogram.filters import Command
|
||||
from BotLibrary import *
|
||||
from keyboards.reply_kb.help_kb import get_help_kb
|
||||
from routers.msg_default import msg_default
|
||||
from BotCode.keyboards.reply_kb.help_kb import get_help_kb
|
||||
from BotCode.routers.msg_default import msg_default
|
||||
|
||||
# Создание роутера, переменных и экспорта модулей
|
||||
__all__ = ("router", "cmd_help", "log_type", "description")
|
||||
|
||||
@@ -4,8 +4,8 @@
|
||||
from aiogram import Router, types, F
|
||||
from aiogram.filters import Command
|
||||
from BotLibrary import *
|
||||
from keyboards.reply_kb.more_kb import get_more_kb
|
||||
from routers.msg_default import msg_default
|
||||
from BotCode.keyboards.reply_kb.more_kb import get_more_kb
|
||||
from BotCode.routers.msg_default import msg_default
|
||||
|
||||
# Создание роутера, переменных и экспорта модулей
|
||||
__all__ = ("router", "cmd_start", "log_type",)
|
||||
|
||||
@@ -4,8 +4,8 @@
|
||||
from aiogram import Router, types, F
|
||||
from aiogram.filters import Command
|
||||
from BotLibrary import *
|
||||
from keyboards.inline_kb.randnum_kb import get_randnum_kb
|
||||
from routers.msg_default import msg_default
|
||||
from BotCode.keyboards.inline_kb.randnum_kb import get_randnum_kb
|
||||
from BotCode.routers.msg_default import msg_default
|
||||
|
||||
# Создание роутера, переменных и экспорта модулей
|
||||
__all__ = ("router", "cmd_randnum", "log_type",)
|
||||
|
||||
@@ -4,8 +4,8 @@
|
||||
from aiogram import Router, types, F
|
||||
from aiogram.filters import Command, CommandStart
|
||||
from BotLibrary import *
|
||||
from keyboards.reply_kb.start_kb import get_start_kb
|
||||
from routers.msg_default import msg_default
|
||||
from BotCode.keyboards.reply_kb.start_kb import get_start_kb
|
||||
from BotCode.routers.msg_default import msg_default
|
||||
|
||||
# Создание роутера, переменных и настройка экспорта модулей
|
||||
__all__ = ("router", "cmd_start", "log_type", "description")
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
from aiogram import Router, types, F
|
||||
from aiogram.filters import Command
|
||||
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")
|
||||
|
||||
0
BotCode/routers/commands/user_cmd/states.py
Normal file
0
BotCode/routers/commands/user_cmd/states.py
Normal file
@@ -4,7 +4,7 @@
|
||||
|
||||
from BotLibrary import *
|
||||
from aiogram import Router, types
|
||||
from routers.msg_default import *
|
||||
from BotCode.routers.msg_default import *
|
||||
|
||||
# Настройка экспорта модулей и роутера
|
||||
__all__ = ("router",)
|
||||
@@ -15,7 +15,7 @@ log_type = "Messages"
|
||||
# Хэндлер на все сообщения и записывает данные
|
||||
@router.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)
|
||||
|
||||
await common_msg_logginger(message, user_name, message_type, log_type)
|
||||
|
||||
@@ -4,9 +4,9 @@
|
||||
from aiogram import Router, types, F
|
||||
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 keyboards.reply_kb.start_kb import ButtonText
|
||||
from BotCode.keyboards.reply_kb.start_kb import ButtonText
|
||||
|
||||
# Настройка экспорта модулей и роутера
|
||||
__all__ = ("router",)
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
# Небольшое облегчение для команд
|
||||
|
||||
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.user_data_to_file import write_user_info_to_file
|
||||
|
||||
|
||||
15
BotCode/routers/survey/__init__.py
Normal file
15
BotCode/routers/survey/__init__.py
Normal 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,
|
||||
)
|
||||
89
BotCode/routers/survey/handlers.py
Normal file
89
BotCode/routers/survey/handlers.py
Normal 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("нет")}!"
|
||||
)
|
||||
15
BotCode/routers/survey/states.py
Normal file
15
BotCode/routers/survey/states.py
Normal 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 = "Гонки"
|
||||
@@ -6,3 +6,4 @@ from .analitics import *
|
||||
from .library import *
|
||||
from .media import *
|
||||
from .configs import *
|
||||
from .validators import *
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
# Определение типа сообщения
|
||||
|
||||
from aiogram.types import ContentType
|
||||
from configs import *
|
||||
from ..configs import *
|
||||
from .find_ids import find_imp_id
|
||||
|
||||
# Настройка экспорта модулей и логирования
|
||||
|
||||
@@ -6,7 +6,7 @@ import json
|
||||
import datetime
|
||||
|
||||
from aiogram.types import User, Birthdate
|
||||
from configs import *
|
||||
from ..configs import *
|
||||
from ..library.time import TimeVariable
|
||||
|
||||
# Настройка экспорта модулей и логирования
|
||||
|
||||
@@ -68,4 +68,4 @@ class DataID:
|
||||
groups = data_list_id.get("important_groups_ids", {})
|
||||
users = data_list_id.get("important_users_list_ids", {})
|
||||
channels = data_list_id.get("important_channel_ids", {})
|
||||
important = {**admins, **groups, **users, **channels}
|
||||
important = {**groups, **admins, **users, **channels}
|
||||
|
||||
@@ -2,20 +2,25 @@
|
||||
# Создание и настройка бота в одном файле
|
||||
|
||||
from aiogram import Dispatcher, Bot, F
|
||||
from aiogram.client.default import DefaultBotProperties
|
||||
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 .time import *
|
||||
from configs import bot_token, BotVariables
|
||||
from ..configs import bot_token, BotVariables
|
||||
|
||||
# Настройка экспорта модулей и логирования
|
||||
__all__ = ("dp", "bot", "scheduler", "F_Media", "BotInfo", "bot_get_info")
|
||||
log_type = "Bot"
|
||||
# Настройка экспорта из этого модуля
|
||||
__all__ = ("dp", "rkb", "ikb", "bot", "scheduler",
|
||||
"F_Media", "F_All", "BotInfo", "bot_get_info")
|
||||
|
||||
|
||||
# Создание экземпляра диспатчера и его параметров
|
||||
# Создание экземпляра диспатчера, строителей кнопок
|
||||
dp = Dispatcher()
|
||||
rkb = ReplyKeyboardBuilder()
|
||||
ikb = InlineKeyboardBuilder()
|
||||
|
||||
# Настройка параметров диспатчера
|
||||
dp["started_at"] = host_time
|
||||
dp["started_at_msk"] = get_choice_time(TimeVariable.choice_utc_msk)
|
||||
dp["is_active"] = True # Флаг активности бота
|
||||
@@ -46,6 +51,7 @@ bot_properties = DefaultBotProperties(
|
||||
bot = Bot(token=bot_token, default=bot_properties) # Объявление бота
|
||||
scheduler = AsyncIOScheduler(timezone=get_time_zone()) # Создание планировщика
|
||||
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 # Фильтр на все
|
||||
|
||||
|
||||
# Класс для хранения данных о боте (некоторые переменные даны как шаблон)
|
||||
|
||||
5
BotLibrary/validators/__init__.py
Normal file
5
BotLibrary/validators/__init__.py
Normal file
@@ -0,0 +1,5 @@
|
||||
# BotLibrary/validators/__init__.py
|
||||
# Инициализация пакета validator, для работы с валидацией данных
|
||||
|
||||
# Импортируем библиотеки для экспорта
|
||||
from .email_validators import *
|
||||
15
BotLibrary/validators/email_validators.py
Normal file
15
BotLibrary/validators/email_validators.py
Normal 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
|
||||
@@ -43,3 +43,9 @@
|
||||
|
||||
|
||||
---
|
||||
|
||||
07.02.2025
|
||||
- [ ] Сделать проверку на личные сообщения
|
||||
- [ ] Починить start_time и отображение времени
|
||||
- [ ] Модуль день рождение
|
||||
- [ ] FSM
|
||||
@@ -9,11 +9,13 @@
|
||||
"1398573474": "Финаки",
|
||||
"1851081467": "Финик",
|
||||
"929782381": "Хиде",
|
||||
"6714237814": "Слешик"
|
||||
"6714237814": "Слешик",
|
||||
"1686743480": "Полина",
|
||||
"1184519857": "Катаз"
|
||||
},
|
||||
"important_groups_ids": {
|
||||
"1087968824": "GroupAnonymousBot",
|
||||
"-1002247934490": "Сплетни_лавочек",
|
||||
"-1002442589033": "Любовники Сергея",
|
||||
"-1002124483077": "Труба_Сквад",
|
||||
"-1002123850090": "Тест_Чат",
|
||||
"-1001552311087": "Все_Будет_Хорошо"
|
||||
|
||||
874
poetry.lock
generated
874
poetry.lock
generated
File diff suppressed because it is too large
Load Diff
@@ -19,7 +19,6 @@ pytz = "^2024.2"
|
||||
termcolor = "^2.5.0"
|
||||
colorama = "^0.4.6"
|
||||
art = "^6.4"
|
||||
cowsay = "^6.1"
|
||||
python-dotenv = "^1.0.1"
|
||||
pydantic-settings = "^2.7.0"
|
||||
python-decouple = "^3.8"
|
||||
@@ -29,6 +28,7 @@ customtkinter = "^5.2.2"
|
||||
pillow = "^11.0.0"
|
||||
certifi = "^2024.12.14"
|
||||
idna = "^3.10"
|
||||
email-validator = "^2.2.0"
|
||||
|
||||
|
||||
[build-system]
|
||||
|
||||
Reference in New Issue
Block a user