Discord.js 用kick/ban/Leave留下消息
如果用户离开、被禁止或被踢,我如何制作一条显示该用户离开的消息? 我已经试过用guildBanAdd和guildMemberRemove来做这件事了,它基本上是有效的——但是如果你被禁止,它会说你们都离开了,被禁止了,这不是我想要的。代码:Discord.js 用kick/ban/Leave留下消息,discord.js,Discord.js,如果用户离开、被禁止或被踢,我如何制作一条显示该用户离开的消息? 我已经试过用guildBanAdd和guildMemberRemove来做这件事了,它基本上是有效的——但是如果你被禁止,它会说你们都离开了,被禁止了,这不是我想要的。代码: // member got kicked/left the server bot.on('guildMemberRemove', async member => { const fetchedLogs1 = await member.guild.
// member got kicked/left the server
bot.on('guildMemberRemove', async member => {
const fetchedLogs1 = await member.guild.fetchAuditLogs({ // get audit log entry
limit: 1,
type: 'MEMBER_KICK',
});
const fetchedLogs2 = await member.guild.fetchAuditLogs({
limit: 1,
type: 'MEMBER_BAN_ADD',
});
const kickLog = fetchedLogs1.entries.first() // get the first log
const banLog = fetchedLogs2.entries.first()
if(kickLog.target.id != member.id || kickLog.createdAt < member.joinedAt){
if(banLog.target.id != member.id || banLog.createdAt < member.joinedAt){
return member.guild.channels.cache.get(bsCBots.channels['entryway'].id).send(member.user.tag+" left") // no log, so user left
}
else{
return
}
}
const { executor, target } = kickLog // get args
if(!kickLog.createdAt < member.joinedAt){
if(target.id === member.id) { // if the log is about the kicked member
member.guild.channels.cache.get(bsCBots.channels['entryway'].id).send(member.user.tag+" got kicked by "+executor.tag+", L") // user got kicked
}
else{
}
}
});
// member got banned
bot.on('guildBanAdd', async (guild, user) => {
const fetchedLogs = await guild.fetchAuditLogs({
limit: 1,
type: 'MEMBER_BAN_ADD',
});
// Since we only have 1 audit log entry in this collection, we can simply grab the first one
const banLog = fetchedLogs.entries.first()
// Let's perform a coherence check here and make sure we got *something*
if (!banLog) return guild.channels.cache.get(bsCBots.channels['entryway'].id).send(user.tag+" got banned") // user left idk
// We now grab the user object of the person who banned the user
// Let us also grab the target of this action to double check things
const { executor, target } = banLog
// And now we can update our output with a bit more information
// We will also run a check to make sure the log we got was for the same kicked member
if (target.id === user.id) {
guild.channels.cache.get(bsCBots.channels['entryway'].id).send(target.tag+" got banned by "+executor.tag+", big fat L to you mister") // user left idk
}
else{
}
});
它可以工作,但有时无法检测用户是否被禁止,它只是说只要在禁止列表中添加新的禁止,就会触发左侧的guildBanAdd,因此如果您只是删除代码中的这一部分,您应该会很好,guildMemberRemove可以像您所做的那样使用审核日志分类为kick/ban/leave。Ehhh忘了它,我只走简单的路,没有踢/禁止的事情
但当然,如果你有答案,请随时发布 您可以查看审核日志。它会告诉你用户是被禁止还是被踢。是的,我就是这么做的,它不能正常工作。你可以删除GuildBanad,然后新的问题是,guildMemberRemove事件似乎在添加禁令之前触发,因此它并不总是显示用户被禁止。我将以另一种方式发送代码更正:被禁止的嵌入只发送一次,如果你再次禁止某人,它将不起作用
// member got kicked/left the server
bot.on('guildMemberRemove', async member => {
const fetchedLogs1 = await member.guild.fetchAuditLogs({ // get audit log entry for kicks
limit: 1,
type: 'MEMBER_KICK',
});
const fetchedLogs2 = await member.guild.fetchAuditLogs({ // get audit log entry for bans
limit: 1,
type: 'MEMBER_BAN_ADD',
});
const kickLog = fetchedLogs1.entries.first() // get the first kick log
const banLog = fetchedLogs2.entries.first() // get the first ban log
if(kickLog.target.id === member.user.id && kickLog.createdAt > member.joinedAt){ // is the kick log valid?
var reason = "*No reason provided*"
if(kickLog.reason){
reason = kickLog.reason
}
const embed = { // make embed
"title": ":hiking_boot: GET OUT",
"color": 11141120,
"thumbnail": {
"url": member.user.displayAvatarURL()
},
"fields": [
{
"name": member.user.tag,
"value": "(id: "+member.user.id+")"
},
{
"name": "Has been **KICKED** from the server by "+kickLog.executor.tag+" with reason:",
"value": reason
}
]
};
return member.guild.channels.cache.get(bsCBots.channels['entryway'].id).send({ embed }) // user got kicked
}
else{ // kick log is not valid
if(banLog.target.id === member.user.id && banLog.createdAt > member.joinedAt){ // is ban log valid?
var reason = "*No reason provided*"
if(banLog.reason){
reason = banLog.reason
}
const embed = { // make embed
"title": ":banHammer: DONT COME BACK",
"color": 11141120,
"thumbnail": {
"url": member.user.displayAvatarURL()
},
"fields": [
{
"name": member.user.tag,
"value": "(id: "+member.user.id+")"
},
{
"name": "Has been ***BANNED*** from the server by "+banLog.executor.tag+" with reason:",
"value": reason
}
]
};
return member.guild.channels.cache.get(bsCBots.channels['entryway'].id).send({ embed }) // user got banned
}
else{ // ban log not valid
const embed = { // make embed
"title": ":wave: Goodbye!",
"color": 11141120,
"thumbnail": {
"url": member.user.displayAvatarURL()
},
"fields": [
{
"name": member.user.tag,
"value": "(id: "+member.user.id+")"
},
{
"name": "Has left the server",
"value": "See you around!"
}
]
};
return member.guild.channels.cache.get(bsCBots.channels['entryway'].id).send({ embed }) // no log, so user left
}
}
});