Browse Source

some fixes

Markus-Rost 4 years ago
parent
commit
c93218b909
8 changed files with 49 additions and 29 deletions
  1. 1 8
      dashboard/guilds.js
  2. 9 0
      dashboard/i18n/en.json
  3. 1 0
      dashboard/index.js
  4. 2 9
      dashboard/oauth.js
  5. 16 6
      dashboard/slash.js
  6. 1 4
      dashboard/src/lang.js
  7. 18 1
      dashboard/util.js
  8. 1 1
      interactions/verify.js

+ 1 - 8
dashboard/guilds.js

@@ -2,7 +2,7 @@ const cheerio = require('cheerio');
 const {defaultPermissions} = require('../util/default.json');
 const Lang = require('./i18n.js');
 const allLangs = Lang.allLangs().names;
-const {settingsData, addWidgets, createNotice} = require('./util.js');
+const {oauth, settingsData, addWidgets, createNotice} = require('./util.js');
 
 const forms = {
 	settings: require('./settings.js').get,
@@ -11,13 +11,6 @@ const forms = {
 	slash: require('./slash.js').get
 };
 
-const DiscordOauth2 = require('discord-oauth2');
-const oauth = new DiscordOauth2( {
-	clientId: process.env.bot,
-	clientSecret: process.env.secret,
-	redirectUri: process.env.dashboard
-} );
-
 const file = require('fs').readFileSync('./dashboard/index.html');
 
 /**

+ 9 - 0
dashboard/i18n/en.json

@@ -96,6 +96,15 @@
             "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!"
+        },
         "readonly": {
             "text": "You can currently only view your settings, but not change them.",
             "title": "Read-only database!"

+ 1 - 0
dashboard/index.js

@@ -218,6 +218,7 @@ 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' ) action = 'noverify';
 	return dashboard(res, dashboardLang, themeCookie, state, reqURL, action);
 } );
 

+ 2 - 9
dashboard/oauth.js

@@ -3,14 +3,7 @@ const cheerio = require('cheerio');
 const {defaultPermissions} = require('../util/default.json');
 const Wiki = require('../util/wiki.js');
 const allLangs = require('./i18n.js').allLangs().names;
-const {got, settingsData, sendMsg, addWidgets, createNotice, hasPerm} = require('./util.js');
-
-const DiscordOauth2 = require('discord-oauth2');
-const oauth = new DiscordOauth2( {
-	clientId: process.env.bot,
-	clientSecret: process.env.secret,
-	redirectUri: process.env.dashboard
-} );
+const {got, oauth, settingsData, sendMsg, addWidgets, createNotice, hasPerm} = require('./util.js');
 
 const file = require('fs').readFileSync('./dashboard/login.html');
 
@@ -151,7 +144,7 @@ function dashboard_oauth(res, state, searchParams, lastGuild) {
 					else settings.guilds.notMember.set(guilds[i].id, guilds[i]);
 				} );
 				settingsData.set(settings.state, settings);
-				if ( searchParams.has('guild_id') ) {
+				if ( searchParams.has('guild_id') && !lastGuild.startsWith( searchParams.get('guild_id') + '/' ) ) {
 					lastGuild = searchParams.get('guild_id') + '/settings';
 				}
 				res.writeHead(302, {

+ 16 - 6
dashboard/slash.js

@@ -120,8 +120,13 @@ function dashboard_slash(res, $, guild, args, dashboardLang) {
 			var permissions = [];
 			if ( response.statusCode !== 200 || !response.body ) {
 				if ( response.statusCode !== 404 || response.body?.message !== 'Unknown application command permissions' ) {
-					console.log( '- Dashboard: ' + response.statusCode + ': Error while getting the slash command permissions: ' + response.body?.message );
-					createNotice($, 'error', dashboardLang);
+					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;
@@ -133,12 +138,12 @@ function dashboard_slash(res, $, guild, args, dashboardLang) {
 						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}`});
+					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}`});
+					res.writeHead(302, {Location: `/guild/${guild.id}/verification/new${suffix}` + ( suffix ? '&' : '?' ) + 'slash=noverify'});
 					res.end();
 					return true;
 				} );
@@ -212,14 +217,20 @@ function update_slash(res, userSettings, guild, type, settings) {
 			timeout: 10000
 		} ).then( response=> {
 			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' ) {
+					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 [];
@@ -273,7 +284,6 @@ function update_slash(res, userSettings, guild, type, settings) {
 				console.log( '- Dashboard: Error while getting the old slash command permissions: ' + error );
 				return res(`/guild/${guild}/slash/${type}`, 'savefail');
 			}
-			return res(`/guild/${guild}/verification/new`, 'savefail');
 		} );
 	}, error => {
 		console.log( '- Dashboard: Error while getting the member: ' + error );

+ 1 - 4
dashboard/src/lang.js

@@ -25,9 +25,6 @@ else {
 	document.documentElement.classList.remove('theme-light');
 }
 
-var currentLang = ( document.cookie.split('; ').find( cookie => {
-	return cookie.split('=')[0] === 'language' && /^"[a-z\-]+"$/.test(( cookie.split('=')[1] || '' ));
-} ) || 'en' ).replace( /^language="([a-z\-]+)"$/, '$1' );
 var channellist = document.getElementById('channellist');
 var langSelector = document.createElement('div');
 langSelector.id = 'lang-selector';
@@ -41,7 +38,7 @@ langDropdown.setAttribute('style', `max-height: ${window.innerHeight - 80}px;`);
 var langOptions = Object.keys(allLangs).map( function(lang) {
 	var langOption = document.createElement('div');
 	langOption.textContent = allLangs[lang];
-	if ( currentLang === lang ) langOption.className = 'current';
+	if ( document.documentElement.lang === lang ) langOption.className = 'current';
 	langOption.onclick = function() {
 		document.cookie = `language="${lang}"; Path=/; Max-Age=31536000`;
 		location.reload();

+ 18 - 1
dashboard/util.js

@@ -11,6 +11,12 @@ const db = new Pool();
 db.on( 'error', dberror => {
 	console.log( '- Dashboard: Error while connecting to the database: ' + dberror );
 } );
+const DiscordOauth2 = require('discord-oauth2');
+const oauth = new DiscordOauth2( {
+	clientId: process.env.bot,
+	clientSecret: process.env.secret,
+	redirectUri: process.env.dashboard
+} );
 
 const slashCommands = require('../interactions/commands.json');
 
@@ -258,6 +264,17 @@ 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]}`);
+			break;
 		case 'wikiblocked':
 			type = 'error';
 			title.text(dashboardLang.get('notice.wikiblocked.title'));
@@ -347,4 +364,4 @@ function hasPerm(all = 0, ...permission) {
 	} ).every( perm => perm );
 }
 
-module.exports = {got, db, slashCommands, settingsData, sendMsg, addWidgets, createNotice, escapeText, hasPerm};
+module.exports = {got, db, oauth, slashCommands, settingsData, sendMsg, addWidgets, createNotice, escapeText, hasPerm};

+ 1 - 1
interactions/verify.js

@@ -25,7 +25,7 @@ function slash_verify(interaction, lang, wiki, channel) {
 			}
 		}
 	} ).catch(log_error);
-	console.log( interaction.guild_id + ': Slash: /' + interaction.name + ' ' + interaction.data.options?.[0]?.value );
+	console.log( interaction.guild_id + ': Slash: /' + interaction.data.name + ' ' + interaction.data.options?.[0]?.value );
 	if ( !channel.guild.me.permissions.has('MANAGE_ROLES') ) {
 		console.log( channel.guild.id + ': Missing permissions - MANAGE_ROLES' );
 		return interaction.client.api.interactions(interaction.id, interaction.token).callback.post( {