Первый коммит
This commit is contained in:
4
.gitignore
vendored
4
.gitignore
vendored
@@ -66,3 +66,7 @@ htmlcov/
|
|||||||
.nox/
|
.nox/
|
||||||
.pytest_cache/
|
.pytest_cache/
|
||||||
.mypy_cache/
|
.mypy_cache/
|
||||||
|
test/
|
||||||
|
tests/
|
||||||
|
Test/
|
||||||
|
Tests/
|
||||||
|
|||||||
@@ -1,2 +1,3 @@
|
|||||||
from .core import *
|
from .core import *
|
||||||
from .handlers import *
|
from .handlers import *
|
||||||
|
from .middlewares import *
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from time import sleep
|
|
||||||
|
|
||||||
from aiogram import Bot, Dispatcher
|
from aiogram import Bot, Dispatcher
|
||||||
from aiogram.client.default import DefaultBotProperties
|
from aiogram.client.default import DefaultBotProperties
|
||||||
@@ -202,7 +201,7 @@ class BotInfo:
|
|||||||
|
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def start_info_out() -> str:
|
def start_info_out(out: bool = True) -> str:
|
||||||
bot_time: str = f"Бот @{BotInfo.username} запущен в {datetime.now().strftime("%S:%M:%H %d-%m-%Y")}\n"
|
bot_time: str = f"Бот @{BotInfo.username} запущен в {datetime.now().strftime("%S:%M:%H %d-%m-%Y")}\n"
|
||||||
bot_name: str = f"Основное имя: {BotInfo.first_name}\n"
|
bot_name: str = f"Основное имя: {BotInfo.first_name}\n"
|
||||||
bot_postname: str = f" Доп. имя: {BotInfo.last_name}\n"
|
bot_postname: str = f" Доп. имя: {BotInfo.last_name}\n"
|
||||||
@@ -221,8 +220,8 @@ class BotInfo:
|
|||||||
f"{bot_added_to_attachment_menu} {bot_supports_inline_queries} {bot_can_connect_to_business} "
|
f"{bot_added_to_attachment_menu} {bot_supports_inline_queries} {bot_can_connect_to_business} "
|
||||||
f"{bot_has_main_web_app}")
|
f"{bot_has_main_web_app}")
|
||||||
|
|
||||||
# Печатаем все данные в консоль с задержкой в 1 секунду
|
# Печатаем все данные в консоль
|
||||||
sleep(1)
|
if out:
|
||||||
print(f"\033[34m{bot_all_info}\033[0m")
|
print(f"\033[34m{bot_all_info}\033[0m")
|
||||||
|
|
||||||
# Записываем информацию в файл
|
# Записываем информацию в файл
|
||||||
@@ -257,4 +256,3 @@ class BotInfo:
|
|||||||
await cls.set_description(bots=bots)
|
await cls.set_description(bots=bots)
|
||||||
await cls.set_short_description(bots=bots)
|
await cls.set_short_description(bots=bots)
|
||||||
await cls.set_name(bots=bots)
|
await cls.set_name(bots=bots)
|
||||||
cls.start_info_out()
|
|
||||||
|
|||||||
44
count.py
Normal file
44
count.py
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
from pathlib import Path
|
||||||
|
from typing import Dict
|
||||||
|
|
||||||
|
|
||||||
|
def count_python_lines(project_path: str = ".", exclude: str = ".venv") -> Dict[str, int]:
|
||||||
|
"""
|
||||||
|
Подсчитывает количество строк кода во всех Python (.py) файлах проекта.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
project_path (str): Путь к директории проекта. По умолчанию — текущая папка.
|
||||||
|
exclude (str): Имя директории, которую нужно исключить (например, .venv).
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
Dict[str, int]: Словарь с двумя ключами:
|
||||||
|
- "files": количество найденных файлов .py
|
||||||
|
- "lines": общее количество строк во всех .py файлах
|
||||||
|
"""
|
||||||
|
root: Path = Path(project_path)
|
||||||
|
total_lines: int = 0
|
||||||
|
file_count: int = 0
|
||||||
|
|
||||||
|
# Рекурсивный обход всех файлов
|
||||||
|
for file_path in root.rglob("*.py"):
|
||||||
|
# Игнорируем .venv и любые подпапки внутри него
|
||||||
|
if exclude in file_path.parts:
|
||||||
|
continue
|
||||||
|
|
||||||
|
try:
|
||||||
|
with file_path.open("r", encoding="utf-8") as f:
|
||||||
|
# Считаем количество строк в файле
|
||||||
|
line_count = sum(1 for _ in f)
|
||||||
|
total_lines += line_count
|
||||||
|
file_count += 1
|
||||||
|
except (UnicodeDecodeError, PermissionError):
|
||||||
|
# Иногда могут встретиться битые файлы или без прав доступа
|
||||||
|
continue
|
||||||
|
|
||||||
|
return {"files": file_count, "lines": total_lines}
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
stats = count_python_lines()
|
||||||
|
print(f"📊 Найдено файлов: {stats['files']}")
|
||||||
|
print(f"📄 Всего строк кода: {stats['lines']}")
|
||||||
12
main.py
12
main.py
@@ -1,10 +1,8 @@
|
|||||||
from asyncio import run
|
from asyncio import run
|
||||||
|
|
||||||
from bot import BotInfo, bot, dp, router
|
|
||||||
from bot.core import server
|
|
||||||
from bot.middlewares import setup_middlewares
|
|
||||||
from database import db
|
|
||||||
from configs import Webhook
|
from configs import Webhook
|
||||||
|
from database import db
|
||||||
|
from bot import BotInfo, bot, dp, router, server, setup_middlewares
|
||||||
from middleware.loggers import setup_logging, loggers
|
from middleware.loggers import setup_logging, loggers
|
||||||
|
|
||||||
|
|
||||||
@@ -40,11 +38,13 @@ async def main() -> None:
|
|||||||
|
|
||||||
# Выбор режима работы: webhook или polling
|
# Выбор режима работы: webhook или polling
|
||||||
if Webhook.WEBHOOK:
|
if Webhook.WEBHOOK:
|
||||||
loggers.info(f"Запуск бота @{BotInfo.username} в режиме вебхука...\n")
|
loggers.info(f"Запуск бота @{BotInfo.username} в режиме webhook...")
|
||||||
|
BotInfo.start_info_out()
|
||||||
await server.serve()
|
await server.serve()
|
||||||
|
|
||||||
else:
|
else:
|
||||||
loggers.info(f"Бот @{BotInfo.username} запущен в режиме polling...\n")
|
loggers.info(f"Бот @{BotInfo.username} запущен в режиме polling...")
|
||||||
|
BotInfo.start_info_out()
|
||||||
await dp.start_polling(bot)
|
await dp.start_polling(bot)
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
|
|||||||
Reference in New Issue
Block a user