Skip to content

Исправить работу ответов у контекста #5

@EgorBron

Description

@EgorBron

VK API помечает параметр reply_to у метода messages.send устаревшим, начиная с версии 5.221 (что странно, ведь текущая версия по документации - 5.199). Клиент ВК использует новейшую версию и параметр forward для создания ответов:

POST /method/messages.send?v=5.280&client_id=XXXXXXX
Content-Type: application/x-www-form-urlencoded
Host: api.vk.com
Content-Length: X

peer_id=2000000001&random_id=-0&message=111&forward=%7B%22peer_id%22%3A2000000001%2C%22conversation_message_ids%22%3A%5B1%5D%2C%22is_reply%22%3Atrue%7D&entrypoint=list_all&group_id=0&from=reforged&access_token=vk1.a.TOKEN

forward, собственно говоря, является JSON'ом после urlencode:

{
  "peer_id": 2000000001,
  "conversation_message_ids": [
    1
  ],
  "is_reply": true
}

Нужно отредактировать эти строки и заменить их на forward:

vkc/command_context.go

Lines 53 to 55 in 36df822

if sendParams.Reply && msg != nil {
b.ReplyTo(msg.ID)
}

(к примеру как ниже)

b := params.NewMessagesSendBuilder().
	RandomID(0).
	PeerID(ctx.Message.PeerID).
	Message(finalText)

if sendParams.Reply && msg != nil {
	fwdStr, err := json.Marshal(api.Params{
		"peer_id":                  ctx.Message.PeerID,
		"conversation_message_ids": []int{ctx.Message.ConversationMessageID},
		"is_reply":                 true,
	})
	if err != nil {
		return err
	}
	b = b.Forward(string(fwdStr))
}
if _, err := vk.MessagesSend(b.Params); err != nil {
	return fmt.Errorf("send error: %v", err)
}

Metadata

Metadata

Assignees

Labels

bugSomething isn't workingpriority:normalWill be resolved with a normal priority

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions