Compare commits
43 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
37986f4ac8 | ||
|
|
5ec1790040 | ||
|
|
69b51ab5e8 | ||
|
|
77b87088dc | ||
|
|
15fc26e852 | ||
|
|
4c9db75804 | ||
|
|
0cb140e225 | ||
|
|
675519da5f | ||
|
|
b7293f896f | ||
|
|
802d2eb615 | ||
|
|
a49991d66f | ||
|
|
d70e2daa32 | ||
|
|
1a16c6b1b1 | ||
|
|
b865478f69 | ||
|
|
ebb24dca64 | ||
|
|
23d7754ff3 | ||
|
|
f120591399 | ||
|
|
463517b60a | ||
|
|
76a164c206 | ||
|
|
c49fd29748 | ||
|
|
2e7c57541d | ||
|
|
f612e0e50d | ||
|
|
8becda03c4 | ||
|
|
a4a86853fb | ||
|
|
1f21732833 | ||
|
|
8c4b0d7533 | ||
|
|
43b3c24c67 | ||
|
|
24cdb8bd70 | ||
|
|
db92f33642 | ||
|
|
3f68f3a4ff | ||
|
|
dd9d438082 | ||
|
|
5ce39fb3bc | ||
|
|
21c3d00465 | ||
|
|
ca8fef6714 | ||
|
|
535a36648c | ||
|
|
ad378cc5f5 | ||
|
|
4cbbdf021a | ||
|
|
c8805eba26 | ||
|
|
847e48d6d3 | ||
|
|
ef6906b240 | ||
|
|
6e2e7bdc0f | ||
|
|
b3557a18b9 | ||
|
|
09aa1bd4b8 |
10
.gitignore
vendored
10
.gitignore
vendored
@@ -2,18 +2,12 @@
|
||||
# Файл, что запрещает экспортировать определенные части кода
|
||||
|
||||
|
||||
# Игнорирование локального окружения и его файлов
|
||||
.venv
|
||||
.env
|
||||
|
||||
|
||||
# Игнорирование пользовательских конфигураций IDE
|
||||
.idea
|
||||
# Игнорирование локального окружения и пользовательских конфигураций IDE
|
||||
.*
|
||||
*.iml
|
||||
|
||||
|
||||
# Игнорирование временных файлов операционной системы
|
||||
.DS_Store
|
||||
Thumbs.db
|
||||
|
||||
|
||||
|
||||
@@ -3,5 +3,4 @@
|
||||
|
||||
from .keyboards import *
|
||||
from .routers import *
|
||||
from .timer import *
|
||||
from .inline import *
|
||||
|
||||
@@ -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,22 @@
|
||||
# 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()
|
||||
# Функция создания клавиатуры на команду: /randnum
|
||||
def get_randnum_kb(text=ButtonInl.text) -> InlineKeyboardMarkup:
|
||||
ikb.button(text=text, callback_data=ButtonInl.mark_cbd)
|
||||
ikb.adjust(1)
|
||||
return ikb.as_markup() # Возвращаем клавиатуру
|
||||
|
||||
# Добавляем кнопки, группируя их по строкам
|
||||
builder.button(text=text_msg, callback_data=ButtonInl.mark_cbd)
|
||||
|
||||
return builder.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,16 +4,29 @@
|
||||
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",)
|
||||
router = Router(name="easteggs_router")
|
||||
router = Router(name="easteggs")
|
||||
log_type = "EastEggs"
|
||||
|
||||
|
||||
# Класс с текстовыми пасхалками бота
|
||||
class EastEggsName:
|
||||
Num1 = "финаки228"
|
||||
Num2 = "финикх"
|
||||
Num3 = "андертейлкино"
|
||||
Num4 = "ришкус"
|
||||
Num5 = "skodavano"
|
||||
Num6 = "лостикслешик"
|
||||
Num7 = "ещкере"
|
||||
Num8 = "маз"
|
||||
|
||||
|
||||
# Хэндлер на текст финаки228
|
||||
@router.message(F.text.lower() == "финаки228")
|
||||
@router.message(F.from_user.id.func(lambda user_id: str(user_id) in DataID.important.keys()),
|
||||
F.text.lower() == EastEggsName.Num1)
|
||||
async def secret_admin_message_finaki(message: types.Message):
|
||||
text = "Пасхалка 1 Финаки228 найдена!"
|
||||
|
||||
@@ -26,7 +39,7 @@ async def secret_admin_message_finaki(message: types.Message):
|
||||
# Отправка фотографии
|
||||
try:
|
||||
await message.reply_photo(
|
||||
photo=types.FSInputFile(path=f"{ProjectPath.personal_media}/{ProjectPath.personal_photo}/Undertale.jpg"),
|
||||
photo=types.FSInputFile(path=f"{ProjectPath.personal_photo}/Undertale.jpg"),
|
||||
caption="ОНА МЕНЯ ЗАСТАВИЛА ПОМОГИТЕ😭... (Кст @fin_aki любит анал, тс..)",
|
||||
)
|
||||
|
||||
@@ -42,7 +55,7 @@ async def secret_admin_message_finaki(message: types.Message):
|
||||
|
||||
# Хэндлер на текст финикх
|
||||
@router.message(F.from_user.id.func(lambda user_id: str(user_id) in DataID.important.keys()),
|
||||
F.text.lower() == "финикх")
|
||||
F.text.lower() == EastEggsName.Num2)
|
||||
async def secret_admin_message_finik(message: types.Message):
|
||||
text = f"Пасхалка 2 финикx найдена!"
|
||||
await message.bot.send_chat_action(
|
||||
@@ -57,7 +70,8 @@ async def secret_admin_message_finik(message: types.Message):
|
||||
|
||||
|
||||
# Хэндлер на текст андертейлкино
|
||||
@router.message(F.text.lower() == "андертейлкино")
|
||||
@router.message(F.from_user.id.func(lambda user_id: str(user_id) in DataID.important.keys()),
|
||||
F.text.lower() == EastEggsName.Num3)
|
||||
async def secret_admin_message_finik(message: types.Message):
|
||||
text = f"Пасхалка 3 андертейлкино найдена!"
|
||||
await message.bot.send_chat_action(
|
||||
@@ -72,7 +86,8 @@ async def secret_admin_message_finik(message: types.Message):
|
||||
|
||||
|
||||
# Хэндлер на текст ришкус + отправка с локального хранилища
|
||||
@router.message(F.text.lower() == "ришкус")
|
||||
@router.message(F.from_user.id.func(lambda user_id: str(user_id) in DataID.important.keys()),
|
||||
F.text.lower() == EastEggsName.Num4)
|
||||
async def secret_admin_message_rishkus(message: types.Message):
|
||||
text = f"Пасхалка 4 ришкус найдена!"
|
||||
await message.bot.send_chat_action(
|
||||
@@ -80,7 +95,7 @@ async def secret_admin_message_rishkus(message: types.Message):
|
||||
action=ChatAction.UPLOAD_PHOTO,
|
||||
)
|
||||
await message.reply_photo(
|
||||
photo=types.FSInputFile(path=f"{ProjectPath.personal_media}/{ProjectPath.personal_photo}/Кусь.jpg"),
|
||||
photo=types.FSInputFile(path=f"{ProjectPath.personal_photo}/Кусь.jpg"),
|
||||
caption="Россия для грустных",
|
||||
)
|
||||
await cmd_logginger(message, log_type, text)
|
||||
@@ -88,7 +103,8 @@ async def secret_admin_message_rishkus(message: types.Message):
|
||||
|
||||
|
||||
# Хэндлер на текст skodavano + отправка с локального хранилища
|
||||
@router.message(F.text.lower() == "skodavano")
|
||||
@router.message(F.from_user.id.func(lambda user_id: str(user_id) in DataID.important.keys()),
|
||||
F.text.lower() == EastEggsName.Num5)
|
||||
async def secret_admin_message_skodavano(message: types.Message):
|
||||
text = f"Пасхалка 5 skodavano найдена!"
|
||||
await message.bot.send_chat_action(
|
||||
@@ -96,15 +112,16 @@ async def secret_admin_message_skodavano(message: types.Message):
|
||||
action=ChatAction.UPLOAD_PHOTO,
|
||||
)
|
||||
await message.reply_photo(
|
||||
photo=types.FSInputFile(path=f"{ProjectPath.personal_media}/{ProjectPath.personal_photo}/Vano.jpg"),
|
||||
caption="SkodaRacingVano24 -> Синяя изолента",
|
||||
photo=types.FSInputFile(path=f"{ProjectPath.personal_photo}/Vano.jpg"),
|
||||
caption="@skodaracing24 -> Синяя изолента",
|
||||
)
|
||||
await cmd_logginger(message, log_type, text)
|
||||
await msg_default(message)
|
||||
|
||||
|
||||
# Хэндлер на текст лостикслешик + отправка с локального хранилища
|
||||
@router.message(F.text.lower() == "лостикслешик")
|
||||
@router.message(F.from_user.id.func(lambda user_id: str(user_id) in DataID.important.keys()),
|
||||
F.text.lower() == EastEggsName.Num6)
|
||||
async def secret_admin_message_lostik(message: types.Message):
|
||||
try:
|
||||
text = f"Пасхалка 6 лостикслешик найдена!"
|
||||
@@ -117,8 +134,7 @@ async def secret_admin_message_lostik(message: types.Message):
|
||||
|
||||
# Вывод сообщения-гифки пользователю
|
||||
await message.reply_animation(
|
||||
animation=types.FSInputFile(path=f"{ProjectPath.personal_media}"
|
||||
f"/{ProjectPath.personal_gif}/ЛжеРайяПрайм.mp4")
|
||||
animation=types.FSInputFile(path=f"{ProjectPath.personal_gif}/ЛжеРайяПрайм.mp4")
|
||||
)
|
||||
|
||||
# Активация логгера
|
||||
@@ -132,7 +148,8 @@ async def secret_admin_message_lostik(message: types.Message):
|
||||
|
||||
|
||||
# Хэндлер на текст ещкере
|
||||
@router.message(F.text.lower() == "ещкере")
|
||||
@router.message(F.from_user.id.func(lambda user_id: str(user_id) in DataID.important.keys()),
|
||||
F.text.lower() == EastEggsName.Num7)
|
||||
async def secret_admin_message_finaki(message: types.Message):
|
||||
text = "Пасхалка 7 ещкере найдена!"
|
||||
|
||||
@@ -164,7 +181,8 @@ async def secret_admin_message_finaki(message: types.Message):
|
||||
|
||||
|
||||
# Хэндлер на текст маз
|
||||
@router.message(F.text.lower() == "маз")
|
||||
@router.message(F.from_user.id.func(lambda user_id: str(user_id) in DataID.important.keys()),
|
||||
F.text.lower() == EastEggsName.Num8)
|
||||
async def secret_admin_message_finaki(message: types.Message):
|
||||
text = "Пасхалка 8 маз найдена!"
|
||||
|
||||
|
||||
@@ -4,11 +4,11 @@
|
||||
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",)
|
||||
router = Router(name="actor_kb_cb_router")
|
||||
router = Router(name="actor_kb_cb")
|
||||
|
||||
|
||||
# Тестирование реферальных ссылок
|
||||
|
||||
@@ -1,14 +1,15 @@
|
||||
# BotCode/routers/callback_handlers/randnum_kb_cb.py
|
||||
# Обработчик запросов в команде /randnum
|
||||
|
||||
import asyncio
|
||||
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 BotLibrary import ikb
|
||||
from BotCode.keyboards.inline_kb.randnum_kb import ButtonInl, get_randnum_kb
|
||||
|
||||
# Создание роутера и настройка экспорта модулей
|
||||
__all__ = ("router",)
|
||||
router = Router(name="randnum_kb_cb_router")
|
||||
router = Router(name="randnum_kb_cb")
|
||||
|
||||
|
||||
# Тестирование редактирования сообщения
|
||||
@@ -18,15 +19,15 @@ async def random_site_cb(callback_query: CallbackQuery):
|
||||
|
||||
# Новый текст и клавиатура
|
||||
new_text = f"Какая оценка у тебя будет сегодня: {randint(1, 5)}"
|
||||
new_reply_markup = get_randnum_kb("Получить ответ от Таро")
|
||||
new_reply_markup = ikb.as_markup() # Обновленная клавиатура
|
||||
|
||||
# Текущий текст и клавиатура
|
||||
current_text = callback_query.message.text
|
||||
current_reply_markup = callback_query.message.reply_markup
|
||||
# Проверка, отличается ли текущее сообщение от нового
|
||||
if callback_query.message.text != new_text or callback_query.message.reply_markup != new_reply_markup:
|
||||
# Добавляем задержку, если необходимо
|
||||
await asyncio.sleep(0.5) # Задержка 0.5 секунд
|
||||
|
||||
# Проверяем, отличаются ли текст и клавиатура
|
||||
if current_text != new_text or current_reply_markup != new_reply_markup:
|
||||
# Редактируем сообщение и обновляем клавиатуру
|
||||
await callback_query.message.edit_text(
|
||||
text=new_text,
|
||||
reply_markup=new_reply_markup,
|
||||
reply_markup=new_reply_markup, # Обновляем клавиатуру
|
||||
)
|
||||
|
||||
@@ -14,7 +14,7 @@ from .user_cmd.start_time_cmd import description as start_time_description,log_t
|
||||
|
||||
# Создание роутера и настройка экспорта модулей
|
||||
__all__ = ("router", "set_commands",)
|
||||
router = Router(name="bot_command_router")
|
||||
router = Router(name=__name__)
|
||||
log_type = "SetCmd"
|
||||
|
||||
# Список ключевых слов для команды "setcommands"
|
||||
|
||||
@@ -9,6 +9,7 @@ from .exit_cmd import router as exit_router
|
||||
from .start_time_cmd import router as start_time_router
|
||||
from .actor_cmd import router as actor_router
|
||||
from .randnum_cmd import router as randnum_router
|
||||
from .time_cmd import router as time_router
|
||||
|
||||
|
||||
# Объявление роутера и настройка экспорта модулей
|
||||
@@ -24,6 +25,7 @@ router.include_routers(
|
||||
exit_router,
|
||||
actor_router,
|
||||
randnum_router,
|
||||
time_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")
|
||||
@@ -14,7 +14,7 @@ log_type = "Help"
|
||||
description = "Получить помощь"
|
||||
|
||||
# Список ключевых слов для команды
|
||||
keywords = ["help", "info", "помощь", "инфо", "?", "информация", "рудз", "штащ", "byaj",
|
||||
keywords = ["help", "info", "помощь", "инфо", "информация", "рудз", "штащ", "byaj",
|
||||
"gjvjom", "byajhvfwbz",]
|
||||
|
||||
|
||||
|
||||
@@ -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",)
|
||||
@@ -16,7 +16,6 @@ description = "Описание"
|
||||
# Список ключевых слов для команды
|
||||
keywords = ["кфтвтгь", "randnum",]
|
||||
|
||||
|
||||
# Хэндлер на команду /randnum
|
||||
@router.message(Command(*keywords, prefix=BotVariables.prefixs, ignore_case=True))
|
||||
@router.message(F.text.lower().in_(keywords))
|
||||
@@ -24,7 +23,7 @@ async def cmd_randnum(message: types.Message):
|
||||
text = "Работа с рандомом оценок!"
|
||||
await message.reply(
|
||||
text="Вы хотите узнать вашу оценку на сегодня?!",
|
||||
reply_markup=get_randnum_kb("Хочу: ТЫК"),
|
||||
reply_markup=get_randnum_kb(),
|
||||
)
|
||||
|
||||
# Активация логгера
|
||||
|
||||
@@ -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")
|
||||
|
||||
43
BotCode/routers/commands/user_cmd/time_cmd.py
Normal file
43
BotCode/routers/commands/user_cmd/time_cmd.py
Normal file
@@ -0,0 +1,43 @@
|
||||
# BotCode/routers/commands/user_cmd/time_cmd.py
|
||||
# Работа с командой /time, для вывода времени
|
||||
|
||||
from aiogram import Router, types
|
||||
from aiogram.filters import Command
|
||||
from BotLibrary import *
|
||||
from BotCode.routers.msg_default import msg_default
|
||||
|
||||
# Создание роутера, переменных и настройка экспорта модулей
|
||||
__all__ = ("router", "cmd_time", "log_type", "description")
|
||||
router = Router(name="time_cmd_router")
|
||||
log_type = "Time"
|
||||
description = "Мировое время"
|
||||
|
||||
# Список ключевых слов для команды
|
||||
keywords = ["time", "ешьу", "dhtvz", "время"]
|
||||
|
||||
|
||||
# Обработчик команды /time
|
||||
@router.message(Command(*keywords, prefix=BotVariables.prefixs, ignore_case=True))
|
||||
async def cmd_time(message: types.Message):
|
||||
try:
|
||||
# Получаем текущее время для Москвы и Красноярска
|
||||
current_time_msk = get_choice_time(TimeVariable.choice_utc_msk)
|
||||
current_time_krsk = get_choice_time(TimeVariable.choice_utc_krsk)
|
||||
|
||||
# Формируем текст для ответа
|
||||
text = (
|
||||
f"Текущее время в Москве: \n<b>{current_time_msk}</b>\n"
|
||||
f"Текущее время в Красноярске: \n<b>{current_time_krsk}</b>"
|
||||
)
|
||||
|
||||
# Отправляем сообщение пользователю
|
||||
await message.reply(text)
|
||||
|
||||
# Активация логгера
|
||||
await cmd_logginger(message, log_type, text)
|
||||
await msg_default(message)
|
||||
|
||||
except Exception as e:
|
||||
# Логирование ошибки
|
||||
text_error = await error_cmd_logginger(message, log_type, e)
|
||||
return text_error
|
||||
@@ -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 .states import Survey
|
||||
from BotLibrary import BotVariables, valid_email
|
||||
from BotCode.keyboards.reply_kb.survey_yesno_kb import get_survey_email_kb
|
||||
|
||||
# Создание роутера
|
||||
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 = "Гонки"
|
||||
@@ -1,2 +0,0 @@
|
||||
# BotCode/timer/__init__.py
|
||||
# Инициализация пакета timer, для временных операций (в разработке)
|
||||
@@ -6,3 +6,5 @@ from .analitics import *
|
||||
from .library import *
|
||||
from .media import *
|
||||
from .configs import *
|
||||
from .validators import *
|
||||
from .timers import *
|
||||
|
||||
@@ -6,7 +6,7 @@ from loguru import logger
|
||||
from datetime import datetime
|
||||
|
||||
from ..configs import *
|
||||
from ..library.time import TimeVariable
|
||||
from BotLibrary.configs import TimeVariable
|
||||
from .types_msg import types_message, types_chat
|
||||
from .find_ids import find_imp_id
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ from loguru import logger
|
||||
from time import sleep
|
||||
|
||||
from ..configs import ProjectPath, default_encod
|
||||
from ..library.time import TimeVariable
|
||||
from BotLibrary.configs.settings import TimeVariable
|
||||
from ..library.bots import BotInfo
|
||||
|
||||
# Настройка экспорта модулей и логирования
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
# Определение типа сообщения
|
||||
|
||||
from aiogram.types import ContentType
|
||||
from configs import *
|
||||
from ..configs import *
|
||||
from .find_ids import find_imp_id
|
||||
|
||||
# Настройка экспорта модулей и логирования
|
||||
|
||||
@@ -6,8 +6,8 @@ import json
|
||||
import datetime
|
||||
|
||||
from aiogram.types import User, Birthdate
|
||||
from configs import *
|
||||
from ..library.time import TimeVariable
|
||||
from ..configs import *
|
||||
from BotLibrary.configs import TimeVariable
|
||||
|
||||
# Настройка экспорта модулей и логирования
|
||||
__all__ = ("write_user_info_to_file", "format_user_record",)
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
# Инициализация пакета library, для работы с собственными библиотеками
|
||||
|
||||
# Импортируем библиотеки для экспорта
|
||||
from .config import *
|
||||
from .settings import *
|
||||
from .list_ids import *
|
||||
from .important_path import *
|
||||
|
||||
@@ -1,5 +0,0 @@
|
||||
# BotLibrary/configs/config.py
|
||||
# Базовые переменные для проекта
|
||||
|
||||
# Базовая кодировка файлов
|
||||
default_encod = "utf-8"
|
||||
@@ -5,7 +5,7 @@ import os
|
||||
import json
|
||||
from loguru import logger
|
||||
|
||||
from .config import *
|
||||
from .settings import default_encod
|
||||
from .important_path import ProjectPath
|
||||
|
||||
# Настройка экспорта модулей и логирования
|
||||
@@ -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}
|
||||
|
||||
@@ -4,9 +4,17 @@
|
||||
from os import getenv
|
||||
from dotenv import load_dotenv
|
||||
|
||||
# Настройка экспорта модулей
|
||||
__all__ = ("BotEdit", "BotVariables", "bot_token", "api_key",
|
||||
"web_api_key", "important_id", "secret")
|
||||
|
||||
# Базовая кодировка файлов
|
||||
default_encod = "utf-8"
|
||||
|
||||
# Создание класса с временными параметрами
|
||||
class TimeVariable:
|
||||
format = "%Y-%m-%d %H:%M:%S"
|
||||
another_format = "%S:%M:%H %d-%m-%Y"
|
||||
choice_main_utc = "Asia/Novosibirsk"
|
||||
choice_utc_msk = "Europe/Moscow"
|
||||
choice_utc_krsk = "Asia/Krasnoyarsk" # Новый выбор для Красноярска
|
||||
|
||||
|
||||
# Класс с параметрами бота
|
||||
@@ -23,10 +31,22 @@ class BotVariables:
|
||||
prefixs = ('$', '!', '.', '%', '&', ':', '|', '+', '-', '/', '~', '?')
|
||||
|
||||
|
||||
# Загружаем переменные из файла .env
|
||||
load_dotenv(".env")
|
||||
bot_token = getenv("main_bot_token")
|
||||
api_key = getenv("APIKey")
|
||||
web_api_key = getenv("WebAPIKey")
|
||||
important_id = getenv("important_id")
|
||||
secret = getenv("secret")
|
||||
# Загружаем переменные из файла ProjectsFile/.env
|
||||
load_dotenv("ProjectsFile/.env")
|
||||
|
||||
bot_token = getenv("BOT_TOKEN")
|
||||
bot1_token = getenv("BOT1_TOKEN")
|
||||
bot2_token = getenv("BOT2_TOKEN")
|
||||
|
||||
api_key = getenv("API_KEY")
|
||||
web_api_key = getenv("WEB_API_KEY")
|
||||
|
||||
tg_api_uid = getenv("TG_API_UID")
|
||||
tg_api_hash = getenv("TG_API_HASH")
|
||||
|
||||
admin_id = getenv("ADMIN_ID")
|
||||
important_id = getenv("IMPORTANT_ID")
|
||||
important_group_id = getenv("IMPORTANT_GROUP_ID")
|
||||
important_channel_id = getenv("IMPORTANT_CHANNEL_ID")
|
||||
|
||||
secret = getenv("SECRET")
|
||||
|
||||
@@ -6,7 +6,6 @@ from .bots import *
|
||||
from .logger import *
|
||||
from .edit_bot import *
|
||||
from .directory import *
|
||||
from .time import *
|
||||
|
||||
from art import *
|
||||
from colorama import *
|
||||
|
||||
@@ -2,21 +2,26 @@
|
||||
# Создание и настройка бота в одном файле
|
||||
|
||||
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
|
||||
|
||||
# Настройка экспорта модулей и логирования
|
||||
__all__ = ("dp", "bot", "scheduler", "F_Media", "BotInfo", "bot_get_info")
|
||||
log_type = "Bot"
|
||||
from ..timers import *
|
||||
from ..configs import bot_token, BotVariables, TimeVariable
|
||||
|
||||
# Настройка экспорта из этого модуля
|
||||
__all__ = ("dp", "rkb", "ikb", "bot", "scheduler",
|
||||
"F_Media", "F_All", "BotInfo", "bot_get_info")
|
||||
|
||||
|
||||
# Создание экземпляра диспатчера и его параметров
|
||||
# Создание экземпляра диспатчера, строителей кнопок
|
||||
dp = Dispatcher()
|
||||
dp["started_at"] = host_time
|
||||
rkb = ReplyKeyboardBuilder()
|
||||
ikb = InlineKeyboardBuilder()
|
||||
|
||||
# Настройка параметров диспатчера
|
||||
dp["started_at"] = get_choice_time(TimeVariable.choice_utc_krsk)
|
||||
dp["started_at_msk"] = get_choice_time(TimeVariable.choice_utc_msk)
|
||||
dp["is_active"] = True # Флаг активности бота
|
||||
dp["logs"] = []
|
||||
@@ -33,19 +38,23 @@ dp["storage"] = {}
|
||||
dp["database"] = None
|
||||
|
||||
|
||||
# Объявление экземпляров и переменных
|
||||
# Объявление экземпляров и переменных для настроек бота
|
||||
bot_properties = DefaultBotProperties(
|
||||
parse_mode=ParseMode.HTML, # Устанавливаем формат HTML для всех сообщений
|
||||
disable_notification=True, # Отключаем уведомления при отправке сообщений
|
||||
protect_content=True, # Защищаем содержимое сообщений от копирования
|
||||
allow_sending_without_reply=True, # Разрешаем отправлять сообщения без ответа на другое сообщение
|
||||
# link_preview=LinkPreviewOptions(), # Настройка для предварительного просмотра ссылок
|
||||
link_preview_is_disabled=True, # Отключаем предварительный просмотр ссылок
|
||||
show_caption_above_media=False, # Показываем подпись выше медиа
|
||||
parse_mode=ParseMode.HTML, # Устанавливаем формат HTML для всех сообщений, чтобы поддерживать форматирование
|
||||
disable_notification=False, # Отключаем уведомления при отправке сообщений (не будет звука или всплывающих уведомлений)
|
||||
protect_content=False, # Защищаем содержимое сообщений, чтобы предотвратить его копирование
|
||||
allow_sending_without_reply=True, # Разрешаем отправлять сообщения без ответа на предыдущее сообщение (например, в одиночных чатах)
|
||||
link_preview_is_disabled=False, # Отключаем предварительный просмотр ссылок (не показывать превью при вставке URL)
|
||||
link_preview_prefer_small_media=False, # Предпочитаем показывать маленькие медиа в превью ссылок
|
||||
link_preview_prefer_large_media=True, # Не показываем большие медиа в превью ссылок (если это в конфликте с предыдущей настройкой)
|
||||
link_preview_show_above_text=True, # Показываем предварительный просмотр ссылки после текстом сообщения
|
||||
show_caption_above_media=False, # Показываем подпись (caption) ниже медиа, а не выше
|
||||
)
|
||||
|
||||
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 # Фильтр на все
|
||||
|
||||
|
||||
# Класс для хранения данных о боте (некоторые переменные даны как шаблон)
|
||||
@@ -74,7 +83,7 @@ class BotInfo:
|
||||
cls.first_name = bot_info.first_name
|
||||
cls.last_name = bot_info.last_name
|
||||
cls.username = bot_info.username
|
||||
cls.description = getattr(bot_info, 'description', '') # Default to empty string if no description
|
||||
cls.description = getattr(bot_info, 'description', '')
|
||||
cls.short_description = getattr(bot_info, 'description', '')
|
||||
cls.language_code = bot_info.language_code
|
||||
cls.is_premium = bot_info.is_premium
|
||||
@@ -82,8 +91,8 @@ class BotInfo:
|
||||
cls.supports_inline_queries = bot_info.supports_inline_queries
|
||||
cls.can_connect_to_business = bot_info.can_connect_to_business
|
||||
cls.has_main_web_app = bot_info.has_main_web_app
|
||||
cls.can_join_groups = getattr(bot_info, 'can_join_groups', None) # Default to None if no attribute
|
||||
cls.can_read_all_group_messages = getattr(bot_info, 'can_read_all_group_messages', None) # Default to None
|
||||
cls.can_join_groups = getattr(bot_info, 'can_join_groups', None)
|
||||
cls.can_read_all_group_messages = getattr(bot_info, 'can_read_all_group_messages', None)
|
||||
|
||||
|
||||
# Функция получения данных о боте
|
||||
|
||||
@@ -19,7 +19,7 @@ async def set_all():
|
||||
await set_bot_name()
|
||||
await set_bot_description()
|
||||
await set_bot_short_description()
|
||||
return f"Автономная настройка бота - завершена!"
|
||||
return "Автономная настройка бота - завершена!"
|
||||
|
||||
|
||||
# Функция установки имени бота с проверкой на ограничения
|
||||
@@ -69,9 +69,9 @@ async def set_adm_rights():
|
||||
current_rights = await bot.get_my_default_administrator_rights()
|
||||
if current_rights != rights:
|
||||
await bot.set_my_default_administrator_rights(rights)
|
||||
return f"Админ права бота изменены!"
|
||||
return "Админ права бота изменены!"
|
||||
else:
|
||||
return f"Админ права уже установлены и не требуют изменений."
|
||||
return "Админ права уже установлены и не требуют изменений."
|
||||
|
||||
|
||||
# Функция установки описания бота с проверкой на ограничения
|
||||
@@ -87,9 +87,9 @@ async def set_bot_description():
|
||||
# Проверяем, совпадает ли текущее описание с тем, которое мы хотим установить
|
||||
if current_description != BotEdit.description:
|
||||
await bot.set_my_description(description=BotEdit.description)
|
||||
return f"Описание бота изменено!"
|
||||
return "Описание бота изменено!"
|
||||
else:
|
||||
return f"Описание бота уже установлено и не требует изменений."
|
||||
return "Описание бота уже установлено и не требует изменений."
|
||||
|
||||
|
||||
# Функция установки короткого описания бота с проверкой на ограничения
|
||||
@@ -105,6 +105,6 @@ async def set_bot_short_description():
|
||||
# Проверяем, совпадает ли текущее короткое описание с тем, которое мы хотим установить
|
||||
if current_short_description != BotEdit.short_description:
|
||||
await bot.set_my_short_description(short_description=BotEdit.short_description)
|
||||
return f"Короткое описание бота изменено!"
|
||||
return "Короткое описание бота изменено!"
|
||||
else:
|
||||
return f"Короткое описание бота уже установлено и не требует изменений."
|
||||
return "Короткое описание бота уже установлено и не требует изменений."
|
||||
5
BotLibrary/timers/__init__.py
Normal file
5
BotLibrary/timers/__init__.py
Normal file
@@ -0,0 +1,5 @@
|
||||
# BotLibrary/library/__init__.py
|
||||
# Инициализация пакета library, для работы с собственными библиотеками
|
||||
|
||||
# Импортируем библиотеки для экспорта
|
||||
from .start_timer import *
|
||||
@@ -1,25 +1,18 @@
|
||||
# BotLibrary/library/time.py
|
||||
# Библиотека поиски времени
|
||||
# BotLibrary/timers/start_timer.py
|
||||
# Функция получения времени старта
|
||||
|
||||
import pytz
|
||||
from tzlocal import get_localzone
|
||||
from datetime import datetime
|
||||
from ..configs import TimeVariable
|
||||
|
||||
# Настройка экспорта модулей и логирования
|
||||
__all__ = ("TimeVariable", "host_time", "get_choice_time", "get_time_zone")
|
||||
__all__ = ("host_time", "get_choice_time", "get_time_zone")
|
||||
log_type = "Time"
|
||||
|
||||
|
||||
"""Создание класса с временными параметрами"""
|
||||
class TimeVariable:
|
||||
format = "%Y-%m-%d %H:%M:%S"
|
||||
another_format = "%S:%M:%H %d-%m-%Y"
|
||||
choice_main_utc = "Asia/Novosibirsk"
|
||||
choice_utc_msk = "Europe/Moscow"
|
||||
|
||||
|
||||
"""Получение времени хоста и иного места"""
|
||||
timezone = pytz.timezone(TimeVariable.choice_utc_msk)
|
||||
timezone = pytz.timezone(TimeVariable.choice_utc_krsk) # Используем Красноярск вместо Москвы
|
||||
host_time = datetime.now(timezone)
|
||||
|
||||
|
||||
@@ -37,13 +30,13 @@ def get_choice_time(choice_utc):
|
||||
# Московский часовой пояс
|
||||
choice_tz = pytz.timezone(choice_utc)
|
||||
|
||||
# Перевод времени в московский часовой пояс
|
||||
# Перевод времени в выбранный часовой пояс
|
||||
choice_now = utc_now.astimezone(choice_tz)
|
||||
|
||||
# Смещение UTC для Москвы
|
||||
# Смещение UTC для выбранного региона
|
||||
utc_offset_choice = choice_now.utcoffset().total_seconds() / 3600 # Смещение в часах
|
||||
|
||||
# Форматирование времени
|
||||
# Форматирование времени в стиле, как у Москвы (YYYY-MM-DD HH:MM:SS (UTC±X))
|
||||
choice_time = choice_now.strftime(TimeVariable.format) + f" (UTC{int(utc_offset_choice):+})"
|
||||
|
||||
return choice_time
|
||||
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
|
||||
@@ -33,13 +33,13 @@
|
||||
|
||||
|
||||
- [ ] Исправить остальные проблемы
|
||||
- [X] Прокомментировать каждый файл
|
||||
- [ ] Прокомментировать каждый файл
|
||||
- [ ] Сделать нормальную инструкцию
|
||||
- [ ] Проверить все файлы и улучшить их
|
||||
- [ ] Иное.
|
||||
---
|
||||
|
||||
- [ ] Сделать проверку на ошибки в edit_bot? (Там также добавлена команда set_commands)
|
||||
|
||||
|
||||
---
|
||||
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": "Все_Будет_Хорошо"
|
||||
|
||||
24
ProjectsFile/.env
Normal file
24
ProjectsFile/.env
Normal file
@@ -0,0 +1,24 @@
|
||||
# ProjectsFile/.env
|
||||
# Файл-хранилище всех секретных токенов и ключей
|
||||
|
||||
# Токены от ботов телеграмма
|
||||
BOT_TOKEN=ВВЕДИТЕ_ТОКЕН_ОСНОВНОГО_БОТА
|
||||
BOT1_TOKEN=ТОКЕН_БОТА1
|
||||
BOT2_TOKEN=ТОКЕН_БОТА2
|
||||
|
||||
# Ключи от API
|
||||
API_KEY=КЛЮЧ_ОТ_СТОРОННЕГО_API
|
||||
WEB_API_KEY=КЛЮЧ_ОТ_СТОРОННЕГО_WEB_API
|
||||
|
||||
# Хранилище сессии телеграмма
|
||||
TG_API_UID=ID_ОТ_API_ТЕЛЕГРАММА
|
||||
TG_API_HASH=HASH_ОТ_API_ТЕЛЕГРАММА
|
||||
|
||||
# Айди пользователей, группы и канала
|
||||
ADMIN_ID=ВВЕДИТЕ_ID_АДМИНИСТРАТОРА
|
||||
IMPORTANT_ID=ВВЕДИТЕ_ВАЖНЫЙ_ID_ПОЛЬЗОВАТЕЛЯ
|
||||
IMPORTANT_GROUP_ID=ВВЕДИТЕ_ВАЖНЫЙ_ID_ГРУППЫ
|
||||
IMPORTANT_CHANNEL_ID=ВВЕДИТЕ_ВАЖНЫЙ_ID_КАНАЛА
|
||||
|
||||
# Дополнительные пермемнные
|
||||
SECRET=СЕКРЕТ
|
||||
874
poetry.lock → ProjectsFile/poetry.lock
generated
874
poetry.lock → ProjectsFile/poetry.lock
generated
File diff suppressed because it is too large
Load Diff
@@ -16,7 +16,7 @@ def count_lines_in_python_files(directory):
|
||||
# Проходим по всем директориям и файлам в заданной директории
|
||||
for root, dirs, files in os.walk(directory):
|
||||
# Исключаем определенные директории
|
||||
if any(excluded in root for excluded in ['.venv', '.git', '.idea', '__pycache__']):
|
||||
if any(excluded in root for excluded in ['.venv', '.env', '.git', '.idea', '__pycache__']):
|
||||
continue
|
||||
|
||||
for file in files:
|
||||
@@ -37,7 +37,7 @@ def count_lines_in_python_files(directory):
|
||||
return total_lines, total_files
|
||||
|
||||
# Задайте путь к вашей директории
|
||||
directory_path = r'./'
|
||||
directory_path = r'../'
|
||||
lines_count, files_count = count_lines_in_python_files(directory_path)
|
||||
|
||||
print(f"Общее количество строк в файлах .py: {lines_count}")
|
||||
@@ -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