浏览代码

per channel wikis

Markus-Rost 7 年之前
父节点
当前提交
235054166d
共有 1 个文件被更改,包括 22 次插入4 次删除
  1. 22 4
      main.js

+ 22 - 4
main.js

@@ -86,7 +86,7 @@ function cmd_settings(lang, msg, args, line) {
 		if ( args.length ) {
 			if ( args[0] ) args[0] = args[0].toLowerCase();
 			if ( args[1] ) args[1] = args[1].toLowerCase();
-			var langs = '\n' + lang.settings.langs + ' `' + Object.keys(i18n) + '`';
+			var langs = '\n' + lang.settings.langs + ' `' + Object.keys(i18n).join(', ') + '`';
 			var wikis = '\n' + lang.settings.wikis;
 			var nolangs = lang.settings.nolangs + langs;
 			var regex = /^(?:(?:https?:)?\/\/)?([a-z\d-]{1,30})/
@@ -101,6 +101,13 @@ function cmd_settings(lang, msg, args, line) {
 						if ( regex.test(args[1]) ) edit_settings(lang, msg, 'wiki', regex.exec(args[1])[1]);
 						else cmd_settings(lang, msg, ['wiki'], line);
 					} else msg.reply( lang.settings.wiki + '\nhttps://' + settings[msg.guild.id].wiki + '.gamepedia.com/' + wikis );
+				} else if ( args[0] == 'channel' ) {
+					if ( args[1] ) {
+						if ( regex.test(args[1]) ) edit_settings(lang, msg, 'channel', regex.exec(args[1])[1]);
+						else cmd_settings(lang, msg, ['channel'], line);
+					} else if ( settings[msg.guild.id].channels && msg.channel.id in settings[msg.guild.id].channels ) {
+						msg.reply( lang.settings.channel + '\nhttps://' + settings[msg.guild.id].channels[msg.channel.id] + '.gamepedia.com/' + wikis );
+					} else msg.reply( lang.settings.channel + '\nhttps://' + settings[msg.guild.id].wiki + '.gamepedia.com/' + wikis );
 				} else msg.reply( text );
 			} else {
 				if ( args[0] == 'lang' ) {
@@ -133,9 +140,20 @@ function edit_settings(lang, msg, key, value) {
 		else {
 			var temp_settings = Object.assign({}, settings);
 			if ( !( msg.guild.id in temp_settings ) ) temp_settings[msg.guild.id] = Object.assign({}, defaultSettings['default']);
-			temp_settings[msg.guild.id][key] = value;
+			if ( key == 'channel' ) temp_settings[msg.guild.id].channels[msg.channel.id] = value;
+			else temp_settings[msg.guild.id][key] = value;
 			Object.keys(temp_settings).forEach( function(guild) {
-				if ( !client.guilds.has(guild) && guild != 'default' ) delete temp_settings[guild];
+				if ( !client.guilds.has(guild) && guild != 'default' ) {
+					delete temp_settings[guild];
+				} else {
+					var channels = temp_settings[guild].channels;
+					if ( channels ) {
+						Object.keys(channels).forEach( function(channel) {
+							if ( channels[channel] == temp_settings[guild].wiki || !client.guilds.get(guild).channels.has(channel) ) delete channels[channel];
+						} );
+						if ( !Object.keys(channels).length ) delete channels;
+					}
+				}
 			} );
 			request.post( {
 				uri: process.env.save + process.env.access,
@@ -807,6 +825,7 @@ client.on('message', msg => {
 		if ( channel.type == 'text' && msg.guild.id in settings ) setting = Object.assign({}, settings[msg.guild.id]);
 		var lang = i18n[setting.lang];
 		lang.link = setting.wiki;
+		if ( setting.channels && channel.id in setting.channels ) lang.link = setting.channels[channel.id];
 		var invoke = cont.split(' ')[1] ? cont.split(' ')[1].toLowerCase() : '';
 		var aliasInvoke = ( invoke in lang.aliase ) ? lang.aliase[invoke] : invoke;
 		if ( prefix( cont ) && aliasInvoke in multilinecmdmap ) {
@@ -844,7 +863,6 @@ client.on('voiceStateUpdate', (oldm, newm) => {
 		var setting = Object.assign({}, settings['default']);
 		if ( oldm.guild.id in settings ) setting = Object.assign({}, settings[oldm.guild.id]);
 		var lang = i18n[setting.lang];
-		lang.link = setting.wiki;
 		if ( oldm.voiceChannel ) {
 			var oldrole = oldm.guild.roles.find( role => role.name == lang.voice.channel + ' – ' + oldm.voiceChannel.name );
 			if ( oldrole && oldrole.comparePositionTo(oldm.guild.me.highestRole) < 0 ) {