backups-bot icon indicating copy to clipboard operation
backups-bot copied to clipboard

Backup member roles

Open DaliborTrampota opened this issue 2 years ago • 2 comments

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

DaliborTrampota avatar May 15 '22 14:05 DaliborTrampota

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)
}

DaliborTrampota avatar May 15 '22 18:05 DaliborTrampota

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

kntjspr avatar Jun 10 '23 05:06 kntjspr