diff --git a/main.py b/main.py index 31a489b..3dc20a1 100644 --- a/main.py +++ b/main.py @@ -1,6 +1,8 @@ import json import os +import random import traceback +import shlex import vk_api from vk_api.longpoll import VkLongPoll, VkEventType, VkLongpollMode @@ -14,6 +16,10 @@ vk_session = vk_api.VkApi(token=os.getenv('VK_ACCESS_TOKEN'), api_version='5.131 vk = vk_session.get_api() +# массив peer_id, которым можно доверять +TRUSTED_USERS = eval(os.getenv('TRUSTED_USERS')) + + class Logger: def __init__(self, filename=None): self.filename = filename @@ -96,6 +102,35 @@ def log_message_recovery(event): msg_logger.log(f"message_rec {__create_msg_string(event)}") +def cmd_handler(event, *args): + if event.peer_id not in TRUSTED_USERS: + print(f"Команда {args}: отказано в доступе - недоверенный пользователь id={event.peer_id}") + else: + print(f"Execute {args}") + if len(args) >= 1: + if args[0] == "рандом" or args[0] == "random": + if len(args) != 3: + vk.messages.send(peer_id=event.peer_id, random_id=random.randint(0, 0x7FFFFFFF), + message="Использование команды рандом: /рандом <от> <до>") + else: + try: + start = int(args[1]) + end = int(args[2]) + vk.messages.send(peer_id=event.peer_id, random_id=random.randint(0, 0x7FFFFFFF), + message=f"Результат: {random.randint(start, end)}") + except Exception: + vk.messages.send(peer_id=event.peer_id, random_id=random.randint(0, 0x7FFFFFFF), + message="Один из аргументов не является числом!") + + if args[0] == "выбери" or args[0] == "select": + if len(args) == 1: + vk.messages.send(peer_id=event.peer_id, random_id=random.randint(0, 0x7FFFFFFF), + message="Использование команды выбери: /выбери <одно> [второе] [третье] ...") + else: + vk.messages.send(peer_id=event.peer_id, random_id=random.randint(0, 0x7FFFFFFF), + message=f"Результат: {random.choice(args[2:])}") + + def lp_loop(): mode = VkLongpollMode.GET_ATTACHMENTS | VkLongpollMode.GET_EXTENDED | VkLongpollMode.GET_PTS |\ VkLongpollMode.GET_EXTRA_ONLINE | VkLongpollMode.GET_RANDOM_ID @@ -107,6 +142,10 @@ def lp_loop(): for event in lp.listen(): if event.type == VkEventType.MESSAGE_NEW: log_new_message(event) + # event.from_me and + if event.from_user and event.text.startswith("/"): + first_line = event.text[1:].split('\n')[0].replace('"', '"') + cmd_handler(event, *shlex.split(first_line)) elif event.type == VkEventType.MESSAGE_EDIT: log_message_edit(event) elif event.type == VkEventType.MESSAGE_FLAGS_SET: