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 {verificationLevels, filterLevels, regions, flags} from "../defs/info"; | ||||||
| import moment from "moment"; | import moment from "moment"; | ||||||
| import utc from "moment"; | import utc from "moment"; | ||||||
|  | import {Guild} from "discord.js"; | ||||||
| 
 | 
 | ||||||
| const {version} = require("../../package.json"); | const {version} = require("../../package.json"); | ||||||
| 
 | 
 | ||||||
|  | @ -73,73 +74,40 @@ export default new Command({ | ||||||
|             } |             } | ||||||
|         }), |         }), | ||||||
|         guild: 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> { |             async run($: CommonLibrary): Promise<any> { | ||||||
|                 if ($.guild) { |                 if ($.guild) { | ||||||
|                     const members = await $.guild.members.fetch({ |                     $.channel.send(await getGuildInfo($.guild, $.guild)); | ||||||
|                         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); |  | ||||||
|                 } else { |                 } else { | ||||||
|                     $.channel.send("Please execute this command in a guild."); |                     $.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({ |     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 {MessageEmbed} from "discord.js"; | ||||||
| import Command from "../../core/command"; | import Command from "../../core/command"; | ||||||
| import {CommonLibrary} from "../../core/lib"; | import {CommonLibrary} from "../../core/lib"; | ||||||
| 
 | 
 | ||||||
| export default new Command({ | export default new Command({ | ||||||
|     description: "Lists all emotes the bot has in it's registry,", |     description: "Lists all emotes the bot has in it's registry,", | ||||||
|     endpoint: true, |     usage: "<regex pattern> (-flags)", | ||||||
|     async run($: CommonLibrary): Promise<any> { |     async run($: CommonLibrary): Promise<any> { | ||||||
|         const nsfw: string | string[] = []; |         displayEmoteList($, $.client.emojis.cache.array()); | ||||||
|         const pages = $.client.emojis.cache.filter((x) => !nsfw.includes(x.guild.id), this).array(); |     }, | ||||||
|         const pagesSplit = $(pages).split(20); |     any: new Command({ | ||||||
|         $.log(pagesSplit); |         description: | ||||||
|         var embed = new MessageEmbed().setTitle("**Emoji list!**").setColor("AQUA"); |             "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", | ||||||
|         let desc = ""; |         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]; | ||||||
| 
 | 
 | ||||||
|         for (const emote of pagesSplit[0]) { |                 displayEmoteList($, $.client.emojis.cache.filter((emote) => emote.guild.id === guildID).array()); | ||||||
|             desc += `${emote} | ${emote.name}\n`; |             } 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 = ""; | ||||||
|  | 
 | ||||||
|  |     // 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); |         embed.setDescription(desc); | ||||||
|         const msg = await $.channel.send({embed}); |  | ||||||
| 
 | 
 | ||||||
|         $.paginate(msg, $.author.id, pages.length, (page) => { |         if (pages > 1) { | ||||||
|             let desc = ""; |             embed.setTitle(`**Emotes** (Page 1 of ${pages})`); | ||||||
|             for (const emote of pagesSplit[page]) { |             const msg = await $.channel.send({embed}); | ||||||
|                 desc += `${emote} | ${emote.name}\n`; | 
 | ||||||
|             } |             $.paginate(msg, $.author.id, pages, (page) => { | ||||||
|             embed.setDescription(desc); |                 let desc = ""; | ||||||
|             msg.edit(embed); |                 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