import vk_api
from vk_api.utils import get_random_id
import json
import re
from vk_api.bot_longpoll import VkBotLongPoll, VkBotEventType
vk_session = vk_api.VkApi(token='скрыл')
vk = vk_session.get_api()
longpoll = VkBotLongPoll(vk_session, "скрыл")
GROUP_IDS = list(range(3, 9))
ALLOWED_USER_IDS = []
idsss = {скрыл}
def kick_user(chat_id, user_id):
if str(chat_id) in str(idsss):
chat_name = idsss[f'{chat_id}']
else:
chat_name = "Неизвестная беседа."
try:
vk_session.method('messages.removeChatUser', {'chat_id': chat_id, 'user_id': user_id})
send_message(2, f"ЛОГ » Пользователь с ID {user_id} успешно кикнут из беседы {chat_name}")
except vk_api.exceptions.ApiError as error_msg:
pass
def get_user_id_from_link(link, patern):
match = re.search(rf'(?<={patern})\d+', link)
if match:
user_id = match.group(0)
return user_id
return None
def get_user_id_from_link2(link, patern):
match = re.search(fr'{patern}(\w+)', link)
if match:
user_ids = match.group(1)
return user_ids
else:
return None
def send_message(chat_id, message):
vk_session.method('messages.send', {'chat_id': chat_id, 'message': message, 'random_id': 0})
def get_user_id(user_arg):
prefixes = ["vk.com/id", "https://vk.com/id", "http://vk.com/id"]
for prefix in prefixes:
if user_arg.startswith(prefix):
return get_user_id_from_link(user_arg, prefix)
if user_arg.startswith('https://vk.com/') or user_arg.startswith('http://vk.com/') or user_arg.startswith('vk.com/'):
prefix2, user_ids = get_prefix_and_user_ids(user_arg)
if user_ids:
user_ids2 = vk_session.method('utils.resolveScreenName', {'screen_name': user_ids})
try:
return user_ids2['object_id']
except Exception:
return None
else:
return user_arg
return None
def get_prefix_and_user_ids(user_arg):
prefixes = ['https://vk.com/', 'http://vk.com/', 'vk.com/']
for prefix in prefixes:
if user_arg.startswith(prefix):
return prefix, get_user_id_from_link2(user_arg, prefix)
return None, None
def process_command(event):
if event.obj.peer_id != event.obj.from_id:
return
else:
if event.obj.text.startswith('/help'):
if event.obj.from_id not in ALLOWED_USER_IDS:
send_message(2, f"ЛОГ » Пользователь с ID: {event.obj.from_id} попытался использовать /help.")
return
else:
vk_session.method('messages.send', {'peer_id': event.obj.from_id, 'message': "скрыл ", 'random_id': 0})
elif event.obj.text.startswith('/kick'):
if event.obj.from_id not in ALLOWED_USER_IDS:
send_message(2, f"ЛОГ » Пользователь с ID: {event.obj.from_id} попытался использовать /kick.")
return
else:
args = event.obj.text.split()
user_args = args[1:]
for user_arg in user_args:
user_id = get_user_id(user_arg)
send_message(2, f"ЛОГ » Занимаюсь киком сотрудника с ID {user_id}")
for chat_id in GROUP_IDS:
kick_user(chat_id, user_id)
if user_id == None:
vk_session.method('messages.send', {'peer_id': event.obj.from_id, 'message': "ЛОГ » Ошибка в получении айди.", 'random_id': 0})
else:
vk_session.method('messages.send', {'peer_id': event.obj.from_id, 'message': "ЛОГ » Выполнено. Отчет в беседе", 'random_id': 0})
for event in longpoll.listen():
if event.type == VkBotEventType.MESSAGE_NEW and event.obj.text:
process_command(event)
У меня есть вот такой код. Программирование занимаюсь довольно мало, говнокода многовато. Сам кик происходит ОЧЕНЬ долго, особенно если аргументов штук 20. Пробовал asyncio и многопоточность, но кик так и оставался очень медленным. Больше всего интересуют советы/решения на счет ускорения кода, но и может идеи как можно сделать код более красивым.