无法读取未定义的属性“发送”

时间:2021-03-18 13:47:06

标签: discord discord.js

所以我有这个东西,如果你在控制台中编写它,它会将消息发送到特定频道,在我的情况下,该特定频道是用户的 DM,但是..我得到了无法读取的属性“发送”未定义错误?

let y = process.openStdin()
y.addListener('data', res => {
    let x = res.toString().trim().split(/ +/g)
    const dmper = client.users.cache.get("704996899132014652");
    dmper.send(x.join(' '));
})

错误是;

/home/runner/ottawa-v2/index.js:14
dmper.send(x.join(' '));
    ^

TypeError: Cannot read property 'send' of undefined
    at ReadStream.<anonymous> (/home/runner/ottawa-v2/index.js:14:9)
    at ReadStream.emit (events.js:314:20)
    at ReadStream.EventEmitter.emit (domain.js:483:12)
    at addChunk (_stream_readable.js:297:12)
    at readableAddChunk (_stream_readable.js:272:9)
    at ReadStream.Readable.push (_stream_readable.js:213:10)
    at TTY.onStreamRead (internal/stream_base_commons.js:188:23)

2 个答案:

答案 0 :(得分:0)

您的代码中有 2 个可能的错误。第一个是特定ID不正确,另一个是该ID所属的用户没有被缓存,导致他不是client.users.cache集合的一部分。在第一种情况下,只需确保 ID 正确即可。在第二种情况下,您可以将 client.users.cache.get() 方法替换为 client.users.fetch(),这会导致您获取 ID 的 User 对象,而不管用户是否被缓存。

注意fetch() 返回一个 promise,因此在定义其结果时需要等待该方法。

带有 .fetch() 的最终代码

let y = process.openStdin()
y.addListener('data', res => {
    let x = res.toString().trim().split(/ +/g)
    const dmper = await client.users.fetch("704996899132014652");
    dmper.send(x.join(' '));
})

答案 1 :(得分:0)

要使用 send() 方法,您需要有一个频道或用户对象。 在这种情况下 dmpr 未定义,client.users.cache.get(); 出现问题,可能是您提供的 ID;但我建议你使用:

client.users.fetch(ID).then(user => {
    user.send(yourMessage);
});