【问题标题】:Getting TypeErrors And Dont Know Why得到类型错误并且不知道为什么
【发布时间】:2021-12-25 18:01:53
【问题描述】:

所以这是错误,当我发出命令时,它出现在控制台中,而不是机器人启动时。 bot正常启动:

client.commands.get("accept").run(client, message, args);
                                     ^

TypeError: Cannot read properties of undefined (reading 'run')

我的代码:
索引文件:

const Discord = require("discord.js")
const { Client, Intents } = require('discord.js');
const client = new Client({ intents: [30211] });

const prefix = "-"


const fs = require("fs"); 

const commandFiles = fs.readdirSync("./commands").filter(file => file.endsWith(".js"))
client.commands = new Discord.Collection();  
for(const file of commandFiles) {
    const command = require(`./commands/${file}`);

    client.commands.set(command.name, command);
}

let myChannel = '908129511437127721' //target channel 

client.once('ready', () => { 
    console.log('Ready! - Made By Woodington');
});  

client.on('messageCreate', gotMessage);
function gotMessage(msg) {
    if (msg.channel.id !== myChannel) {
        client.channels.fetch(myChannel)
           .then(channel => channel.send(msg.content + `\n**User ID:** ${msg.author.id}\n` + `**Mention:** <@${msg.author.id}>`))
           .catch(console.error);
    }
};

client.on("messageCreate", (message) => { 
    if(message.channel.id == "908129528369532958"){
        message.delete()
    }
});   


client.on('messageCreate', message => {
    if(!message.content.startsWith(prefix) || message.author.bot) return; 

    const args = message.content.slice(prefix.length).split(/ +/);
    const command = args.shift().toLowerCase()

    if(command === "accept") {
        client.commands.get("accept").run(client, message, args);
    }
});  

命令文件:

const {Client, Message, MessageEmbed} = require('discord.js');

module.exports = {
    name: 'dm', 
    /**
     * @param {Client} client 
     * @param {Message} message 
     * @param {String[]} args
     */ 
    run: async(client, message, args) => { 
        if(!message.member.permissions.has('MANAGE_MESSAGES')) return; 

        const user = message.mentions.users.first() || message.guild.members.cache.get(args[0])?.user 

        if(message.content.includes(-a)) {
            const str = args.join(' ').replace('-a', '') 
            user.send(str);
        } else {
            user.send(`Ticket Accepted By: ${message.author.tag}`)
        }
    },
};

我已经尝试了所有我能想到的方法,但我无法让它发挥作用。我真的不确定它为什么会发出那个错误,只是重复机器人正常启动然后在发送命令后执行它。提前感谢您的帮助:)

【问题讨论】:

  • 请原谅一个显而易见的问题——在“向控制台发出命令”之前,您是否在控制台中定义了clientmessageargs
  • @RandyCasburn 我没有在出现错误的控制台中发出命令。我不和谐地发出命令
  • 感谢您的澄清。
  • 请澄清您的具体问题或提供其他详细信息以准确突出您的需求。正如目前所写的那样,很难准确地说出你在问什么。

标签: javascript node.js discord discord.js


【解决方案1】:

这似乎是一个简单的问题,你的命令叫做dm,你可以在

module.exports = {
    name: 'dm', 

因为它被称为dm,所以永远不会有一个称为accept 的命令,所以client.commands.get("accept") 将返回未定义,你不能调用run()

要解决此问题,您可以将命令更改为“接受”,或更改if 语句以检查dm,即

if(command === "dm") {
        client.commands.get("dm").run(client, message, args);
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-02
    相关资源
    最近更新 更多