加入服务器时触发discord.js channelCreate()事件

时间:2019-12-06 02:49:46

标签: javascript node.js events discord.js

机器人进入服务器时会触发2个事件,第一个是guildCreate事件,第二个是channelCreate事件 这是我的事件加载器

const ascii = require("ascii-table");
let table = new ascii("Events");
table.setHeading("Event", "Load status");
const load = async () => {
    const evtFiles = await readdir("./events");
    var total = 0;

    evtFiles.forEach(file => {
        if (file.split(".").slice(-1)[0] !== "js") return;
        const evtName = file.split(".")[0];
        const event = require(`./events/${file}`);
        table.addRow(file, '✅');
        client.on(evtName, event.bind(null, client));
        delete require.cache[require.resolve(`./events/${file}`)];
        total = total +1;

    })
    console.log(table.toString());
    console.log(`Total no of events ${total} loaded ✅`);
}
load();

这是我的guildcreate事件

const Discord = require("discord.js");
const fs = require("fs");
const config1 = require("../config.json");

module.exports =  (client, message,guild) => {

    console.log(`Hi, ${client.user.username} is now serving in ${client.guilds.size} servers and serving ${client.guilds.reduce((c, p) => c + p.memberCount, 0)} users!.`);


}

这是我的channelCreate事件

const Discord = require("discord.js");

module.exports = async ( client , channel ) => {
    // event firing when it joins a guild


    var log = channel.guild.channels.find(ch => ch.name.includes('member-log')) 
    var sEmbed = new Discord.RichEmbed()
                .setColor("RANDOM")
                .setTitle(`:information_source: A channel Was Created!`)
                .setDescription(`**Name**\n${channel}`)
                .addField(`**Type**`,`${channel.type}`) 
                .setFooter(`ChannelID:${channel.id} | CreatedAT:${channel.createdAt}`);
                log.send(sEmbed);

}

加入公会后,我该怎么做才能停止此channelcreate事件触发

2 个答案:

答案 0 :(得分:1)

得到它Date.now()/1000+2不能正常工作,甚至比该事件甚至触发XD还早。我做到了这一点,并且它的工作效果更好,有时如果服务器通道太多,则可以将时间最多增加30秒更安全

client.on("channelCreate", (channel) => {
let x = channel.guild.me.joinedTimestamp / 1000
    if(x <= (x+10)) return; // if the bot just joined the server the channelcreate event will get activated after 10 sec
    console.log("Valid event!");
});

答案 1 :(得分:0)

昨天,Discord.js存储库中有一个与此有关的问题。我发现它的唯一方法是检查机器人是否在2秒前加入服务器。例如:

client.on("channelCreate", (channel) => {
    if((channel.guild.me.joinedTimestamp / 1000) < (Date.now()/1000+2)) return;
    console.log("Valid event!");
});

请注意,您还可以检查频道创建时间是否少于x秒。例如,如果该事件接收到2年前创建的频道,则该事件无效。