我有一个ready事件的事件处理程序。ready.js:
const { Events } = require('discord.js');
const db = require("../config/database");
const itemdb = require("../config/itemdb");
const items = require("../models/items");
const AHItems = require('../models/ahitems.js');
const RSS = require('../models/regionserversettings.js');
module.exports = {
name: Events.ClientReady,
once: true,
execute(client) {
console.log(`Ready! Logged in as ${client.user.tag}`);
db.authenticate()
.then(() => {
console.log('Logged in to DB!');
AHItems.init(db);
AHItems.sync();
RSS.init(db);
RSS.sync();
})
.catch(err => console.log(err));
itemdb.authenticate()
.then(() => {
console.log('Logged in to Item DB!');
items.init(itemdb);
items.sync();
})
.catch(err => console.log(err));
},
};
在执行块内部,我可以使用client.channels.cache.get('xxxxxx').send('Hello');
我想在另一个文件中使用send方法:
const AHItems = require("../models/ahitems");
const RSS = require("../models/regionserversettings");
const getprice = require("../api/getcurrentPrice");
const client = require("../events/ready");
const pricealarm = async function()
{
let ahitems = await AHItems.findAll({attributes: ['guildID', 'itemID']});
for (let i = 0; i < ahitems.length; i++) {
const guild = ahitems[i].dataValues.guildID;
const RSSData = await RSS.findOne({where: {guildID: guild}});
const item = ahitems[i].dataValues.itemID;
const access_token = RSSData.AccessToken;
const server = RSSData.serverID;
const price = await getprice(access_token, item, server);
const channel = client.channels.cache.get('x').send('test');
console.log(channel);
}
}
module.exports = pricealarm;
但如果我尝试这样做,它会告诉我“Unresolved function or method send()”,我认为我需要的文件不对,但不确定我需要哪一个
1条答案
按热度按时间bqucvtff1#
您的代码问题在于,您试图使用对象客户端的
send()
方法,但该方法尚未在您要使用它的文件中正确示例化。在 ready.js 文件中,您正确初始化了客户端对象,并且可以在execute块中使用其send()
方法。但是,在另一个要使用
send()
方法的文件中,导入了 ready.js 文件,但导入的只是模块,而不是示例化的客户端对象,因此send()
方法无法解析,无法调用。要解决此问题,您需要修改 ready.js 文件以导出客户端对象以及module.exports语句。例如,您可以在execute块的末尾添加以下行:
然后,在另一个文件中,您可以通过请求ready.js文件并访问导出模块的client属性来导入client对象。
通过这些修改,您应该能够正确地使用这两个文件中客户端对象的
send()
方法。