NodeJS 向函数中的通道发送消息

mspsb9vt  于 2023-02-21  发布在  Node.js
关注(0)|答案(1)|浏览(185)

我有一个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()”,我认为我需要的文件不对,但不确定我需要哪一个

bqucvtff

bqucvtff1#

您的代码问题在于,您试图使用对象客户端的send()方法,但该方法尚未在您要使用它的文件中正确示例化。在 ready.js 文件中,您正确初始化了客户端对象,并且可以在execute块中使用其send()方法。
但是,在另一个要使用send()方法的文件中,导入了 ready.js 文件,但导入的只是模块,而不是示例化的客户端对象,因此send()方法无法解析,无法调用。
要解决此问题,您需要修改 ready.js 文件以导出客户端对象以及module.exports语句。例如,您可以在execute块的末尾添加以下行:

module.exports.client = client;

然后,在另一个文件中,您可以通过请求ready.js文件并访问导出模块的client属性来导入client对象。

const ready = require("../events/ready");
const client = ready.client;

// Now you can use client.channels.cache.get('xxxxxx').send('Hello');

通过这些修改,您应该能够正确地使用这两个文件中客户端对象的send()方法。

相关问题