导入/导出模块-Node JS / Discord JS

JL927935

我感觉好像我不正确地将Currency导出/导入到Balance.js中。

我发现了一篇文章:-Discord.js货币到命令处理程序

在我看来,这是我正确地遵循的方法,但是仍然出现getBalance未定义错误。

在过去的四天里,我一直在尝试各种方法,但是我没有得到任何结果。

我相信这是由于我如何导出/导入货币集合

任何帮助将不胜感激,谢谢。

App.JS

        const fs = require('fs');
const Discord = require('discord.js');
const { Prefix, Token } = require('./config.json');
const { Characters, CurrencyShop } = require('./dbObjects');
const { Op  } = require('sequelize');
const client = new Discord.Client();
const currency = new Discord.Collection();

Reflect.defineProperty(currency, 'add', {
    value: async function add(id, amount) {
        const user = currency.get(id);
        if (user) {
            user.balance += Number(amount);
            return user.save();
        }
        const newUser = await Characters.create({ character_id: id, balance: amount });
        currency.set(id, newUser);
        return newUser;
    },
});

Reflect.defineProperty(currency, 'getBalance', {
    value: function getBalance(id) {
        const user = currency.get(id);
        return user ? user.balance : 0;
    },

});

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

client.once('ready', async () => {
const storedBalances = await Characters.findAll();
storedBalances.forEach(b => currency.set(b.user_id, b));
console.log(` Logged in as ${client.user.tag}!`);
});

client.on('message', async message => {
if (message.author.bot) return; 
    currency.add(message.author.id, 1);
return currency;
if (!message.content.startsWith(Prefix)|| message.author.bot) return;

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

const command = client.commands.get(commandName);
if (!command) return;
try {
    await command.execute(message, args);
} catch (error) {
    console.error(error);
    message.reply('there was an error trying to execute that command!');
}
});
module.exports = { currency }
client.login(`${Token}`);
process.on('unhandledRejection', error => {
console.error('Unhandled promise rejection:', error);
})

平衡JS

const Discord = require('discord.js');
const { Characters, CurrencyShop } = require('../dbObjects');
const { currency } = require('../app.js');

module.exports = {
name: "balance",
args: false,
async execute (message) {
        const target = message.mentions.users.first() || message.author;
        return message.channel.send(`${target.tag} has ${currency.getBalance(target.id)}`);
},
};

错误

TypeError: Cannot read property 'getBalance' of undefined
at Object.execute (C:\Users\Unknown\Bot\commands\balance.js:9:62)
at Client.<anonymous> (C:\Users\Unknown\Bot\app.js:54:17)
at Client.emit (events.js:310:20)
at MessageCreateAction.handle 
(C:\Users\Unknown\node_modules\discord.js\src\
client\actions\MessageCreate.js:31:14)at Object.module.exports [as 
MESSAGE_CREATE] 
(C:\Users\Unknown\node_modules\discord.js\src\
client\websocket\handlers\MESSAGE_CREATE.js:4:32)
at WebSocketManager.handlePacket 
(C:\Users\Unknown\node_modules\discord.js\src\
client\websocket\WebSocketManager.js:386:31)
at WebSocketShard.onPacket 
at WebSocketShard.onMessage (C:\Users\Unknown\node_modules\discord.js\src\
client\websocket\WebSocketShard.js:293:10)
at WebSocket.onMessage (C:\Users\Unknown\node_modules\ws\lib\event- 
target.js:125:16)
at WebSocket.emit (events.js:310:20)
at Receiver.receiverOnMessage 
(C:\Users\Unknown\node_modules\ws\lib\websocket.js:800:20)
at Receiver.emit (events.js:310:20)
at Receiver.dataMessage 
(C:\Users\Unknown\node_modules\ws\lib\receiver.js:436:14)
at Receiver.getData 
(C:\Users\Unknown\node_modules\ws\lib\receiver.js:366:17)
at Receiver.startLoop 
(C:\Users\Unknown\node_modules\ws\lib\receiver.js:142:22)
at Receiver._write 
(C:\Users\Unknown\node_modules\ws\lib\receiver.js:77:10)
at doWrite (_stream_writable.js:403:12)
at writeOrBuffer (_stream_writable.js:387:5)
at Receiver.Writable.write (_stream_writable.js:318:11)
at TLSSocket.socketOnData 
(C:\Users\Unknown\node_modules\ws\lib\websocket.js:875:35)
at TLSSocket.emit (events.js:310:20)
at addChunk (_stream_readable.js:286:12)
T编码

好的,花了一段时间重现您的环境之后...我发现的问题是,您在声明module.exports之前“需要”命令/模块app.js这意味着将balance.js获得一个空的映射,而不是{currency: currency}“必需”时。

在下面的示例中,此操作与您的“断开”代码相同。为了解决这个问题,你需要移动require("./test2")start(),因为start()是后执行module.exports

test.js

const Discord = require('discord.js');
const currency = new Discord.Collection();

const test2 = require("./test2");

function start() {
    test2.test();
}

module.exports = { currency: currency };
start();

test2.js

const { currency } = require("./test");

module.exports = { 
    test: () => {
        console.log(require("./test"));
        console.log(currency);
    }
}

解决方法

要将其转换到您的环境中:您应该将所有代码(除了require,常量和模块导出除外)移动到以下内容中:

const a = ....
const b = ....
const client = ...
// etc....

client.on("ready" () => {
  // Put (almost) everything here
  // code here will run after module.exports because client.login is executed after
});

module.exports = { currency }
client.login(`${Token}`);
process.on('unhandledRejection', error => {
console.error('Unhandled promise rejection:', error);

希望这可以帮助 :)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在 node.js/discord.js 中导出/导入

来自分类Dev

JS模块导出导入

来自分类Dev

导入和导出模块变量-Node.js

来自分类Dev

导出模块 Node.js

来自分类Dev

Node.js 如何导入和导出带有子功能的模块

来自分类Dev

使用Node.js导入/导出MongoDB

来自分类Dev

在node.js模块中导出对象

来自分类Dev

Node.js模块导出混乱

来自分类Dev

从导出的模块(node.js)访问函数

来自分类Dev

Node.js Express模块导出

来自分类Dev

Node.js 模块导出“预加载”

来自分类Dev

在node.js / discord.js中找不到模块'./data.js'

来自分类Dev

Discord.js - 模块导出不再起作用

来自分类Dev

如何导入discord.js?

来自分类Dev

Node js对象导出

来自分类Dev

导出mongodb集合数据并使用Node JS导入回去

来自分类Dev

node.js模块导出功能结构

来自分类Dev

Node js模块如何获取导出函数列表

来自分类Dev

Node.js导出的行为与ES6模块不同

来自分类Dev

在TypeScript中将类导出为Node.js模块

来自分类Dev

如何在node.js中导出模块

来自分类Dev

整合node.js模块导出中的多个回调

来自分类Dev

Node js 逐行模块

来自分类Dev

Node.js无法导入ES6模块

来自分类Dev

Node.js:SyntaxError:无法在模块外部使用导入语句

来自分类Dev

如何在Node.js中导入util模块?

来自分类Dev

discord.js node.js代码对象承诺问题

来自分类Dev

Node.js-将ES6模块导入Node.js``需要''

来自分类Dev

无法将对象传递到Node.js / Express.js上的导出JavaScript模块