Browse Source

remove slash command from dashboard

Markus-Rost 3 years ago
parent
commit
145be5e478

+ 4 - 0
cmds/verification.js

@@ -63,6 +63,7 @@ function cmd_verification(lang, msg, args, line, wiki) {
 			}
 			return db.query( 'INSERT INTO verification(guild, configid, channel, role) VALUES($1, $2, $3, $4)', [msg.guildId, new_configid, '|' + ( msg.channel.isThread() ? msg.channel.parentId : msg.channelId ) + '|', roles] ).then( () => {
 				console.log( '- Verification successfully added.' );
+				/*
 				if ( !rows.length ) msg.client.application.commands.cache.find( slashCommand => slashCommand.name === 'verify' )?.permissions.set( {
 					guild: msg.guildId,
 					permissions: [{
@@ -75,6 +76,7 @@ function cmd_verification(lang, msg, args, line, wiki) {
 				}, error => {
 					console.log( '- Error while enabling the slash command: ' + error );
 				} );
+				*/
 				msg.replyMsg( {content: lang.get('verification.added') + formatVerification(false, false, {configid: new_configid, role: roles}), components}, true );
 			}, dberror => {
 				console.log( '- Error while adding the verification: ' + dberror );
@@ -105,6 +107,7 @@ function cmd_verification(lang, msg, args, line, wiki) {
 			if ( process.env.READONLY ) return msg.replyMsg( lang.get('general.readonly') + '\n' + process.env.invite, true );
 			return db.query( 'DELETE FROM verification WHERE guild = $1 AND configid = $2', [msg.guildId, row.configid] ).then( () => {
 				console.log( '- Verification successfully removed.' );
+				/*
 				if ( rows.length === 1 ) msg.client.application.commands.cache.find( slashCommand => slashCommand.name === 'verify' )?.permissions.set( {
 					guild: msg.guildId,
 					permissions: []
@@ -113,6 +116,7 @@ function cmd_verification(lang, msg, args, line, wiki) {
 				}, error => {
 					console.log( '- Error while disabling the slash command: ' + error );
 				} );
+				*/
 				msg.replyMsg( {content: lang.get('verification.deleted'), components}, true );
 			}, dberror => {
 				console.log( '- Error while removing the verification: ' + dberror );

+ 1 - 1
cmds/wiki/random.js

@@ -18,7 +18,7 @@ import extract_desc from '../../util/extract_desc.js';
  */
 export default function gamepedia_random(lang, msg, wiki, reaction, spoiler, noEmbed, namespace = ['0', '*'], querystring = new URLSearchParams(), fragment = '') {
 	var uselang = ( querystring.getAll('variant').pop() || querystring.getAll('uselang').pop() || lang.lang );
-	got.get( wiki + 'api.php?uselang=' + uselang + '&action=query&meta=allmessages|siteinfo&amenableparser=true&amtitle=Special:Random&ammessages=randompage|randompage-nopages&amargs=%1F' + namespace[1] + '%1F' + namespace[0].split('|').length + '&siprop=general&prop=categoryinfo|info|pageprops|pageimages|extracts&piprop=original|name&ppprop=description|displaytitle|page_image_free|disambiguation|infoboxes&explaintext=true&exsectionformat=raw&exlimit=1&converttitles=true&generator=random&grnfilterredir=nonredirects&grnlimit=1&grnnamespace=' + namespace[0] + '&format=json' ).then( response => {
+	got.get( wiki + 'api.php?uselang=' + uselang + '&action=query&meta=allmessages|siteinfo&amenableparser=true&amtitle=Special:Random&ammessages=randompage|randompage-nopages&amargs=%1F' + encodeURIComponent( namespace[1] ) + '%1F' + namespace[0].split('|').length + '&siprop=general&prop=categoryinfo|info|pageprops|pageimages|extracts&piprop=original|name&ppprop=description|displaytitle|page_image_free|disambiguation|infoboxes&explaintext=true&exsectionformat=raw&exlimit=1&converttitles=true&generator=random&grnfilterredir=nonredirects&grnlimit=1&grnnamespace=' + encodeURIComponent( namespace[0] ) + '&format=json' ).then( response => {
 		var body = response.body;
 		if ( body && body.warnings ) log_warning(body.warnings);
 		if ( response.statusCode !== 200 || !body || body.batchcomplete === undefined || !body.query || !body.query.general ) {

+ 1 - 1
cmds/wiki/special_page.js

@@ -9,7 +9,7 @@ const overwrites = {
 	randompage: (fn, lang, msg, wiki, querystring, fragment, reaction, spoiler, noEmbed, args, embed, query) => {
 		let namespaces = Object.values(query.namespaces);
 		let contentNamespaces = namespaces.filter( ns => ns.content !== undefined );
-		let namespaceData = [contentNamespaces.map( ns => ns.id ).join('|'), contentNamespaces.map( ns => ( ns['*'] || '*' )  ).join(', ')];
+		let namespaceData = [contentNamespaces.map( ns => ns.id ).join('|'), contentNamespaces.map( ns => ( ns['*'] || '*' ) ).join(', ')];
 		if ( args[0] ) {
 			args[0] = args[0].replace( /_/g, ' ' ).toLowerCase().trim();
 			let namespaceMap = {};

+ 0 - 3
dashboard/functions.js

@@ -1,20 +1,17 @@
 import { get as rcscript_get, post as rcscript_post } from './rcscript.js';
 import { get as settings_get, post as settings_post } from './settings.js';
-import { get as slash_get, post as slash_post } from './slash.js';
 import { get as user_get, post as user_post } from './user.js';
 import { get as verification_get, post as verification_post } from './verification.js';
 
 export const forms = {
 	rcscript: rcscript_get,
 	settings: settings_get,
-	slash: slash_get,
 	user: user_get,
 	verification: verification_get
 };
 export const posts = {
 	rcscript: rcscript_post,
 	settings: settings_post,
-	slash: slash_post,
 	user: user_post,
 	verification: verification_post
 };

+ 1 - 7
dashboard/guilds.js

@@ -21,7 +21,7 @@ const file = readFileSync('./dashboard/index.html');
  * @param {String[]} [actionArgs] - The arguments for the action
  */
 export default function dashboard_guilds(res, dashboardLang, theme, userSession, reqURL, action, actionArgs) {
-	reqURL.pathname = reqURL.pathname.replace( /^(\/(?:user|guild\/\d+(?:\/(?:settings|verification|rcscript|slash)(?:\/(?:\d+|new|notice))?)?)?)(?:\/.*)?$/, '$1' );
+	reqURL.pathname = reqURL.pathname.replace( /^(\/(?:user|guild\/\d+(?:\/(?:settings|verification|rcscript)(?:\/(?:\d+|new|notice))?)?)?)(?:\/.*)?$/, '$1' );
 	var args = reqURL.pathname.split('/');
 	var settings = settingsData.get(userSession.user_id);
 	if ( reqURL.searchParams.get('owner') && process.env.owner.split('|').includes(userSession.user_id) ) {
@@ -43,8 +43,6 @@ export default function dashboard_guilds(res, dashboardLang, theme, userSession,
 	$('.channel#verification').attr('title', dashboardLang.get('general.verification'));
 	$('.channel#rcscript div').text(dashboardLang.get('general.rcscript'));
 	$('.channel#rcscript').attr('title', dashboardLang.get('general.rcscript'));
-	$('.channel#slash div').text(dashboardLang.get('general.slash'));
-	$('.channel#slash').attr('title', dashboardLang.get('general.slash'));
 	$('.guild#invite a').attr('alt', dashboardLang.get('general.invite'));
 	$('.guild#refresh a').attr('alt', dashboardLang.get('general.refresh'));
 	$('.guild#theme-dark a').attr('alt', dashboardLang.get('general.theme-dark'));
@@ -136,11 +134,9 @@ export default function dashboard_guilds(res, dashboardLang, theme, userSession,
 		$('.channel#settings').attr('href', `/guild/${guild.id}/settings`);
 		$('.channel#verification').attr('href', `/guild/${guild.id}/verification`);
 		$('.channel#rcscript').attr('href', `/guild/${guild.id}/rcscript`);
-		$('.channel#slash').attr('href', `/guild/${guild.id}/slash`);
 		if ( args[3] === 'settings' ) return forms.settings(res, $, guild, args, dashboardLang);
 		if ( args[3] === 'verification' ) return forms.verification(res, $, guild, args, dashboardLang);
 		if ( args[3] === 'rcscript' ) return forms.rcscript(res, $, guild, args, dashboardLang);
-		if ( args[3] === 'slash' ) return forms.slash(res, $, guild, args, dashboardLang);
 		return forms.settings(res, $, guild, args, dashboardLang);
 	}
 	else if ( settings.guilds.notMember.has(id) ) {
@@ -180,11 +176,9 @@ export default function dashboard_guilds(res, dashboardLang, theme, userSession,
 		$('.channel#settings').attr('href', `/guild/${guild.id}/settings?owner=true`);
 		$('.channel#verification').attr('href', `/guild/${guild.id}/verification?owner=true`);
 		$('.channel#rcscript').attr('href', `/guild/${guild.id}/rcscript?owner=true`);
-		$('.channel#slash').attr('href', `/guild/${guild.id}/slash?owner=true`);
 		if ( args[3] === 'settings' ) return forms.settings(res, $, guild, args, dashboardLang);
 		if ( args[3] === 'verification' ) return forms.verification(res, $, guild, args, dashboardLang);
 		if ( args[3] === 'rcscript' ) return forms.rcscript(res, $, guild, args, dashboardLang);
-		if ( args[3] === 'slash' ) return forms.slash(res, $, guild, args, dashboardLang);
 		return forms.settings(res, $, guild, args, dashboardLang);
 	}
 	else {

+ 0 - 25
dashboard/i18n/en.json

@@ -21,7 +21,6 @@
         "save": "Save",
         "selector": "Server Selector",
         "settings": "Settings",
-        "slash": "Slash Commands",
         "support": "Support Server",
         "theme-dark": "Use dark theme",
         "theme-light": "Use light theme",
@@ -93,15 +92,6 @@
             "text": "Please define settings for the server first.",
             "title": "Server not set up yet!"
         },
-        "noslash": {
-            "note": "Enable slash commands.",
-            "text": "The slash commands of Wiki-Bot are not enabled on this server.",
-            "title": "Slash commands are not enabled!"
-        },
-        "noverify": {
-            "text": "The restrictions for the $1 command can't be changed without verifications being set up.",
-            "title": "Verifications are not set up!"
-        },
         "oauth": {
             "text": "Your wiki account has been successfully connected with Wiki-Bot.",
             "title": "Account successfully connected!"
@@ -235,21 +225,6 @@
         },
         "new": "New channel overwrite"
     },
-    "slash": {
-        "desc": "These are the slash commands for $1:",
-        "explanation": "<h2>Slash Commands</h2>\n<p>The usage of specific slash commands can be restricted per role. You can do that for the slash commands of Wiki-Bot here.</p>",
-        "form": {
-            "add": "Add",
-            "allow": "Allow",
-            "default": "Default",
-            "default_allow": "By default this command is allowed to be used by everyone.",
-            "default_deny": "By default this command is not allowed to be used by anyone.",
-            "deny": "Deny",
-            "entry": "Command $1",
-            "role": "Role:",
-            "select_role": "-- Select a Role --"
-        }
-    },
     "verification": {
         "desc": "These are the verifications for $1:",
         "explanation": "<h2>User Verification</h2>\n<p>Using the <code class=\"prefix\">verify &lt;wiki username&gt;</code> command, users are able to verify themselves as a specific wiki user by using the Discord field on their wiki profile. If the user matches and user verifications are set up on the server, Wiki-Bot will give them the roles for all verification entries they matched.</p>\n<p>Every verification entry allows for multiple restrictions on when a user should match the verification:</p>\n<ul>\n<li>Channel to use the <code class=\"prefix\">verify</code> command in.</li>\n<li>Role to get when matching the verification entry.</li>\n<li>Required edit count on the wiki to match the verification entry.</li>\n<li>Required user group to be a member of on the wiki to match the verification entry.</li>\n<li>Required account age in days to match the verification entry.</li>\n<li>Whether the Discord users nickname should be set to their wiki username when they match the verification entry.</li>\n</ul>",

+ 0 - 4
dashboard/index.html

@@ -33,10 +33,6 @@
 				<img src="/src/settings.svg" alt="Settings">
 				<div>Recent Changes</div>
 			</a>
-			<a class="channel channel-header" id="slash" title="Slash Commands">
-				<img src="/src/settings.svg" alt="Settings">
-				<div>Slash Commands</div>
-			</a>
 		</div>
 		<div id="navbar">
 			<a id="selector" href="/" style="width: 230px;">

+ 6 - 7
dashboard/index.js

@@ -52,7 +52,7 @@ const server = http.createServer( (req, res) => {
 		} )?.map( cookie => cookie.replace( /^wikibot="([\da-f]+(?:-\d+)*)"$/, '$1' ) )?.join();
 
 		if ( state && sessionData.has(state) && settingsData.has(sessionData.get(state).user_id) &&
-		( ( args.length === 5 && ['settings', 'verification', 'rcscript', 'slash'].includes( args[3] ) && /^(?:default|new|notice|\d+)$/.test(args[4])
+		( ( args.length === 5 && ['settings', 'verification', 'rcscript'].includes( args[3] ) && /^(?:default|new|notice|\d+)$/.test(args[4])
 		&& settingsData.get(sessionData.get(state).user_id).guilds.isMember.has(args[2]) ) || req.url === '/user' ) ) {
 			let body = [];
 			req.on( 'data', chunk => {
@@ -164,8 +164,8 @@ const server = http.createServer( (req, res) => {
 	res.setHeader('Content-Language', [dashboardLang.lang]);
 
 	var lastGuild = req.headers?.cookie?.split('; ')?.filter( cookie => {
-		return cookie.split('=')[0] === 'guild' && /^"(?:user|\d+\/(?:settings|verification|rcscript|slash)(?:\/(?:\d+|new|notice))?)"$/.test(( cookie.split('=')[1] || '' ));
-	} )?.map( cookie => cookie.replace( /^guild="(user|\d+\/(?:settings|verification|rcscript|slash)(?:\/(?:\d+|new|notice))?)"$/, '$1' ) )?.join();
+		return cookie.split('=')[0] === 'guild' && /^"(?:user|\d+\/(?:settings|verification|rcscript)(?:\/(?:\d+|new|notice))?)"$/.test(( cookie.split('=')[1] || '' ));
+	} )?.map( cookie => cookie.replace( /^guild="(user|\d+\/(?:settings|verification|rcscript)(?:\/(?:\d+|new|notice))?)"$/, '$1' ) )?.join();
 	if ( lastGuild ) res.setHeader('Set-Cookie', ['guild=""; SameSite=Lax; Path=/; Max-Age=0']);
 
 	var state = req.headers.cookie?.split('; ')?.filter( cookie => {
@@ -196,7 +196,7 @@ const server = http.createServer( (req, res) => {
 		if ( reqURL.pathname !== '/' ) action = 'unauthorized';
 		if ( reqURL.pathname.startsWith( '/guild/' ) ) {
 			let pathGuild = reqURL.pathname.split('/').slice(2, 5).join('/');
-			if ( /^\d+\/(?:settings|verification|rcscript|slash)(?:\/(?:\d+|new|notice))?$/.test(pathGuild) ) {
+			if ( /^\d+\/(?:settings|verification|rcscript)(?:\/(?:\d+|new|notice))?$/.test(pathGuild) ) {
 				res.setHeader('Set-Cookie', [`guild="${pathGuild}"; SameSite=Lax; Path=/`]);
 			}
 		}
@@ -219,7 +219,7 @@ const server = http.createServer( (req, res) => {
 		if ( reqURL.pathname !== '/' ) action = 'unauthorized';
 		if ( reqURL.pathname.startsWith( '/guild/' ) ) {
 			let pathGuild = reqURL.pathname.split('/').slice(2, 5).join('/');
-			if ( /^\d+\/(?:settings|verification|rcscript|slash)(?:\/(?:\d+|new|notice))?$/.test(pathGuild) ) {
+			if ( /^\d+\/(?:settings|verification|rcscript)(?:\/(?:\d+|new|notice))?$/.test(pathGuild) ) {
 				res.setHeader('Set-Cookie', [`guild="${pathGuild}"; SameSite=Lax; Path=/`]);
 			}
 		}
@@ -235,7 +235,7 @@ const server = http.createServer( (req, res) => {
 
 	if ( reqURL.pathname === '/refresh' ) {
 		let returnLocation = reqURL.searchParams.get('return');
-		if ( !/^\/(?:user|guild\/\d+\/(?:settings|verification|rcscript|slash)(?:\/(?:\d+|new|notice))?)$/.test(returnLocation) ) {
+		if ( !/^\/(?:user|guild\/\d+\/(?:settings|verification|rcscript)(?:\/(?:\d+|new|notice))?)$/.test(returnLocation) ) {
 			returnLocation = '/';
 		}
 		return pages.refresh(res, sessionData.get(state), returnLocation);
@@ -249,7 +249,6 @@ const server = http.createServer( (req, res) => {
 	let action = '';
 	if ( reqURL.searchParams.get('refresh') === 'success' ) action = 'refresh';
 	if ( reqURL.searchParams.get('refresh') === 'failed' ) action = 'refreshfail';
-	if ( reqURL.searchParams.get('slash') === 'noverify' && reqURL.pathname.split('/')[3] === 'slash' ) action = 'noverify';
 	if ( reqURL.pathname === '/user' ) {
 		if ( reqURL.searchParams.get('oauth') === 'success' ) action = 'oauth';
 		if ( reqURL.searchParams.get('oauth') === 'failed' ) action = 'oauthfail';

+ 1 - 1
dashboard/oauth.js

@@ -164,7 +164,7 @@ function dashboard_oauth(res, state, searchParams, lastGuild) {
 				let returnLocation = '/';
 				if ( lastGuild ) {
 					if ( lastGuild === 'user' ) returnLocation += lastGuild;
-					else if ( /^\d+\/(?:settings|verification|rcscript|slash)(?:\/(?:\d+|new|notice))?$/.test(lastGuild) ) returnLocation += 'guild/' + lastGuild;
+					else if ( /^\d+\/(?:settings|verification|rcscript)(?:\/(?:\d+|new|notice))?$/.test(lastGuild) ) returnLocation += 'guild/' + lastGuild;
 				}
 				res.writeHead(302, {
 					Location: returnLocation,

+ 0 - 319
dashboard/slash.js

@@ -1,319 +0,0 @@
-import Lang from '../util/i18n.js';
-import { got, db, slashCommands, sendMsg, createNotice, hasPerm } from './util.js';
-
-const fieldset = {
-	role: '<label for="wb-settings-addrole">Role:</label>'
-	+ '<select id="wb-settings-addrole" name="role"></select>'
-	+ '<button type="button" id="wb-settings-addrole-add">Add</button>'
-	+ '<hr>',
-	permission: '<span title="@UNKNOWN">@UNKNOWN:</span>'
-	+ '<div class="wb-settings-permission">'
-	+ '<input type="radio" id="wb-settings-permission-0" name="permission" value="0" required>'
-	+ '<label for="wb-settings-permission-0" class="wb-settings-permission-deny radio-label">Deny</label>'
-	+ '</div><div class="wb-settings-permission">'
-	+ '<input type="radio" id="wb-settings-permission-1" name="permission" value="1" required>'
-	+ '<label for="wb-settings-permission-1" class="wb-settings-permission-allow radio-label">Allow</label>'
-	+ '</div><div class="wb-settings-permission">'
-	+ '<input type="radio" id="wb-settings-permission-default" name="permission" value="" required>'
-	+ '<label for="wb-settings-permission-default" class="wb-settings-permission-default radio-label">Default</label>'
-	+ '</div>',
-	save: '<input type="submit" id="wb-settings-save" name="save_settings">'
-};
-
-/**
- * Create a settings form
- * @param {import('cheerio').CheerioAPI} $ - The response body
- * @param {slashCommands[0]} slashCommand - The slash command
- * @param {import('./i18n.js').default} dashboardLang - The user language
- * @param {Object[]} permissions - The current permissions
- * @param {String} permissions.id
- * @param {Number} permissions.type
- * @param {Boolean} permissions.permission
- * @param {String} guildId - The guild id
- * @param {import('./util.js').Role[]} guildRoles - The guild roles
- */
-function createForm($, slashCommand, dashboardLang, permissions, guildId, guildRoles) {
-	var readonly = ( process.env.READONLY ? true : false );
-	var fields = [];
-	if ( !readonly ) {
-		$('<script>').text(`const i18nSlashPermission = ${JSON.stringify({
-			allow: dashboardLang.get('slash.form.allow'),
-			deny: dashboardLang.get('slash.form.deny'),
-			default: dashboardLang.get('slash.form.default')
-		})};`).insertBefore('script#indexjs');
-		let role = $('<div>').append(fieldset.role);
-		role.find('label').text(dashboardLang.get('slash.form.role'));
-		role.find('#wb-settings-addrole').append(
-			$(`<option id="wb-settings-channel-default" selected hidden>`).val('').text(dashboardLang.get('slash.form.select_role')),
-			...guildRoles.filter( guildRole => !permissions.some( perm => perm.id === guildRole.id ) ).map( guildRole => {
-				return $(`<option id="wb-settings-addrole-${guildRole.id}">`).val(guildRole.id).text(`${guildRole.id} – @${guildRole.name}`)
-			} ),
-			( permissions.some( perm => perm.id === guildId ) ? '' : $(`<option id="wb-settings-addrole-${guildId}">`).val(guildId).text(`@everyone`) )
-		);
-		role.find('#wb-settings-addrole-add').text(dashboardLang.get('slash.form.add'));
-		fields.push(role);
-	}
-	let perms = permissions.sort( (a, b) => {
-		if ( a.id === guildId ) return 1;
-		if ( b.id === guildId ) return -1;
-		return guildRoles.findIndex( guildRole => guildRole.id === a.id ) - guildRoles.findIndex( guildRole => guildRole.id === b.id );
-	} ).map( perm => {
-		let permission = $('<div>').append(fieldset.permission);
-		let span = permission.find('span').attr('title', perm.id);
-		if ( perm.id === guildId ) span.text('@everyone').attr('title', '@everyone');
-		else span.text(`@${( guildRoles.find( guildRole => guildRole.id === perm.id )?.name || 'UNKNOWN' )}`);
-		permission.find('input[name="permission"]').attr('name', `permission-${perm.id}`);
-		permission.find('input#wb-settings-permission-0').attr('id', `wb-settings-permission-${perm.id}-0`);
-		permission.find('label[for="wb-settings-permission-0"]').attr('for', `wb-settings-permission-${perm.id}-0`);
-		permission.find('input#wb-settings-permission-1').attr('id', `wb-settings-permission-${perm.id}-1`);
-		permission.find('label[for="wb-settings-permission-1"]').attr('for', `wb-settings-permission-${perm.id}-1`);
-		permission.find('input#wb-settings-permission-default').attr('id', `wb-settings-permission-${perm.id}-default`);
-		permission.find('label[for="wb-settings-permission-default"]').attr('for', `wb-settings-permission-${perm.id}-default`);
-		permission.find(`#wb-settings-permission-${perm.id}-${( perm.permission ? '1' : '0' )}`).attr('checked', '');
-		return permission;
-	} );
-	fields.push(...perms);
-	fields.push($(fieldset.save).val(dashboardLang.get('general.save')));
-	var form = $('<fieldset>').append(
-		$('<legend>').text(( slashCommand.default_permission ? dashboardLang.get('slash.form.default_allow') : dashboardLang.get('slash.form.default_deny') )),
-		...fields);
-	if ( readonly ) {
-		form.find('input').attr('readonly', '');
-		form.find('input[type="radio"]:not(:checked), option').attr('disabled', '');
-		form.find('input[type="submit"]').remove();
-	}
-	form.find('label.wb-settings-permission-deny').text(dashboardLang.get('slash.form.deny'));
-	form.find('label.wb-settings-permission-allow').text(dashboardLang.get('slash.form.allow'));
-	form.find('label.wb-settings-permission-default').text(dashboardLang.get('slash.form.default'));
-	return $('<form id="wb-settings" method="post" enctype="application/x-www-form-urlencoded">').append(
-		$('<h2>').html(dashboardLang.get('slash.form.entry', true, $('<code>').text('/' + slashCommand.name))),
-		form
-	);
-}
-
-/**
- * Let a user change slashs
- * @param {import('http').ServerResponse} res - The server response
- * @param {import('cheerio').CheerioAPI} $ - The response body
- * @param {import('./util.js').Guild} guild - The current guild
- * @param {String[]} args - The url parts
- * @param {import('./i18n.js').default} dashboardLang - The user language
- */
-function dashboard_slash(res, $, guild, args, dashboardLang) {
-	let suffix = ( args[0] === 'owner' ? '?owner=true' : '' );
-	$('#channellist #slash').after(
-		...slashCommands.filter( slashCommand => slashCommand.id ).map( slashCommand => {
-			return $('<a class="channel">').attr('id', `channel-${slashCommand.id}`).append(
-				$('<img>').attr('src', '/src/channel.svg'),
-				$('<div>').text(slashCommand.name)
-			).attr('title', slashCommand.name).attr('href', `/guild/${guild.id}/slash/${slashCommand.id}${suffix}`);
-		} )
-	);
-	if ( args[4] ) {
-		let slashCommand = slashCommands.find( slashCommand => args[4] === slashCommand.id );
-		if ( slashCommand ) return got.get( `https://discord.com/api/v8/applications/${process.env.bot}/guilds/${guild.id}/commands/${slashCommand.id}/permissions`, {
-			headers: {
-				Authorization: `Bot ${process.env.token}`
-			},
-			timeout: {
-				request: 10000
-			}
-		} ).then( response=> {
-			var permissions = [];
-			if ( response.statusCode !== 200 || !response.body ) {
-				if ( response.statusCode !== 404 || response.body?.message !== 'Unknown application command permissions' ) {
-					if ( response.statusCode === 403 && response.body?.message === 'Missing Access' ) {
-						createNotice($, 'noslash', dashboardLang, [guild.id]);
-					}
-					else {
-						console.log( '- Dashboard: ' + response.statusCode + ': Error while getting the slash command permissions: ' + response.body?.message );
-						createNotice($, 'error', dashboardLang);
-					}
-					$('#text .description').html(dashboardLang.get('slash.explanation'));
-					$('.channel#slash').addClass('selected');
-					return;
-				}
-				else if ( slashCommand.name === 'verify' ) return db.query( 'SELECT 1 FROM verification WHERE guild = $1 LIMIT 1', [guild.id] ).then( ({rows}) => {
-					if ( rows.length ) {
-						$('<p>').html(dashboardLang.get('slash.desc', true, $('<code>').text(guild.name))).appendTo('#text .description');
-						$(`.channel#channel-${slashCommand.id}`).addClass('selected');
-						createForm($, slashCommand, dashboardLang, permissions, guild.id, guild.roles).attr('action', `/guild/${guild.id}/slash/${slashCommand.id}`).appendTo('#text');
-						return;
-					}
-					res.writeHead(302, {Location: `/guild/${guild.id}/verification/new${suffix}` + ( suffix ? '&' : '?' ) + 'slash=noverify'});
-					res.end();
-					return true;
-				}, dberror => {
-					console.log( '- Dashboard: Error while checking for verifications: ' + dberror );
-					res.writeHead(302, {Location: `/guild/${guild.id}/verification/new${suffix}` + ( suffix ? '&' : '?' ) + 'slash=noverify'});
-					res.end();
-					return true;
-				} );
-			}
-			else permissions = response.body.permissions;
-			$('<p>').html(dashboardLang.get('slash.desc', true, $('<code>').text(guild.name))).appendTo('#text .description');
-			$(`.channel#channel-${slashCommand.id}`).addClass('selected');
-			createForm($, slashCommand, dashboardLang, permissions, guild.id, guild.roles).attr('action', `/guild/${guild.id}/slash/${slashCommand.id}`).appendTo('#text');
-		}, error => {
-			console.log( '- Dashboard: Error while getting the slash command permissions: ' + error );
-			createNotice($, 'error', dashboardLang);
-			$('#text .description').html(dashboardLang.get('slash.explanation'));
-			$('.channel#slash').addClass('selected');
-		} ).then( isRedirected => {
-			if ( isRedirected ) return;
-			let body = $.html();
-			res.writeHead(200, {'Content-Length': Buffer.byteLength(body)});
-			res.write( body );
-			return res.end();
-		} );
-	}
-	$('#text .description').html(dashboardLang.get('slash.explanation'));
-	$('.channel#slash').addClass('selected');
-	let body = $.html();
-	res.writeHead(200, {'Content-Length': Buffer.byteLength(body)});
-	res.write( body );
-	return res.end();
-}
-
-/**
- * Change slashs
- * @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
- */
-function update_slash(res, userSettings, guild, type, settings) {
-	if ( !slashCommands.some( slashCommand => slashCommand.id === type ) ) {
-		return res(`/guild/${guild}/slash`, 'savefail');
-	}
-	if ( !settings.save_settings ) {
-		return res(`/guild/${guild}/slash/${type}`, 'savefail');
-	}
-	let roles = userSettings.guilds.isMember.get(guild).roles;
-	var permissions = Object.keys(settings).filter( perm => roles.some( role => ( 'permission-' + role.id === perm ) ) || perm === 'permission-' + guild ).map( perm => {
-		return {
-			id: perm.replace( 'permission-', '' ), type: 1,
-			permission: ( settings[perm] === '1' ? true : false )
-		};
-	} );
-	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}`, 'savefail');
-		}
-		if ( response === 'noMember' || !hasPerm(response.userPermissions, 'MANAGE_GUILD') ) {
-			userSettings.guilds.isMember.delete(guild);
-			return res('/', 'savefail');
-		}
-		var commandName = slashCommands.find( slashCommand => slashCommand.id === type )?.name;
-		return got.get( `https://discord.com/api/v8/applications/${process.env.bot}/guilds/${guild}/commands/${type}/permissions`, {
-			headers: {
-				Authorization: `Bot ${process.env.token}`
-			},
-			timeout: {
-				request: 10000
-			}
-		} ).then( response=> {
-			if ( response.statusCode !== 200 || !response.body ) {
-				if ( response.statusCode === 403 && response.body?.message === 'Missing Access' ) {
-					res(`/guild/${guild}/slash/${type}`, 'noslash', guild);
-					return Promise.reject();
-				}
-				else if ( response.statusCode !== 404 || response.body?.message !== 'Unknown application command permissions' ) {
-					console.log( '- Dashboard: ' + response.statusCode + ': Error while getting the old slash command permissions: ' + response.body?.message );
-				}
-				else if ( commandName === 'verify' ) return db.query( 'SELECT 1 FROM verification WHERE guild = $1 LIMIT 1', [guild] ).then( ({rows}) => {
-					if ( rows.length ) return [];
-					res(`/guild/${guild}/verification/new`, 'noverify');
-					return Promise.reject();
-				}, dberror => {
-					console.log( '- Dashboard: Error while checking for verifications: ' + dberror );
-					res(`/guild/${guild}/verification/new`, 'noverify');
-					return Promise.reject();
-				} );
-				return [];
-			}
-			return response.body.permissions;
-		}, error => {
-			console.log( '- Dashboard: Error while getting the old slash command permissions: ' + error );
-			return [];
-		} ).then( oldPermissions => {
-			return got.put( `https://discord.com/api/v8/applications/${process.env.bot}/guilds/${guild}/commands/${type}/permissions`, {
-				headers: {
-					Authorization: `Bot ${process.env.token}`
-				},
-				json: {permissions},
-				timeout: {
-					request: 10000
-				}
-			} ).then( response=> {
-				if ( response.statusCode !== 200 || !response.body ) {
-					console.log( '- Dashboard: ' + response.statusCode + ': Error while saving the slash command permissions: ' + response.body?.message );
-					return res(`/guild/${guild}/slash/${type}`, 'savefail');
-				}
-				res(`/guild/${guild}/slash/${type}`, 'save');
-				var changes = [
-					...permissions.map( perm => {
-						var oldPerm = oldPermissions.find( oldPerm => oldPerm.id === perm.id );
-						if ( !oldPerm ) return {
-							role: ( perm.id === guild ? '@everyone' : `<@&${perm.id}>` ),
-							old: 'default',
-							new: ( perm.permission ? 'allow' : 'deny' )
-						};
-						if ( perm.permission === oldPerm.permission ) return null;
-						return {
-							role: ( perm.id === guild ? '@everyone' : `<@&${perm.id}>` ),
-							old: ( oldPerm.permission ? 'allow' : 'deny' ),
-							new: ( perm.permission ? 'allow' : 'deny' )
-						};
-					} ).filter( change => change ),
-					...oldPermissions.filter( oldPerm => !permissions.some( perm => perm.id === oldPerm.id ) ).map( oldPerm => {
-						return {
-							role: ( oldPerm.id === guild ? '@everyone' : `<@&${oldPerm.id}>` ),
-							old: ( oldPerm.permission ? 'allow' : 'deny' ),
-							new: 'default'
-						};
-					} )
-				];
-				if ( !changes.length ) return;
-				return db.query( 'SELECT lang FROM discord WHERE guild = $1 AND channel IS NULL', [guild] ).then( ({rows:[channel]}) => {
-					var lang = new Lang(channel?.lang);
-					var text = lang.get('interaction.dashboard.updated', `<@${userSettings.user.id}>`, '/' + commandName);
-					text += '\n' + changes.map( change => {
-						return change.role + ': ~~`' + lang.get('interaction.dashboard.perm_' + change.old) + '`~~ → `' + lang.get('interaction.dashboard.perm_' + change.new) + '`';
-					} ).join('\n');
-					text += `\n<${new URL(`/guild/${guild}/slash/${type}`, process.env.dashboard).href}>`;
-					sendMsg( {
-						type: 'notifyGuild', guild, text
-					} ).catch( error => {
-						console.log( '- Dashboard: Error while notifying the guild: ' + error );
-					} );
-				}, dberror => {
-					console.log( '- Dashboard: Error while notifying the guild: ' + dberror );
-				} );
-			}, error => {
-				console.log( '- Dashboard: Error while saving the slash command permissions: ' + error );
-				return res(`/guild/${guild}/slash/${type}`, 'savefail');
-			} );
-		}, error => {
-			if ( error ) {
-				console.log( '- Dashboard: Error while getting the old slash command permissions: ' + error );
-				return res(`/guild/${guild}/slash/${type}`, 'savefail');
-			}
-		} );
-	}, error => {
-		console.log( '- Dashboard: Error while getting the member: ' + error );
-		return res(`/guild/${guild}/slash/${type}`, 'savefail');
-	} );
-}
-
-export {
-	dashboard_slash as get,
-	update_slash as post
-};

+ 0 - 46
dashboard/src/index.js

@@ -499,52 +499,6 @@ if ( prefix ) prefix.addEventListener( 'input', function() {
 	else prefix.setCustomValidity('');
 } );
 
-/** @type {HTMLSelectElement} */
-const addRole = document.getElementById('wb-settings-addrole');
-/** @type {HTMLButtonElement} */
-const addRoleButton = document.getElementById('wb-settings-addrole-add');
-if ( addRole && addRoleButton ) addRoleButton.onclick = function() {
-	if ( addRole.value ) {
-		var selectedRole = addRole.selectedOptions.item(0);
-		var newPermission = document.createElement('div');
-		var selectedRoleInfo = selectedRole.textContent.split(' – ');
-		var newPermissionSpan = document.createElement('span');
-		newPermissionSpan.textContent = ( selectedRoleInfo[1] || selectedRoleInfo[0] );
-		newPermissionSpan.title = selectedRoleInfo[0];
-		var newPermissionDiv0 = document.createElement('div');
-		newPermissionDiv0.classList.add('wb-settings-permission');
-		var newPermissionInput = document.createElement('input');
-		newPermissionInput.type = 'radio';
-		newPermissionInput.name = 'permission-' +  addRole.value;
-		newPermissionInput.required = true;
-		newPermissionDiv0.append(newPermissionInput, document.createElement('label'));
-		/** @type {HTMLDivElement} */
-		var newPermissionDiv1 = newPermissionDiv0.cloneNode(true);
-		/** @type {HTMLDivElement} */
-		var newPermissionDiv2 = newPermissionDiv0.cloneNode(true);
-		newPermissionDiv0.firstElementChild.id = 'wb-settings-permission-' + addRole.value + '-0';
-		newPermissionDiv1.firstElementChild.id = 'wb-settings-permission-' + addRole.value + '-1';
-		newPermissionDiv2.firstElementChild.id = 'wb-settings-permission-' + addRole.value + '-default';
-		newPermissionDiv0.firstElementChild.value = '0';
-		newPermissionDiv1.firstElementChild.value = '1';
-		newPermissionDiv2.firstElementChild.value = '';
-		newPermissionDiv0.lastElementChild.htmlFor = 'wb-settings-permission-' + addRole.value + '-0';
-		newPermissionDiv1.lastElementChild.htmlFor = 'wb-settings-permission-' + addRole.value + '-1';
-		newPermissionDiv2.lastElementChild.htmlFor = 'wb-settings-permission-' + addRole.value + '-default';
-		newPermissionDiv0.lastElementChild.classList.add('wb-settings-permission-deny', 'radio-label');
-		newPermissionDiv1.lastElementChild.classList.add('wb-settings-permission-allow', 'radio-label');
-		newPermissionDiv2.lastElementChild.classList.add('wb-settings-permission-default', 'radio-label');
-		newPermissionDiv0.lastElementChild.textContent = i18nSlashPermission.deny;
-		newPermissionDiv1.lastElementChild.textContent = i18nSlashPermission.allow;
-		newPermissionDiv2.lastElementChild.textContent = i18nSlashPermission.default;
-		newPermissionDiv2.firstElementChild.defaultChecked = true;
-		newPermission.append(newPermissionSpan, newPermissionDiv0, newPermissionDiv1, newPermissionDiv2);
-		addRole.parentElement.after(newPermission);
-		selectedRole.remove();
-		addRole.firstElementChild.selected = true;
-	}
-};
-
 var textAreas = document.getElementsByTagName('textarea');
 if ( textAreas.length ) {
 	/** @type {HTMLTextAreaElement} */

+ 0 - 40
dashboard/util.js

@@ -2,9 +2,6 @@ import gotDefault from 'got';
 import pg from 'pg';
 import DiscordOauth2 from 'discord-oauth2';
 import { oauthSites } from '../util/wiki.js';
-import { createRequire } from 'module';
-const require = createRequire(import.meta.url);
-const slashCommands = require('../interactions/commands.json');
 
 globalThis.isDebug = ( process.argv[2] === 'debug' );
 
@@ -58,31 +55,6 @@ if ( process.env.oauth_wikimedia && process.env.oauth_wikimedia_secret ) {
 	});
 }
 
-got.get( `https://discord.com/api/v8/applications/${process.env.bot}/commands`, {
-	headers: {
-		Authorization: `Bot ${process.env.token}`
-	},
-	timeout: {
-		request: 10000
-	}
-} ).then( response=> {
-	if ( response.statusCode !== 200 || !response.body ) {
-		console.log( '- Dashboard: ' + response.statusCode + ': Error while getting the global slash commands: ' + response.body?.message );
-		return;
-	}
-	console.log( '- Dashboard: Slash commands successfully loaded.' );
-	response.body.forEach( command => {
-		var slashCommand = slashCommands.find( slashCommand => slashCommand.name === command.name );
-		if ( slashCommand ) {
-			slashCommand.id = command.id;
-			slashCommand.application_id = command.application_id;
-		}
-		else slashCommands.push(slashCommand);
-	} );
-}, error => {
-	console.log( '- Dashboard: Error while getting the global slash commands: ' + error );
-} );
-
 /**
  * @typedef UserSession
  * @property {String} state
@@ -347,17 +319,6 @@ function createNotice($, notice, dashboardLang, args = []) {
 			title.text(dashboardLang.get('notice.invalidusergroup.title'));
 			text.text(dashboardLang.get('notice.invalidusergroup.text'));
 			break;
-		case 'noverify':
-			type = 'info';
-			title.text(dashboardLang.get('notice.noverify.title'));
-			text.html(dashboardLang.get('notice.noverify.text', true, $('<code>').text('/verify')));
-			break;
-		case 'noslash':
-			type = 'error';
-			title.text(dashboardLang.get('notice.noslash.title'));
-			text.text(dashboardLang.get('notice.noslash.text'));
-			note = $('<a target="_blank">').text(dashboardLang.get('notice.noslash.note')).attr('href', `https://discord.com/api/oauth2/authorize?client_id=${process.env.bot}&scope=applications.commands&guild_id=${args[0]}&disable_guild_select=true`);
-			break;
 		case 'wikiblocked':
 			type = 'error';
 			title.text(dashboardLang.get('notice.wikiblocked.title'));
@@ -454,7 +415,6 @@ export {
 	db,
 	oauth,
 	enabledOAuth2,
-	slashCommands,
 	sessionData,
 	settingsData,
 	oauthVerify,

+ 5 - 2
dashboard/verification.js

@@ -1,9 +1,8 @@
 import Lang from '../util/i18n.js';
-import { got, db, slashCommands, sendMsg, createNotice, escapeText, hasPerm } from './util.js';
+import { got, db, sendMsg, createNotice, escapeText, hasPerm } from './util.js';
 import { createRequire } from 'module';
 const require = createRequire(import.meta.url);
 const {limit: {verification: verificationLimit}, usergroups} = require('../util/default.json');
-const slashCommand = slashCommands.find( slashCommand => slashCommand.name === 'verify' );
 
 const fieldset = {
 	channel: '<div>'
@@ -520,6 +519,7 @@ function update_verification(res, userSettings, guild, type, settings) {
 		if ( settings.delete_settings ) return db.query( 'DELETE FROM verification WHERE guild = $1 AND configid = $2 RETURNING channel, role, editcount, postcount, usergroup, accountage, rename', [guild, type] ).then( ({rows:[row]}) => {
 			console.log( `- Dashboard: Verification successfully removed: ${guild}#${type}` );
 			res(`/guild/${guild}/verification`, 'save');
+			/*
 			if ( slashCommand?.id ) db.query( 'SELECT COUNT(1) FROM verification WHERE guild = $1', [guild] ).then( ({rows:[{count}]}) => {
 				if ( count > 0 ) return;
 				got.put( 'https://discord.com/api/v8/applications/' + process.env.bot + '/guilds/' + guild + '/commands/' + slashCommand.id + '/permissions', {
@@ -544,6 +544,7 @@ function update_verification(res, userSettings, guild, type, settings) {
 			}, dberror => {
 				console.log( '- Dashboard: Error while disabling the slash command: ' + dberror );
 			} );
+			*/
 			if ( row ) db.query( 'SELECT lang FROM discord WHERE guild = $1 AND channel IS NULL', [guild] ).then( ({rows:[channel]}) => {
 				var lang = new Lang(channel.lang);
 				var text = lang.get('verification.dashboard.removed', `<@${userSettings.user.id}>`, type);
@@ -626,6 +627,7 @@ function update_verification(res, userSettings, guild, type, settings) {
 				db.query( 'INSERT INTO verification(guild, configid, channel, role, editcount, postcount, usergroup, accountage, rename) VALUES($1, $2, $3, $4, $5, $6, $7, $8, $9)', [guild, configid, '|' + channels.join('|') + '|', roles.map( role => role.prefix + role.id ).join('|'), settings.editcount, settings.postcount, settings.usergroup.join('|'), settings.accountage, ( settings.rename ? 1 : 0 )] ).then( () => {
 					console.log( `- Dashboard: Verification successfully added: ${guild}#${configid}` );
 					res(`/guild/${guild}/verification/${configid}`, 'save');
+					/*
 					if ( !row.count.length && slashCommand?.id ) got.put( 'https://discord.com/api/v8/applications/' + process.env.bot + '/guilds/' + guild + '/commands/' + slashCommand.id + '/permissions', {
 						headers:{
 							Authorization: 'Bot ' + process.env.token
@@ -651,6 +653,7 @@ function update_verification(res, userSettings, guild, type, settings) {
 					}, error => {
 						console.log( '- Dashboard: Error while enabling the slash command: ' + error );
 					} );
+					*/
 					var lang = new Lang(row.lang);
 					var text = lang.get('verification.dashboard.added', `<@${userSettings.user.id}>`, configid);
 					text += '\n' + lang.get('verification.channel') + ' <#' + channels.join('>, <#') + '>';

+ 0 - 6
i18n/en.json

@@ -393,12 +393,6 @@
         "pause": "**I'm currently paused on this server!**\nOnly these commands can be performed:"
     },
     "interaction": {
-        "dashboard": {
-            "perm_allow": "Allow",
-            "perm_default": "Default",
-            "perm_deny": "Deny",
-            "updated": "$1 updated the slash command permission overwrites for `$2`."
-        },
         "inline": "Please provide some text with [[wikitext]] links to use this command.",
         "nowiki": "The used wiki doesn't exist!",
         "verify": "Please provide your wiki username to use this command to verify your Discord account with your wiki account and get roles matching your wiki account."