forked from Muzifs/LGBot
Добавление обработки ошибок и валидации
This commit is contained in:
@@ -1,4 +1,3 @@
|
|||||||
BOT_TOKEN = "..." # Токен бота получать у @BotFather
|
BOT_TOKEN = "..." # Токен бота получать у @BotFather
|
||||||
ADMIN_CHAT_ID = -1001111111111 # ID админ-чата получать у @username_to_id_bot
|
ADMIN_CHAT_ID = -1001111111111 # ID админ-чата получать у @username_to_id_bot
|
||||||
LOG_THREAD_ID = 2 # ID топика, брать из ссылки сообщения
|
LOG_THREAD_ID = 2 # ID топика, брать из ссылки сообщения
|
||||||
ADMIN_IDS = "11111,22222" # ID администраторов получать у @username_to_id_bot
|
|
@@ -1,5 +1,5 @@
|
|||||||
## changed at Sun Oct 12 15:29:33 MSK 2025
|
## changed at Sat Oct 18 12:59:47 MSK 2025
|
||||||
#Sun Oct 12 15:29:33 MSK 2025
|
#Sat Oct 18 12:59:47 MSK 2025
|
||||||
com.gigaide.elements.ext.marker.solution.BeanMarkedPsi.shouldMark=true
|
com.gigaide.elements.ext.marker.solution.BeanMarkedPsi.shouldMark=true
|
||||||
com.gigaide.elements.ext.marker.solution.ConfigMarkedPsi.shouldMark=true
|
com.gigaide.elements.ext.marker.solution.ConfigMarkedPsi.shouldMark=true
|
||||||
com.gigaide.elements.ext.marker.solution.DataMarkedPsi.shouldMark=true
|
com.gigaide.elements.ext.marker.solution.DataMarkedPsi.shouldMark=true
|
||||||
|
@@ -5,7 +5,6 @@ asyncio==3.4.3
|
|||||||
attrs==25.3.0
|
attrs==25.3.0
|
||||||
certifi==2025.6.15
|
certifi==2025.6.15
|
||||||
charset-normalizer==3.4.2
|
charset-normalizer==3.4.2
|
||||||
dotenv==0.9.9
|
|
||||||
frozenlist==1.7.0
|
frozenlist==1.7.0
|
||||||
idna==3.10
|
idna==3.10
|
||||||
multidict==6.6.3
|
multidict==6.6.3
|
||||||
|
@@ -26,11 +26,18 @@ class ActionReporter:
|
|||||||
if tag:
|
if tag:
|
||||||
text += f"• Tag: <code>@{tag}</code>\n"
|
text += f"• Tag: <code>@{tag}</code>\n"
|
||||||
text += f"• ID: <code>{user_id}</code>"
|
text += f"• ID: <code>{user_id}</code>"
|
||||||
|
else:
|
||||||
|
# Пользователь не найден в БД
|
||||||
|
text = f"👤 <b>Пользователь:</b>\n• ID: <code>{user_id}</code>"
|
||||||
|
|
||||||
return text
|
return text
|
||||||
|
|
||||||
# Получает информацию об администраторе
|
# Получает информацию об администраторе
|
||||||
async def _get_admin_info(self, admin_id: int) -> str:
|
async def _get_admin_info(self, admin_id: int | None) -> str:
|
||||||
|
# Если админ не указан (автоматическое действие)
|
||||||
|
if admin_id is None:
|
||||||
|
return "🤖 <b>Администратор:</b> Автоматическое действие"
|
||||||
|
|
||||||
admin_info = db.get_user(admin_id)
|
admin_info = db.get_user(admin_id)
|
||||||
if admin_info:
|
if admin_info:
|
||||||
|
|
||||||
@@ -44,11 +51,14 @@ class ActionReporter:
|
|||||||
if tag:
|
if tag:
|
||||||
text += f"• Tag: <code>@{tag}</code>\n"
|
text += f"• Tag: <code>@{tag}</code>\n"
|
||||||
text += f"• ID: <code>{admin_id}</code>"
|
text += f"• ID: <code>{admin_id}</code>"
|
||||||
|
else:
|
||||||
|
# Администратор не найден в БД
|
||||||
|
text = f"🛡 <b>Администратор:</b>\n• ID: <code>{admin_id}</code>"
|
||||||
|
|
||||||
return text
|
return text
|
||||||
|
|
||||||
# Отправляет лог действия в админ-чат
|
# Отправляет лог действия в админ-чат
|
||||||
async def log_action(self, action: str, user_id: int, admin_id: int, reason: str, duration: str, photo_path: str = None):
|
async def log_action(self, action: str, user_id: int, admin_id: int | None, reason: str, duration: str, photo_path: str = None):
|
||||||
try:
|
try:
|
||||||
|
|
||||||
# Получаем информацию о пользователе и администраторе
|
# Получаем информацию о пользователе и администраторе
|
||||||
|
@@ -93,8 +93,8 @@ def reload_words():
|
|||||||
_exceptions_cache = None
|
_exceptions_cache = None
|
||||||
return load_bad_words()
|
return load_bad_words()
|
||||||
|
|
||||||
# Загружаем слова при импорте модуля
|
# Предзагружаем слова при импорте модуля в кэш
|
||||||
BAD_WORDS, EXCEPTIONS = load_bad_words()
|
load_bad_words()
|
||||||
|
|
||||||
def contains_bad_word(text: str) -> bool:
|
def contains_bad_word(text: str) -> bool:
|
||||||
"""
|
"""
|
||||||
|
34
src/main.py
34
src/main.py
@@ -18,6 +18,32 @@ from config import MODULES_DIR
|
|||||||
|
|
||||||
# Загружаем токен бота из .env
|
# Загружаем токен бота из .env
|
||||||
load_dotenv()
|
load_dotenv()
|
||||||
|
|
||||||
|
# Валидация переменных окружения
|
||||||
|
def validate_env_vars():
|
||||||
|
"""Проверяет наличие всех необходимых переменных окружения"""
|
||||||
|
required_vars = {
|
||||||
|
"BOT_TOKEN": "Токен бота",
|
||||||
|
"ADMIN_CHAT_ID": "ID админ-чата",
|
||||||
|
"LOG_THREAD_ID": "ID топика для логов"
|
||||||
|
}
|
||||||
|
|
||||||
|
missing_vars = []
|
||||||
|
for var_name, description in required_vars.items():
|
||||||
|
value = os.getenv(var_name)
|
||||||
|
if not value or value.strip() == "" or value == "...":
|
||||||
|
missing_vars.append(f"{var_name} ({description})")
|
||||||
|
|
||||||
|
if missing_vars:
|
||||||
|
print("\n❌ ОШИБКА: Не заполнены необходимые переменные окружения в файле .env:")
|
||||||
|
for var in missing_vars:
|
||||||
|
print(f" • {var}")
|
||||||
|
print("\nПожалуйста, заполните файл .env на основе .env.example")
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
# Проверяем переменные окружения
|
||||||
|
validate_env_vars()
|
||||||
|
|
||||||
bot = AsyncTeleBot(os.getenv("BOT_TOKEN"), parse_mode="html")
|
bot = AsyncTeleBot(os.getenv("BOT_TOKEN"), parse_mode="html")
|
||||||
|
|
||||||
# Загружаем ID админ-чата из .env и инициализируемся для логов в чат
|
# Загружаем ID админ-чата из .env и инициализируемся для логов в чат
|
||||||
@@ -67,10 +93,6 @@ bot.setup_middleware(UserUpdateMiddleware(db))
|
|||||||
|
|
||||||
# Загружает все модули из директории /modules
|
# Загружает все модули из директории /modules
|
||||||
async def load_modules():
|
async def load_modules():
|
||||||
|
|
||||||
# Инициализация логирования
|
|
||||||
setup_logging()
|
|
||||||
|
|
||||||
# Переменная для подсчёта модулей
|
# Переменная для подсчёта модулей
|
||||||
loaded_count = 0
|
loaded_count = 0
|
||||||
|
|
||||||
@@ -116,7 +138,7 @@ async def setup_bot_commands():
|
|||||||
from telebot.types import BotCommand
|
from telebot.types import BotCommand
|
||||||
|
|
||||||
commands = [
|
commands = [
|
||||||
BotCommand("start", "Начало работы сботом"),
|
BotCommand("start", "Начало работы с ботом"),
|
||||||
BotCommand("help", "Справка по всем командам"),
|
BotCommand("help", "Справка по всем командам"),
|
||||||
BotCommand("log", "Инструкция по созданию лога ошибки"),
|
BotCommand("log", "Инструкция по созданию лога ошибки"),
|
||||||
BotCommand("ban", "Забанить пользователя. Использование: /ban help"),
|
BotCommand("ban", "Забанить пользователя. Использование: /ban help"),
|
||||||
@@ -132,6 +154,8 @@ async def setup_bot_commands():
|
|||||||
logger.info("Команды бота успешно установлены.")
|
logger.info("Команды бота успешно установлены.")
|
||||||
|
|
||||||
async def main():
|
async def main():
|
||||||
|
# Инициализация логирования (должна быть первой)
|
||||||
|
setup_logging()
|
||||||
|
|
||||||
# Очищаем терминал
|
# Очищаем терминал
|
||||||
os.system('clear')
|
os.system('clear')
|
||||||
|
@@ -28,7 +28,7 @@ MUTE_LEVELS = [
|
|||||||
259200, # 11. 3 дня
|
259200, # 11. 3 дня
|
||||||
432000, # 12. 5 дней
|
432000, # 12. 5 дней
|
||||||
604800, # 13. 7 дней
|
604800, # 13. 7 дней
|
||||||
None, # 16. Перманентный мут (режим только чтения навсегда)
|
None, # 14. Перманентный мут (режим только чтения навсегда)
|
||||||
]
|
]
|
||||||
|
|
||||||
# Период для подсчета нарушений (30 дней в секундах)
|
# Период для подсчета нарушений (30 дней в секундах)
|
||||||
|
@@ -62,7 +62,7 @@ async def ban_command(bot: AsyncTeleBot, message: Message, photo_path: str = Non
|
|||||||
if message.is_topic_message:
|
if message.is_topic_message:
|
||||||
|
|
||||||
# Если без ответа на сообщение
|
# Если без ответа на сообщение
|
||||||
if message.message_thread_id == message.reply_to_message.message_id:
|
if not message.reply_to_message or message.message_thread_id == message.reply_to_message.message_id:
|
||||||
|
|
||||||
# Удаляем сообщение через 3 секунды
|
# Удаляем сообщение через 3 секунды
|
||||||
await delete_messages(bot, message, time_sleep=3, number_message=1)
|
await delete_messages(bot, message, time_sleep=3, number_message=1)
|
||||||
@@ -141,7 +141,7 @@ async def ban_command(bot: AsyncTeleBot, message: Message, photo_path: str = Non
|
|||||||
if message.is_topic_message:
|
if message.is_topic_message:
|
||||||
|
|
||||||
# Если без ответа на сообщение
|
# Если без ответа на сообщение
|
||||||
if message.message_thread_id == message.reply_to_message.message_id:
|
if not message.reply_to_message or message.message_thread_id == message.reply_to_message.message_id:
|
||||||
|
|
||||||
# Удаляем сообщение через 3 секунды
|
# Удаляем сообщение через 3 секунды
|
||||||
await delete_messages(bot, message, time_sleep=3, number_message=1)
|
await delete_messages(bot, message, time_sleep=3, number_message=1)
|
||||||
|
@@ -76,7 +76,7 @@ async def mute_command(bot: AsyncTeleBot, message: Message, photo_path: str = No
|
|||||||
if message.is_topic_message:
|
if message.is_topic_message:
|
||||||
|
|
||||||
# Если без ответа на сообщение
|
# Если без ответа на сообщение
|
||||||
if message.message_thread_id == message.reply_to_message.message_id:
|
if not message.reply_to_message or message.message_thread_id == message.reply_to_message.message_id:
|
||||||
|
|
||||||
# Удаляем сообщение через 3 секунды
|
# Удаляем сообщение через 3 секунды
|
||||||
await delete_messages(bot, message, time_sleep=3, number_message=1)
|
await delete_messages(bot, message, time_sleep=3, number_message=1)
|
||||||
@@ -158,7 +158,7 @@ async def mute_command(bot: AsyncTeleBot, message: Message, photo_path: str = No
|
|||||||
if message.is_topic_message:
|
if message.is_topic_message:
|
||||||
|
|
||||||
# Если без ответа на сообщение
|
# Если без ответа на сообщение
|
||||||
if message.message_thread_id == message.reply_to_message.message_id:
|
if not message.reply_to_message or message.message_thread_id == message.reply_to_message.message_id:
|
||||||
|
|
||||||
# Удаляем сообщение через 3 секунды
|
# Удаляем сообщение через 3 секунды
|
||||||
await delete_messages(bot, message, time_sleep=3, number_message=1)
|
await delete_messages(bot, message, time_sleep=3, number_message=1)
|
||||||
|
Reference in New Issue
Block a user