add blacklist

This commit is contained in:
2024-07-01 20:42:48 +03:00
parent 9a80c2b902
commit 908682d05a
2 changed files with 103 additions and 2 deletions

71
db.py
View File

@@ -1,7 +1,10 @@
import datetime
import sqlite3
import configparser
import os
import sys
import logging
from logging.handlers import RotatingFileHandler
config_path = os.path.join(sys.path[0], 'settings.ini')
config = configparser.ConfigParser()
@@ -9,6 +12,34 @@ 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)
class BotDB:
@@ -200,7 +231,45 @@ class BotDB:
except sqlite3.Error as error:
print(error)
def get_users_blacklist(self):
"""Возвращает список пользователей в черном списке"""
try:
result = self.cursor.execute("SELECT user_id, user_name FROM `blacklist`")
fetch_all = result.fetchall()
list_of_users = {}
for i in fetch_all:
list_of_users[i[0]] = i[1]
return list_of_users
except sqlite3.Error as error:
print(error)
def get_blacklist_users_by_filters(self):
"""Возвращает список пользователей в черном списке по фильтру"""
return None
def set_user_blacklist(self, user_id, user_name=None, message_for_user=None, date_to_unban=None):
"""Добавляет пользователя в черный список"""
try:
result = self.cursor.execute("INSERT INTO 'blacklist' ('user_id', 'user_name',"
" 'message_for_user', 'date_to_unban') VALUES (?, ?, ?, ?)",
(user_id, user_name, message_for_user, date_to_unban,))
return self.conn.commit()
except sqlite3.Error as error:
print(error)
def delete_user_blacklist(self, user_id):
"""Удаляет пользователя из черного списка"""
try:
#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.")
return True
except sqlite3.Error as error:
logger.error(f"Error delete user with ID {user_id} from blacklist table: {error}")
return False
def close(self):
"""Закрываем соединение с БД"""
self.conn.close()

34
main.py
View File

@@ -3,6 +3,8 @@ import os
import sys
from pathlib import Path
from time import sleep
import db
from db import BotDB
import telebot
import random
@@ -35,9 +37,39 @@ BotDB = BotDB('tg-bot-database')
def telegram_bot():
# Черный список
@bot.message_handler(commands=['admin'], user_id=842766148)
def admin_panel(message):
try:
markup = types.ReplyKeyboardMarkup(resize_keyboard=True, one_time_keyboard=True)
item1 = types.KeyboardButton("Забанить пользователя из списка")
item2 = types.KeyboardButton("Забанить пользователя по ID")
markup.add(item1, item2)
bot.send_message(message.chat.id,"Добро пожаловать в админку. Выбери что хочешь:", reply_markup=markup)
bot.register_next_step_handler(message, ban_user)
except Exception as e:
bot.register_next_step_handler(message, admin_panel)
def ban_user(message):
# проверяем, что ID передан правильно
#TODO: остановился где-то тут, функция не дописана. Хотел сделать админку + бан пользователей
try:
if message.text == "Забанить пользователя из списка":
pass
elif message.text == "Забанить пользователя по ID":
bot.send_message(message.chat.id, "Пришли ID юзера")
BotDB.set_user_blacklist(ban_user_id)
bot.reply_to(message, f"Пользователь {ban_user_id} заблокирован.")
except Exception as e:
bot.reply_to(message, f"Укажи ID пользователя. Ошибка\n\n {e}")
bot.register_next_step_handler(message, ban_user)
@bot.message_handler(commands=['start'])
def send_welcome(message):
# TODO: Здесь переписать через randint
# TODO: Тексты приветствий вынести в отдельный файл
try:
name_stick_hello = list(Path('Stick').rglob('Hello_*'))