Androz2091 / backups-bot

🌟 Backups Bot using the discord-backup package
78 stars 46 forks source link

Backup member roles #18

Open DaliborTrampota opened 2 years ago

DaliborTrampota commented 2 years ago

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 commented 2 years ago

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)
}
kntjspr commented 1 year ago

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