机器人进入服务器时会触发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事件触发
答案 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年前创建的频道,则该事件无效。