mirror of
				https://github.com/keanuplayz/TravBot-v3.git
				synced 2024-08-15 02:33:12 +00:00 
			
		
		
		
	Added query to lsemotes and searching other guilds
This commit is contained in:
		
							parent
							
								
									705e093999
								
							
						
					
					
						commit
						90c41c8df4
					
				
					 3 changed files with 2074 additions and 85 deletions
				
			
		
							
								
								
									
										1919
									
								
								package-lock.json
									
										
									
										generated
									
									
									
								
							
							
						
						
									
										1919
									
								
								package-lock.json
									
										
									
										generated
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							|  | @ -6,6 +6,7 @@ import {CommonLibrary, formatBytes, trimArray} from "../core/lib"; | |||
| import {verificationLevels, filterLevels, regions, flags} from "../defs/info"; | ||||
| import moment from "moment"; | ||||
| import utc from "moment"; | ||||
| import {Guild} from "discord.js"; | ||||
| 
 | ||||
| const {version} = require("../../package.json"); | ||||
| 
 | ||||
|  | @ -73,73 +74,40 @@ export default new Command({ | |||
|             } | ||||
|         }), | ||||
|         guild: new Command({ | ||||
|             description: "Displays info about the current guild.", | ||||
|             description: "Displays info about the current guild or another guild.", | ||||
|             usage: "(<guild name>/<guild ID>)", | ||||
|             async run($: CommonLibrary): Promise<any> { | ||||
|                 if ($.guild) { | ||||
|                     const members = await $.guild.members.fetch({ | ||||
|                         withPresences: true, | ||||
|                         force: true | ||||
|                     }); | ||||
|                     const roles = $.guild.roles.cache | ||||
|                         .sort((a, b) => b.position - a.position) | ||||
|                         .map((role) => role.toString()); | ||||
|                     const channels = $.guild.channels.cache; | ||||
|                     const emojis = $.guild.emojis.cache; | ||||
|                     const iconURL = $.guild.iconURL({dynamic: true}); | ||||
|                     const embed = new MessageEmbed() | ||||
|                         .setDescription(`**Guild information for __${$.guild.name}__**`) | ||||
|                         .setColor("BLUE"); | ||||
|                     if (iconURL) | ||||
|                         embed | ||||
|                             .setThumbnail(iconURL) | ||||
|                             .addField("General", [ | ||||
|                                 `**❯ Name:** ${$.guild.name}`, | ||||
|                                 `**❯ ID:** ${$.guild.id}`, | ||||
|                                 `**❯ Owner:** ${$.guild.owner?.user.tag} (${$.guild.ownerID})`, | ||||
|                                 `**❯ Region:** ${regions[$.guild.region]}`, | ||||
|                                 `**❯ Boost Tier:** ${$.guild.premiumTier ? `Tier ${$.guild.premiumTier}` : "None"}`, | ||||
|                                 `**❯ Explicit Filter:** ${filterLevels[$.guild.explicitContentFilter]}`, | ||||
|                                 `**❯ Verification Level:** ${verificationLevels[$.guild.verificationLevel]}`, | ||||
|                                 `**❯ Time Created:** ${moment($.guild.createdTimestamp).format("LT")} ${moment( | ||||
|                                     $.guild.createdTimestamp | ||||
|                                 ).format("LL")} ${moment($.guild.createdTimestamp).fromNow()})`,
 | ||||
|                                 "\u200b" | ||||
|                             ]) | ||||
|                             .addField("Statistics", [ | ||||
|                                 `**❯ Role Count:** ${roles.length}`, | ||||
|                                 `**❯ Emoji Count:** ${emojis.size}`, | ||||
|                                 `**❯ Regular Emoji Count:** ${emojis.filter((emoji) => !emoji.animated).size}`, | ||||
|                                 `**❯ Animated Emoji Count:** ${emojis.filter((emoji) => emoji.animated).size}`, | ||||
|                                 `**❯ Member Count:** ${$.guild.memberCount}`, | ||||
|                                 `**❯ Humans:** ${members.filter((member) => !member.user.bot).size}`, | ||||
|                                 `**❯ Bots:** ${members.filter((member) => member.user.bot).size}`, | ||||
|                                 `**❯ Text Channels:** ${channels.filter((channel) => channel.type === "text").size}`, | ||||
|                                 `**❯ Voice Channels:** ${channels.filter((channel) => channel.type === "voice").size}`, | ||||
|                                 `**❯ Boost Count:** ${$.guild.premiumSubscriptionCount || "0"}`, | ||||
|                                 `\u200b` | ||||
|                             ]) | ||||
|                             .addField("Presence", [ | ||||
|                                 `**❯ Online:** ${members.filter((member) => member.presence.status === "online").size}`, | ||||
|                                 `**❯ Idle:** ${members.filter((member) => member.presence.status === "idle").size}`, | ||||
|                                 `**❯ Do Not Disturb:** ${ | ||||
|                                     members.filter((member) => member.presence.status === "dnd").size | ||||
|                                 }`,
 | ||||
|                                 `**❯ Offline:** ${ | ||||
|                                     members.filter((member) => member.presence.status === "offline").size | ||||
|                                 }`,
 | ||||
|                                 "\u200b" | ||||
|                             ]) | ||||
|                             .addField( | ||||
|                                 `Roles [${roles.length - 1}]`, | ||||
|                                 roles.length < 10 ? roles.join(", ") : roles.length > 10 ? trimArray(roles) : "None" | ||||
|                             ) | ||||
|                             .setTimestamp(); | ||||
| 
 | ||||
|                     $.channel.send(embed); | ||||
|                     $.channel.send(await getGuildInfo($.guild, $.guild)); | ||||
|                 } else { | ||||
|                     $.channel.send("Please execute this command in a guild."); | ||||
|                 } | ||||
|             }, | ||||
|             any: new Command({ | ||||
|                 description: "Display info about a guild by finding its name or ID.", | ||||
|                 async run($: CommonLibrary): Promise<any> { | ||||
|                     // If a guild ID is provided (avoid the "number" subcommand because of inaccuracies), search for that guild
 | ||||
|                     if ($.args.length === 1 && /^\d{17,19}$/.test($.args[0])) { | ||||
|                         const id = $.args[0]; | ||||
|                         const guild = $.client.guilds.cache.get(id); | ||||
| 
 | ||||
|                         if (guild) { | ||||
|                             $.channel.send(await getGuildInfo(guild, $.guild)); | ||||
|                         } else { | ||||
|                             $.channel.send(`None of the servers I'm in matches the guild ID \`${id}\`!`); | ||||
|                         } | ||||
|                     } else { | ||||
|                         const query: string = $.args.join(" ").toLowerCase(); | ||||
|                         const guild = $.client.guilds.cache.find((guild) => guild.name.toLowerCase().includes(query)); | ||||
| 
 | ||||
|                         if (guild) { | ||||
|                             $.channel.send(await getGuildInfo(guild, $.guild)); | ||||
|                         } else { | ||||
|                             $.channel.send(`None of the servers I'm in matches the query \`${query}\`!`); | ||||
|                         } | ||||
|                     } | ||||
|                 } | ||||
|             }) | ||||
|         }) | ||||
|     }, | ||||
|     user: new Command({ | ||||
|  | @ -190,3 +158,64 @@ export default new Command({ | |||
|         } | ||||
|     }) | ||||
| }); | ||||
| 
 | ||||
| async function getGuildInfo(guild: Guild, currentGuild: Guild | null) { | ||||
|     const members = await guild.members.fetch({ | ||||
|         withPresences: true, | ||||
|         force: true | ||||
|     }); | ||||
|     const roles = guild.roles.cache.sort((a, b) => b.position - a.position).map((role) => role.toString()); | ||||
|     const channels = guild.channels.cache; | ||||
|     const emojis = guild.emojis.cache; | ||||
|     const iconURL = guild.iconURL({dynamic: true}); | ||||
|     const embed = new MessageEmbed().setDescription(`**Guild information for __${guild.name}__**`).setColor("BLUE"); | ||||
|     const displayRoles = !!(currentGuild && guild.id === currentGuild.id); | ||||
|     if (iconURL) { | ||||
|         embed | ||||
|             .setThumbnail(iconURL) | ||||
|             .addField("General", [ | ||||
|                 `**❯ Name:** ${guild.name}`, | ||||
|                 `**❯ ID:** ${guild.id}`, | ||||
|                 `**❯ Owner:** ${guild.owner?.user.tag} (${guild.ownerID})`, | ||||
|                 `**❯ Region:** ${regions[guild.region]}`, | ||||
|                 `**❯ Boost Tier:** ${guild.premiumTier ? `Tier ${guild.premiumTier}` : "None"}`, | ||||
|                 `**❯ Explicit Filter:** ${filterLevels[guild.explicitContentFilter]}`, | ||||
|                 `**❯ Verification Level:** ${verificationLevels[guild.verificationLevel]}`, | ||||
|                 `**❯ Time Created:** ${moment(guild.createdTimestamp).format("LT")} ${moment( | ||||
|                     guild.createdTimestamp | ||||
|                 ).format("LL")} ${moment(guild.createdTimestamp).fromNow()}`,
 | ||||
|                 "\u200b" | ||||
|             ]) | ||||
|             .addField("Statistics", [ | ||||
|                 `**❯ Role Count:** ${roles.length}`, | ||||
|                 `**❯ Emoji Count:** ${emojis.size}`, | ||||
|                 `**❯ Regular Emoji Count:** ${emojis.filter((emoji) => !emoji.animated).size}`, | ||||
|                 `**❯ Animated Emoji Count:** ${emojis.filter((emoji) => emoji.animated).size}`, | ||||
|                 `**❯ Member Count:** ${guild.memberCount}`, | ||||
|                 `**❯ Humans:** ${members.filter((member) => !member.user.bot).size}`, | ||||
|                 `**❯ Bots:** ${members.filter((member) => member.user.bot).size}`, | ||||
|                 `**❯ Text Channels:** ${channels.filter((channel) => channel.type === "text").size}`, | ||||
|                 `**❯ Voice Channels:** ${channels.filter((channel) => channel.type === "voice").size}`, | ||||
|                 `**❯ Boost Count:** ${guild.premiumSubscriptionCount || "0"}`, | ||||
|                 `\u200b` | ||||
|             ]) | ||||
|             .addField("Presence", [ | ||||
|                 `**❯ Online:** ${members.filter((member) => member.presence.status === "online").size}`, | ||||
|                 `**❯ Idle:** ${members.filter((member) => member.presence.status === "idle").size}`, | ||||
|                 `**❯ Do Not Disturb:** ${members.filter((member) => member.presence.status === "dnd").size}`, | ||||
|                 `**❯ Offline:** ${members.filter((member) => member.presence.status === "offline").size}`, | ||||
|                 displayRoles ? "\u200b" : "" | ||||
|             ]) | ||||
|             .setTimestamp(); | ||||
| 
 | ||||
|         // Only add the roles if the guild the bot is sending the message to is the same one that's being requested.
 | ||||
|         if (displayRoles) { | ||||
|             embed.addField( | ||||
|                 `Roles [${roles.length - 1}]`, | ||||
|                 roles.length < 10 ? roles.join(", ") : roles.length > 10 ? trimArray(roles) : "None" | ||||
|             ); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     return embed; | ||||
| } | ||||
|  |  | |||
|  | @ -1,32 +1,81 @@ | |||
| import {GuildEmoji} from "discord.js"; | ||||
| import {MessageEmbed} from "discord.js"; | ||||
| import Command from "../../core/command"; | ||||
| import {CommonLibrary} from "../../core/lib"; | ||||
| 
 | ||||
| export default new Command({ | ||||
|     description: "Lists all emotes the bot has in it's registry,", | ||||
|     endpoint: true, | ||||
|     usage: "<regex pattern> (-flags)", | ||||
|     async run($: CommonLibrary): Promise<any> { | ||||
|         const nsfw: string | string[] = []; | ||||
|         const pages = $.client.emojis.cache.filter((x) => !nsfw.includes(x.guild.id), this).array(); | ||||
|         const pagesSplit = $(pages).split(20); | ||||
|         $.log(pagesSplit); | ||||
|         var embed = new MessageEmbed().setTitle("**Emoji list!**").setColor("AQUA"); | ||||
|         displayEmoteList($, $.client.emojis.cache.array()); | ||||
|     }, | ||||
|     any: new Command({ | ||||
|         description: | ||||
|             "Filters emotes by via a regular expression. Flags can be added by adding a dash at the end. For example, to do a case-insensitive search, do %prefix%lsemotes somepattern -i", | ||||
|         async run($: CommonLibrary): Promise<any> { | ||||
|             // If a guild ID is provided, filter all emotes by that guild (but only if there aren't any arguments afterward)
 | ||||
|             if ($.args.length === 1 && /^\d{17,19}$/.test($.args[0])) { | ||||
|                 const guildID: string = $.args[0]; | ||||
| 
 | ||||
|                 displayEmoteList($, $.client.emojis.cache.filter((emote) => emote.guild.id === guildID).array()); | ||||
|             } else { | ||||
|                 // Otherwise, search via a regex pattern
 | ||||
|                 let flags: string | undefined = undefined; | ||||
| 
 | ||||
|                 if (/^-[dgimsuy]{1,7}$/.test($.args[$.args.length - 1])) { | ||||
|                     flags = $.args.pop().substring(1); | ||||
|                 } | ||||
| 
 | ||||
|                 displayEmoteList( | ||||
|                     $, | ||||
|                     $.client.emojis.cache | ||||
|                         .filter((emote) => new RegExp($.args.join(" "), flags).test(emote.name)) | ||||
|                         .array() | ||||
|                 ); | ||||
|             } | ||||
|         } | ||||
|     }) | ||||
| }); | ||||
| 
 | ||||
| async function displayEmoteList($: CommonLibrary, emotes: GuildEmoji[]) { | ||||
|     emotes.sort((a, b) => { | ||||
|         const first = a.name.toLowerCase(); | ||||
|         const second = b.name.toLowerCase(); | ||||
| 
 | ||||
|         if (first > second) return 1; | ||||
|         else if (first < second) return -1; | ||||
|         else return 0; | ||||
|     }); | ||||
|     const sections = $(emotes).split(20); | ||||
|     const pages = sections.length; | ||||
|     const embed = new MessageEmbed().setTitle("**Emotes**").setColor("AQUA"); | ||||
|     let desc = ""; | ||||
| 
 | ||||
|         for (const emote of pagesSplit[0]) { | ||||
|             desc += `${emote} | ${emote.name}\n`; | ||||
|     // Gather the first page (if it even exists, which it might not if there no valid emotes appear)
 | ||||
|     if (pages > 0) { | ||||
|         for (const emote of sections[0]) { | ||||
|             desc += `${emote} ${emote.name} (**${emote.guild.name}**)\n`; | ||||
|         } | ||||
| 
 | ||||
|         embed.setDescription(desc); | ||||
| 
 | ||||
|         if (pages > 1) { | ||||
|             embed.setTitle(`**Emotes** (Page 1 of ${pages})`); | ||||
|             const msg = await $.channel.send({embed}); | ||||
| 
 | ||||
|         $.paginate(msg, $.author.id, pages.length, (page) => { | ||||
|             $.paginate(msg, $.author.id, pages, (page) => { | ||||
|                 let desc = ""; | ||||
|             for (const emote of pagesSplit[page]) { | ||||
|                 desc += `${emote} | ${emote.name}\n`; | ||||
|                 for (const emote of sections[page]) { | ||||
|                     desc += `${emote} ${emote.name} (**${emote.guild.name}**)\n`; | ||||
|                 } | ||||
|                 embed.setTitle(`**Emotes** (Page ${page + 1} of ${pages})`); | ||||
|                 embed.setDescription(desc); | ||||
|                 msg.edit(embed); | ||||
|             }); | ||||
|         } else { | ||||
|             await $.channel.send({embed}); | ||||
|         } | ||||
| }); | ||||
|     } else { | ||||
|         $.channel.send("No valid emotes found by that query."); | ||||
|     } | ||||
| } | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue