From b4b74d5421af93e219e900672d99db332ceee2b0 Mon Sep 17 00:00:00 2001 From: Verum Date: Tue, 4 Mar 2025 01:58:09 +0700 Subject: [PATCH] =?UTF-8?q?1.9=20=D0=A1=D0=92=D0=95=D0=A0=D0=A5=20=D0=92?= =?UTF-8?q?=D0=90=D0=96=D0=9D=D0=AB=D0=95=20=D0=98=D0=A1=D0=9F=D0=A0=D0=90?= =?UTF-8?q?=D0=92=D0=9B=D0=95=D0=9D=D0=98=D0=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/PRIMOWORLD.iml | 2 +- BotCode/routers/commands/__init__.py | 2 + BotCode/routers/commands/adm_cmd/__init__.py | 18 +++++++ BotCode/routers/commands/adm_cmd/ban_cmd.py | 48 +++++++++++++++++++ BotCode/routers/commands/user_cmd/stats.py | 2 +- BotCode/routers/common/messages.py | 4 ++ SQLite3/bd.db | Bin 36864 -> 40960 bytes SQLite3/bd_func/__init__.py | 1 + SQLite3/bd_func/status_user.py | 41 ++++++++++++++++ SQLite3/bd_func/username_to_id.py | 3 ++ 10 files changed, 119 insertions(+), 2 deletions(-) create mode 100644 BotCode/routers/commands/adm_cmd/ban_cmd.py create mode 100644 SQLite3/bd_func/status_user.py create mode 100644 SQLite3/bd_func/username_to_id.py diff --git a/.idea/PRIMOWORLD.iml b/.idea/PRIMOWORLD.iml index ae786b7..541e011 100644 --- a/.idea/PRIMOWORLD.iml +++ b/.idea/PRIMOWORLD.iml @@ -12,7 +12,7 @@ - + diff --git a/BotCode/routers/commands/__init__.py b/BotCode/routers/commands/__init__.py index 970dd94..f07158c 100644 --- a/BotCode/routers/commands/__init__.py +++ b/BotCode/routers/commands/__init__.py @@ -3,6 +3,7 @@ from aiogram import Router from .user_cmd import router as user_cmd_router +from .adm_cmd import router as adm_cmd_router # Объявление роутера и настройка экспорта модулей @@ -12,5 +13,6 @@ router = Router(name="commands_head_router") # Список подключаемых роутеров сверху-вниз router.include_routers( + adm_cmd_router, user_cmd_router, ) \ No newline at end of file diff --git a/BotCode/routers/commands/adm_cmd/__init__.py b/BotCode/routers/commands/adm_cmd/__init__.py index e69de29..6d83b64 100644 --- a/BotCode/routers/commands/adm_cmd/__init__.py +++ b/BotCode/routers/commands/adm_cmd/__init__.py @@ -0,0 +1,18 @@ +# BotCode/routers/commands/adm_cmd/__init__.py +# Инициализация модуля adm_cmd, для административных команд бота + +# Экспортирование модулей во внешние слои проекта +from aiogram import Router +from .all_cmd import all_cmd +from .ban_cmd import ban_cmd + +# Объявление роутера и настройка экспорта модулей +__all__ = ("router",) +router = Router(name="adm_cmd_router") + + +# Список подключаемых роутеров сверху-вниз +router.include_routers( + ban_cmd.router, + all_cmd.router, +) diff --git a/BotCode/routers/commands/adm_cmd/ban_cmd.py b/BotCode/routers/commands/adm_cmd/ban_cmd.py new file mode 100644 index 0000000..2a185af --- /dev/null +++ b/BotCode/routers/commands/adm_cmd/ban_cmd.py @@ -0,0 +1,48 @@ +# BotCode/routers/commands/user_cmd/stats_cmd.py +# Работа с командой /stats, для получения информации о себе + +from aiogram import types +from BotLibrary import CommandHandler, bot +from SQLite3 import status_user + +# Настройки экспорта в модули +__all__ = ("ban_cmd",) + +# Функция блокировки пользователя +async def ban_user(message: types.Message, *args, **kwargs): + status = await status_user(message) + if status not in ('Пользователь', 'Забаннен'): + # Проверка, что команда вызвана с упоминанием пользователя + args = message.text.split() + if len(args) != 2: + await message.reply("Пожалуйста, укажите пользователя для бана, например: /ban @username") + return + + # Получение упомянутого пользователя + username = args[1] + + # Попытка получить user_id по username + try: + user = await bot.get_users(username) + user_id = user.id + + # Проверка, является ли пользователь участником чата + member = await bot.get_chat_member(message.chat.id, user_id) + + # Блокировка пользователя + await bot.kick_chat_member(message.chat.id, user_id) + await message.reply(f"Пользователь {username} забанен.") + except Exception as e: + await message.reply(f"Ошибка: {str(e)}") + else: + await message.reply("Вы не являетесь администратором!") + + +# Создание команды /ban с несколькими медиа +ban_cmd = CommandHandler( + name="ban", + description="Блокировка пользователя", + keywords=["ban", "бан", "banhammer", "ифтрфььук", "ифт"], + callbackdata=["keywords"], + media="command", func=[ban_user], +) diff --git a/BotCode/routers/commands/user_cmd/stats.py b/BotCode/routers/commands/user_cmd/stats.py index 0d51795..0876988 100644 --- a/BotCode/routers/commands/user_cmd/stats.py +++ b/BotCode/routers/commands/user_cmd/stats.py @@ -3,7 +3,7 @@ import sqlite3 from aiogram import types -from BotLibrary import CommandHandler, username_to_text +from BotLibrary import CommandHandler, username_to_text, bot from ProjectsFiles import BotVar # Настройки экспорта в модули diff --git a/BotCode/routers/common/messages.py b/BotCode/routers/common/messages.py index 42293fa..cea6d9c 100644 --- a/BotCode/routers/common/messages.py +++ b/BotCode/routers/common/messages.py @@ -7,10 +7,14 @@ from SQLite3 import base_sql # Настройка экспорта модулей и роутера __all__ = ("router",) + +from bd_func.status_user import status_user + router = Router(name="common_msg_router") @router.message() async def handle_all_messages(message: types.Message): await base_sql(message) + await status_user(message) await logger_msg(message) # Это твой метод для логирования diff --git a/SQLite3/bd.db b/SQLite3/bd.db index 285643839a0af69a063836cabdaf7c521402a61f..576f4add200b024b35c5b574388d0f75474f24c7 100644 GIT binary patch delta 7447 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 MI5gA842SXhKhK@MyZ`_I delta 158 zcmZoTz|^pSX@V3V0|x^G11AuJ!9)!+CI*g;2}}6d82QT>_{%mcD&+7_E|c#A^1m_g zf7>h=aGHPO1Vu4UW>!uH#!302sk}g)O#C|;_`mY+1WK>vw=tVJdC#g;P6l;mdqyC* zu=&D1g^P_BwqDqEv5_(4wvmC6sjh*su7OdAp@o&HB@k&F7+V<_Fag2lulC#l05^sz A+W-In diff --git a/SQLite3/bd_func/__init__.py b/SQLite3/bd_func/__init__.py index 1518052..0240b5e 100644 --- a/SQLite3/bd_func/__init__.py +++ b/SQLite3/bd_func/__init__.py @@ -10,6 +10,7 @@ from .bd_get_user import * from .bd_update_user import * from .bd_update_user_msg import * from .bd_user_create import * +from .status_user import * # Основная обработка SQL diff --git a/SQLite3/bd_func/status_user.py b/SQLite3/bd_func/status_user.py new file mode 100644 index 0000000..5483af0 --- /dev/null +++ b/SQLite3/bd_func/status_user.py @@ -0,0 +1,41 @@ +# SQLite3/bd_func/status_user.py +# Проверка статусов пользователя с БД + +import sqlite3 +from aiogram import types +from ProjectsFiles import BotVar + +# Функция проверки статуса пользователя +async def status_user(message: types.Message, bd_path: str = BotVar.bd_names): + # Подключение к базе данных + bd = sqlite3.connect(bd_path) + tg_id = message.from_user.id + cursor = bd.cursor() + + # Запрос к базе данных для получения значения из столбца 'user' для конкретного tg_id + cursor.execute("SELECT user FROM users WHERE tg_id = ?", (tg_id,)) + + # Получаем результат + row = cursor.fetchone() + + # Словарь для сопоставления статусов + status_map = { + "ban": "Забаннен", + "user": "Пользователь", + "moderator": "Модератор", + "admin": "Администратор", + "so-owner": "Совладелец", + "owner": "Владелец", + } + + if row: + user_type = row[0] # предполагаем, что в столбце 'user' находится только одно значение + status = status_map.get(user_type, "Ошибка!") # Получаем статус или "Ошибка!" + else: + status = "Пользователь не найден" + + # Закрываем соединение с базой данных + bd.close() + + # Выводим статус + return status diff --git a/SQLite3/bd_func/username_to_id.py b/SQLite3/bd_func/username_to_id.py new file mode 100644 index 0000000..cfbe136 --- /dev/null +++ b/SQLite3/bd_func/username_to_id.py @@ -0,0 +1,3 @@ +# SQLite3/bd_func/username_to_id.py +# +