from vkbottle import bold from vkbottle.bot import Message from vkbottle_types.codegen.objects import MessagesGetConversationMembers import database from messages import * import utils from labeler import labeler def vk_user_is_admin(user_id: int, chat_members: MessagesGetConversationMembers): for member in chat_members.items: if member.member_id != user_id: continue return member.is_admin return False @labeler.chat_message(text="!старт") async def start_handler(message: Message): chat_id = message.peer_id database.create_chat_if_not_exists(chat_id) chat_members = await message.ctx_api.messages.get_conversation_members(peer_id=chat_id, extended=False) if not vk_user_is_admin(message.from_id, chat_members): await message.answer(MESSAGE_PERMISSION_DENIED) return database.DB.chat_update(chat_id, active=1) for member in chat_members.items: # Пропустить ботов if member.member_id < 0: continue database.create_user_if_not_exists(chat_id, member.member_id) await message.answer('Готова к работе!') @labeler.chat_message(text="!правила") async def rules_handler(message: Message): chat_id = message.peer_id chat = database.create_chat_if_not_exists(chat_id) if chat['active'] == 0: await message.answer(MESSAGE_CHAT_NOT_ACTIVE) return if message.reply_message is None: if chat['rules'] is not None: await message.answer(bold('Правила чата') + '\n' + chat['rules']) else: await message.answer(MESSAGE_DEFAULT_RULES) else: chat_members = await message.ctx_api.messages.get_conversation_members(peer_id=chat_id, extended=False) if not vk_user_is_admin(message.from_id, chat_members): await message.answer(MESSAGE_PERMISSION_DENIED) return database.DB.chat_update(chat_id, rules=message.reply_message.text) await message.answer('Правила чата изменены.') @labeler.chat_message(text="!приветствие") async def set_greeting_join_handler(message: Message): chat_id = message.peer_id chat = database.create_chat_if_not_exists(chat_id) if chat['active'] == 0: await message.answer(MESSAGE_CHAT_NOT_ACTIVE) return chat_members = await message.ctx_api.messages.get_conversation_members(peer_id=chat_id, extended=False) if not vk_user_is_admin(message.from_id, chat_members): await message.answer(MESSAGE_PERMISSION_DENIED) return if message.reply_message is None: await message.answer(MESSAGE_NEED_REPLY) return database.DB.chat_update(chat_id, greeting_join=message.reply_message.text) await message.answer('Приветствие изменено.') @labeler.chat_message(text="!возвращение") async def set_greeting_rejoin_handler(message: Message): chat_id = message.peer_id chat = database.create_chat_if_not_exists(chat_id) if chat['active'] == 0: await message.answer(MESSAGE_CHAT_NOT_ACTIVE) return chat_members = await message.ctx_api.messages.get_conversation_members(peer_id=chat_id, extended=False) if not vk_user_is_admin(message.from_id, chat_members): await message.answer(MESSAGE_PERMISSION_DENIED) return if message.reply_message is None: await message.answer(MESSAGE_NEED_REPLY) return database.DB.chat_update(chat_id, greeting_rejoin=message.reply_message.text) await message.answer('Приветствие при возвращении изменено.') @labeler.chat_message(text="!деньрождения") async def set_birthday_handler(message: Message): chat_id = message.peer_id chat = database.create_chat_if_not_exists(chat_id) if chat['active'] == 0: await message.answer(MESSAGE_CHAT_NOT_ACTIVE) return chat_members = await message.ctx_api.messages.get_conversation_members(peer_id=chat_id, extended=False) if not vk_user_is_admin(message.from_id, chat_members): await message.answer(MESSAGE_PERMISSION_DENIED) return if message.reply_message is None: await message.answer(MESSAGE_NEED_REPLY) return database.DB.chat_update(chat_id, birthday_message=message.reply_message.text) await message.answer('Уведомление о дне рождения изменено.') @labeler.chat_message(text="!предупреждение") async def warning_handler(message: Message): chat_id = message.peer_id chat = database.create_chat_if_not_exists(chat_id) if chat['active'] == 0: await message.answer(MESSAGE_CHAT_NOT_ACTIVE) return chat_members = await message.ctx_api.messages.get_conversation_members(peer_id=chat_id, extended=False) if not vk_user_is_admin(message.from_id, chat_members): await message.answer(MESSAGE_PERMISSION_DENIED) return if message.reply_message is None: await message.answer(MESSAGE_NEED_REPLY) return user_id = message.reply_message.from_id database.create_user_if_not_exists(chat_id, user_id) database.DB.user_increment_warnings(chat_id, user_id) user = database.DB.get_user(chat_id, user_id) user_info = await message.ctx_api.users.get(user_ids=[user_id], name_case='gen') if len(user_info) == 1: await message.answer('У {} {} {} {}.'.format( user_info[0].first_name, user_info[0].last_name, user['warnings'], utils.make_word_agree_with_number(user['warnings'], 'предупреждение')) )