我正在使用discord.js创建一个机器人,并且到目前为止一直遵循他们的指南来创建命令和事件处理程序,包括他们将每个事件处理程序和命令函数放入其自己的文件中并具有自己的导出模块的格式。这对于“ready”和“interactionCreate”事件效果很好,但由于某种原因,我的“guildCreate”和“guildDelete”事件似乎没有做任何事情。
这是我设置事件监听器的方法:
const eventsPath = path.join(__dirname, 'events');
const eventFiles = fs
.readdirSync(eventsPath)
.filter((file) => file.endsWith('.js'));
eventFiles.forEach((file) => {
const filePath = path.join(eventsPath, file);
const event = require(filePath);
if (event.once) {
client.once(event.name, (...args) => event.execute(...args));
} else {
client.on(event.name, (...args) => event.execute(...args));
}
});
这是 guildCreate.js 的内容(guildDelete.js 是相同的,只是事件名称是“guildDelete”):
module.exports = {
name: 'guildCreate',
execute(guild) {
console.log('joined guild');
console.log(guild.name);
},
};
我不确定为什么这没有打印任何内容,因为我看不出它与指南中处理就绪事件的方式有何不同,这对我来说效果很好(https://discordjs.guide/creating -your-bot/event-handling.html#individual-event-files).
事实证明,将意图设置为 8(使用 Discord 开发者门户中的位数学计算器计算出的管理员权限)不包括对公会活动的访问权限,我必须专门设置 Intents.Flags.GUILDS
使用 ClientOptions 初始化 Discord.js 时,您需要指定“Guilds”意图,以便能够访问加入和离开事件。
const discordConfig: ClientOptions = {
intents: ['Guilds']
};
const client = new Client(discordConfig);