diff --git a/src/main.py b/src/main.py index e097fcb..7722e28 100644 --- a/src/main.py +++ b/src/main.py @@ -1,11 +1,8 @@ -import sys -import traceback - import requests import vk from loguru import logger -from modules import config, rcon, perms, get_server_status, enter_to_exit +from modules import config, rcon, get_server_status, enter_to_exit, Permissions class Bot: @@ -13,7 +10,7 @@ class Bot: def __init__(self): self.vk = vk.API(access_token=config.vk.token, v=5.199) self.group_id = self.vk.groups.getById()['groups'][0]['id'] - with open('help_message.txt') as f: + with open('help_message.txt', encoding="utf-8") as f: self.help_message = f.read() logger.info(f"[BOT] ID группы: {self.group_id}") @@ -30,7 +27,7 @@ class Bot: break self.write(peer_id, message[:4095 * i]) else: - vk.messages.send(message=message, peer_id=peer_id, random_id=0) + self.vk.messages.send(message=message, peer_id=peer_id, random_id=0) def rcon_cmd_handle(self, cmd, from_id, peer_id, _write=True, _allow=False): a, r = perms.is_allowed(from_id, cmd.split()[0]) @@ -48,17 +45,34 @@ class Bot: logger.info(f"[BOT] User: {from_id}({r}) in Chat: {peer_id} no have rights RCON cmd: \"{cmd}\".") def message_handle(self, message): + global perms from_id = message['from_id'] peer_id = message['peer_id'] text = message['text'] match text: - case i if i.startwith(".rcon "): + case i if i.startswith(".rcon "): self.rcon_cmd_handle(i[6:], from_id, peer_id) + case i if i.startswith(".bot"): + if perms.is_allowed(peer_id, "bot"): + tsplit = text.split(" ") + if len(tsplit) != 3: + self.write(peer_id, "Доступные команды\n.bot perm reload - Перезагружает пермишины\n") + elif len(tsplit) == 3: + match tsplit[1]: + case "perm": + match tsplit[2]: + case "reload": + perms = Permissions.load() + self.write(peer_id, "Права перезагружены") + case _: + self.write(peer_id, ".bot perm ?") + case _: + self.write(peer_id, ".bot ? ?") case "!help": self.write(peer_id, self.help_message) case "!online": - online = get_server_status().online - self.write(peer_id, f"На сервере сейчас {online}") + players = get_server_status().players + self.write(peer_id, f"На сервере сейчас {players.online}/{players.max}") case "!id": self.write(peer_id, f"Твой ID: {from_id}\nРоль: {perms.get_role(from_id)}") @@ -86,6 +100,7 @@ class Bot: if __name__ == '__main__': + perms = Permissions.load() if not config.vk.token: logger.error("Токен ВК не найден.") enter_to_exit() @@ -98,8 +113,8 @@ if __name__ == '__main__': logger.info("RCON доступен.") try: # Test Minecraft Server - players = get_server_status().players - logger.info(f"Проверка сервера. Онлайн: {players.online}/{players.max}") + _players = get_server_status().players + logger.info(f"Проверка сервера. Онлайн: {_players.online}/{_players.max}") except Exception as e: logger.exception(e) logger.info("Сервер не отвечает. Проверьте блок \"minecraft\" в config.json") diff --git a/src/modules/__init__.py b/src/modules/__init__.py index 0551fed..0f2fe05 100644 --- a/src/modules/__init__.py +++ b/src/modules/__init__.py @@ -3,7 +3,6 @@ import json import os import re import sys -import traceback import zipfile from collections import namedtuple from datetime import datetime @@ -89,6 +88,7 @@ else: host = config.rcon.host port = config.rcon.port password = config.rcon.password +Permissions.perm_file = Path(config.permissions_file) def rcon(cmd): @@ -107,10 +107,6 @@ def get_server_status(): return server.status() -Permissions.perm_file = Path(config.permissions_file) -perms = Permissions.load() - - def enter_to_exit(): logger.info("Выход..") input("\nНажмите Enter для продолжения..") diff --git a/src/modules/perms.py b/src/modules/perms.py index 8958ddd..9838662 100644 --- a/src/modules/perms.py +++ b/src/modules/perms.py @@ -18,8 +18,8 @@ class Permissions: self._perms = kwargs['perms'] self._members = {} if kwargs['useLuckPerms']: - logger.info("[PERMS] Using LuckPerms mode") - logger.info("[PERMS] LuckPerms mode support still in development") + logger.info("[PERMS] Поддержка LuckPerms всё ещё в разработке. ") + print(kwargs['LuckPerms']['nicks']) sys.exit(1) self._luck_perms = kwargs['LuckPerms'] logger.info(f"[PERMS] {self.perm_file} - загружен") @@ -86,12 +86,17 @@ class Permissions: - say - mute - warn - + # Находится в режиме тестирования # Интеграция с базой данных LuckPerms (Нужна именно внешняя база данных) - useLuckPerms: false + useLuckPerms: 1 LuckPerms: - + + # Таблица соответствия vkID к нику в Майнкрафте + nicks: + 370926160: Rick + 583018016: SantaSpeen + # Разрешенные варианты: MySQL, MariaDB, PostgreSQL storage-method: PostgreSQL data: @@ -102,10 +107,11 @@ class Permissions: # Логин и пароль для доступа к БД username: user password: user - + # Смотрите настройку LuckPerms - server: global table-prefix: luckperms_ + server: global + """) data = yaml.load(raw) with open(cls.perm_file, mode="w", encoding="utf-8") as f: