如何检查discord.js中是否存在消息

时间:2020-04-19 11:26:27

标签: javascript node.js discord discord.js

我想在我的机器人中扮演某种反应角色。为此,我必须测试用户发送给机器人的消息ID是否有效。有人可以告诉我该怎么做吗?

2 个答案:

答案 0 :(得分:0)

只要您也知道要查看的频道,就可以使用.fetch()进行操作。

如果消息位于用户发送ID的同一频道中,则您可以使用message.channel获取该频道,或者如果该消息位于另一个频道中,则必须使用{{1 }}。

如果您的代码位于同一频道,则可能是这样的:

message.guild.channels.cache.get(CHANNEL_ID)

或是否在其他频道中:

const msg = message.channel.messages.fetch(MESSAGE_ID)

答案 1 :(得分:0)

这对我有用(Discord.js v12)

首先,您需要定义您的机器人要在其中搜索消息的渠道。
(您可以找到它)

const targetedChannel = client.channels.cache.find((channel) => channel.name === "<Channel Name>");

然后您需要添加以下功能:

async function setMessageValue (_messageID, _targetedChannel) {
    let foundMessage = new String();
    
    // Check if the message contains only numbers (Beacause ID contains only numbers)
    if (!Number(_messageID)) return 'FAIL_ID=NAN';

    // Check if the Message with the targeted ID is found from the Discord.js API
    try {
        await Promise.all([_targetedChannel.messages.fetch(_messageID)]);
    } catch (error) {
        // Error: Message not found
        if (error.code == 10008) {
            console.error('Failed to find the message! Setting value to error message...');
            foundMessage = 'FAIL_ID';
        }
    } finally {
        // If the type of variable is string (Contains an error message inside) then just return the fail message.
        if (typeof foundMessage == 'string') return foundMessage;
        // Else if the type of the variable is not a string (beacause is an object with the message props) return back the targeted message object.
        return _targetedChannel.messages.fetch(_messageID);
    }
}

此过程完成后,只需将函数值获取到另一个变量:

const messageReturn = await setMessageValue("MessageID", targetedChannel);

然后您可以根据需要进行操作。
例如,您可以使用以下代码编辑该消息:

messageReturn.edit("<Your text here>");