PDA

Просмотр полной версии : node js как достать айди из сообщения


Kecer
26.06.2022, 01:47
Как достать айди сообщения из переменной 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

Liquit
26.06.2022, 02:14
Можно сделать следующим образом:

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
26.06.2022, 02:28
Можно сделать следующим образом:

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
26.06.2022, 02:29
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
26.06.2022, 02:51
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
26.06.2022, 04:40
Тока оно почему-то в 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
26.06.2022, 04:47
а почему у тебя сообщение отправляется в 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
26.06.2022, 14:14
я не использую конечно этот 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
26.06.2022, 14:42
я не использую конечно этот 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
26.06.2022, 15:00
в

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
26.06.2022, 15:37
Всмысле, не совсем понял как не указывать айди беседы, яж делаю получается так, пишу в лс боту команду а он отправляет сообщение в беседу с определённым айди


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

Kecer
26.06.2022, 17:37
в

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
)






https://forum.antichat.xyz/attachments/28070789/

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

Kecer
26.06.2022, 17:45
ты менял переменную chatForSend?


нет, подставил айдишник беседы своей и всё

Kecer
26.06.2022, 18:03
ты должен менять это -

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
(
''
)
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
(
''
)
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
26.06.2022, 18:19
значит неправильный чат ид, потому что код рабочий
проверяй этой командой

JavaScript:






bot
.
hear
(
"/getchat"
,
async
message
=>
{
message
.
reply
(
`peerId =${message.peerId}chatId =${message.chatId}`
)
}
)
;






https://forum.antichat.xyz/attachments/28070840/

neverlane
26.06.2022, 18:33
а, ну вот поэтому я не люблю отправлять в другие чаты с помощью контекста

он не для этого предназначен

замени

Код:






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)
});

Kecer
26.06.2022, 18:41
а, ну вот поэтому я не люблю отправлять в другие чаты с помощью контекста
он не для этого предназначен
замени

Код:






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)
});





О ДА, Я НЕ ЗНАЮ КАК ТЕБЯ БЛАГОДАРИТЬ СПАСИБО ТЕБЕ!

С этим приколом мучался 2 дня, сейчас 3 пошёл, просто иза того что не мог получить айди сообщения😗

Liquit
26.06.2022, 20:17
ошибка в 13 строке


const msg = await vk.api.messages.send({


а, чё-то я поздно, ладно