Skip to content

Commit fd3d50e

Browse files
committed
Merge branch 'main' of github.com:eliware/discopy
2 parents 3655c63 + f3f6818 commit fd3d50e

File tree

5 files changed

+75
-78
lines changed

5 files changed

+75
-78
lines changed

commands/backup.mjs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -73,9 +73,9 @@ export default async function ({ log, msg }, interaction) {
7373
if (!manager) { ch.permissionOverwrites = []; continue; }
7474
let overwritesArr = [];
7575
if (manager.cache && typeof manager.cache.map === 'function') overwritesArr = manager.cache.map(o => o);
76-
else if (typeof manager.map === 'function') { try { overwritesArr = manager.map(o => o); } catch (e) {} }
76+
else if (typeof manager.map === 'function') { try { overwritesArr = manager.map(o => o); } catch (e) { } }
7777
else if (Array.isArray(manager)) overwritesArr = manager;
78-
else { try { for (const o of manager) overwritesArr.push(o); } catch (e) {} }
78+
else { try { for (const o of manager) overwritesArr.push(o); } catch (e) { } }
7979
ch.permissionOverwrites = overwritesArr.map(o => ({ id: String(o.id), type: o.type, allow: o.allow ? (o.allow.bitfield !== undefined ? o.allow.bitfield : o.allow) : null, deny: o.deny ? (o.deny.bitfield !== undefined ? o.deny.bitfield : o.deny) : null }));
8080
} catch (e) { ch.permissionOverwrites = { error: String(e) }; }
8181
}
@@ -98,7 +98,7 @@ export default async function ({ log, msg }, interaction) {
9898
// Step 7: Webhooks
9999
try {
100100
if (guild && guild.fetchWebhooks) {
101-
try { const webhooks = await guild.fetchWebhooks(); backup.data.webhooks = webhooks.map(w => ({ id: w.id, name: w.name, channelId: w.channelId, url: w.url || null })); } catch (e) { backup.data.webhooks = { error: 'fetch failed: '+String(e) }; }
101+
try { const webhooks = await guild.fetchWebhooks(); backup.data.webhooks = webhooks.map(w => ({ id: w.id, name: w.name, channelId: w.channelId, url: w.url || null })); } catch (e) { backup.data.webhooks = { error: 'fetch failed: ' + String(e) }; }
102102
} else backup.data.webhooks = [];
103103
} catch (err) { log.warn('Webhooks collection failed', { err: String(err) }); backup.data.webhooks = { error: String(err) }; }
104104
await markNext();
@@ -108,11 +108,11 @@ export default async function ({ log, msg }, interaction) {
108108
await markNext();
109109

110110
// Step 9: Invites
111-
try { if (guild && guild.fetchInvites) { try { const invites = await guild.fetchInvites(); backup.data.invites = invites.map(i => ({ code: i.code, channelId: i.channelId, maxUses: i.maxUses, maxAge: i.maxAge, temporary: i.temporary })); } catch (e) { backup.data.invites = { error: 'fetch failed: '+String(e) }; } } else backup.data.invites = []; } catch (err) { log.warn('Invites failed', { err: String(err) }); backup.data.invites = { error: String(err) }; }
111+
try { if (guild && guild.fetchInvites) { try { const invites = await guild.fetchInvites(); backup.data.invites = invites.map(i => ({ code: i.code, channelId: i.channelId, maxUses: i.maxUses, maxAge: i.maxAge, temporary: i.temporary })); } catch (e) { backup.data.invites = { error: 'fetch failed: ' + String(e) }; } } else backup.data.invites = []; } catch (err) { log.warn('Invites failed', { err: String(err) }); backup.data.invites = { error: String(err) }; }
112112
await markNext();
113113

114114
// Step 10: Bans metadata
115-
try { if (guild && guild.bans && guild.bans.fetch) { try { const bans = await guild.bans.fetch(); backup.data.bans = bans.map(b => ({ userId: b.user.id, reason: b.reason || null })); } catch (e) { backup.data.bans = { error: 'fetch failed: '+String(e) }; } } else backup.data.bans = []; } catch (err) { log.warn('Bans failed', { err: String(err) }); backup.data.bans = { error: String(err) }; }
115+
try { if (guild && guild.bans && guild.bans.fetch) { try { const bans = await guild.bans.fetch(); backup.data.bans = bans.map(b => ({ userId: b.user.id, reason: b.reason || null })); } catch (e) { backup.data.bans = { error: 'fetch failed: ' + String(e) }; } } else backup.data.bans = []; } catch (err) { log.warn('Bans failed', { err: String(err) }); backup.data.bans = { error: String(err) }; }
116116
await markNext();
117117

118118
// Step 11: Members metadata
@@ -131,14 +131,14 @@ export default async function ({ log, msg }, interaction) {
131131
try { await interaction.editReply({ content, files: [{ attachment: backup._saved.path, name: backup._saved.filename }] }); }
132132
catch (err) {
133133
log.warn('editReply with file failed, attempting followUp', { err: String(err) });
134-
try { await interaction.followUp({ content: msg('backup.followupSaved', `Backup saved: ${backup._saved.filename}`), files: [{ attachment: backup._saved.path, name: backup._saved.filename }], ephemeral: false }); await interaction.editReply({ content }); } catch (err2) { log.error('Failed to send backup zip', { err: String(err2) }); try { await interaction.editReply({ content }); } catch (_) {} }
134+
try { await interaction.followUp({ content: msg('backup.followupSaved', `Backup saved: ${backup._saved.filename}`), files: [{ attachment: backup._saved.path, name: backup._saved.filename }], ephemeral: false }); await interaction.editReply({ content }); } catch (err2) { log.error('Failed to send backup zip', { err: String(err2) }); try { await interaction.editReply({ content }); } catch (_) { } }
135135
}
136136

137137
} catch (err) {
138138
log.error('Failed to save ZIP', { err: String(err) });
139139
await markNext();
140140
content += `\n\n${msg('backup.saveFailed', `Backup attempted but failed to save: ${String(err)}`)}`;
141-
try { await interaction.editReply({ content }); } catch (_) {}
141+
try { await interaction.editReply({ content }); } catch (_) { }
142142
}
143143

144144
log.debug('backup Response', { saved: backup._saved || null });

commands/reset.mjs

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -2,64 +2,64 @@ import plan from '../src/reset/plan.mjs';
22
import execute from '../src/reset/execute.mjs';
33
import createDefaults from '../src/reset/createDefaults.mjs';
44

5-
export default async function ({ log, msg }, interaction){
5+
export default async function ({ log, msg }, interaction) {
66
log.debug('reset Request', { interaction });
77

88
// permission guard
9-
const isAdmin = (()=>{ try{ if(interaction.member?.permissions) return interaction.member.permissions.has('ADMINISTRATOR'); if(interaction.memberPermissions) return interaction.memberPermissions.has('ADMINISTRATOR'); }catch(e){} return false; })();
10-
if(!isAdmin){ return interaction.reply({ content: msg('reset.permissionRequired', 'You must have Administrator permission to run /reset.'), flags: 1<<6 }); }
9+
const isAdmin = (() => { try { if (interaction.member?.permissions) return interaction.member.permissions.has('ADMINISTRATOR'); if (interaction.memberPermissions) return interaction.memberPermissions.has('ADMINISTRATOR'); } catch (e) { } return false; })();
10+
if (!isAdmin) { return interaction.reply({ content: msg('reset.permissionRequired', 'You must have Administrator permission to run /reset.'), flags: 1 << 6 }); }
1111

12-
const dryRun = (interaction.options && interaction.options.getBoolean && typeof interaction.options.getBoolean('dry_run')==='boolean') ? interaction.options.getBoolean('dry_run') : ((interaction.data && interaction.data.options && interaction.data.options.find(o=>o.name==='dry_run')) ? !!interaction.data.options.find(o=>o.name==='dry_run').value : true);
12+
const dryRun = (interaction.options && interaction.options.getBoolean && typeof interaction.options.getBoolean('dry_run') === 'boolean') ? interaction.options.getBoolean('dry_run') : ((interaction.data && interaction.data.options && interaction.data.options.find(o => o.name === 'dry_run')) ? !!interaction.data.options.find(o => o.name === 'dry_run').value : true);
1313

1414
const steps = [
15-
msg('reset.step.plan','Plan'),
16-
msg('reset.step.delete','Delete content'),
17-
msg('reset.step.applyDefaults','Apply guild defaults'),
18-
msg('reset.step.createDefaults','Create defaults'),
19-
msg('reset.step.finalize','Finalize')
15+
msg('reset.step.plan', 'Plan'),
16+
msg('reset.step.delete', 'Delete content'),
17+
msg('reset.step.applyDefaults', 'Apply guild defaults'),
18+
msg('reset.step.createDefaults', 'Create defaults'),
19+
msg('reset.step.finalize', 'Finalize')
2020
];
21-
let content = steps.map(s=>`- \u23f3 ${s}`).join('\n');
21+
let content = steps.map(s => `- \u23f3 ${s}`).join('\n');
2222
await interaction.reply({ content });
23-
async function markNext(){ content = content.replace('\u23f3','\u2705'); try{ await interaction.editReply({ content }); }catch(e){ log?.warn&&log.warn('editReply failed',{err:String(e)}) } }
23+
async function markNext() { content = content.replace('\u23f3', '\u2705'); try { await interaction.editReply({ content }); } catch (e) { log?.warn && log.warn('editReply failed', { err: String(e) }) } }
2424

2525
const guild = interaction.guild || (interaction.client && interaction.client.guilds && interaction.client.guilds.cache && interaction.client.guilds.cache.get(interaction.guildId));
26-
if(!guild){ await interaction.editReply({ content: msg('reset.notInGuild','This command must be used in a guild.') }); return null; }
26+
if (!guild) { await interaction.editReply({ content: msg('reset.notInGuild', 'This command must be used in a guild.') }); return null; }
2727

2828
// Step 1: Plan
2929
const p = await plan(guild, log);
3030
await markNext();
3131

3232
// show plan summary
33-
try{ await interaction.editReply({ content: content + `\n\n${msg('reset.plannedDeletions', `Planned deletions: roles=${p.roles.length}, channels=${p.channels.length}, emojis=${p.emojis.length}, stickers=${p.stickers.length}\nDry run: ${dryRun}`)}` }); }catch(e){}
33+
try { await interaction.editReply({ content: content + `\n\n${msg('reset.plannedDeletions', `Planned deletions: roles=${p.roles.length}, channels=${p.channels.length}, emojis=${p.emojis.length}, stickers=${p.stickers.length}\nDry run: ${dryRun}`)}` }); } catch (e) { }
3434

3535
// Step 2: Execute deletions
3636
const results = await execute(p, guild, dryRun, log);
3737
await markNext();
3838

3939
// Step 3: Apply guild defaults (name/icon)
4040
const guildDefaultsResult = { nameChanged: false, iconRemoved: false, error: null };
41-
try{
42-
if(dryRun){ log?.info&&log.info('DRY RUN: would set guild name to "default server" and remove icon'); }
43-
else{
44-
try{
41+
try {
42+
if (dryRun) { log?.info && log.info('DRY RUN: would set guild name to "default server" and remove icon'); }
43+
else {
44+
try {
4545
await guild.setName('default server', 'reset: reset name');
4646
guildDefaultsResult.nameChanged = true;
47-
}catch(err){ guildDefaultsResult.error = guildDefaultsResult.error || []; guildDefaultsResult.error.push({ action: 'setName', err: String(err) }); log?.warn&&log.warn('Failed to set guild name',{err:String(err)}); }
48-
try{
47+
} catch (err) { guildDefaultsResult.error = guildDefaultsResult.error || []; guildDefaultsResult.error.push({ action: 'setName', err: String(err) }); log?.warn && log.warn('Failed to set guild name', { err: String(err) }); }
48+
try {
4949
// remove icon
5050
await guild.setIcon(null, 'reset: remove icon');
5151
guildDefaultsResult.iconRemoved = true;
52-
}catch(err){ guildDefaultsResult.error = guildDefaultsResult.error || []; guildDefaultsResult.error.push({ action: 'removeIcon', err: String(err) }); log?.warn&&log.warn('Failed to remove guild icon',{err:String(err)}); }
52+
} catch (err) { guildDefaultsResult.error = guildDefaultsResult.error || []; guildDefaultsResult.error.push({ action: 'removeIcon', err: String(err) }); log?.warn && log.warn('Failed to remove guild icon', { err: String(err) }); }
5353
}
54-
}catch(err){ guildDefaultsResult.error = guildDefaultsResult.error || []; guildDefaultsResult.error.push({ action: 'applyGuildDefaults', err: String(err) }); log?.warn&&log.warn('Apply guild defaults failed',{err:String(err)}); }
54+
} catch (err) { guildDefaultsResult.error = guildDefaultsResult.error || []; guildDefaultsResult.error.push({ action: 'applyGuildDefaults', err: String(err) }); log?.warn && log.warn('Apply guild defaults failed', { err: String(err) }); }
5555
await markNext();
5656

5757
// Step 4: Create defaults
5858
const created = await createDefaults(guild, {}, dryRun, log);
5959
await markNext();
6060

6161
// Step 5: Finalize
62-
try{ await interaction.followUp({ content: msg('reset.finalResult', `reset ${dryRun? 'dry-run completed' : 'completed'}. Results: ${JSON.stringify(results)}. Guild defaults: ${JSON.stringify(guildDefaultsResult)}. Defaults created: ${JSON.stringify(created)}`), ephemeral: false }); }catch(e){}
62+
try { await interaction.followUp({ content: msg('reset.finalResult', `reset ${dryRun ? 'dry-run completed' : 'completed'}. Results: ${JSON.stringify(results)}. Guild defaults: ${JSON.stringify(guildDefaultsResult)}. Defaults created: ${JSON.stringify(created)}`), ephemeral: false }); } catch (e) { }
6363

6464
return { plan: p, results, guildDefaultsResult, created };
6565
}

0 commit comments

Comments
 (0)