【问题标题】:Why am I getting an error on my Join DM command?为什么我的 Join DM 命令出现错误?
【发布时间】:2021-12-17 19:56:55
【问题描述】:

我最近开始认真制作 Discord 机器人(相当新),但我的代码出现错误。

UnhandledPromiseRejectionWarning: TypeError: schema.findOne 不是函数

如果您能帮上忙,请帮忙。如果您无法在此处联系我,我的 Discord 是 Bando Bin Flossin#7397。

我的代码是:

const Discord = require('discord.js')
const db = require('quick.db')
const schema = require('../../models/joindmmodel')
const { default_prefix } = require("../../config.json");
const { color } = require("../../config.json");
const { approve } = require('../../emojis.json')
const { warn } = require('../../emojis.json')

module.exports = {
  name: "joindm",
  aliases: ['jdm', 'welcomedm'],

  run: async (client, message, args) => {
    if (!message.member.hasPermission("MANAGE_GUILD")) return message.channel.send({ embed: { color: "efa23a", description: `${warn} ${message.author}: You're **missing** permission: \`manage_guild\`` } });
    if (!message.guild.me.hasPermission("MANAGE_MESSAGES")) return message.channel.send({ embed: { color: "efa23a", description: `${warn} ${message.author}: I'm **missing** permission: \`manage_messages\`` } });

    let prefix = db.get(`prefix_${message.guild.id}`);
    if (prefix === null) { prefix = default_prefix; };
    if (message.author.bot) return;
    const sub = args[0]
    const embed = new Discord.MessageEmbed()
      .setTitle(`**${prefix}joindm**`)
      .setDescription(`set up a join dm when new members join`)
      .addField(`**subcommands**`, `${prefix}joindm message * edit the join dm, text\n${prefix}joindm clear * clear the join dm message\n${prefix}joindm test * test how the join dm will look\n${prefix}joindm variables * list all the join dm variables`)
      .addField(`**usage**`, `${prefix}joindm`)
      .addField(`**aliases**`, `jdm, welcomedm`)
      .setColor(color)
    if (!sub) return message.channel.send(embed)

    if (sub === 'message') {
      const msg = args.slice(1).join(" ")
      const state = new Discord.MessageEmbed()
        .setDescription(`${warn} ${message.author}: You need to provide a **join message**`)
        .setColor(`#efa23a`)
      if (!msg) return message.channel.send(state)
      
      return message.channel.send({ embed: { color: "a3eb7b", description: `${approve} ${message.author}: Successfully set your **joindm message**` } })
    }

    if (sub === 'clear') {
      const msg = args.slice(1).join(" ")
      schema.findOne({ guildId: message.guild.id }, async (err, data) => {
        if (!data) {
          return message.channel.send({ embed: { color: "#efa23a", description: `${warn} ${message.author}: There is no **joindm message** set for me to clear this` } })
        } else {
          await schema.findOneAndDelete({ guildId: message.guild.id });
        }
        return message.channel.send({ embed: { color: "#a3eb7b", description: `${approve} ${message.author}: Successfully cleared the **joindm message**` } })
      })
    }
    if (sub === 'test') {
      const msg = args.slice(1).join(" ")
      schema.findOne({ guildId: message.guild.id }, async (err, data) => {
        if (!data) {
          return message.channel.send({ embed: { color: "#efa23a", description: `${warn} ${message.author}: There is no **joindm message** set for me to test this` } })
        } else {
          message.channel.send(data.Message)
        }
      })
    }
  }
}

【问题讨论】:

  • 尝试控制台记录schema。它记录什么?然后尝试记录schema.findOne(无括号),我相信它会是undefined
  • 您应该编辑您的问题并添加models/joindmmodel.js 文件的内容,这样我们就可以看到您的schema 是什么。

标签: javascript node.js discord discord.js


【解决方案1】:

确保您正在导入的架构导出为猫鼬模型。

joinmodel.js

const { model, Schema } = require('mongoose');

module.exports = model('model-name-here', new Schema({
   // SCHEMA OBJECTS
}))

【讨论】:

    【解决方案2】:

    看看错误,是什么? TypeError: schema.findOne is not a function;
    findOne 是什么?如果是undefined 怎么办?如果它未定义,请想象一下:

    schema.undefined();
    

    undefined 是一个函数吗?不会。发生这种情况的原因是因为findOne 没有在schema 上定义。您将未定义的属性作为函数调用。你需要定义findOne。

    【讨论】:

    • undefined 可以是属性或方法...但不能是变量或函数。这个例子不好
    • 但是如果 undefined 是一个属性并且说它是一个字符串,那么你在不是一个函数的东西上调用一个函数。
    • 这不是你说的......字符串不是未定义的,但我的意思是undefined 可以是一种方法。您可能希望将示例从 schema.undefined() 更改为 undefined(),因为这将总是导致错误,而另一个不会总是
    猜你喜欢
    • 1970-01-01
    • 2017-04-24
    • 2021-06-05
    • 2021-05-20
    • 2023-04-10
    • 1970-01-01
    • 2021-11-29
    • 2019-09-13
    • 2019-11-10
    相关资源
    最近更新 更多