【问题标题】:How can i cache a message | discord.js我如何缓存消息 |不和谐.js
【发布时间】:2021-05-08 02:55:46
【问题描述】:

我创建了一个不和谐的机器人并需要一个命令 !edit [id] [new content] 所以我做到了:

if (MessageContent.startsWith('!edit ')) {
    if (autority >= 3) {
        //if false
        if (args.length < 3) {
            const modifErrorEmbed = new discord.MessageEmbed()
            .setColor('#eb9234')
            .setTitle('You made an error')
            .setDescription('To execute the command do: !edit <id> <Nouveau message>')
            m.channel.send(modifErrorEmbed)
        }
        //if correct
        if (args.length >= 3) {
            let id = args[1]
            let toRemove = '!edit  ' + id + ' '
            let toResend = MsgC.replace(toRemove, '')
            const toModif = m.channel.messages.cache.find((x) => (x.id === id))
            toModif.channel.messages.fetch(toModif.id)
            const modifModifierEmbed = new discord.MessageEmbed()
            .setColor('#eb9234')
            .setDescription(toResend)
            //we edit the message
            toModif.edit(modifModifierEmbed)
        
        
        }
    }
}

像这样,我可以很好地编辑缓存的消息(在上次激活机器人后发送),但尝试使用非缓存消息来编辑它会返回一个错误:

                                ^

TypeError: Cannot read property 'edit' of undefined
    at Client.<anonymous> (C:\Users\draymone\Desktop\VSC\draymone\calypsiovalleybot\index.js:174:33)
    at Client.emit (events.js:314:20)
    at MessageCreateAction.handle (C:\Users\draymone\node_modules\discord.js\src\client\actions\MessageCreate.js:31:14)
    at Object.module.exports [as MESSAGE_CREATE] (C:\Users\draymone\node_modules\discord.js\src\client\websocket\handlers\MESSAGE_CREATE.js:4:32)
    at WebSocketManager.handlePacket (C:\Users\draymone\node_modules\discord.js\src\client\websocket\WebSocketManager.js:386:31)
    at WebSocketShard.onPacket (C:\Users\draymone\node_modules\discord.js\src\client\websocket\WebSocketShard.js:436:22)
    at WebSocketShard.onMessage (C:\Users\draymone\node_modules\discord.js\src\client\websocket\WebSocketShard.js:293:10)
    at WebSocket.onMessage (C:\Users\miloud\node_modules\ws\lib\event-target.js:125:16)
    at WebSocket.emit (events.js:314:20)
    at Receiver.receiverOnMessage (C:\Users\draymone\node_modules\ws\lib\websocket.js:797:20)

那么请问我该如何解决呢?

编辑: 解决方案是:

message.channel.messages.fetch(id).then(msg => {
msg.edit(modifModifierEmbed)
})

【问题讨论】:

    标签: javascript node.js discord discord.js


    【解决方案1】:

    我不确定这是否会解决它,但您应该尝试直接获取消息,而不是找到它然后获取它。

    另外,如果您希望 fetch() 函数实际执行某些操作,则需要编辑变量,这也意味着您需要将 toModif 更改为 varlet

    我的意思是你需要做的是:

    let toModif = m.channel.messages.cache.find((x) => (x.id === id))
    toModif = toModif.channel.messages.fetch(toModif.id)
    

    尝试第一个建议,如果不起作用,请尝试第二个。我希望我正确理解了你的问题:)

    【讨论】:

    • 您好,我尝试了您的 2 种方法,但都失败了当我尝试获取消息时,当我执行 toModif.edit() 时,它说我找不到 .edit() 方法当我试图找到消息然后获取它时,我做了 message.channel.message.fetch(toModif.id) 它告诉我找不到 .id stat
    • 我找到了解决方案,我只需要直接获取,而不是在 let ou var 中,而是在函数中 .then() ^^
    • 太棒了!希望我的回答有帮助:)
    猜你喜欢
    • 2020-12-15
    • 1970-01-01
    • 2020-05-07
    • 2021-10-09
    • 2021-08-24
    • 1970-01-01
    • 2021-07-01
    • 2020-11-23
    • 2021-06-26
    相关资源
    最近更新 更多