vk_chat_bot/vk/handlers/action.py

50 lines
1.5 KiB
Python

from vkbottle.bot import Message
from vkbottle.framework.labeler import BotLabeler
from messages import *
import vk.vk_database as database
from vk.utils import *
labeler = BotLabeler()
@labeler.chat_message(action=['chat_invite_user', 'chat_invite_user_by_link'])
async def user_join_handler(message: Message):
bot_id = get_bot_id(message.ctx_api)
chat_id = message.peer_id
chat = database.DB.create_chat_if_not_exists(bot_id, chat_id)
if chat['active'] == 0:
return
if message.action.type == 'chat_invite_user_by_link':
user_id = message.from_id
first_join = True
else:
user_id = message.action.member_id
first_join = (user_id != message.from_id)
if user_id < 0:
return
user_info = (await message.ctx_api.users.get(user_ids=[user_id]))[0]
if first_join:
response = chat['greeting_join'] or MESSAGE_DEFAULT_GREETING_JOIN
else:
response = chat['greeting_rejoin'] or MESSAGE_DEFAULT_GREETING_REJOIN
response = response.format(name=f'@id{user_id} ({user_info.first_name})')
await message.answer(response)
@labeler.chat_message(action=['chat_kick_user'])
async def user_leave_handler(message: Message):
bot_id = get_bot_id(message.ctx_api)
chat_id = message.peer_id
chat = database.DB.create_chat_if_not_exists(bot_id, chat_id)
if chat['active'] == 0:
return
user_id = message.action.member_id
if user_id != message.from_id:
database.DB.delete_user(bot_id, chat_id, user_id)