Использовать другой файл для команд бота

Предупреждение уже показывает вам: «Вы можете только гнездо использовать refs или массивы». Это дизайн мангуста.

Но вы можете сделать это:

var MySchema = new mongoose.Schema({
    objectId: String,
    parent: {
        type: mongoose.Schema.ObjectId,
        ref: 'MySchema'
    },
})

Это будет использовать схему внутри схемы, тогда вы можете использовать «предварительное сохранение» для обновления данных вашего родителя. Или вы можете использовать массив ссылок и сохранить только один элемент.

Что делать, экспортируйте схемы, а не модели, чтобы вы могли их вложить. например:

module.exports = MySchema;

Затем у меня есть некоторый appModel для установки моделей моей коллекции схем, например this (app_model.js):

if(mongoose.modelNames().indexOf('mySchema') < 0) mongoose.model('mySchema', mySchema);
0
задан Federico Grandi 14 July 2018 в 00:46
поделиться

1 ответ

Я вижу две основные вещи, которые необходимо исправить: 1: клиент из commands.js 2: командная функция в основном файле

1 - В commands.js , вы создали новый клиент. Если у вас есть только эта команда, это не вызовет никаких проблем, так как client не используется в вашем коде, но когда вам это понадобится, это не сработает, так как оно должно быть таким же, как в главном файле. У вас есть два возможных решения: установка вашего клиента как глобального или требующий основного модуля. Если ваш бот не должен публиковаться в общедоступном пакете, вы можете сохранить global.client = client;, а затем получить доступ к нему как client в каждом другом файле. Альтернативой является экспорт клиента из основного модуля (module.exports = {client};), а затем требуемый основной файл в commands.js (var {client} = require("./index.js");).

2 - В commands.js вы экспортируете функцию help, поэтому, когда вы вызываете ее index.js , вы должны использовать скобки и передавать сообщение в качестве аргумента. Попробуйте что-то вроде этого:

//in the switch statement
case "help":
  cmds.help(message);
  break;

Надеюсь, это поможет вам, сообщите мне, если у вас возникнут другие вопросы.

0
ответ дан Federico Grandi 17 August 2018 в 12:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: