').text(channel.name)
).attr('href', `/guild/${guild.id}/settings/${channel.id}`).attr('title', channel.id);
} ),
( process.env.READONLY || !guild.channels.filter( channel => {
return ( hasPerm(channel.permissions, 'VIEW_CHANNEL', 'SEND_MESSAGES') && !rows.some( row => row.channel === channel.id ) );
} ).length ? '' :
$('
').append(
$('
').attr('src', '/src/channel.svg'),
$('').text('New channel overwrite')
).attr('href', `/guild/${guild.id}/settings/new`) )
);
if ( args[4] === 'new' ) {
$('.channel#channel-new').addClass('selected');
createForm($, 'New Channel Overwrite', Object.assign({}, rows.find( row => !row.channel ), {
patreon: isPatreon,
channel: 'new'
}), guild.channels.filter( channel => {
return ( hasPerm(channel.permissions, 'VIEW_CHANNEL', 'SEND_MESSAGES') && !rows.some( row => row.channel === channel.id ) );
} )).attr('action', `/guild/${guild.id}/settings/new`).appendTo('#text');
}
else if ( channellist.some( channel => channel.id === args[4] ) ) {
let channel = channellist.find( channel => channel.id === args[4] );
$(`.channel#channel-${channel.id}`).addClass('selected');
createForm($, `#${channel.name} Settings`, Object.assign({}, rows.find( row => {
return row.channel === channel.id;
} ), {
patreon: isPatreon
}), [channel]).attr('action', `/guild/${guild.id}/settings/${channel.id}`).appendTo('#text');
}
else {
$('.channel#settings').addClass('selected');
createForm($, 'Server-wide Settings', rows.find( row => !row.channel )).attr('action', `/guild/${guild.id}/settings/default`).appendTo('#text');
}
let body = $.html();
res.writeHead(200, {'Content-Length': body.length});
res.write( body );
return res.end();
} );
}
/**
* Change settings
* @param {Function} res - The server response
* @param {import('./util.js').Settings} userSettings - The settings of the user
* @param {String} guild - The id of the guild
* @param {String} type - The setting to change
* @param {Object} settings - The new settings
* @param {String} [settings.channel]
* @param {String} settings.wiki
* @param {String} [settings.lang]
* @param {String} [settings.inline]
* @param {String} [settings.prefix]
* @param {String} [settings.prefix_space]
* @param {String} [settings.voice]
* @param {String} [settings.save_settings]
* @param {String} [settings.delete_settings]
*/
function update_settings(res, userSettings, guild, type, settings) {
sendMsg( {
type: 'getMember',
member: userSettings.user.id,
guild: guild
} ).then( response => {
if ( !response ) {
userSettings.guilds.notMember.set(guild, userSettings.guilds.isMember.get(guild));
userSettings.guilds.isMember.delete(guild);
return res(`/guild/${guild}?save=failed`);
}
if ( response === 'noMember' || !hasPerm(response.permissions, 'MANAGE_SERVER') ) {
userSettings.guilds.isMember.delete(guild);
return res('/?save=failed');
}
if ( type === 'default' ) {
if ( !settings.save_settings || settings.channel
|| ( !response.patreon && settings.prefix ) ) {
return res(`/guild/${guild}/settings?save=failed`);
}
return res(`/guild/${guild}/settings?save=success`);
}
if ( ( !settings.save_settings && !settings.delete_settings )
|| !settings.channel || settings.voice || ( !response.patreon
&& ( settings.prefix || settings.lang || settings.inline ) ) ) {
return res(`/guild/${guild}/settings/${type}?save=failed`);
}
if ( type === 'new' ) {
if ( !settings.save_settings ) {
return res(`/guild/${guild}/settings/new?save=failed`);
}
return res(`/guild/${guild}/settings/new?save=success`);
}
if ( !settings.save_settings && settings.delete_settings ) {
return db.run( 'DELETE FROM discord WHERE guild = ? AND channel = ?', [guild, type], function (delerror) {
if ( delerror ) {
console.log( '- Dashboard: Error while removing the settings: ' + delerror );
return res(`/guild/${guild}/settings/${type}?save=failed`);
}
console.log( '- Dashboard: Settings successfully removed: ' + guild );
sendMsg( {
type: 'notifyGuild', guild,
text: `<@${userSettings.user.id}> removed the settings for <#${type}>.\n${new URL(`/guild/${guild}/settings`, process.env.dashboard)}`
} ).catch( error => {
console.log( '- Dashboard: Error while notifying the guild: ' + error );
} );
return res(`/guild/${guild}/settings?save=success`);
} );
}
return res(`/guild/${guild}/settings/${type}?save=success`);
}, error => {
console.log( '- Dashboard: Error while getting the member: ' + error );
return res(`/guild/${guild}/settings/${type}?save=failed`);
} );
}
module.exports = {
get: dashboard_settings,
post: update_settings
};