瀏覽代碼

Add `SEND_MESSAGES_IN_THREADS` permission

Markus-Rost 3 年之前
父節點
當前提交
a2212abe42
共有 5 個文件被更改,包括 15 次插入6 次删除
  1. 4 3
      bot.js
  2. 2 1
      dashboard/util.js
  3. 1 0
      functions/parse_page.js
  4. 1 1
      functions/verify.js
  5. 7 1
      util/default.json

+ 4 - 3
bot.js

@@ -12,6 +12,7 @@ global.voice = {};
 const db = require('./util/database.js');
 
 const Discord = require('discord.js');
+if ( !Discord.Permissions.FLAGS.SEND_MESSAGES_IN_THREADS ) Discord.Permissions.FLAGS.SEND_MESSAGES_IN_THREADS = Discord.Permissions.FLAGS.SEND_MESSAGES;
 const client = new Discord.Client( {
 	makeCache: Discord.Options.cacheWithLimits( {
 		MessageManager: {
@@ -268,7 +269,7 @@ function messageCreate(msg) {
 	if ( isStop || !msg.channel.isText() || msg.system || msg.webhookId || msg.author.bot || msg.author.id === msg.client.user.id ) return;
 	if ( !msg.content.hasPrefix(( msg.channel.isGuild() && patreons[msg.guildId] || process.env.prefix ), 'm') ) {
 		if ( msg.content === process.env.prefix + 'help' && ( msg.isAdmin() || msg.isOwner() ) ) {
-			if ( msg.channel.permissionsFor(msg.client.user).has(Discord.Permissions.FLAGS.SEND_MESSAGES) ) {
+			if ( msg.channel.permissionsFor(msg.client.user).has(( msg.channel.isThread() ? Discord.Permissions.FLAGS.SEND_MESSAGES_IN_THREADS : Discord.Permissions.FLAGS.SEND_MESSAGES )) ) {
 				console.log( msg.guildId + ': ' + msg.content );
 				let sqlargs = [msg.guildId];
 				if ( msg.channel?.isThread() ) sqlargs.push(msg.channel.parentId, '#' + msg.channel.parent?.parentId);
@@ -290,7 +291,7 @@ function messageCreate(msg) {
 		else sqlargs.push(msg.channelId, '#' + msg.channel.parentId);
 		var permissions = msg.channel.permissionsFor(msg.client.user);
 		var missing = permissions.missing([
-			Discord.Permissions.FLAGS.SEND_MESSAGES,
+			( msg.channel.isThread() ? Discord.Permissions.FLAGS.SEND_MESSAGES_IN_THREADS : Discord.Permissions.FLAGS.SEND_MESSAGES ),
 			Discord.Permissions.FLAGS.ADD_REACTIONS,
 			Discord.Permissions.FLAGS.USE_EXTERNAL_EMOJIS,
 			Discord.Permissions.FLAGS.READ_MESSAGE_HISTORY
@@ -298,7 +299,7 @@ function messageCreate(msg) {
 		if ( missing.length ) {
 			if ( ( msg.isAdmin() || msg.isOwner() ) && msg.content.hasPrefix(( patreons[msg.guildId] || process.env.prefix ), 'm') ) {
 				console.log( msg.guildId + ': Missing permissions - ' + missing.join(', ') );
-				if ( !missing.includes( 'SEND_MESSAGES' ) ) {
+				if ( !missing.includes( 'SEND_MESSAGES' ) && !missing.includes( 'SEND_MESSAGES_IN_THREADS' ) ) {
 					db.query( 'SELECT lang FROM discord WHERE guild = $1 AND (channel = $2 OR channel = $3 OR channel IS NULL) ORDER BY channel DESC NULLS LAST LIMIT 1', sqlargs ).then( ({rows:[row]}) => {
 						msg.replyMsg( new Lang(( row?.lang || msg.guild.preferredLocale ), 'general').get('missingperm') + ' `' + missing.join('`, `') + '`', true );
 					}, dberror => {

+ 2 - 1
dashboard/util.js

@@ -420,7 +420,8 @@ const permissions = {
 	USE_EXTERNAL_EMOJIS: 1 << 18,
 	MANAGE_NICKNAMES: 1 << 27,
 	MANAGE_ROLES: 1 << 28,
-	MANAGE_WEBHOOKS: 1 << 29
+	MANAGE_WEBHOOKS: 1 << 29,
+	SEND_MESSAGES_IN_THREADS: 1 << 64
 }
 
 /**

+ 1 - 0
functions/parse_page.js

@@ -61,6 +61,7 @@ const removeClassesExceptions = [
 	'div.poem',
 	'div.treeview',
 	'div.redirectMsg',
+	'div.introduction',
 	'div.wikibase-entityview',
 	'div.wikibase-entityview-main',
 	'div.wikibase-entitytermsview',

+ 1 - 1
functions/verify.js

@@ -605,7 +605,7 @@ global.verifyOauthUser = function(state, access_token, settings) {
 	}
 	if ( !settings?.channel ) return settings?.fail?.();
 	var channel = settings.channel;
-	if ( !channel.permissionsFor(channel.guild.me).has([FLAGS.VIEW_CHANNEL, FLAGS.SEND_MESSAGES]) ) return settings.fail?.();
+	if ( !channel.permissionsFor(channel.guild.me).has([FLAGS.VIEW_CHANNEL, ( channel.isThread() ? FLAGS.SEND_MESSAGES_IN_THREADS : FLAGS.SEND_MESSAGES )]) ) return settings.fail?.();
 	Promise.all([
 		db.query( 'SELECT logchannel, flags, onsuccess, onmatch, role, editcount, postcount, usergroup, accountage, rename FROM verification LEFT JOIN verifynotice ON verification.guild = verifynotice.guild WHERE verification.guild = $1 AND channel LIKE $2 ORDER BY configid ASC', [channel.guildId, '%|' + ( channel.isThread() ? channel.parentId : channel.id ) + '|%'] ).then( ({rows}) => {
 			if ( !rows.length ) return Promise.reject();

+ 7 - 1
util/default.json

@@ -26,7 +26,7 @@
 			"display": 2
 		}
 	},
-	"defaultPermissions": "939904064",
+	"defaultPermissions": "939904128",
 	"defaultSettings": {
 		"lang": "en",
 		"wiki": "https://en.wikipedia.org/w/"
@@ -226,6 +226,12 @@
 			"articlePath": "/",
 			"scriptPath": "/mediawiki/"
 		},
+		{
+			"name": "pcgamingwiki.com",
+			"regex": "((?:www\\.)?pcgamingwiki.com)",
+			"articlePath": "/wiki/",
+			"scriptPath": "/w/"
+		},
 		{
 			"name": "metin2.gameforge.com",
 			"regex": "([a-z]{2}-wiki\\.metin2\\.gameforge\\.com)",