Как обрабатывать реакции на сообщения в беседе на 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,
)
Удачного использования.