mirror of
https://github.com/SantaSpeen/Rcon-VK-Bot.git
synced 2025-07-03 00:06:25 +00:00
[~] encoding
[!] Critical bugfix [+] cmd `.bot` [+] cmd `.bot perm reload` [+] LuckPerm.nick
This commit is contained in:
parent
a93f18fa47
commit
d7135db073
37
src/main.py
37
src/main.py
@ -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")
|
||||||
|
@ -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 для продолжения..")
|
||||||
|
@ -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:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user