Неактуально NodeJS node js как достать айди из сообщения

Kecer

Участник
Автор темы
241
11
Как достать айди сообщения из переменной message, что бы в дальнейшем отредактировать это сообщение, вроде всё сделал правильно но когда пытаюсь запустить функцию мне выдаёт ошибку

JavaScript:
Code №100 - One of the parameters specified was missing or invalid: message_id not integer

Вот код

JavaScript:
bot.hear(/^(?:\/test)$/i, async msg => {
  const message = await msg.send({ message: 'command', chat_id: 1, random_id: getRandomId() })
  message.editMessage({ message: 'test5', peer_id: 2000000001, message_id: message })
})

Пояснение:
Я хочу реализовать следующую вещь, я пишу боту в лс /test, бот отправляет в чат под номером 1 сообщение "command", и после его редактирует на "test5", проблема заключается в том, что всё работает, после написания команды /test бот отправляет сообщение "command" в чат, но после выдаёт выше сказанную ошибку, то-есть он не может найти айди сообщения

Вот полная ошибка:

JavaScript:
APIError: Code №100 - One of the parameters specified was missing or invalid: message_id not integer
    at SequentialWorker.execute (C:\Users\usr\Desktop\payload test\node_modules\vk-io\lib\index.js:1670:39)
    at processTicksAndRejections (node:internal/process/task_queues:96:5) {
  code: 100,
  params: [
    { key: 'method', value: 'messages.edit' },
    { key: 'oauth', value: '1' },
    { key: 'v', value: '5.131' },
    { key: 'attachment', value: '' },
    { key: 'message', value: 'test5' },
    { key: 'keep_forward_messages', value: '1' },
    { key: 'keep_snippets', value: '1' },
    { key: 'peer_id', value: '393032625' },
    { key: 'message_id', value: '[object MessageContext]' },
    { key: 'conversation_message_id', value: '0' }
  ],
  [cause]: undefined
}

Пользуюсь библиотеками:
• vk-io v4.6.0
• @vk-io/hear
• node js
v 16.15.1
 
Последнее редактирование:
Решение
а, ну вот поэтому я не люблю отправлять в другие чаты с помощью контекста
он не для этого предназначен
замени
Код:
bot.hear("/sendToAnotherChat", async message => {
    message.reply(`send to chat ${chatForSend}`)
    const msg = await vk.api.messages.send({
        message: "отправлено из shiruwatch",
        peer_ids: [2e9 + chatForSend],
        random_id: getRandomId()
    })
    setTimeout(() => {
        vk.api.messages.edit({
            conversation_message_id: msg.shift().conversation_message_id,
            peer_id: 2e9 + chatForSend,
            message: "edited."
        })
    }, 1500)
});

Liquit

Активный
277
91
Можно сделать следующим образом:
JavaScript:
bot.hear(/^(?:\/test)$/i, async msg => {
  await msg.send({ message: 'command', chat_id: 1, random_id: getRandomId() }).then(message => {
      //console.log(message) - посмотреть как называется(наверное будет что-то .id)
      message.editMessage({ message: 'test5', peer_id: 2000000001, message_id: message.id /*не факт, что будет именно .id, посмотреть надо, а мне лень*/ })
  })
})
и да, peer_id тоже будет хранится в переменной message, будет типа message.peer_id скорее всего
пэ эс. console.log(message) выведет тебе объект в консоль, нужно тупо глянуть как называется переменная в объекте и вписать вместо peer_id и message_id
 

Kecer

Участник
Автор темы
241
11
Можно сделать следующим образом:
JavaScript:
bot.hear(/^(?:\/test)$/i, async msg => {
  await msg.send({ message: 'command', chat_id: 1, random_id: getRandomId() }).then(message => {
      //console.log(message) - посмотреть как называется(наверное будет что-то .id)
      message.editMessage({ message: 'test5', peer_id: 2000000001, message_id: message.id /*не факт, что будет именно .id, посмотреть надо, а мне лень*/ })
  })
})
и да, peer_id тоже будет хранится в переменной message, будет типа message.peer_id скорее всего
пэ эс. console.log(message) выведет тебе объект в консоль, нужно тупо глянуть как называется переменная в объекте и вписать вместо peer_id и message_id
JavaScript:
MessageContext {
  id: 0,       
  conversationMessageId: 0,
  peerId: 393032625,
  peerType: 'user',
  senderId: 393032625,
  senderType: 'user',
  createdAt: 1656196078,
  updatedAt: undefined,
  pinnedAt: undefined,
  text: undefined,
  forwards: MessageForwardsCollection(0) [],
  attachments: [],
  isOutbox: true,
  type: 'message',
  subTypes: [
    'message_new'
  ],
  state: {}
}
 

Liquit

Активный
277
91
JavaScript:
MessageContext {
  id: 0,      
  conversationMessageId: 0,
  peerId: 393032625,
  peerType: 'user',
  senderId: 393032625,
  senderType: 'user',
  createdAt: 1656196078,
  updatedAt: undefined,
  pinnedAt: undefined,
  text: undefined,
  forwards: MessageForwardsCollection(0) [],
  attachments: [],
  isOutbox: true,
  type: 'message',
  subTypes: [
    'message_new'
  ],
  state: {}
}
conversationMessageId и peerId
 

Kecer

Участник
Автор темы
241
11
conversationMessageId и peerId
Тока оно почему-то в conversationMessageId 0 ставит постоянно, теперь вот такая ошибка
JavaScript:
Code №100 - One of the parameters specified was missing or invalid: message_id and conversation_message_id is undefined
 

Liquit

Активный
277
91
Тока оно почему-то в conversationMessageId 0 ставит постоянно, теперь вот такая ошибка
JavaScript:
Code №100 - One of the parameters specified was missing or invalid: message_id and conversation_message_id is undefined
а почему у тебя сообщение отправляется в chat_id 1? это должен быть по идее msg.reply
 

Kecer

Участник
Автор темы
241
11
а почему у тебя сообщение отправляется в chat_id 1? это должен быть по идее msg.reply
не понял, что за msg.reply

Прикол в том что я с этой ошибкой уже мучаюсь 2 дня,

JavaScript:
bot.hear(/^(?:\/test)$/i, async msg => {
  await msg.send({ message: 'command', chat_id: 1, random_id: getRandomId() }).then(message => {
      console.log(msg)
  })
})

Вот когда я в консоль лог вывожу msg, то у меня выводится всё, и айди сообщения и текст его и кто отправил
JavaScript:
MessageContext {
  id: 0,
  conversationMessageId: 204,
  peerId: 2000000001,
  peerType: 'chat',
  senderId: 393032625,
  senderType: 'user',
  createdAt: 1656204564,
  updatedAt: undefined,
  pinnedAt: undefined,
  text: '/test',
  forwards: MessageForwardsCollection(0) [],
  attachments: [],
  isOutbox: false,
  '$match': [
    '/test',
    index: 0,
    input: '/test',
    groups: undefined
  ],
  type: 'message',
  subTypes: [
    'message_new'
  ],
  state: {}
}

А сообщение которое я отправил в беседу

JavaScript:
bot.hear(/^(?:\/test)$/i, async msg => {
  await msg.send({ message: 'command', chat_id: 1, random_id: getRandomId() }).then(message => {
      console.log(message)
  })
})


оно его попросту не видит
JavaScript:
MessageContext {
  id: 0,
  conversationMessageId: 0,
  peerId: 2000000001,
  peerType: 'chat',
  senderId: 393032625,
  senderType: 'user',
  createdAt: 1656204696,
  updatedAt: undefined,
  pinnedAt: undefined,
  text: undefined,
  forwards: MessageForwardsCollection(0) [],
  attachments: [],
  isOutbox: true,
  type: 'message',
  subTypes: [
    'message_new'
  ],
  state: {}
}

У него постоянно conversationMessageId: 0
Текст сообщения undefined
 
Последнее редактирование:

Liquit

Активный
277
91
я не использую конечно этот hear, но у меня всё отлично работает и в лс и в беседе
JavaScript:
vk.updates.on("message_new", async (ctx) => {
    if(ctx.senderId == 242231003) {
        ctx.send("hello").then(message => {
            console.log(message)
            setTimeout(() => {vk.api.messages.edit({message: "hello again", conversation_message_id: message.conversationMessageId, peer_id: message.peerId})}, 1000)
        })
    }
})
тебе вовсе не надо указывать дополнительные параметры в msg.send. msg - это контекст, т.е. по факту это уже готовый объект, который хранит в себе ид беседы куда, сам зафигачит радном_ид и вся фигня, тебе нужно всего лишь выбрать текст или прикрепить к сообщению что-то
 

Kecer

Участник
Автор темы
241
11
я не использую конечно этот hear, но у меня всё отлично работает и в лс и в беседе
JavaScript:
vk.updates.on("message_new", async (ctx) => {
    if(ctx.senderId == 242231003) {
        ctx.send("hello").then(message => {
            console.log(message)
            setTimeout(() => {vk.api.messages.edit({message: "hello again", conversation_message_id: message.conversationMessageId, peer_id: message.peerId})}, 1000)
        })
    }
})
тебе вовсе не надо указывать дополнительные параметры в msg.send. msg - это контекст, т.е. по факту это уже готовый объект, который хранит в себе ид беседы куда, сам зафигачит радном_ид и вся фигня, тебе нужно всего лишь выбрать текст или прикрепить к сообщению что-то
Всмысле, не совсем понял как не указывать айди беседы, яж делаю получается так, пишу в лс боту команду а он отправляет сообщение в беседу с определённым айди
 

neverlane

t.me/neverlane00
Друг
997
1,132
в chatForSend находиться id чата

JavaScript:
import { VK } from "vk-io"
import { HearManager } from "@vk-io/hear"

const vk = new VK({
    token: "token"
})
const bot = new HearManager()
const chatForSend = 1

vk.updates.on("message_new", bot.middleware)

bot.hear("/sendToAnotherChat", async message => {
    message.reply(`send to chat ${chatForSend}`)
    const msg = await message.send({
        message: "отправлено из shiruwatch",
        peer_ids: 2e9 + chatForSend
    })
    setTimeout(() => {
        msg.editMessage({
            message: "root???????????"
        })
    }, 1500)
})

vk.updates.start().then(() => console.log("updates started")).catch(console.error)
 

Liquit

Активный
277
91
Всмысле, не совсем понял как не указывать айди беседы, яж делаю получается так, пишу в лс боту команду а он отправляет сообщение в беседу с определённым айди
А, тогда надо указывать peer_id, только ошибка у тебя в том, что peer_id - 2*10^9 + номер беседы, а ты просто отправлял в первую, выше вроде правильный код
 

Kecer

Участник
Автор темы
241
11
в chatForSend находиться id чата

JavaScript:
import { VK } from "vk-io"
import { HearManager } from "@vk-io/hear"

const vk = new VK({
    token: "token"
})
const bot = new HearManager()
const chatForSend = 1

vk.updates.on("message_new", bot.middleware)

bot.hear("/sendToAnotherChat", async message => {
    message.reply(`send to chat ${chatForSend}`)
    const msg = await message.send({
        message: "отправлено из shiruwatch",
        peer_ids: 2e9 + chatForSend
    })
    setTimeout(() => {
        msg.editMessage({
            message: "root???????????"
        })
    }, 1500)
})

vk.updates.start().then(() => console.log("updates started")).catch(console.error)
1656250631622.png


В беседу не отправляет, отправляет туда куда и написал тобишь в лс
 

Kecer

Участник
Автор темы
241
11
ты должен менять это - const chatForSend = 1
вместо 1 ставь свой чат ид беседы
если все так же - скинь код и что ты там изменил
JavaScript:
const { VK, getRandomId, Keyboard, CollectError } = require('vk-io')
const vk = new VK({ token: "token" })
const { HearManager } = require('@vk-io/hear')
const fs = require('fs');
const bot = new HearManager('<MessageContext>')

const chatForSend = 1

vk.updates.on('message_new', bot.middleware)

bot.hear("/sendToAnotherChat", async message => {
    message.reply(`send to chat ${chatForSend}`)
    const msg = await message.send({
        message: "отправлено из shiruwatch",
        peer_ids: 2e9 + chatForSend
    })
    setTimeout(() => {
        msg.editMessage({
            message: "root???????????"
        })
    }, 1500)
})

console.log("ok");
vk.updates.start().catch(console.error);

Вот фулл код

JavaScript:
const { VK, getRandomId, Keyboard, CollectError } = require('vk-io')
const vk = new VK({ token: "token" })
const { HearManager } = require('@vk-io/hear')
const fs = require('fs');
const bot = new HearManager('<MessageContext>')

const chatForSend = 1

vk.updates.on('message_new', bot.middleware)

bot.hear("/sendToAnotherChat", async message => {
    message.reply(`send to chat ${chatForSend}`)
    const msg = await message.send({
        message: "отправлено из shiruwatch",
        peer_ids: 2e9 + chatForSend
    })
    setTimeout(() => {
        msg.editMessage({
            message: "root???????????"
        })
    }, 1500)
})

console.log("ok");
vk.updates.start().catch(console.error);

Вот фулл код
айди беседы у меня один, соответсвенно в chatForSend стоит 1, но всё ровно отправляет в лс
 

Kecer

Участник
Автор темы
241
11