blacklist

This commit is contained in:
KatykhinAA
2024-07-04 21:54:06 +03:00
parent fb70c9b1db
commit 1aed0c0c4f
2 changed files with 175 additions and 76 deletions

93
db.py
View File

@@ -1,10 +1,8 @@
import datetime
import sqlite3
import configparser
import os
import sys
import logging
from logging.handlers import RotatingFileHandler
import custom_logger
config_path = os.path.join(sys.path[0], 'settings.ini')
config = configparser.ConfigParser()
@@ -12,34 +10,7 @@ config.read(config_path)
LOGS = config.getboolean('Settings', 'logs')
IMPORTANT_LOGS = config.get('Telegram', 'important_logs')
# Инициализация логгера
logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)
# Формат записи логов
formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(filename)s - %(lineno)d - %(message)s')
# Получение сегодняшней даты для имени файла
today = datetime.date.today().strftime('%Y-%m-%d')
filename = f'helper_bot_{today}.log'
# Создание обработчика для файла логов
file_handler = RotatingFileHandler(
filename,
mode='a',
maxBytes=10 * 1024 * 1024, # Максимальный размер файла (10 МБ)
backupCount=3 # Количество резервных файлов
)
file_handler.setFormatter(formatter)
# Добавление обработчика к логгеру
logger.addHandler(file_handler)
# Добавление стандартного обработчика
# чтобы сообщения также отображались на консоли
console_handler = logging.StreamHandler()
console_handler.setFormatter(formatter)
logger.addHandler(console_handler)
db_logger = custom_logger.Logger('database')
class BotDB:
@@ -254,6 +225,12 @@ class BotDB:
"""Возвращает список пользователей в черном списке по фильтру"""
return None
def check_user_in_blacklist(self, user_id):
"""Проверяет, существует ли запись с данным user_id в blacklist."""
self.cursor.execute("SELECT 1 FROM blacklist WHERE user_id = ?", (user_id,))
result = self.cursor.fetchone()
return bool(result)
def set_user_blacklist(self, user_id, user_name=None, message_for_user=None, date_to_unban=None):
"""Добавляет пользователя в черный список"""
try:
@@ -262,7 +239,7 @@ class BotDB:
(user_id, user_name, message_for_user, date_to_unban,))
return self.conn.commit()
except sqlite3.Error as error:
print(error)
return error
def delete_user_blacklist(self, user_id):
"""Удаляет пользователя из черного списка"""
@@ -270,10 +247,10 @@ class BotDB:
#TODO: Функция всегда возвращает true, даже если такого id нет в таблице
self.cursor.execute("DELETE FROM blacklist WHERE user_id = ?", (user_id,))
self.conn.commit()
logger.info(f"User with ID {user_id} successfull delete.")
db_logger.info(f"User with ID {user_id} successfull delete.")
return True
except sqlite3.Error as error:
logger.error(f"Error delete user with ID {user_id} from blacklist table: {error}")
db_logger.error(f"Error delete user with ID {user_id} from blacklist table: {str(error)}")
return False
def add_new_message_in_db(self, message_text, user_id, message_id, date, has_answer):
@@ -281,7 +258,8 @@ class BotDB:
try:
self.cursor.execute(
"INSERT INTO `user_messages` (message_text, user_id, message_id, date, has_answer) VALUES (?, ?, ?, ?, ?)",
"INSERT INTO `user_messages` (message_text, user_id, message_id, date, has_answer) "
"VALUES (?, ?, ?, ?, ?)",
(message_text, message_id, user_id, date, has_answer))
return self.conn.commit()
except sqlite3.Error as error:
@@ -289,11 +267,44 @@ class BotDB:
def update_date_for_user(self, date, user_id: int):
try:
result = self.cursor.execute("UPDATE `our_users` SET `date_changed` = ? WHERE `user_id` = ?", (date, user_id,))
result = self.cursor.execute("UPDATE `our_users` SET `date_changed` = ? WHERE `user_id` = ?",
(date, user_id,))
return self.conn.commit()
except sqlite3.Error as error:
print(error)
def is_admin(self, user_id):
"""
Проверяет, является ли пользователь администратором.
Args:
user_id: ID пользователя Telegram.
Returns:
True, если пользователь администратор, иначе False.
"""
self.cursor.execute("SELECT 1 FROM admins WHERE user_id = ?", (user_id,))
result = self.cursor.fetchone()
return bool(result)
def add_admin(self, user_id, username=None):
"""
Добавляет пользователя в список администраторов.
Args:
user_id: ID пользователя Telegram.
username: Username пользователя (необязательно).
"""
self.cursor.execute("INSERT INTO admins (user_id, username) VALUES (?, ?)", (user_id, username))
return self.conn.commit()
def remove_admin(self, user_id):
"""
Удаляет пользователя из списка администраторов.
Args:
user_id: ID пользователя Telegram.
"""
self.cursor.execute("DELETE FROM admins WHERE user_id = ?", (user_id,))
return self.conn.commit()
def get_user_by_message_id(self, message_id):
"""Возвращает идентификатор пользователя по идентификатору сообщения"""
try:
@@ -302,6 +313,16 @@ class BotDB:
except sqlite3.Error as error:
print(error)
def get_last_users_from_bot(self):
"""Возвращает список идентификаторов последних 10 пользователей обращавшихся в бот"""
try:
result = self.cursor.execute("SELECT full_name, user_id FROM our_users ORDER BY date_changed DESC LIMIT 10")
users = result.fetchall()
user_dict = {user[1]: user[0] for user in users}
return user_dict
except sqlite3.Error as error:
print(error)
def close(self):
"""Закрываем соединение с БД"""
self.conn.close()