From ef19687a0e1b11adebebfa0729e1306f45f583d0 Mon Sep 17 00:00:00 2001 From: VladislavOstapov Date: Sat, 25 Mar 2023 00:50:53 +0300 Subject: [PATCH] =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B0=20=D1=84=D1=83=D0=BD=D0=BA=D1=86=D0=B8=D1=8F=20?= =?UTF-8?q?=D0=B2=D1=8B=D0=B1=D0=B5=D1=80=D0=B8=20=D0=B8=20=D1=80=D0=B0?= =?UTF-8?q?=D0=BD=D0=B4=D0=BE=D0=BC=20=D0=B4=D0=BB=D1=8F=20=D0=B4=D0=BE?= =?UTF-8?q?=D0=B2=D0=B5=D1=80=D0=B5=D0=BD=D0=BD=D1=8B=D1=85=20=D1=87=D0=B0?= =?UTF-8?q?=D1=82=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main.py | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) 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: