backups-bot
backups-bot copied to clipboard
Backup member roles
It would be nice to have an option to backup member roles and restore them also an option to fetch members instead of taking them from cache
Okay I just found backupMembers option in the code as its not in the docs but it backups the role IDs and it never restores them. Role names have to be stored
function backupMemberRoles(members){
return [...members.values()].map(m => ({
id: m.id,
roles: [...m.roles.cache.values()].map(r => r.name).filter(name => name != '@everyone')
}))
}
async function restoreMemberRoles(members, backupRoles, gRoles){
let promises = []
for(let m of members){
let roles = backupRoles.find(o => o.id == m.id)
if(!roles) continue
let roleIDs = gRoles.filter(r => roles.some(name => r.name == name)).map(r => r.id)
promises.push(m.roles.add(roleIDs).then(o => true).catch(err => ({ id: m.id, roles, reason: err.message })))
}
return Promise.allSettled(promises)
}
Okay I just found backupMembers option in the code as its not in the docs but it backups the role IDs and it never restores them. Role names have to be stored
function backupMemberRoles(members){ return [...members.values()].map(m => ({ id: m.id, roles: [...m.roles.cache.values()].map(r => r.name).filter(name => name != '@everyone') })) } async function restoreMemberRoles(members, backupRoles, gRoles){ let promises = [] for(let m of members){ let roles = backupRoles.find(o => o.id == m.id) if(!roles) continue let roleIDs = gRoles.filter(r => roles.some(name => r.name == name)).map(r => r.id) promises.push(m.roles.add(roleIDs).then(o => true).catch(err => ({ id: m.id, roles, reason: err.message }))) } return Promise.allSettled(promises) }
Submit a pull request