mirror of
https://github.com/SantaSpeen/Rcon-VK-Bot.git
synced 2025-08-18 09:05:53 +00:00
Compare commits
8 Commits
8ba1177d42
...
82869515f3
Author | SHA1 | Date | |
---|---|---|---|
82869515f3 | |||
856a71f048 | |||
507e744514 | |||
40f2239e23 | |||
b1a40092e1 | |||
b790a97500 | |||
4d560aa15a | |||
8ea15c7abf |
7
.idea/Rcon-VK-Bot.iml
generated
7
.idea/Rcon-VK-Bot.iml
generated
@ -1,8 +1,11 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<module type="PYTHON_MODULE" version="4">
|
<module type="PYTHON_MODULE" version="4">
|
||||||
<component name="NewModuleRootManager">
|
<component name="NewModuleRootManager">
|
||||||
<content url="file://$MODULE_DIR$" />
|
<content url="file://$MODULE_DIR$">
|
||||||
<orderEntry type="jdk" jdkName="Python 3.10" jdkType="Python SDK" />
|
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
|
||||||
|
<excludeFolder url="file://$MODULE_DIR$/venv" />
|
||||||
|
</content>
|
||||||
|
<orderEntry type="jdk" jdkName="Python 3.10 (Rcon-VK-Bot)" jdkType="Python SDK" />
|
||||||
<orderEntry type="sourceFolder" forTests="false" />
|
<orderEntry type="sourceFolder" forTests="false" />
|
||||||
</component>
|
</component>
|
||||||
</module>
|
</module>
|
5
.idea/misc.xml
generated
5
.idea/misc.xml
generated
@ -1,4 +1,7 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<project version="4">
|
<project version="4">
|
||||||
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.10" project-jdk-type="Python SDK" />
|
<component name="Black">
|
||||||
|
<option name="sdkName" value="Python 3.10 (Rcon-VK-Bot)" />
|
||||||
|
</component>
|
||||||
|
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.10 (Rcon-VK-Bot)" project-jdk-type="Python SDK" />
|
||||||
</project>
|
</project>
|
23
README.md
23
README.md
@ -4,13 +4,32 @@
|
|||||||
|
|
||||||
## Что умеет:
|
## Что умеет:
|
||||||
|
|
||||||
* Доступные тольно админам
|
* Доступные разрешённым людям
|
||||||
* **.rcon <*commnd*>** - Исполняет <*commnd*> и отсылает ответ сервера
|
* **.rcon <*commnd*>** - Исполняет <*commnd*> и отсылает ответ сервера
|
||||||
* **.wl <*nick*>** - По сути ссылка на whitelist add <*nick*>
|
|
||||||
* Доступные всем
|
* Доступные всем
|
||||||
* **!help** - Выводит станичку с командами (строки 99-103 main.py)
|
* **!help** - Выводит станичку с командами (строки 99-103 main.py)
|
||||||
* **!online** - Парсит rcon cmd *list* и выводит онлайн сервера
|
* **!online** - Парсит rcon cmd *list* и выводит онлайн сервера
|
||||||
|
|
||||||
|
|
||||||
|
## Система permissions
|
||||||
|
|
||||||
|
В файле permissions.json указаны все пользователи с "повышенным" уровнем доступа к боту
|
||||||
|
Пример
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"<role>": {
|
||||||
|
"allow": ["<command_1>", "<command_2>"],
|
||||||
|
"members": [123]
|
||||||
|
},
|
||||||
|
"helper": {
|
||||||
|
"allow": ["say", "warn"],
|
||||||
|
"members": [111, 432]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Если `"allow": true` - разрешены все команды
|
||||||
|
|
||||||
## Как запустить?
|
## Как запустить?
|
||||||
|
|
||||||
1. Должен установлен быть Python3 (Если не установлен, не лезь, попроси друга айтишника помочь)
|
1. Должен установлен быть Python3 (Если не установлен, не лезь, попроси друга айтишника помочь)
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
},
|
},
|
||||||
"vk": {
|
"vk": {
|
||||||
"token": "",
|
"token": "",
|
||||||
"admins": [],
|
"help_file": "help_message.txt"
|
||||||
"stoplist": []
|
},
|
||||||
}
|
"permission_file": "permissions.json"
|
||||||
}
|
}
|
4
src/help_message.txt
Normal file
4
src/help_message.txt
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
Тебе не нужна помощь, ты и так беспомощный, кожаный ублюдок. Так уж и быть, подскажу пару команд...
|
||||||
|
!help - Вывести эту "справку"
|
||||||
|
!online - Показать текущий онлайн сервере
|
||||||
|
Бот сделан кожанным петухом - админом, все вопросы к нему, я не причём.
|
@ -16,18 +16,61 @@ log("Starting..")
|
|||||||
with open('config-t.json' if "-t" in sys.argv else 'config.json') as f:
|
with open('config-t.json' if "-t" in sys.argv else 'config.json') as f:
|
||||||
config = json.load(f)
|
config = json.load(f)
|
||||||
|
|
||||||
|
with open('help_message.txt') as f:
|
||||||
|
help_message = f.read()
|
||||||
|
|
||||||
vk = vk.API(access_token=config['vk']['token'], v=5.131)
|
vk = vk.API(access_token=config['vk']['token'], v=5.131)
|
||||||
group_id = vk.groups.getById()[0]['id']
|
group_id = vk.groups.getById()[0]['id']
|
||||||
log(f"Group id: {group_id}")
|
log(f"Group id: {group_id}")
|
||||||
admins = config['vk']['admins']
|
|
||||||
fake_admins = []
|
|
||||||
stoplist = config['vk']['stoplist']
|
|
||||||
|
|
||||||
host = config['rcon']['host']
|
host = config['rcon']['host']
|
||||||
port = config['rcon']['port']
|
port = config['rcon']['port']
|
||||||
password = config['rcon']['password']
|
password = config['rcon']['password']
|
||||||
|
|
||||||
|
|
||||||
|
class Permissions:
|
||||||
|
|
||||||
|
def __init__(self, permission_file):
|
||||||
|
self.permission_file = permission_file
|
||||||
|
self._raw_file = {}
|
||||||
|
self._members = {}
|
||||||
|
self._parse_file()
|
||||||
|
|
||||||
|
def _parse_file(self):
|
||||||
|
with open(self.permission_file) as pf:
|
||||||
|
self._raw_file = json.load(pf)
|
||||||
|
|
||||||
|
for role, role_data in self._raw_file.items():
|
||||||
|
members = role_data.get("members", [])
|
||||||
|
allow = role_data.get("allow", [])
|
||||||
|
for member in members:
|
||||||
|
self._members[member] = {
|
||||||
|
"role": role,
|
||||||
|
"allow": allow
|
||||||
|
}
|
||||||
|
|
||||||
|
def is_allow(self, vk_id, cmd):
|
||||||
|
u = self._members.get(vk_id)
|
||||||
|
if u is not None:
|
||||||
|
role = u['role']
|
||||||
|
allow = u['allow']
|
||||||
|
if allow is True:
|
||||||
|
return True, role
|
||||||
|
elif cmd in allow:
|
||||||
|
return True, role
|
||||||
|
return False, role
|
||||||
|
return False, None
|
||||||
|
|
||||||
|
def get_role(self, vk_id):
|
||||||
|
u = self._members.get(vk_id)
|
||||||
|
if u is not None:
|
||||||
|
return u['role']
|
||||||
|
return None
|
||||||
|
|
||||||
|
|
||||||
|
perms = Permissions(config['permission_file'])
|
||||||
|
|
||||||
|
|
||||||
def fix_rcon_text(_srt):
|
def fix_rcon_text(_srt):
|
||||||
try:
|
try:
|
||||||
_srt = list(_srt)
|
_srt = list(_srt)
|
||||||
@ -64,52 +107,41 @@ def write(peer_id, message):
|
|||||||
if i > 30:
|
if i > 30:
|
||||||
log("Found very long message...", 1)
|
log("Found very long message...", 1)
|
||||||
break
|
break
|
||||||
write(peer_id, message[:4095*i])
|
write(peer_id, message[:4095 * i])
|
||||||
else:
|
else:
|
||||||
vk.messages.send(message=message, peer_id=peer_id, random_id=0)
|
vk.messages.send(message=message, peer_id=peer_id, random_id=0)
|
||||||
|
|
||||||
|
|
||||||
def rcon_cmd_handle(cmd, from_id, peer_id, _write=True):
|
def rcon_cmd_handle(cmd, from_id, peer_id, _write=True, _allow=False):
|
||||||
answer = rcon(cmd)
|
a, r = perms.is_allow(from_id, cmd.split()[0])
|
||||||
log(f"User: {from_id} in Chat: {peer_id} use RCON cmd: \"{cmd}\", with answer: \"{answer}\"")
|
if _allow:
|
||||||
if _write:
|
r = cmd
|
||||||
write(peer_id, f"RCON:\n{answer}")
|
if a or _allow:
|
||||||
|
answer = rcon(cmd)
|
||||||
|
log(f"User: {from_id}({r}) in Chat: {peer_id} use RCON cmd: \"{cmd}\", with answer: \"{answer}\"")
|
||||||
|
if _write:
|
||||||
|
write(peer_id, f"RCON:\n{answer}")
|
||||||
|
else:
|
||||||
|
return answer
|
||||||
else:
|
else:
|
||||||
return answer
|
log(f"User: {from_id}({r}) in Chat: {peer_id} no have rights RCON cmd: \"{cmd}\".")
|
||||||
|
|
||||||
|
|
||||||
def message_handle(message):
|
def message_handle(message):
|
||||||
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']
|
||||||
if from_id in admins:
|
if text.startswith(".rcon "):
|
||||||
if text.startswith(".rcon "):
|
rcon_cmd_handle(text[6:], from_id, peer_id)
|
||||||
rcon_cmd_handle(text[6:], from_id, peer_id)
|
|
||||||
elif text.startswith(".wl "):
|
|
||||||
rcon_cmd_handle(f'whitelist add {text[4:]}', from_id, peer_id)
|
|
||||||
elif text.startswith(".add "):
|
|
||||||
try:
|
|
||||||
i = int(text[5:])
|
|
||||||
fake_admins.append(i)
|
|
||||||
write(peer_id, f"Админ успешно добавлен: @id{i}")
|
|
||||||
except Exception as e:
|
|
||||||
write(peer_id, f"Ошибка добавления: {e}")
|
|
||||||
if from_id in fake_admins:
|
|
||||||
if text.startswith(".rcon "):
|
|
||||||
if text[5:].split()[0] in stoplist:
|
|
||||||
write(peer_id, "У вас нет доступа к этой команде")
|
|
||||||
else:
|
|
||||||
rcon_cmd_handle(text[6:], from_id, peer_id, False)
|
|
||||||
if text == "!help":
|
if text == "!help":
|
||||||
write(peer_id, "Тебе не нужна помощь, ты и так беспомощный, кожаный ублюдок."
|
write(peer_id, help_message)
|
||||||
"Так уж и быть, подскажу пару команд..\n\n"
|
|
||||||
"!help - Вывести эту \"справку\"\n"
|
|
||||||
"!online - Показать текущий онлайн сервере\n\n"
|
|
||||||
"Бот сделан кожанным петухом - админом, все вопросы к нему, я не причём.")
|
|
||||||
elif text == "!online":
|
elif text == "!online":
|
||||||
text = rcon_cmd_handle('list', from_id, peer_id, False).replace("\n", "")
|
text = rcon_cmd_handle('list', from_id, peer_id, True, True).replace("\n", "")
|
||||||
now = text[10:11]
|
write(peer_id, text)
|
||||||
write(peer_id, f"Сейчас играет {now} человек" + ("" if now == "0" else f": {text[43:]}"))
|
# now = text[10:11]
|
||||||
|
# write(peer_id, f"Сейчас играет {now} человек" + ("" if now == "0" else f": {text[43:]}"))
|
||||||
|
elif text == "!id":
|
||||||
|
write(peer_id, f"Твой ID: {from_id}\nРоль в боте: {perms.get_role(from_id) or 'Отсутствует'}")
|
||||||
|
|
||||||
|
|
||||||
def listen():
|
def listen():
|
10
src/permissions.json
Normal file
10
src/permissions.json
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
{
|
||||||
|
"admin": {
|
||||||
|
"allow": true,
|
||||||
|
"members": [123]
|
||||||
|
},
|
||||||
|
"helper": {
|
||||||
|
"allow": ["say", "warn"],
|
||||||
|
"members": [111, 432]
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user