vk_api icon indicating copy to clipboard operation
vk_api copied to clipboard

[10] Internal server error при использовании reply_to

Open CMBCKSRL opened this issue 3 years ago • 3 comments

Написал бота, который отправляет гифку в ответ на сообщение определенного пользователя в беседе. Хочу сделать так, чтобы это сообщение было ответом, а не просто сообщением (пример, как хотелось реализовать см. ниже)

image

Для этого хотел использовать параметр reply_to метода send, но вылетает ошибка [10] Internal server error. Похожу, что проблема не на моей стороне. Код программы прилагается.

Код

import vk_api
from vk_api.bot_longpoll import VkBotLongPoll, VkBotEventType

token = 'токен сообщества'

vk_session = vk_api.VkApi(token = token)
vk = vk_session.get_api()
longpoll = VkBotLongPoll(vk_session, <id сообщества>)

def write_msg(id, msg_id):
    vk_session.method('messages.send', {'chat_id': id,'random_id': 0, 'attachment': 'doc49903553_642595119', "reply_to": msg_id}) 

for event in longpoll.listen():
    if event.type == VkBotEventType.MESSAGE_NEW:
        if event.from_chat:
            id = event.chat_id
            sender = event.obj.message['from_id']
            if sender == <id человека, на чьи сообщения хочу реагировать>:
                msg_id = event.obj.message['conversation_message_id']
                write_msg(id, msg_id)

Без reply_to все работает хорошо, ошибка появилась только при его добавлении.

CMBCKSRL avatar Jun 19 '22 10:06 CMBCKSRL

Я где-то читал, что бот якобы не может отвечать на сообщения, в самом ВК такое ограничение. Не уверен насчёт этого, но я решил такую же проблему так: вместо reply_to можно использовать аргумент forward. Тогда ответ будет, но как на пересланное сообщение, что никак не отличается. Вот моя функция: def reply_mess(chat_id, mess_id, text): vk.messages.send(peer_id=chat_id, message=text, random_id=randint(0, 2 ** 32), forward=dumps({'peer_id': chat_id, 'conversation_message_ids': [mess_id], 'reply_to': True})) Да, dumps - функция из встроенного модуля json

Hylk05 avatar Jul 30 '22 16:07 Hylk05

Способ выше не помог. Помогло сделать так: vk.messages.send(peer_id=event.peer_id, message="текст", random_id=random_id, forward_messages=event.message_id)

Mawak0 avatar Mar 08 '23 14:03 Mawak0

@Hylk05, у параметра forward нет поля reply_to, есть is_reply. Если true - бот ответит на сообщение, если false или отсутствует, то перешлёт его.

aloki avatar Aug 10 '23 12:08 aloki