[~] encoding

[!] Critical bugfix
[+] cmd `.bot`
[+] cmd `.bot perm reload`
[+] LuckPerm.nick
This commit is contained in:
Maxim Khomutov 2024-01-13 09:35:44 +03:00
parent a93f18fa47
commit d7135db073
3 changed files with 40 additions and 23 deletions

View File

@ -1,11 +1,8 @@
import sys
import traceback
import requests import requests
import vk import vk
from loguru import logger 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: class Bot:
@ -13,7 +10,7 @@ class Bot:
def __init__(self): def __init__(self):
self.vk = vk.API(access_token=config.vk.token, v=5.199) self.vk = vk.API(access_token=config.vk.token, v=5.199)
self.group_id = self.vk.groups.getById()['groups'][0]['id'] 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() self.help_message = f.read()
logger.info(f"[BOT] ID группы: {self.group_id}") logger.info(f"[BOT] ID группы: {self.group_id}")
@ -30,7 +27,7 @@ class Bot:
break break
self.write(peer_id, message[:4095 * i]) self.write(peer_id, message[:4095 * i])
else: 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): def rcon_cmd_handle(self, cmd, from_id, peer_id, _write=True, _allow=False):
a, r = perms.is_allowed(from_id, cmd.split()[0]) 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}\".") logger.info(f"[BOT] User: {from_id}({r}) in Chat: {peer_id} no have rights RCON cmd: \"{cmd}\".")
def message_handle(self, message): def message_handle(self, message):
global perms
from_id = message['from_id'] from_id = message['from_id']
peer_id = message['peer_id'] peer_id = message['peer_id']
text = message['text'] text = message['text']
match 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) 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": case "!help":
self.write(peer_id, self.help_message) self.write(peer_id, self.help_message)
case "!online": case "!online":
online = get_server_status().online players = get_server_status().players
self.write(peer_id, f"На сервере сейчас {online}") self.write(peer_id, f"На сервере сейчас {players.online}/{players.max}")
case "!id": case "!id":
self.write(peer_id, f"Твой ID: {from_id}\nРоль: {perms.get_role(from_id)}") self.write(peer_id, f"Твой ID: {from_id}\nРоль: {perms.get_role(from_id)}")
@ -86,6 +100,7 @@ class Bot:
if __name__ == '__main__': if __name__ == '__main__':
perms = Permissions.load()
if not config.vk.token: if not config.vk.token:
logger.error("Токен ВК не найден.") logger.error("Токен ВК не найден.")
enter_to_exit() enter_to_exit()
@ -98,8 +113,8 @@ if __name__ == '__main__':
logger.info("RCON доступен.") logger.info("RCON доступен.")
try: try:
# Test Minecraft Server # Test Minecraft Server
players = get_server_status().players _players = get_server_status().players
logger.info(f"Проверка сервера. Онлайн: {players.online}/{players.max}") logger.info(f"Проверка сервера. Онлайн: {_players.online}/{_players.max}")
except Exception as e: except Exception as e:
logger.exception(e) logger.exception(e)
logger.info("Сервер не отвечает. Проверьте блок \"minecraft\" в config.json") logger.info("Сервер не отвечает. Проверьте блок \"minecraft\" в config.json")

View File

@ -3,7 +3,6 @@ import json
import os import os
import re import re
import sys import sys
import traceback
import zipfile import zipfile
from collections import namedtuple from collections import namedtuple
from datetime import datetime from datetime import datetime
@ -89,6 +88,7 @@ else:
host = config.rcon.host host = config.rcon.host
port = config.rcon.port port = config.rcon.port
password = config.rcon.password password = config.rcon.password
Permissions.perm_file = Path(config.permissions_file)
def rcon(cmd): def rcon(cmd):
@ -107,10 +107,6 @@ def get_server_status():
return server.status() return server.status()
Permissions.perm_file = Path(config.permissions_file)
perms = Permissions.load()
def enter_to_exit(): def enter_to_exit():
logger.info("Выход..") logger.info("Выход..")
input("\nНажмите Enter для продолжения..") input("\nНажмите Enter для продолжения..")

View File

@ -18,8 +18,8 @@ class Permissions:
self._perms = kwargs['perms'] self._perms = kwargs['perms']
self._members = {} self._members = {}
if kwargs['useLuckPerms']: if kwargs['useLuckPerms']:
logger.info("[PERMS] Using LuckPerms mode") logger.info("[PERMS] Поддержка LuckPerms всё ещё в разработке. ")
logger.info("[PERMS] LuckPerms mode support still in development") print(kwargs['LuckPerms']['nicks'])
sys.exit(1) sys.exit(1)
self._luck_perms = kwargs['LuckPerms'] self._luck_perms = kwargs['LuckPerms']
logger.info(f"[PERMS] {self.perm_file} - загружен") logger.info(f"[PERMS] {self.perm_file} - загружен")
@ -89,9 +89,14 @@ class Permissions:
# Находится в режиме тестирования # Находится в режиме тестирования
# Интеграция с базой данных LuckPerms (Нужна именно внешняя база данных) # Интеграция с базой данных LuckPerms (Нужна именно внешняя база данных)
useLuckPerms: false useLuckPerms: 1
LuckPerms: LuckPerms:
# Таблица соответствия vkID к нику в Майнкрафте
nicks:
370926160: Rick
583018016: SantaSpeen
# Разрешенные варианты: MySQL, MariaDB, PostgreSQL # Разрешенные варианты: MySQL, MariaDB, PostgreSQL
storage-method: PostgreSQL storage-method: PostgreSQL
data: data:
@ -104,8 +109,9 @@ class Permissions:
password: user password: user
# Смотрите настройку LuckPerms # Смотрите настройку LuckPerms
server: global
table-prefix: luckperms_ table-prefix: luckperms_
server: global
""") """)
data = yaml.load(raw) data = yaml.load(raw)
with open(cls.perm_file, mode="w", encoding="utf-8") as f: with open(cls.perm_file, mode="w", encoding="utf-8") as f: