123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216 |
- import { MessageEmbed, Util, ShardClientUtil, Permissions } from 'discord.js';
- import { escapeFormatting } from '../util/functions.js';
- import db from '../util/database.js';
- import { createRequire } from 'module';
- const require = createRequire(import.meta.url);
- const {defaultSettings, defaultPermissions} = require('../util/default.json');
- const {shardIdForGuildId} = ShardClientUtil;
- /**
- * Processes the "get" command.
- * @param {import('../util/i18n.js').default} lang - The user language.
- * @param {import('discord.js').Message} msg - The Discord message.
- * @param {String[]} args - The command arguments.
- * @param {String} line - The command as plain text.
- * @param {import('../util/wiki.js').default} wiki - The wiki for the message.
- * @async
- */
- async function cmd_get(lang, msg, args, line, wiki) {
- var id = args.join().replace( /^\\?<(?:@!?|#)(\d+)>$/, '$1' );
- if ( !/^\d+$/.test(id) ) {
- if ( !msg.inGuild() || !pausedGuilds.has(msg.guildId) ) this.LINK(lang, msg, line, wiki);
- return;
- }
- try {
- var guild = await msg.client.shard.broadcastEval( (discordClient, evalData) => {
- if ( discordClient.guilds.cache.has(evalData.id) ) {
- var guild = discordClient.guilds.cache.get(evalData.id);
- return {
- name: guild.name, id: guild.id, memberCount: guild.approximateMemberCount ?? guild.memberCount,
- ownerId: guild.ownerId, owner: discordClient.users.cache.get(guild.ownerId)?.tag,
- channel: guild.publicUpdatesChannelId, icon: guild.iconURL({dynamic:true}),
- permissions: guild.me.permissions.missing(evalData.defaultPermissions),
- pause: pausedGuilds.has(guild.id), voice: voiceGuildsLang.has(guild.id),
- shardId: process.env.SHARDS
- };
- }
- }, {
- context: {id, defaultPermissions},
- shard: shardIdForGuildId(id, msg.client.shard.count)
- } );
- if ( guild ) {
- var guildname = ['Guild:', escapeFormatting(guild.name) + ' `' + guild.id + '`' + ( guild.pause ? '\\*' : '' )];
- var guildowner = ['Owner:', ( guild.owner ? escapeFormatting(guild.owner) + ' ' : '' ) + '`' + guild.ownerId + '` <@' + guild.ownerId + '>'];
- var guildsize = ['Size:', guild.memberCount + ' members'];
- var guildshard = ['Shard:', guild.shardId];
- var guildpermissions = ['Missing permissions:', ( guild.permissions.length ? '`' + guild.permissions.join('`, `') + '`' : '*none*' )];
- var guildchannel = ['Updates channel:', '`' + guild.channel + '`'];
- var guildsettings = ['Settings:', '*unknown*'];
-
- return db.query( 'SELECT channel, wiki, lang, role, inline, prefix FROM discord WHERE guild = $1 ORDER BY channel ASC NULLS FIRST', [guild.id] ).then( ({rows}) => {
- if ( rows.length ) {
- let row = rows.find( row => !row.channel );
- row.patreon = patreonGuildsPrefix.has(guild.id);
- row.voice = guild.voice;
- guildsettings[1] = '```json\n' + JSON.stringify( rows, null, '\t' ) + '\n```';
- }
- else guildsettings[1] = '*default*';
- }, dberror => {
- console.log( '- Error while getting the settings: ' + dberror );
- } ).then( () => {
- if ( msg.showEmbed() ) {
- var embed = new MessageEmbed().setThumbnail( guild.icon ).addField( guildname[0], guildname[1] ).addField( guildowner[0], guildowner[1] ).addField( guildsize[0], guildsize[1], true ).addField( guildshard[0], guildshard[1], true ).addField( guildpermissions[0], guildpermissions[1] );
- if ( guild.channel ) embed.addField( guildchannel[0], guildchannel[1] );
- var split = Util.splitMessage( guildsettings[1], {char:',\n',maxLength:1000,prepend:'```json\n',append:',\n```'} );
- if ( split.length > 5 ) {
- msg.sendChannel( {embeds: [embed]}, true );
- Util.splitMessage( guildsettings.join(' '), {
- char: ',\n',
- maxLength: 2000,
- prepend: '```json\n',
- append: ',\n```'
- } ).forEach( textpart => msg.sendChannel( textpart, true ) );
- }
- else {
- split.forEach( textpart => embed.addField( guildsettings[0], textpart ) );
- msg.sendChannel( {embeds: [embed]}, true );
- }
- }
- else {
- var text = guildname.join(' ') + '\n' + guildowner.join(' ') + '\n' + guildsize.join(' ') + '\n' + guildshard.join(' ') + '\n' + guildpermissions.join(' ') + ( guild.channel ? '\n' + guildchannel.join(' ') : '' ) + '\n' + guildsettings.join(' ');
- Util.splitMessage( text, {
- char: ',\n',
- maxLength: 2000,
- prepend: '```json\n',
- append: ',\n```'
- } ).forEach( textpart => msg.sendChannel( textpart, true ) );
- }
- } );
- }
-
- var channel = await msg.client.shard.broadcastEval( (discordClient, evalData) => {
- if ( discordClient.channels.cache.filter( channel => ( channel.isText() && channel.guildId ) || channel.type === 'GUILD_CATEGORY' ).has(evalData.id) ) {
- var channel = discordClient.channels.cache.get(evalData.id);
- return {
- name: channel.name, id: channel.id, type: channel.type, parentId: channel.parentId,
- isThread: channel.isThread(), threadParentId: channel.parent?.parentId,
- guild: channel.guild.name, guildId: channel.guildId,
- permissions: channel.guild.me.permissionsIn(channel.id).missing(evalData.defaultPermissions),
- pause: pausedGuilds.has(channel.guildId),
- shardId: process.env.SHARDS
- };
- }
- }, {context: {id, defaultPermissions}} ).then( results => results.find( result => result ) );
- if ( channel ) {
- var channelguild = ['Guild:', escapeFormatting(channel.guild) + ' `' + channel.guildId + '`' + ( channel.pause ? '\\*' : '' )];
- var channelname = ['Channel:', '#' + escapeFormatting(channel.name) + ' `' + channel.id + '` <#' + channel.id + '>'];
- var channeldetails = ['Details:', '`' + channel.type + '`' + ( channel.parentId ? ' – `' + channel.parentId + '` <#' + channel.parentId + '>' + ( channel.isThread ? ' – `' + channel.threadParentId + '` <#' + channel.threadParentId + '>' : '' ) : '' )];
- var channelpermissions = ['Missing permissions:', ( channel.permissions.length ? '`' + channel.permissions.join('`, `') + '`' : '*none*' )];
- var channellang = ['Language:', '*unknown*'];
- var channelwiki = ['Default Wiki:', '*unknown*'];
- var channelrole = ['Minimal Role:', '*unknown*'];
- var channelinline = ['Inline commands:', '*unknown*'];
-
- let sqlargs = [channel.guildId];
- if ( channel.isThread ) sqlargs.push(channel.parentId, '#' + channel.threadParentId);
- else sqlargs.push(channel.id, '#' + ( channel.type === 'GUILD_CATEGORY' ? channel.id : channel.parentId ));
- return db.query( 'SELECT wiki, lang, role, inline 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]}) => {
- if ( row ) {
- channellang[1] = row.lang;
- channelwiki[1] = row.wiki;
- channelrole[1] = ( row.role ? '`' + row.role + '` <@&' + row.role + '>' : '@everyone' );
- channelinline[1] = ( row.inline ? 'disabled' : 'enabled' );
- }
- else {
- channellang[1] = defaultSettings.lang;
- channelwiki[1] = defaultSettings.wiki;
- channelrole[1] = '@everyone';
- channelinline[1] = 'enabled';
- }
- }, dberror => {
- console.log( '- Error while getting the settings: ' + dberror );
- } ).then( () => {
- var text = null;
- var embed = null;
- if ( msg.showEmbed() ) {
- embed = new MessageEmbed().addField( channelguild[0], channelguild[1] ).addField( channelname[0], channelname[1] ).addField( channeldetails[0], channeldetails[1] ).addField( channelpermissions[0], channelpermissions[1] ).addField( channellang[0], channellang[1] ).addField( channelwiki[0], channelwiki[1] ).addField( channelrole[0], channelrole[1] ).addField( channelinline[0], channelinline[1] );
- }
- else {
- text = channelguild.join(' ') + '\n' + channelname.join(' ') + '\n' + channeldetails.join(' ') + '\n' + channelpermissions.join(' ') + '\n' + channellang.join(' ') + '\n' + channelwiki[0] + ' <' + channelwiki[1] + '>\n' + channelrole.join(' ') + '\n' + channelinline.join(' ');
- }
- msg.sendChannel( {content: text, embeds: [embed]}, true );
- } );
- }
-
- var user = await msg.client.users.fetch(id, false).catch( () => {} );
- if ( user ) {
- var username = ['User:', escapeFormatting(user.tag) + ' `' + user.id + '` <@' + user.id + '>'];
- var guildlist = ['Guilds:', '*none*'];
- var guilds = await msg.client.shard.broadcastEval( (discordClient, evalData) => {
- return discordClient.guilds.cache.filter( guild => guild.members.cache.has(evalData.user) ).map( guild => {
- var member = guild.members.cache.get(evalData.user);
- return {
- name: guild.name,
- id: guild.id,
- isAdmin: member.permissions.has(evalData.MANAGE_GUILD),
- shardId: process.env.SHARDS
- }
- } );
- }, {context: {user: user.id, MANAGE_GUILD: Permissions.FLAGS.MANAGE_GUILD.toString()}} ).then( results => {
- return results.reduce( (acc, val) => acc.concat(val), [] ).map( user_guild => {
- return escapeFormatting(user_guild.name) + ' `' + user_guild.id + '`' + ( user_guild.isAdmin ? '\\*' : '' );
- } );
- } );
- if ( guilds.length ) guildlist[1] = guilds.join('\n');
- if ( guildlist[1].length > 1000 ) guildlist[1] = guilds.length.toLocaleString();
- var text = null;
- var embed = null;
- if ( msg.showEmbed() ) embed = new MessageEmbed().setThumbnail( user.displayAvatarURL({dynamic:true}) ).addField( username[0], username[1] ).addField( guildlist[0], guildlist[1] );
- else text = username.join(' ') + '\n' + guildlist.join('\n');
- return msg.sendChannel( {content: text, embeds: [embed]}, true );
- }
-
- return db.query( 'SELECT guild, channel, wiki, lang, role, inline, prefix, patreon, voice FROM discord WHERE guild = $1 OR channel = $1 OR channel = $2 ORDER BY guild, channel DESC NULLS LAST LIMIT 1', [id, '#' + id] ).then( ({rows}) => {
- if ( !rows.length ) return msg.replyMsg( 'I couldn\'t find a result for `' + id + '`', true );
- var result = '```json\n' + JSON.stringify( rows, null, '\t' ) + '\n```';
- if ( msg.showEmbed() ) {
- var split = Util.splitMessage( result, {char:',\n',maxLength:1000,prepend:'```json\n',append:',\n```'} );
- if ( split.length > 5 ) {
- Util.splitMessage( '`' + id + '`: ' + result, {
- char: ',\n',
- maxLength: 2000,
- prepend: '```json\n',
- append: ',\n```'
- } ).forEach( textpart => msg.sendChannel( textpart, true ) );
- }
- else {
- var embed = new MessageEmbed();
- split.forEach( textpart => embed.addField( '`' + id + '`: ', textpart ) );
- msg.sendChannel( {embeds: [embed]}, true );
- }
- }
- else {
- Util.splitMessage( '`' + id + '`: ' + result, {
- char: ',\n',
- maxLength: 2000,
- prepend: '```json\n',
- append: ',\n```'
- } ).forEach( textpart => msg.sendChannel( textpart, true ) );
- }
- }, dberror => {
- console.log( '- Error while getting the settings: ' + dberror );
- msg.reactEmoji('error');
- } );
- } catch ( error ) {
- log_error(error);
- msg.reactEmoji('error');
- }
- }
- export default {
- name: 'get',
- everyone: false,
- pause: false,
- owner: true,
- run: cmd_get
- };
|