def voiceProcessing(event, kick_votes, vk, element, ind): ''' Обработка голоса пользователя :event: Объект события LongPoll :kick_votes: Список претендетов на кик :vk: Объект сессии ВК :element: Элемент списка претендентов на кик для данного чата :ind: Выбранный пользователем вариант голоса. Может принимать два значения: 'count_yes', если пользователь проголосовал за кик. 'count_no', если против :NoReturn: ''' user = users.getUser(vk, element['id']) # Получаем объект пользоваетля if not (event.user_id == user['id']): # Если пользователь не голосует сам за себяя if not (event.user_id in element['voted']): # Если пользователь еще не голосовал element['voted'].add( event.user_id ) # Заносим пользователя в множество проголосовавших element[ ind] += 1 # Увеличиваем количество голосов за/против (В зависимости от выбора пользователя) # Формируем и отправляем сообщения о голосе user_message = bot_msg.vote_accepted.format( str(element['count_yes']), str(element['count_no'])) writeMessage(vk, event.chat_id, user_message) else: writeMessage(vk, event.chat_id, bot_msg.err_vote_for_yourself)
def checkForBan(vk, black_list, user_id, chat_id): ''' Проверяем, нужно ли выгнать пользователя (находится ли он в черном списке) и если находится, то выгоняем его :param vk: Объект сессии ВК :param black_list: Бан-лист :param user_id: ID пользователя :param chat_id: ID беседы ВК :NoReturn: ''' id = users.getUser(vk, user_id)['id'] if isUserInBanList(black_list, id, chat_id): # Пользователь из ЧС находится в беседе writeMessage(vk, chat_id, bot_msg.banned_user_came_in) kickUser(vk, chat_id, id)
def kickUser(vk, chat_id, user_id): ''' Выгоняет пользователя из беседы :param vk: Объект сессии ВК :param user_id: id пользователях :param chat_id: id беседы ВК :NoReturn: ''' try: vk.method('messages.removeChatUser', { 'chat_id': chat_id, 'user_id': users.getUser(vk, user_id)['id'] }) except: writeMessage(vk, chat_id, bot_msg.no_rights_for_kicks)
def addBanList(vk, black_list, user_id, chat_id, isWrite=False): ''' Добавляет пользователя в бан-лист :param vk: Объект сессии ВК :param black_list: Бан-лист :param user_id: ID пользователя :param chat_id: ID беседы ВК :param isWrite: Отображать ли сообщение о добавлении в бан-лист :NoReturn: ''' id = users.getUser(vk, user_id)['id'] if isUserInBanList(black_list, id, chat_id): # Если пользователь уже в бан-листе writeMessage(vk, chat_id, bot_msg.user_already_in_banlist) else: black_list.append({'id': id, 'chat': chat_id}) if isWrite: writeMessage(vk, chat_id, bot_msg.user_added_in_banlist)
def unbanUser(vk, user_id, banlist, chat_id): ''' Разблокировка пользователя (Удаление из ЧС беседы) :param vk: Объект сессии ВК :param user_id: id пользователя, которого надо разбанить :param ban_list: Список забаненных пользоваетелей :param chat_id: id беседы, в которой надо разблокировать пользователя :NoReturn: ''' id = users.getUser(vk, user_id)['id'] for i, element in enumerate(banlist): # Перебируем список заблокированных if element['id'] == id and element['chat'] == chat_id: # Нашли del banlist[i] # Удаляем элемент списка userName = users.getName(vk, user_id, 'nom') user_message = bot_msg.unban_user.format(userName) break else: user_message = bot_msg.no_user_in_banlist writeMessage(vk, chat_id, user_message)
def isUserInConversation(vk, user_id, chat_id): ''' Проверяем, находится ли пользователь с id = userid в чате с id = chat_id :param vk: Объект сессии вк :param user_id: id пользователя :param chat_id: id беседы ВК :return: Непустой список , если пользователь в беседе | [], если не в беседе ''' user = users.getUser(vk, user_id) # Получаем объект пользователя if not user: # Пользователя не существует return False id = user['id'] if not id: # ID не существует return False # Получаем информацию о пользователях беседы chatMembers = getChatMembers(vk, chat_id) return list( filter(lambda member: member['member_id'] == id, chatMembers['items']))