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

Posted

技术标签:

【中文标题】Discord.js 无法读取未定义的属性“发送”【英文标题】:Discord.js Cannot read property 'send' of undefined 【发布时间】:2020-06-05 07:43:11 【问题描述】:

我正在为我大约一年前制作的 discord.js 机器人添加一些新东西。 我制作了一个 json 文件botconfigs.json,如下所示:

"641702354579881994":"prefix":"$","modLogsChannel":643786173285924864

我有一个 purge.js 文件,用于删除频道中的消息,我想将嵌入发送到 JSON 文件中指定的频道。当我执行console.log(botconfigs[guildid].modLogsChannel); 时,它会按原样打印出频道ID。当我做bot.channels.get(botconfigs[guildid].modLogsChannel).send(embed: purgeEmbed); 时,它说:

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

完整代码:

const Discord = require("discord.js");
const botconfigs = require("../botconfigs.json");

module.exports.run = async (bot, message, args) => 
    if(message.member.roles.some(r=>["Owner", "Co-Owner", "Manager", "Build Manager", "Development Manager", "Administrator", "Senior Builder", "Senior Developer", "Moderator+", "Builder+", "Developer+"].includes(r.name)) ) 
        const amount = args[0];
        if (!amount) return message.reply('You must specify an amount to delete! (Min: 2 Max: 100)');
        if (amount > 100) return message.reply('Specified amount too large! (Max: 100)');
        if (amount < 2) return message.reply('Specified amount too small! (Min: 2)');
        let guildid = message.guild.id;
        message.channel.fetchMessages(
        limit: 100,
        ).then((messages) => 
        message.channel.bulkDelete(amount).catch(error => console.log(error.stack));

        let purgeEmbed = new Discord.RichEmbed()
        .setColor("#00001")
        .setAuthor("HN Modlogs")
        .addField("Moderation:", "Purge", true)
        .addField("Messages Deleted:", amount, true)
        .setThumbnail(bot.user.displayAvatarURL)
        .addField("Moderator:", message.author.username, true)

        bot.channels.get(botconfigs[guildid].modLogsChannel).send(embed: purgeEmbed);
 );
   else 
    return message.channel.send("You don't have permission to use this command!");
 


module.exports.config = 
  name: "purge",
  usage: "u.purge <messageCount>",
  description: "Deletes Lots Of Messages (MAX 100).",

最初我使用bot.guilds.get('641702354579881994').channels.get('643786173285924864').send(embed: purgeEmbed);,它运行良好。我做错了什么?

提前致谢!

【问题讨论】:

【参考方案1】:

首先指定一个公会可能会有所帮助:

bot.guilds.get(guildid)
  .channels.get(botconfigs[guildid].modLogsChannel)
  .send(embed: purgeEmbed);

【讨论】:

之前也试过,结果一样。 你确定botconfigs[guildid].modLogsChannel 是一个字符串吗?只有字符串可以工作。 是的,我猜它是一个数字。 这是一个数字。 json文件中是不是一定要加引号? 是的,在 discord.js 中,id 必须是字符串,否则 .get() 将返回 undefined。

以上是关于Discord.js 无法读取未定义的属性“发送”的主要内容,如果未能解决你的问题,请参考以下文章

discord.js TypeError:无法读取未定义的属性“发送”

无法读取 discord.js 中未定义的属性“发送”

Discord.js TypeError:无法读取未定义发送到特定频道的属性“发送”

TypeError:无法读取未定义 discord.js v12 的属性“发送”

Discord.js V12 TypeError:无法读取未定义的属性“发送”

无法读取未定义的属性“成员”(discord.js)