blacklist
This commit is contained in:
93
db.py
93
db.py
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user