With buttons for bunned

parent e4130f01
...@@ -4,6 +4,7 @@ from aiogram.types import ChatMemberUpdated, Message, InlineKeyboardButton, Inli ...@@ -4,6 +4,7 @@ from aiogram.types import ChatMemberUpdated, Message, InlineKeyboardButton, Inli
from aiogram.exceptions import AiogramError from aiogram.exceptions import AiogramError
from itertools import chain from itertools import chain
import os import os
import atexit
from dotenv import load_dotenv from dotenv import load_dotenv
from aiogram.filters import Command from aiogram.filters import Command
import logging import logging
...@@ -12,7 +13,7 @@ from aiogram.types import ChatMemberUpdated, Message, BotCommand ...@@ -12,7 +13,7 @@ from aiogram.types import ChatMemberUpdated, Message, BotCommand
from spam_keywords import is_spam, SPAM_KEYWORDS from spam_keywords import is_spam, SPAM_KEYWORDS
from symbol_utils import has_mixed_layout, is_arabic_name, normalize_text_to_infinitive from symbol_utils import has_mixed_layout, is_arabic_name, normalize_text_to_infinitive
from sqlite_tools import create_db, add_user, user_exists, ban_user, is_user_banned from sqlite_tools import create_db, add_user, user_exists, ban_user, is_user_banned, close_db
import sqlite3 import sqlite3
...@@ -159,6 +160,22 @@ async def welcome_new_user(event: ChatMemberUpdated): ...@@ -159,6 +160,22 @@ async def welcome_new_user(event: ChatMemberUpdated):
try: try:
await bot.ban_chat_member(event.chat.id, new_user.id) await bot.ban_chat_member(event.chat.id, new_user.id)
ban_user(new_user.id, new_user.first_name, new_user.last_name, new_user.username, "Spam detected in name") ban_user(new_user.id, new_user.first_name, new_user.last_name, new_user.username, "Spam detected in name")
# Создаем кнопку для разбанивания
keyboard = InlineKeyboardMarkup(
inline_keyboard=[
[InlineKeyboardButton(text="🔓 Разбанить", callback_data=f"unban_{new_user.id}")]
]
)
# Отправляем сообщение с кнопкой в группу логов
await bot.send_message(
chat_id=log_chat_id,
text=f"❌ User <b>{new_user.id}</b> has been banned due to spam detected in name.",
reply_markup=keyboard,
parse_mode="HTML"
)
logger.info(f"User {new_user.first_name} ({new_user.id}) banned due to spam detected in name.", extra={"chat_id": event.chat_id}) logger.info(f"User {new_user.first_name} ({new_user.id}) banned due to spam detected in name.", extra={"chat_id": event.chat_id})
return return
...@@ -173,6 +190,22 @@ async def welcome_new_user(event: ChatMemberUpdated): ...@@ -173,6 +190,22 @@ async def welcome_new_user(event: ChatMemberUpdated):
try: try:
await bot.ban_chat_member(event.chat.id, new_user.id) await bot.ban_chat_member(event.chat.id, new_user.id)
ban_user(new_user.id, new_user.first_name, new_user.last_name, new_user.username, "Arabic name detected") ban_user(new_user.id, new_user.first_name, new_user.last_name, new_user.username, "Arabic name detected")
# Создаем кнопку для разбанивания
keyboard = InlineKeyboardMarkup(
inline_keyboard=[
[InlineKeyboardButton(text="🔓 Разбанить", callback_data=f"unban_{new_user.id}")]
]
)
# Отправляем сообщение с кнопкой в группу логов
await bot.send_message(
chat_id=log_chat_id,
text=f"❌ User <b>{new_user.id}</b> has been banned due to Arabic name.",
reply_markup=keyboard,
parse_mode="HTML"
)
logger.info(f"User {new_user.first_name} ({new_user.id}) banned due to Arabic name.", extra={"chat_id": event.chat_id}) logger.info(f"User {new_user.first_name} ({new_user.id}) banned due to Arabic name.", extra={"chat_id": event.chat_id})
return return
...@@ -437,4 +470,5 @@ async def main(): ...@@ -437,4 +470,5 @@ async def main():
if __name__ == "__main__": if __name__ == "__main__":
create_db() # Создание базы данных и таблиц create_db() # Создание базы данных и таблиц
atexit.register(close_db)
asyncio.run(main()) asyncio.run(main())
# Функция для создания базы данных и таблиц # Функция для создания базы данных и таблиц
import sqlite3 import sqlite3
import os import os
from dotenv import load_dotenv
db_path = os.getenv("DB_PATH")
def create_db(): # Загрузка переменных из файла .env
load_dotenv()
db_path = os.getenv("DB_PATH")# вернуть
# Глобальные переменные
conn = None
cursor = None
def create_db():
# Подключаемся к базе данных (если она не существует, она будет создана) # Подключаемся к базе данных (если она не существует, она будет создана)
global conn, cursor
conn = sqlite3.connect(db_path) conn = sqlite3.connect(db_path)
cursor = conn.cursor() cursor = conn.cursor()
...@@ -39,13 +47,19 @@ def create_db(): ...@@ -39,13 +47,19 @@ def create_db():
conn.commit() conn.commit()
conn.close() #conn.close()
def close_db():
"""Закрытие соединения"""
global conn
if conn:
conn.close()
# Функция для добавления пользователя в базу данных # Функция для добавления пользователя в базу данных
def add_user(user_id, first_name, last_name, username): def add_user(user_id, first_name, last_name, username):
conn = sqlite3.connect(db_path) #conn = sqlite3.connect(db_path)
cursor = conn.cursor() #cursor = conn.cursor()
cursor.execute(''' cursor.execute('''
INSERT INTO users (id, first_name, last_name, username) INSERT INTO users (id, first_name, last_name, username)
...@@ -53,23 +67,23 @@ def add_user(user_id, first_name, last_name, username): ...@@ -53,23 +67,23 @@ def add_user(user_id, first_name, last_name, username):
''', (user_id, first_name, last_name, username)) ''', (user_id, first_name, last_name, username))
conn.commit() conn.commit()
conn.close() #conn.close()
# Функция для проверки, есть ли пользователь в базе данных # Функция для проверки, есть ли пользователь в базе данных
def user_exists(user_id): def user_exists(user_id):
conn = sqlite3.connect(db_path) #conn = sqlite3.connect(db_path)
cursor = conn.cursor() #cursor = conn.cursor()
cursor.execute('SELECT id FROM users WHERE id = ?', (user_id,)) cursor.execute('SELECT id FROM users WHERE id = ?', (user_id,))
result = cursor.fetchone() result = cursor.fetchone()
conn.close() #conn.close()
return result is not None return result is not None
# Функция для перемещения пользователя в таблицу забаненных # Функция для перемещения пользователя в таблицу забаненных
def ban_user(user_id, first_name, last_name, username, ban_reason): def ban_user(user_id, first_name, last_name, username, ban_reason):
conn = sqlite3.connect(db_path) #conn = sqlite3.connect(db_path)
cursor = conn.cursor() #cursor = conn.cursor()
# Добавляем в таблицу забаненных # Добавляем в таблицу забаненных
cursor.execute(''' cursor.execute('''
...@@ -81,14 +95,14 @@ def ban_user(user_id, first_name, last_name, username, ban_reason): ...@@ -81,14 +95,14 @@ def ban_user(user_id, first_name, last_name, username, ban_reason):
cursor.execute('DELETE FROM users WHERE id = ?', (user_id,)) cursor.execute('DELETE FROM users WHERE id = ?', (user_id,))
conn.commit() conn.commit()
conn.close() #conn.close()
def is_user_banned(user_id): def is_user_banned(user_id):
conn = sqlite3.connect(db_path) #conn = sqlite3.connect(db_path)
cursor = conn.cursor() #cursor = conn.cursor()
cursor.execute('SELECT id FROM banned_users WHERE id = ?', (user_id,)) cursor.execute('SELECT id FROM banned_users WHERE id = ?', (user_id,))
result = cursor.fetchone() result = cursor.fetchone()
conn.close() #conn.close()
return result is not None return result is not None
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment