Как обрабатывать реакции на сообщения в беседе на vkbottle?

Я искал в документации, в исходном коде(vkbottle, vkbottle_types), в гугле, в яндексе, даже у чатгпт спрашивал, но ответа так и не нашел. Мне нужно обрабатывать event, который происходит при добавлении или удалении реакции на сообщение в беседе. Помимо этого, в консоли после каждого подобного event'а вылезает одновременно две одинаковые ошибки:

ValueError: 'message_reaction_event' is not a valid GroupEventType
2024-01-24 21:33:11.248 | ERROR    | vkbottle.exception_factory.error_handler.error_handler:handle:48 - 'message_reaction_event' is not a valid GroupEventType
Traceback (most recent call last):

  File "/root/bot/main.py", line 8, in <module>
    bot.run()
    │   └ <function VkBot.run at 0x7fa9ae9d14e0>
    └ <Bot.VkBot object at 0x7fa9ada785d0>

  File "/root/bot/Bot/__init__.py", line 56, in run
    self.bot.run_forever()
    │    │   └ <function Bot.run_forever at 0x7fa9aed97a60>
    │    └ <vkbottle.framework.bot.bot.Bot object at 0x7fa9ad762090>
    └ <Bot.VkBot object at 0x7fa9ada785d0>

  File "/usr/local/lib/python3.11/dist-packages/vkbottle/framework/bot/bot.py", line 92, in run_forever
    self.loop_wrapper.run_forever(self.loop)
    │    │            │           │    └ <property object at 0x7fa9ad46bec0>
    │    │            │           └ <vkbottle.framework.bot.bot.Bot object at 0x7fa9ad762090>
    │    │            └ <function LoopWrapper.run_forever at 0x7fa9acd2a7a0>
    │    └ <vkbottle.tools.dev.loop_wrapper.LoopWrapper object at 0x7fa9ad671ed0>
    └ <vkbottle.framework.bot.bot.Bot object at 0x7fa9ad762090>
  File "/usr/local/lib/python3.11/dist-packages/vkbottle/tools/dev/loop_wrapper.py", line 50, in run_forever
    loop.run_forever()
    │    └ <function BaseEventLoop.run_forever at 0x7fa9aff8ee80>
    └ <_UnixSelectorEventLoop running=True closed=False debug=False>
  File "/usr/lib/python3.11/asyncio/base_events.py", line 607, in run_forever
    self._run_once()
    │    └ <function BaseEventLoop._run_once at 0x7fa9aff94cc0>
    └ <_UnixSelectorEventLoop running=True closed=False debug=False>
  File "/usr/lib/python3.11/asyncio/base_events.py", line 1922, in _run_once
    handle._run()
    │      └ <function Handle._run at 0x7fa9b0497380>
    └ <Handle <TaskStepMethWrapper object at 0x7fa9ae880f40>()>
  File "/usr/lib/python3.11/asyncio/events.py", line 80, in _run
    self._context.run(self._callback, *self._args)
    │    │            │    │           │    └ <member '_args' of 'Handle' objects>
    │    │            │    │           └ <Handle <TaskStepMethWrapper object at 0x7fa9ae880f40>()>
    │    │            │    └ <member '_callback' of 'Handle' objects>
    │    │            └ <Handle <TaskStepMethWrapper object at 0x7fa9ae880f40>()>
    │    └ <member '_context' of 'Handle' objects>
    └ <Handle <TaskStepMethWrapper object at 0x7fa9ae880f40>()>
> File "/usr/local/lib/python3.11/dist-packages/vkbottle/dispatch/base.py", line 20, in route
    if not await view.process_event(event):
                 │    │             └ {'group_id': 222139436, 'type': 'message_reaction_event', 'event_id': 'a235a43aad7a791993aae757667c14aa7e933505', 'v': '5.131...
                 │    └ <function RawBotEventView.process_event at 0x7fa9aed95440>
                 └ <RawBotEventView handlers={<GroupEventType.MESSAGE_EVENT: 'message_event'>: [BotHandlerBasement(dataclass=<class 'vkbottle_ty...
  File "/usr/local/lib/python3.11/dist-packages/vkbottle/dispatch/views/bot/raw.py", line 40, in process_event
    return GroupEventType(self.get_event_type(event)) in self.handlers
           │              │    │              │          │    └ {<GroupEventType.MESSAGE_EVENT: 'message_event'>: [BotHandlerBasement(dataclass=<class 'vkbottle_types.events.bot_events.Mess...
           │              │    │              │          └ <RawBotEventView handlers={<GroupEventType.MESSAGE_EVENT: 'message_event'>: [BotHandlerBasement(dataclass=<class 'vkbottle_ty...
           │              │    │              └ {'group_id': 222139436, 'type': 'message_reaction_event', 'event_id': 'a235a43aad7a791993aae757667c14aa7e933505', 'v': '5.131...
           │              │    └ <staticmethod(<function RawBotEventView.get_event_type at 0x7fa9aed954e0>)>
           │              └ <RawBotEventView handlers={<GroupEventType.MESSAGE_EVENT: 'message_event'>: [BotHandlerBasement(dataclass=<class 'vkbottle_ty...
           └ <enum 'GroupEventType'>
  File "/usr/lib/python3.11/enum.py", line 712, in __call__
    return cls.__new__(cls, value)
           │   │       │    └ 'message_reaction_event'
           │   │       └ <enum 'GroupEventType'>
           │   └ <function Enum.__new__ at 0x7fa9b0675c60>
           └ <enum 'GroupEventType'>
  File "/usr/lib/python3.11/enum.py", line 1135, in __new__
    raise ve_exc
          └ None

ValueError: 'message_reaction_event' is not a valid GroupEventType

Ответы (1 шт):

Автор решения: bleyzov

Плохо искал.

@bot.on.raw_event(
    GroupEventType.MESSAGE_REACTION_EVENT, dataclass=GroupTypes.MessageReactionEvent
)
async def reaction_handler(event: GroupTypes.MessageReactionEvent):
    await bot.api.messages.send(
        peer_id=event.object.peer_id,
        message=f"Вы {'поставили' if event.object.reaction_id else 'убрали'} реакцию на это сообщение!",
        forward=MessagesForward(
            conversation_message_ids=[event.object.cmid],  # type: ignore
            peer_id=event.object.peer_id,
            is_reply=True,
        ).json(),
        random_id=0,
    )

Удачного использования.

→ Ссылка