Discord.js如何检测重复Boost及Boost取消?
检测Discord服务器的重复Boost与Boost取消
重复Boost检测
Discord会在用户重复Boost服务器时发送系统消息,你可以通过监听messageCreate事件并判断消息类型来捕获这个行为,比匹配消息内容更可靠:
const { Client, MessageType } = require('discord.js'); const client = new Client({ intents: ['Guilds', 'GuildMessages', 'MessageContent'] }); client.on('messageCreate', (message) => { // 过滤非系统消息,只处理重复Boost的系统通知 if (message.type === MessageType.UserPremiumGuildSubscriptionRenewal) { const boostedUser = message.mentions.users.first(); if (boostedUser) { // 这里添加你的重复Boost处理逻辑 console.log(`用户 ${boostedUser.tag} 完成了一次重复Boost`); // 例如:更新用户Boost次数、发送专属通知等 } } });
Boost取消检测
guildMemberUpdate事件可以捕获Boost取消行为,核心是对比用户更新前后的premium_since字段:当用户取消Boost时,旧成员对象的premium_since有值,新成员对象的premium_since会变为null。
client.on('guildMemberUpdate', (oldMember, newMember) => { // 检测用户从Boost状态变为非Boost状态 if (oldMember.premium_since && !newMember.premium_since) { console.log(`用户 ${newMember.user.tag} 取消了服务器Boost`); // 这里添加取消Boost后的处理逻辑 // 例如:移除Boost专属角色、记录取消次数等 } });
注意事项
- 确保机器人启用了必要的意图:使用
guildMemberUpdate需要开启GuildMembers意图,使用messageCreate需要开启GuildMessages和MessageContent意图(Discord.js v14+)。 - 通过消息类型判断比匹配文本内容更稳定,能避免因服务器语言设置差异导致的匹配失败。
内容的提问来源于stack exchange,提问作者Furious Prospekt
相关产品推荐
相关产品推荐

