Update db.py
Этот коммит содержится в:
+50
-7
@@ -10,6 +10,7 @@ from datetime import datetime
|
|||||||
|
|
||||||
EXPIRATIONS_FILE = 'files/expirations.json'
|
EXPIRATIONS_FILE = 'files/expirations.json'
|
||||||
PAYMENTS_FILE = 'files/payments.json'
|
PAYMENTS_FILE = 'files/payments.json'
|
||||||
|
ADMINS_FILE = 'files/admins.json' # Новый файл для хранения админов
|
||||||
UTC = pytz.UTC
|
UTC = pytz.UTC
|
||||||
|
|
||||||
logging.basicConfig(level=logging.INFO)
|
logging.basicConfig(level=logging.INFO)
|
||||||
@@ -34,7 +35,8 @@ def create_config(path='files/setting.ini'):
|
|||||||
config.add_section("setting")
|
config.add_section("setting")
|
||||||
|
|
||||||
bot_token = input('Введите токен Telegram бота: ').strip()
|
bot_token = input('Введите токен Telegram бота: ').strip()
|
||||||
admin_id = input('Введите Telegram ID администратора: ').strip()
|
admin_ids_input = input('Введите Telegram ID администраторов через запятую (например, 12345, 67890): ').strip()
|
||||||
|
admin_ids = [admin_id.strip() for admin_id in admin_ids_input.split(',')] # Список ID
|
||||||
|
|
||||||
docker_container = get_amnezia_container()
|
docker_container = get_amnezia_container()
|
||||||
logger.info(f"Найден Docker-контейнер: {docker_container}")
|
logger.info(f"Найден Docker-контейнер: {docker_container}")
|
||||||
@@ -43,7 +45,7 @@ def create_config(path='files/setting.ini'):
|
|||||||
try:
|
try:
|
||||||
wg_config_file = subprocess.check_output(cmd, shell=True).decode().strip()
|
wg_config_file = subprocess.check_output(cmd, shell=True).decode().strip()
|
||||||
if not wg_config_file:
|
if not wg_config_file:
|
||||||
logger.warning("Не удалось найти файл конфигурации WireGuard 'wg0.conf' в контейнере. Используется путь по умолчанию.")
|
logger.warning("Не удалось найти файл конфигурации WireGuard 'wg0.conf'. Используется путь по умолчанию.")
|
||||||
wg_config_file = '/opt/amnezia/awg/wg0.conf'
|
wg_config_file = '/opt/amnezia/awg/wg0.conf'
|
||||||
except subprocess.CalledProcessError:
|
except subprocess.CalledProcessError:
|
||||||
logger.warning("Ошибка при определении пути к файлу конфигурации WireGuard. Используется путь по умолчанию.")
|
logger.warning("Ошибка при определении пути к файлу конфигурации WireGuard. Используется путь по умолчанию.")
|
||||||
@@ -54,10 +56,10 @@ def create_config(path='files/setting.ini'):
|
|||||||
socket.inet_aton(endpoint)
|
socket.inet_aton(endpoint)
|
||||||
except (subprocess.CalledProcessError, socket.error):
|
except (subprocess.CalledProcessError, socket.error):
|
||||||
logger.error("Ошибка при определении внешнего IP-адреса сервера.")
|
logger.error("Ошибка при определении внешнего IP-адреса сервера.")
|
||||||
endpoint = input('Не удалось автоматически определить внешний IP-адрес. Пожалуйста, введите его вручную: ').strip()
|
endpoint = input('Не удалось автоматически определить внешний IP-адрес. Введите его вручную: ').strip()
|
||||||
|
|
||||||
config.set("setting", "bot_token", bot_token)
|
config.set("setting", "bot_token", bot_token)
|
||||||
config.set("setting", "admin_id", admin_id)
|
config.set("setting", "admin_ids", ','.join(admin_ids)) # Сохраняем как строку с разделителем
|
||||||
config.set("setting", "docker_container", docker_container)
|
config.set("setting", "docker_container", docker_container)
|
||||||
config.set("setting", "wg_config_file", wg_config_file)
|
config.set("setting", "wg_config_file", wg_config_file)
|
||||||
config.set("setting", "endpoint", endpoint)
|
config.set("setting", "endpoint", endpoint)
|
||||||
@@ -66,6 +68,9 @@ def create_config(path='files/setting.ini'):
|
|||||||
config.write(config_file)
|
config.write(config_file)
|
||||||
logger.info(f"Конфигурация сохранена в {path}")
|
logger.info(f"Конфигурация сохранена в {path}")
|
||||||
|
|
||||||
|
# Инициализируем admins.json с начальными администраторами
|
||||||
|
save_admins(admin_ids)
|
||||||
|
|
||||||
def ensure_peer_names():
|
def ensure_peer_names():
|
||||||
setting = get_config()
|
setting = get_config()
|
||||||
wg_config_file = setting['wg_config_file']
|
wg_config_file = setting['wg_config_file']
|
||||||
@@ -149,8 +154,10 @@ def get_config(path='files/setting.ini'):
|
|||||||
config.read(path)
|
config.read(path)
|
||||||
out = {}
|
out = {}
|
||||||
for key in config['setting']:
|
for key in config['setting']:
|
||||||
out[key] = config['setting'][key]
|
if key == 'admin_ids':
|
||||||
|
out[key] = config['setting'][key].split(',') # Парсим строку в список
|
||||||
|
else:
|
||||||
|
out[key] = config['setting'][key]
|
||||||
return out
|
return out
|
||||||
|
|
||||||
def save_client_endpoint(username, endpoint):
|
def save_client_endpoint(username, endpoint):
|
||||||
@@ -428,4 +435,40 @@ def get_user_payments(user_id: int):
|
|||||||
return payments.get(str(user_id), [])
|
return payments.get(str(user_id), [])
|
||||||
|
|
||||||
def get_all_payments():
|
def get_all_payments():
|
||||||
return load_payments()
|
payments = load_payments()
|
||||||
|
flat_payments = []
|
||||||
|
for user_id, user_payments in payments.items():
|
||||||
|
flat_payments.extend(user_payments)
|
||||||
|
return flat_payments
|
||||||
|
|
||||||
|
# Методы для управления администраторами
|
||||||
|
def load_admins():
|
||||||
|
os.makedirs(os.path.dirname(ADMINS_FILE), exist_ok=True)
|
||||||
|
if not os.path.exists(ADMINS_FILE):
|
||||||
|
return []
|
||||||
|
with open(ADMINS_FILE, 'r') as f:
|
||||||
|
try:
|
||||||
|
return json.load(f)
|
||||||
|
except json.JSONDecodeError:
|
||||||
|
logger.error("Ошибка при загрузке admins.json.")
|
||||||
|
return []
|
||||||
|
|
||||||
|
def save_admins(admin_ids):
|
||||||
|
os.makedirs(os.path.dirname(ADMINS_FILE), exist_ok=True)
|
||||||
|
with open(ADMINS_FILE, 'w') as f:
|
||||||
|
json.dump(admin_ids, f)
|
||||||
|
|
||||||
|
def get_admins():
|
||||||
|
return load_admins()
|
||||||
|
|
||||||
|
def add_admin(user_id):
|
||||||
|
admin_ids = load_admins()
|
||||||
|
if str(user_id) not in admin_ids:
|
||||||
|
admin_ids.append(str(user_id))
|
||||||
|
save_admins(admin_ids)
|
||||||
|
|
||||||
|
def remove_admin(user_id):
|
||||||
|
admin_ids = load_admins()
|
||||||
|
if str(user_id) in admin_ids:
|
||||||
|
admin_ids.remove(str(user_id))
|
||||||
|
save_admins(admin_ids)
|
||||||
|
|||||||
Ссылка в новой задаче
Block a user