Причина для 'collection # find: вместо этого передайте функцию, Tags.create не является функцией' - PullRequest
0 голосов
/ 10 июня 2019

Я устанавливаю бота Discord, и я делаю команду warn, в которой все записи будут записаны в таблицу Sequelize. В настоящее время я также использую основной index.js, и у меня есть папка со всеми командами. index.js вызывает каждую команду при запуске бота. Я использую https://discordjs.guide/ для помощи и руководства. Я использовал их справку по базе данных Seqeulize, поэтому я «добавляю тег» и помещаю именно то, что они сказали, кроме моих собственных имен столбцов.

Я ничего не пробовал, потому что не знаю, почему это может происходить. Я только начинаю в JS и самоучка, поэтому я не знаю много.

const Tags = sequelize.define('moderation', {
  username: {
    type: Sequelize.STRING,
    unique: false,
  },
  case_num: {
    type: Sequelize.INTEGER,
    unique: true,
  },
  type: Sequelize.STRING,
  reason: Sequelize.STRING,
  length: Sequelize.STRING,
  by: { 
    type: Sequelize.STRING,
    unique: false,
  },
  date: {
    type: Sequelize.DATE,
  }
});
const Discord = require("discord.js");
const {parseUser} = require('../util/parseUser.js');
const {caseNumber} = require('../util/caseNumber.js');
const Sequelize = require("sequelize");
const Tags = require ('../modTable.js');

module.exports.run = async (bot, message, args) => {
  const sequelize = new Sequelize('database', 'user', 'password', {
    host: 'localhost',
    dialect: 'sqlite',
    logging: false,
    operatorsAliases: false,
    // SQLite only
    storage: 'database.sqlite',
  });
    if(!message.member.hasPermission(['KICK_MEMBERS'])) 
      return message.reply("Sorry, you don't have permissions to use this!");


    const user = message.mentions.users.first();
    if (user === message.author) {
        return message.channel.send('You cannot do that to yourself, why did you try?');
    }
    const modlogs = bot.channels.find('name', 'mod-logs');
    const caseNum = await caseNumber(bot, modlogs);
    if (!modlogs) return message.reply('I cannot find a mod-log channel');
    if (message.mentions.users.size < 1) return message.reply('You must mention someone to warn them.').catch(console.error);
    const reason = args.splice(1, args.length).join(' ') || `no reason provided`;
    let date = new Date();
    const type_warn = "warn";

    try {
      const tag = await Tags.create({
        username: message.mentions.users.first(),
        case_num: caseNum,
        type: type_warn,
        reason: reason,
        length: null,
        by: message.author.username,
        date: date,
      });
      console.log(e);
    }
    catch (e) {
      console.log(e);
      return message.reply('Something went wrong with adding this warn to the table. Please contact Charlee or VorTex eXDee!');
    }

Я ожидаю, что объект будет зарегистрирован, и на терминале не появится ошибка, но он говорит:

Deprecationwarning: collection#find: pass a function instead

TypeError: Tags.create is not a function.

1 Ответ

0 голосов
/ 10 июня 2019

Collection#find: pass a function instead

Collection.find() может принимать функцию вместо свойства и значения.Последнее использование не рекомендуется.

Решение:

Collection.find(element => element.property === value)

(Свойства можно сравнивать и другими способами, и сразу несколькими.)


Tags.create() is not a function

Когда вам требуется modTable.js, вы объявляете Tags как свойство module.exports файла.Вы можете назначить значения и создать свойства для module.exports, чтобы иметь доступ к своим переменным в другом месте.

Решение:

Экспорт переменной из файла.

module.exports = Tags;
// You can also use: module.exports.Tags = Tags;
...