193 lines
6.9 KiB
Python
193 lines
6.9 KiB
Python
from vkbottle import bold, VKAPIError
|
||
from vkbottle.bot import Message
|
||
from vkbottle.framework.labeler import BotLabeler
|
||
from vkbottle_types.codegen.objects import MessagesGetConversationMembers
|
||
|
||
from messages import *
|
||
import utils
|
||
import vk.vk_database as database
|
||
|
||
labeler = BotLabeler()
|
||
|
||
|
||
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.DB.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.DB.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.DB.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.DB.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.DB.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.DB.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.DB.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.DB.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'], 'предупреждение'))
|
||
)
|
||
|
||
|
||
@labeler.chat_message(text="!исключить")
|
||
async def ban_handler(message: Message):
|
||
chat_id = message.peer_id
|
||
chat = database.DB.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
|
||
|
||
try:
|
||
await message.ctx_api.messages.remove_chat_user(chat_id - 2000000000, member_id=user_id)
|
||
|
||
if user_id > 0:
|
||
database.DB.delete_user(chat_id, user_id)
|
||
|
||
user_info = await message.ctx_api.users.get(user_ids=[user_id])
|
||
await message.answer('Участник {} {} исключен.'.format(user_info[0].first_name, user_info[0].last_name))
|
||
except VKAPIError as e:
|
||
print(e)
|
||
await message.answer('Извините, у меня не получилось исключить этого участника.')
|