2

我试图调用存储在我的 ready.js 文件中的常量 musicSettings,但是似乎无法导出它。在我的 ready.js 文件中(这需要在那里,因为这是我可以访问 this.client 的唯一地方之一)

const { Listener } = require('discord-akairo');
const { Client: Lavaqueue } = require('lavaqueue');
const { ClientID } = require('../config');

class ReadyListener extends Listener {
    constructor() {
        super('ready', {
            emitter: 'client',
            eventName: 'ready'
        });
    }
    exec() {
        process.stdout.write(`[>] Running in ${this.client.guilds.size} servers.\n`);
    }
}

const musicSettings = new Lavaqueue({
    userID: ClientID,
    password: 'g6Z0xRLbiTHq',
    hosts: {
        rest: 'http://127.0.0.1:2333',
        ws: 'ws://127.0.0.1:2333',
        redis: { host: 'localhost' },
    },
    send(guildID, packet) {
        this.client.ws.send(packet)
    },
});

module.exports = ReadyListener;

位于 play.js 文件中的代码(不起作用,因为我无法从 ready.js 文件中导入 musicSettings)

    async exec(message, args) {
        var channel = message.member.voiceChannel;
        if (!channel) {
            return message.reply('you need to be in a voice channel to play music.')
        } else if (!args.video) {
            return message.reply('you need to provide a link or search for a video.')
        }
        const song = await musicSettings.load(args.video);
        const queue = musicSettings.queues.get(`${message.guild.id}`);
        await queue.player.join(`${message.member.voiceChannel.id}`);
        await queue.add(...song.tracks.map(s => s.track));
        await queue.start();
    }
}
4

1 回答 1

1

从以下位置导出musicSettings实例ready.js

module.exports = { ReadyListener, musicSettings };

然后将其导入play.js

const { musicSettings } = require('./ready');

然后你就可以musicSettingsplay.js.

请注意,由于ready.js现在要导出件事,因此要导入ReadyListener,您必须使用与导入相同的语法musicSettings,例如:

const { ReadyListener } = require('./ready');

或者,如果您想同时导入两者:

const { ReadyListener, musicSettings } = require('./ready');
于 2019-08-12T23:57:44.567 回答