首页 > 解决方案 > 需要帮助将 Bot 更新到 Discord.js v12

问题描述

我正在尝试更新此代码以使用 Discord.js v12。我遇到了一个错误,我对如何解决这个错误有点困惑。我已经更新了一些代码以使用 Discord.js v12。

类型错误:client.channels.fetch(...).send 不是函数

在客户端。(/home/runner/Log/index.js:44:40) 在 Client.emit (events.js:314:20) 在 Client.EventEmitter.emit (domain.js:483:12) 在 MessageCreateAction.handle (/ home/runner/Log/node_modules/discord.js/src/client/actions/MessageCreate.js:31:14) 在 Object.module.exports [as MESSAGE_CREATE] (/home/runner/Log/node_modules/discord.js/ src/client/websocket/handlers/MESSAGE_CREATE.js:4:32) 在 WebSocketManager.handlePacket (/home/runner/Log/node_modules/discord.js/src/client/websocket/WebSocketManager.js:384:31) 在 WebSocketShard .onPacket (/home/runner/Log/node_modules/discord.js/src/client/websocket/WebSocketShard.js:444:22) 在 WebSocketShard.onMessage (/home/runner/Log/node_modules/discord.js/src/ client/websocket/WebSocketShard.js:301:10) 在 WebSocket.onMessage (/home/runner/Log/node_modules/ws/lib/event-target.js:132:16)

const Discord = require('discord.js');
const client = new Discord.Client();
const { prefix, token, logsChannel } = require('./config.json');

client.once('ready', () => {
    console.log('I am alive!');
});

// Messages log
client.on('message', message => {
    // Function
    function isEmpty(collection) {
        for(var arg in collection) {
            if(collection.hasOwnProperty(arg))
                return false;
        }
        return true;
    }
    // Logs
    if(message.author.bot) return;
    let username = message.author.tag;
    let channel = message.channel.name;
    let server = message.channel.guild;
    var serverAvatarURL = message.guild.iconURL;
    var attachment = (message.attachments).array();
    if(isEmpty(attachment)) {
        var img = "";
    } else {
        var img = attachment[0].url;
    }
    let embed_send = new Discord.MessageEmbed()
        .setAuthor(username, message.author.avatarURL)
        .setColor('23c115')
        .setTitle("Message sent!")
        .setDescription(message.content + " " + img)
        .setImage(img)
        .setFooter("#" + channel)
        .setTimestamp();
    client.channels.fetch(logsChannel).send(embed_send);
});

// Message edit log
client.on("messageUpdate", async(oldMessage, newMessage) => {
    // Function
    function isEmpty(collection) {
        for(var arg in collection) {
            if(collection.hasOwnProperty(arg))
                return false;
        }
        return true;
    }
    // Logs
    if (oldMessage.content === newMessage.content) {
        return;
    }

    var attachment = (oldMessage.attachments).array();
    if(isEmpty(attachment)) {
        var img = "";
    } else {
        var img = attachment[0].url;
    }

    let embed_edit = new Discord.MessageEmbed()
        .setAuthor(oldMessage.author.tag, oldMessage.author.avatarURL)
        .setColor('2615c1')
        .setTitle("Message edited!")
        .addField("Old", oldMessage.content + " " + img, true)
        .addField("New", newMessage.content + " " + img, true)
        .setFooter("#" + oldMessage.channel.name)
        .setTimestamp();
    client.channels.fetch(logsChannel).send(embed_edit);
});

// Message delete log
client.on("messageDelete", async message => {
    // Function
    function isEmpty(collection) {
        for(var arg in collection) {
            if(collection.hasOwnProperty(arg))
                return false;
        }
        return true;
    }
    // Logs
    var attachment = (message.attachments).array();
    if(isEmpty(attachment)) {
        var img = "";
    } else {
        var img = attachment[0].url;
    }

    let embed_delete = new Discord.MessageEmbed()
    .setAuthor(message.author.tag, message.author.avatarURL)
    .setColor('c11515')
    .setTitle("Message deleted!")
    .setDescription(message.content + " " + img)
    .setImage(img)
    .setFooter("#" + message.channel.name)
    .setTimestamp();    
    client.channels.fetch(logsChannel).send(embed_delete);
});

client.login(token);

原始代码:

const Discord = require('discord.js');
const client = new Discord.Client();
const { prefix, token, logsChannel } = require('./config.json');

client.once('ready', () => {
    console.log('I am alive!');
});

// Messages log
client.on('message', message => {
    // Function
    function isEmpty(collection) {
        for(var arg in collection) {
            if(collection.hasOwnProperty(arg))
                return false;
        }
        return true;
    }
    // Logs
    if(message.author.bot) return;
    let username = message.author.tag;
    let channel = message.channel.name;
    let server = message.channel.guild;
    var serverAvatarURL = message.guild.iconURL;
    var attachment = (message.attachments).array();
    if(isEmpty(attachment)) {
        var img = "";
    } else {
        var img = attachment[0].url;
    }
    let embed_send = new Discord.RichEmbed()
        .setAuthor(username, message.author.avatarURL)
        .setColor('23c115')
        .setTitle("Message sent!")
        .setDescription(message.content + " " + img)
        .setImage(img)
        .setFooter("#" + channel)
        .setTimestamp();
    client.channels.get(logsChannel).send(embed_send);
});

// Message edit log
client.on("messageUpdate", async(oldMessage, newMessage) => {
    // Function
    function isEmpty(collection) {
        for(var arg in collection) {
            if(collection.hasOwnProperty(arg))
                return false;
        }
        return true;
    }
    // Logs
    if (oldMessage.content === newMessage.content) {
        return;
    }

    var attachment = (oldMessage.attachments).array();
    if(isEmpty(attachment)) {
        var img = "";
    } else {
        var img = attachment[0].url;
    }

    let embed_edit = new Discord.RichEmbed()
        .setAuthor(oldMessage.author.tag, oldMessage.author.avatarURL)
        .setColor('2615c1')
        .setTitle("Message edited!")
        .addField("Old", oldMessage.content + " " + img, true)
        .addField("New", newMessage.content + " " + img, true)
        .setFooter("#" + oldMessage.channel.name)
        .setTimestamp();
    client.channels.get(logsChannel).send(embed_edit);
});

// Message delete log
client.on("messageDelete", async message => {
    // Function
    function isEmpty(collection) {
        for(var arg in collection) {
            if(collection.hasOwnProperty(arg))
                return false;
        }
        return true;
    }
    // Logs
    var attachment = (message.attachments).array();
    if(isEmpty(attachment)) {
        var img = "";
    } else {
        var img = attachment[0].url;
    }

    let embed_delete = new Discord.RichEmbed()
    .setAuthor(message.author.tag, message.author.avatarURL)
    .setColor('c11515')
    .setTitle("Message deleted!")
    .setDescription(message.content + " " + img)
    .setImage(img)
    .setFooter("#" + message.channel.name)
    .setTimestamp();    
    client.channels.get(logsChannel).send(embed_delete);
});

client.login(token);

标签: javascriptnode.jsdiscorddiscord.js

解决方案


.fetch()返回一个Promise
因此,您需要等待结果.then()

在您的代码中(假设logsChannel是一个 ID):

client.channels
    .fetch(logsChannel)
    .then(fetchedChannel => fetchedChannel.send(embed_delete));

目前,你需要更新你所有的.fetches


推荐阅读