【问题标题】:Discord.js: create Message object before sendingDiscord.js:在发送前创建 Message 对象
【发布时间】:2021-02-02 13:40:59
【问题描述】:

我正在尝试在频道中实际发送之前创建一个消息对象,这可能吗? 我在这段代码中不断收到奇怪的错误:

var new_message = new Discord.Message(channel, {
    author: client.user,
    content: 'Hello, ' + message.author.username + '!'
}, client);
console.info(new_message);
channel.send(new_message);

但这只是给我下面的错误。 我想要消息对象的原因是,我可以在发送后立即轻松地对其添加反应。

React-o-matic Discord/node_modules/discord.js/src/structures/Message.js:86
  this.author = this.client.users.add(data.author, !data.webhook_id);
                                  ^
TypeError: Cannot read property 'add' of undefined
    at Message._patch (React-o-matic Discord/node_modules/discord.js/src/structures/Message.js:86:39)
    at new Message (React-o-matic Discord/node_modules/discord.js/src/structures/Message.js:44:20)
    at Client.<anonymous> (React-o-matic Discord/bot.js:18:35)
    at Client.emit (events.js:314:20)
    at MessageCreateAction.handle (React-o-matic Discord/node_modules/discord.js/src/client/actions/MessageCreate.js:31:14)
    at Object.module.exports [as MESSAGE_CREATE] (React-o-matic Discord/node_modules/discord.js/src/client/websocket/handlers/MESSAGE_CREATE.js:4:32)
    at WebSocketManager.handlePacket (React-o-matic Discord/node_modules/discord.js/src/client/websocket/WebSocketManager.js:384:31)
    at WebSocketShard.onPacket (React-o-matic Discord/node_modules/discord.js/src/client/websocket/WebSocketShard.js:444:22)
    at WebSocketShard.onMessage (React-o-matic Discord/node_modules/discord.js/src/client/websocket/WebSocketShard.js:301:10)
    at WebSocket.onMessage (React-o-matic Discord/node_modules/discord.js/node_modules/ws/lib/event-target.js:125:16)

【问题讨论】:

  • client 工作正常吗?
  • 我以前从未使用过这个库,但看起来你调用的函数可能期望client 有一些名为users(复数)的字段,但它没有。
  • 是的,我认为客户端工作正常,我可以将客户端用于其他目的,但请注意错误是指一些核心文件,而不是我一直在编辑的代码,所以可能我缺少数据或其他东西。 ..但我找不到任何关于new Discord.Message :(

标签: node.js discord discord.js bots


【解决方案1】:

试试这个:

var msg = new Discord.Message(client, {
    id: message.id,
    type: message.type,
    content: message.content,
    author: client.user,
    pinned: message.pinned,
    tts: message.tts,
    embeds: message.embeds,
    attachments: message.attachments,
    nonce: "123" // idfk
}, channel)

这是创建 Message 对象所需的最低要求。

【讨论】:

  • 谢谢!这正是我想知道的!但是:你怎么知道的?我找不到任何说明这一点的文档。
  • 很高兴听到它有帮助!我通过手动检查消息对象的 _patch() 函数并查看要创建的消息对象的修正内容来找到它。你可以在这里寻找自己:github.com/discordjs/discord.js/blob/stable/src/structures/…
  • 我知道它的响应有点晚了,但是您如何获得 message.id?通过先创建另一条消息? :P
  • 我猜他们需要将消息从一台服务器解析到另一台服务器。如果没有,有一种更简单的方法来发送消息。 :D 要回答您的问题,您绝对不能在不提供 ID 的情况下创建消息,但我不知道要求以及您是否可以提供自定义 ID。
  • 不,替换没有您自己的自定义 id 的 message.id 没有任何作用。新生成的 id 被放置在 message.id 中。
【解决方案2】:

我找到了另一种解决问题的方法:使用 .then() 功能:

channel.send('Hello, ' + message.author.username + '!')
    .then(function (sent_message) {
        console.info("message sent");
    });

这让我基本上可以做同样的事情!没有关于 .send() 命令的文档,但我试过了,它可以工作哈哈

【讨论】:

  • TextChannel.send() 上没有文档是什么意思?
  • 好吧,我想我忘了检查 TextChannel 页面,哈哈哈,谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-12
  • 1970-01-01
  • 1970-01-01
  • 2022-12-09
相关资源
最近更新 更多