Каким образом можно реализовать функцию исключения пользователя в vkbottle?

Как устранить ошибку при попытке выполнить команду '!fkick' для исключения пользователя из беседы по упоминанию? Вот код команды:

```
def get_user_id(pattern: str) -> int:
    if "[id" in pattern:
        return int(pattern.split("|")[0].replace("[id", ""))

@bot.on.chat_message(text=['!fkick'])
@swear(VKError, exception_handler=exc_kick)
async def kick(message: Message):
    members = await message.ctx_api.messages.get_conversation_members(peer_id=message.peer_id)
    admins = [member.member_id for member in members.items if member.is_admin]
    
    if message.from_id not in admins:
        await message.answer('Вы не администратор беседы.')
    else:
        txt = message.reply_message.text
        user_id = get_user_id(txt)
        await message.ctx_api.messages.remove_chat_user(message.peer_id - 2000000000, user_id)
        return "Пользователь успешно исключён"
```
Актуальные трассировки ошибок:

```
DEBUG:vkbottle:Handling event (message_new) with message view
DEBUG:vkbottle:Casting state for peer_id 2000000001
DEBUG:vkbottle:Handler <FromFuncHandler user_joined blocking=True rules=(<PeerRule>, <OrRule>)> returned False
DEBUG:vkbottle:Handler <FromFuncHandler ping_handler blocking=True rules=(<VBMLRule>,)> returned False
DEBUG:vkbottle:Handler <FromFuncHandler wrapper blocking=True rules=(<PeerRule>, <VBMLRule>)> returned False
```
  • 30 октября 2023 г. 19:08
Ответы на вопрос 1
Проблема возникает из-за неправильной обработки упоминания пользователя в сообщении. Вместо использования `message.reply_message.text`, нужно использовать `message.reply_message.from_id` для получения id пользователя, которого нужно исключить. 

Вот исправленный код команды `!fkick`:

```python
@bot.on.chat_message(text=['!fkick'])
@swear(VKError, exception_handler=exc_kick)
async def kick(message: Message):
    members = await message.ctx_api.messages.get_conversation_members(peer_id=message.peer_id)
    admins = [member.member_id for member in members.items if member.is_admin]
    
    if message.from_id not in admins:
        await message.answer('Вы не администратор беседы.')
    else:
        user_id = message.reply_message.from_id
        await message.ctx_api.messages.remove_chat_user(message.peer_id - 2000000000, user_id)
        return "Пользователь успешно исключён"
```

Теперь функция `kick` должна работать правильно и успешно исключать пользователя из беседы.
Похожие вопросы