基于变量添加和删除角色
Adding and removing roles based on variables
我已经编写了完成这项工作所需的大约 95% 的代码,只需要完成它,以便发送的嵌入消息显示角色已正确调整的人员列表。有人能给我指出正确的方向,让我正确地对成员进行排序并在嵌入中正确发布吗?
代码如下:
cron.schedule('00 12 * * *', function () {
con.query(`SELECT * FROM users WHERE member = 'Yes' AND user_registered < DATE_SUB(NOW(),INTERVAL 14 DAY)`, (err, rows) => {
if (err) throw err
rows.slice().forEach(row => {
const discord = row.discord
const member = bot.users.cache.get(discord)
const rank = row.rank
const messages = row.messages
const registered = row.user_registered
const days = Math.round((Date.now() / 1000 / 60 / 60 / 24) - (registered / 1000 / 60 / 60 / 24))
if (days >= 14 && messages >= 150 && rank === 'Recruit') {
member.roles.remove(member.guild.roles.cache.find(role => role.name === 'Recruit'))
member.roles.add(member.guild.roles.cache.find(role => role.name === 'Noble'))
} else if (days >= 30 && messages >= 750 && rank === 'Noble') {
member.roles.remove(member.guild.roles.cache.find(role => role.name === 'Noble'))
member.roles.add(member.guild.roles.cache.find(role => role.name === 'Hero'))
} else if (days >= 90 && messages >= 1500 && rank === 'Hero') {
member.roles.remove(member.guild.roles.cache.find(role => role.name === 'Hero'))
member.roles.add(member.guild.roles.cache.find(role => role.name === 'Fabled'))
} else if (days >= 180 && messages >= 3000 && rank === 'Fabled') {
member.roles.remove(member.guild.roles.cache.find(role => role.name === 'Fabled'))
member.roles.add(member.guild.roles.cache.find(role => role.name === 'Mythic'))
} else if (days >= 365 && messages >= 6000 && rank === 'Mythic') {
member.roles.remove(member.guild.roles.cache.find(role => role.name === 'Mythic'))
member.roles.add(member.guild.roles.cache.find(role => role.name === 'Legend'))
}
const noble = a //This needs to be set up
const hero = b //This needs to be set up
const fabled = c //This needs to be set up
const mythic = d //This needs to be set up
const legend = e //This needs to be set up
const promotionEmbed = new Discord.MessageEmbed()
.setColor('#ff6600')
.setTitle('Promotions')
.setDescription(`The following members have been promoted:`)
.addFields({
name: 'Noble',
value: `${noble.join('\n')}` || 'None', //This needs to be set up
inline: true
}, {
name: 'Hero',
value: `${hero.join('\n')}` || 'None', //This needs to be set up
inline: true
}, {
name: 'Fabled',
value: `${fabled.join('\n')}` || 'None', //This needs to be set up
inline: true
}, {
name: 'Mythic',
value: `${mythic.join('\n')}` || 'None', //This needs to be set up
inline: true
}, {
name: 'Legend',
value: `${legend.join('\n')}` || 'None', //This needs to be set up
inline: true
})
genchat.send(promotionEmbed)
})
})
})
这个怎么样?
const noble = member.guild.members.cache.filter(member => member.roles.cache.find(role => role.name == "Noble")).array();
const hero = member.guild.members.cache.filter(member => member.roles.cache.find(role => role.name == "Hero")).array();
const fabled = member.guild.members.cache.filter(member => member.roles.cache.find(role => role.name == "Fabled")).array();
const mythic = member.guild.members.cache.filter(member => member.roles.cache.find(role => role.name == "Mythic")).array();
const legend = member.guild.members.cache.filter(member => member.roles.cache.find(role => role.name == "Legend")).array();
你过滤公会成员,留下有角色的。
编辑:
cron.schedule('00 12 * * *', function () {
con.query(`SELECT * FROM users WHERE member = 'Yes' AND user_registered < DATE_SUB(NOW(),INTERVAL 14 DAY)`, (err, rows) => {
if (err) throw err
let noble = []
let hero = []
let fabled = []
let mythic = []
let legend = []
rows.slice().forEach(row => {
const discord = row.discord
const member = bot.users.cache.get(discord)
const rank = row.rank
const messages = row.messages
const registered = row.user_registered
const days = Math.round((Date.now() / 1000 / 60 / 60 / 24) - (registered / 1000 / 60 / 60 / 24))
if (days >= 14 && messages >= 150 && rank === 'Recruit') {
member.roles.remove(member.guild.roles.cache.find(role => role.name === 'Recruit'))
member.roles.add(member.guild.roles.cache.find(role => role.name === 'Noble'))
noble.push(member)
} else if (days >= 30 && messages >= 750 && rank === 'Noble') {
member.roles.remove(member.guild.roles.cache.find(role => role.name === 'Noble'))
member.roles.add(member.guild.roles.cache.find(role => role.name === 'Hero'))
hero.push(member)
} else if (days >= 90 && messages >= 1500 && rank === 'Hero') {
member.roles.remove(member.guild.roles.cache.find(role => role.name === 'Hero'))
member.roles.add(member.guild.roles.cache.find(role => role.name === 'Fabled'))
fabled.push(member)
} else if (days >= 180 && messages >= 3000 && rank === 'Fabled') {
member.roles.remove(member.guild.roles.cache.find(role => role.name === 'Fabled'))
member.roles.add(member.guild.roles.cache.find(role => role.name === 'Mythic'))
mythic.push(member)
} else if (days >= 365 && messages >= 6000 && rank === 'Mythic') {
member.roles.remove(member.guild.roles.cache.find(role => role.name === 'Mythic'))
member.roles.add(member.guild.roles.cache.find(role => role.name === 'Legend'))
legend.push(member)
}
})
const promotionEmbed = new Discord.MessageEmbed()
.setColor('#ff6600')
.setTitle('Promotions')
.setDescription(`The following members have been promoted:`)
.addFields({
name: 'Noble',
value: `${noble.join('\n')}` || 'None', //This needs to be set up
inline: true
}, {
name: 'Hero',
value: `${hero.join('\n')}` || 'None', //This needs to be set up
inline: true
}, {
name: 'Fabled',
value: `${fabled.join('\n')}` || 'None', //This needs to be set up
inline: true
}, {
name: 'Mythic',
value: `${mythic.join('\n')}` || 'None', //This needs to be set up
inline: true
}, {
name: 'Legend',
value: `${legend.join('\n')}` || 'None', //This needs to be set up
inline: true
})
genchat.send(promotionEmbed)
})
})
如果我没理解错的话,每一行都是一个discord用户。您需要在 foreach 之外累积对用户的更改。并在for循环结束后发送消息。
还没有测试过,希望对你有帮助。
Skulaurun 让我从 95% 提高到 99%,只需调整成员的定义方式并添加更多 sql 来更新数据库,但这是完成的工作代码。
此代码根据存储在 mysql 数据库中的服务器 activity(发送的消息)和时间(他们注册到服务器的时间)信息分配成员角色。
cron.schedule('51 10 * * *', function () {
con.query(`SELECT * FROM users WHERE member = 'Yes' AND user_registered < DATE_SUB(NOW(),INTERVAL 14 DAY)`, (err, rows) => {
if (err) throw err
const genchat = bot.channels.cache.get('785187526477742141');
let noble = []
let hero = []
let fabled = []
let mythic = []
let legend = []
rows.slice().forEach(row => {
const guild = bot.guilds.cache.get('779892144026288179')
const discord = row.discord
const member = guild.members.cache.get(discord)
const rank = row.rank
const messages = row.messages
const registered = row.user_registered
const days = Math.round((Date.now() / 1000 / 60 / 60 / 24) - (registered / 1000 / 60 / 60 / 24))
if (days >= 14 && messages >= 150 && rank === 'Recruit') {
member.roles.remove(guild.roles.cache.find(role => role.name === 'Recruit'))
member.roles.add(guild.roles.cache.find(role => role.name === 'Noble'))
noble.push(member)
con.query(`UPDATE users SET rank = 'Noble' WHERE discord = '${member.user.id}'`, (err) => {
if (err) throw err
})
} else if (days >= 30 && messages >= 750 && rank === 'Noble') {
member.roles.remove(guild.roles.cache.find(role => role.name === 'Noble'))
member.roles.add(guild.roles.cache.find(role => role.name === 'Hero'))
hero.push(member)
con.query(`UPDATE users SET rank = 'Hero' WHERE discord = '${member.user.id}'`, (err) => {
if (err) throw err
})
} else if (days >= 90 && messages >= 1500 && rank === 'Hero') {
member.roles.remove(guild.roles.cache.find(role => role.name === 'Hero'))
member.roles.add(guild.roles.cache.find(role => role.name === 'Fabled'))
fabled.push(member)
con.query(`UPDATE users SET rank = 'Fabled' WHERE discord = '${member.user.id}'`, (err) => {
if (err) throw err
})
} else if (days >= 180 && messages >= 3000 && rank === 'Fabled') {
member.roles.remove(guild.roles.cache.find(role => role.name === 'Fabled'))
member.roles.add(guild.roles.cache.find(role => role.name === 'Mythic'))
mythic.push(member)
con.query(`UPDATE users SET rank = 'Mythic' WHERE discord = '${member.user.id}'`, (err) => {
if (err) throw err
})
} else if (days >= 365 && messages >= 6000 && rank === 'Mythic') {
member.roles.remove(guild.roles.cache.find(role => role.name === 'Mythic'))
member.roles.add(guild.roles.cache.find(role => role.name === 'Legend'))
legend.push(member)
con.query(`UPDATE users SET rank = 'Legend' WHERE discord = '${member.user.id}'`, (err) => {
if (err) throw err
})
}
})
const promotionEmbed = new Discord.MessageEmbed()
.setColor('#ff6600')
.setTitle('Promotions')
.setDescription(`The following members have been promoted:`)
.addFields({
name: 'Noble',
value: `${noble.join('\n')}` || 'None',
inline: true
}, {
name: 'Hero',
value: `${hero.join('\n')}` || 'None',
inline: true
}, {
name: 'Fabled',
value: `${fabled.join('\n')}` || 'None',
inline: true
}, {
name: 'Mythic',
value: `${mythic.join('\n')}` || 'None',
inline: true
}, {
name: 'Legend',
value: `${legend.join('\n')}` || 'None',
inline: true
})
genchat.send(promotionEmbed)
})
});
我已经编写了完成这项工作所需的大约 95% 的代码,只需要完成它,以便发送的嵌入消息显示角色已正确调整的人员列表。有人能给我指出正确的方向,让我正确地对成员进行排序并在嵌入中正确发布吗?
代码如下:
cron.schedule('00 12 * * *', function () {
con.query(`SELECT * FROM users WHERE member = 'Yes' AND user_registered < DATE_SUB(NOW(),INTERVAL 14 DAY)`, (err, rows) => {
if (err) throw err
rows.slice().forEach(row => {
const discord = row.discord
const member = bot.users.cache.get(discord)
const rank = row.rank
const messages = row.messages
const registered = row.user_registered
const days = Math.round((Date.now() / 1000 / 60 / 60 / 24) - (registered / 1000 / 60 / 60 / 24))
if (days >= 14 && messages >= 150 && rank === 'Recruit') {
member.roles.remove(member.guild.roles.cache.find(role => role.name === 'Recruit'))
member.roles.add(member.guild.roles.cache.find(role => role.name === 'Noble'))
} else if (days >= 30 && messages >= 750 && rank === 'Noble') {
member.roles.remove(member.guild.roles.cache.find(role => role.name === 'Noble'))
member.roles.add(member.guild.roles.cache.find(role => role.name === 'Hero'))
} else if (days >= 90 && messages >= 1500 && rank === 'Hero') {
member.roles.remove(member.guild.roles.cache.find(role => role.name === 'Hero'))
member.roles.add(member.guild.roles.cache.find(role => role.name === 'Fabled'))
} else if (days >= 180 && messages >= 3000 && rank === 'Fabled') {
member.roles.remove(member.guild.roles.cache.find(role => role.name === 'Fabled'))
member.roles.add(member.guild.roles.cache.find(role => role.name === 'Mythic'))
} else if (days >= 365 && messages >= 6000 && rank === 'Mythic') {
member.roles.remove(member.guild.roles.cache.find(role => role.name === 'Mythic'))
member.roles.add(member.guild.roles.cache.find(role => role.name === 'Legend'))
}
const noble = a //This needs to be set up
const hero = b //This needs to be set up
const fabled = c //This needs to be set up
const mythic = d //This needs to be set up
const legend = e //This needs to be set up
const promotionEmbed = new Discord.MessageEmbed()
.setColor('#ff6600')
.setTitle('Promotions')
.setDescription(`The following members have been promoted:`)
.addFields({
name: 'Noble',
value: `${noble.join('\n')}` || 'None', //This needs to be set up
inline: true
}, {
name: 'Hero',
value: `${hero.join('\n')}` || 'None', //This needs to be set up
inline: true
}, {
name: 'Fabled',
value: `${fabled.join('\n')}` || 'None', //This needs to be set up
inline: true
}, {
name: 'Mythic',
value: `${mythic.join('\n')}` || 'None', //This needs to be set up
inline: true
}, {
name: 'Legend',
value: `${legend.join('\n')}` || 'None', //This needs to be set up
inline: true
})
genchat.send(promotionEmbed)
})
})
})
这个怎么样?
const noble = member.guild.members.cache.filter(member => member.roles.cache.find(role => role.name == "Noble")).array();
const hero = member.guild.members.cache.filter(member => member.roles.cache.find(role => role.name == "Hero")).array();
const fabled = member.guild.members.cache.filter(member => member.roles.cache.find(role => role.name == "Fabled")).array();
const mythic = member.guild.members.cache.filter(member => member.roles.cache.find(role => role.name == "Mythic")).array();
const legend = member.guild.members.cache.filter(member => member.roles.cache.find(role => role.name == "Legend")).array();
你过滤公会成员,留下有角色的。
编辑:
cron.schedule('00 12 * * *', function () {
con.query(`SELECT * FROM users WHERE member = 'Yes' AND user_registered < DATE_SUB(NOW(),INTERVAL 14 DAY)`, (err, rows) => {
if (err) throw err
let noble = []
let hero = []
let fabled = []
let mythic = []
let legend = []
rows.slice().forEach(row => {
const discord = row.discord
const member = bot.users.cache.get(discord)
const rank = row.rank
const messages = row.messages
const registered = row.user_registered
const days = Math.round((Date.now() / 1000 / 60 / 60 / 24) - (registered / 1000 / 60 / 60 / 24))
if (days >= 14 && messages >= 150 && rank === 'Recruit') {
member.roles.remove(member.guild.roles.cache.find(role => role.name === 'Recruit'))
member.roles.add(member.guild.roles.cache.find(role => role.name === 'Noble'))
noble.push(member)
} else if (days >= 30 && messages >= 750 && rank === 'Noble') {
member.roles.remove(member.guild.roles.cache.find(role => role.name === 'Noble'))
member.roles.add(member.guild.roles.cache.find(role => role.name === 'Hero'))
hero.push(member)
} else if (days >= 90 && messages >= 1500 && rank === 'Hero') {
member.roles.remove(member.guild.roles.cache.find(role => role.name === 'Hero'))
member.roles.add(member.guild.roles.cache.find(role => role.name === 'Fabled'))
fabled.push(member)
} else if (days >= 180 && messages >= 3000 && rank === 'Fabled') {
member.roles.remove(member.guild.roles.cache.find(role => role.name === 'Fabled'))
member.roles.add(member.guild.roles.cache.find(role => role.name === 'Mythic'))
mythic.push(member)
} else if (days >= 365 && messages >= 6000 && rank === 'Mythic') {
member.roles.remove(member.guild.roles.cache.find(role => role.name === 'Mythic'))
member.roles.add(member.guild.roles.cache.find(role => role.name === 'Legend'))
legend.push(member)
}
})
const promotionEmbed = new Discord.MessageEmbed()
.setColor('#ff6600')
.setTitle('Promotions')
.setDescription(`The following members have been promoted:`)
.addFields({
name: 'Noble',
value: `${noble.join('\n')}` || 'None', //This needs to be set up
inline: true
}, {
name: 'Hero',
value: `${hero.join('\n')}` || 'None', //This needs to be set up
inline: true
}, {
name: 'Fabled',
value: `${fabled.join('\n')}` || 'None', //This needs to be set up
inline: true
}, {
name: 'Mythic',
value: `${mythic.join('\n')}` || 'None', //This needs to be set up
inline: true
}, {
name: 'Legend',
value: `${legend.join('\n')}` || 'None', //This needs to be set up
inline: true
})
genchat.send(promotionEmbed)
})
})
如果我没理解错的话,每一行都是一个discord用户。您需要在 foreach 之外累积对用户的更改。并在for循环结束后发送消息。
还没有测试过,希望对你有帮助。
Skulaurun 让我从 95% 提高到 99%,只需调整成员的定义方式并添加更多 sql 来更新数据库,但这是完成的工作代码。
此代码根据存储在 mysql 数据库中的服务器 activity(发送的消息)和时间(他们注册到服务器的时间)信息分配成员角色。
cron.schedule('51 10 * * *', function () {
con.query(`SELECT * FROM users WHERE member = 'Yes' AND user_registered < DATE_SUB(NOW(),INTERVAL 14 DAY)`, (err, rows) => {
if (err) throw err
const genchat = bot.channels.cache.get('785187526477742141');
let noble = []
let hero = []
let fabled = []
let mythic = []
let legend = []
rows.slice().forEach(row => {
const guild = bot.guilds.cache.get('779892144026288179')
const discord = row.discord
const member = guild.members.cache.get(discord)
const rank = row.rank
const messages = row.messages
const registered = row.user_registered
const days = Math.round((Date.now() / 1000 / 60 / 60 / 24) - (registered / 1000 / 60 / 60 / 24))
if (days >= 14 && messages >= 150 && rank === 'Recruit') {
member.roles.remove(guild.roles.cache.find(role => role.name === 'Recruit'))
member.roles.add(guild.roles.cache.find(role => role.name === 'Noble'))
noble.push(member)
con.query(`UPDATE users SET rank = 'Noble' WHERE discord = '${member.user.id}'`, (err) => {
if (err) throw err
})
} else if (days >= 30 && messages >= 750 && rank === 'Noble') {
member.roles.remove(guild.roles.cache.find(role => role.name === 'Noble'))
member.roles.add(guild.roles.cache.find(role => role.name === 'Hero'))
hero.push(member)
con.query(`UPDATE users SET rank = 'Hero' WHERE discord = '${member.user.id}'`, (err) => {
if (err) throw err
})
} else if (days >= 90 && messages >= 1500 && rank === 'Hero') {
member.roles.remove(guild.roles.cache.find(role => role.name === 'Hero'))
member.roles.add(guild.roles.cache.find(role => role.name === 'Fabled'))
fabled.push(member)
con.query(`UPDATE users SET rank = 'Fabled' WHERE discord = '${member.user.id}'`, (err) => {
if (err) throw err
})
} else if (days >= 180 && messages >= 3000 && rank === 'Fabled') {
member.roles.remove(guild.roles.cache.find(role => role.name === 'Fabled'))
member.roles.add(guild.roles.cache.find(role => role.name === 'Mythic'))
mythic.push(member)
con.query(`UPDATE users SET rank = 'Mythic' WHERE discord = '${member.user.id}'`, (err) => {
if (err) throw err
})
} else if (days >= 365 && messages >= 6000 && rank === 'Mythic') {
member.roles.remove(guild.roles.cache.find(role => role.name === 'Mythic'))
member.roles.add(guild.roles.cache.find(role => role.name === 'Legend'))
legend.push(member)
con.query(`UPDATE users SET rank = 'Legend' WHERE discord = '${member.user.id}'`, (err) => {
if (err) throw err
})
}
})
const promotionEmbed = new Discord.MessageEmbed()
.setColor('#ff6600')
.setTitle('Promotions')
.setDescription(`The following members have been promoted:`)
.addFields({
name: 'Noble',
value: `${noble.join('\n')}` || 'None',
inline: true
}, {
name: 'Hero',
value: `${hero.join('\n')}` || 'None',
inline: true
}, {
name: 'Fabled',
value: `${fabled.join('\n')}` || 'None',
inline: true
}, {
name: 'Mythic',
value: `${mythic.join('\n')}` || 'None',
inline: true
}, {
name: 'Legend',
value: `${legend.join('\n')}` || 'None',
inline: true
})
genchat.send(promotionEmbed)
})
});