diff --git a/main.py b/main.py index a72a12b..350cb5e 100644 --- a/main.py +++ b/main.py @@ -1,5 +1,22 @@ +import json +import traceback + +import requests +import vk from mcrcon import MCRcon +print("Starting..") +with open('config.json') as f: + config = json.load(f) + +vk = vk.API(access_token=config['vk']['token'], v=5.131) +group_id = vk.groups.getById()[0]['id'] +print(f"Group id: {group_id}") +admins = config['vk']['admins'] + +host = config['rcon']['host'] +port = config['rcon']['port'] +password = config['rcon']['password'] def fix_rcon_text(_srt): @@ -20,8 +37,45 @@ def rcon(cmd): return fix_rcon_text(mcr.command(cmd)) +def get_lp_server(): + lp = vk.groups.getLongPollServer(group_id=group_id) + return lp.get('server'), lp.get('key'), lp.get('ts') + + +def write(peer_id, message): + vk.messages.send(message=message, peer_id=peer_id, random_id=0) + + def main(): - pass + server, key, ts = get_lp_server() + print("Listening..") + while True: + try: + lp = requests.get(f'{server}?act=a_check&key={key}&ts={ts}&wait=25').json() + if lp.get('failed') is not None: + key = get_lp_server()[1] + if ts != lp.get('ts') and lp.get('updates'): + updates = lp['updates'][0] + if updates['type'] == "message_new": + message = updates['object']['message'] + from_id = message['from_id'] + peer_id = message['peer_id'] + text = message['text'] + if from_id in admins: + if text.startswith(".rcon "): + write(peer_id, f"rcon: {rcon(text[6:])}") + elif text.startswith(".wl "): + write(peer_id, f"Ok\n{rcon(text[4:])}") + + ts = lp.get('ts') + + except KeyboardInterrupt: + print('\nExiting...') + exit(0) + + except Exception as e: + print(f"Found exception: {e}") + print(traceback.format_exc()) if __name__ == '__main__': diff --git a/requerements.txt b/requerements.txt new file mode 100644 index 0000000..5be90c7 --- /dev/null +++ b/requerements.txt @@ -0,0 +1,2 @@ +mcrcon +vk \ No newline at end of file