gaber-elsayed

USER

Feb 8th, 2021
735
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.04 KB | None | 0 0
  1. exports.description = 'Displays various information about user - @mention them or provide their ID. Command without arguments outputs information about you.';
  2. exports.usage = '[user ID | @mention]';
  3. exports.level = 0;
  4. exports.perms = [];
  5. exports.cooldown = 4000;
  6. exports.dmable = true;
  7.  
  8. exports.run = async message => {
  9. const formatter = require('../src/utils/formatter');
  10. let user = await require('../src/utils/cache').getUserFromMessage(message, {useQuery: true});
  11. if (!user) throw ['normal', 'No user found! @Mention someone, use user ID, username or user tag (like zneix#4433).'];
  12.  
  13. let member = message.guild ? message.guild.members.cache.get(user.id) : null;
  14. let avatarURL = user.avatarURL({format: 'png', dynamic: true, size: 4096});
  15. let embed = {
  16. color: 0x2f3136,
  17. timestamp: message.createdAt,
  18. footer: {
  19. text: message.author.tag,
  20. icon_url: message.author.avatarURL({format: 'png', dynamic: true, size: 4096})
  21. },
  22. author: {
  23. name: user.tag,
  24. icon_url: avatarURL
  25. },
  26. thumbnail: {
  27. url: avatarURL
  28. },
  29. //messy workaround below to support handling 'foreign users'
  30. description: `${user.bot ? client.emoteHandler.guild('dbots', 'botTag') : ''}<@${user.id}> ${user.presence ? `${user.presence.status} ${client.emoteHandler.guild('dbots', `${user.presence.status.replace('idle', 'away')}2`).toString()}` : ''}`,
  31. fields: [
  32. {
  33. name: 'User ID',
  34. value: user.id,
  35. inline: false
  36. },
  37. {
  38. name: 'Created at',
  39. value: `${formatter.dateFormat(user.createdAt)}, ${formatter.hourFormat(user.createdAt)}\n\`${formatter.msToHuman(message.createdAt - user.createdTimestamp, 3)} ago\``,
  40. inline: true
  41. }
  42. ]
  43. }
  44. //appending destkop / mobile indicator
  45. if (user.presence ? user.presence.clientStatus : false) embed.description += `${user.presence.clientStatus.desktop ? ' 🖥' : ''}${user.presence.clientStatus.mobile ? ' 📱' : ''}${user.presence.clientStatus.web ? ' 🌐' : ''}`;
  46. if (member){
  47. await require('../src/utils/cache').fetchGuildMembers(message.guild);
  48. let joinPos = [...message.guild.members.cache.sort((a, b) => a.joinedAt - b.joinedAt).keys()].indexOf(member.user.id)+1;
  49. embed.fields.push({
  50. name: 'Joined at',
  51. value: `${formatter.dateFormat(member.joinedAt)}, ${formatter.hourFormat(member.joinedAt)}\n\`${formatter.msToHuman(message.createdAt - member.joinedTimestamp, 3)} ago\`\n(**${joinPos}${formatter.numSuffix(joinPos)}** to join)`,
  52. inline: true
  53. });
  54. let roles = member.roles.cache.filter(r => r.id != message.guild.id).map(r => r.toString()); //roles thingy
  55. if (roles.length){
  56. embed.fields.push({
  57. name: `Roles [${roles.length}]`,
  58. value: (roles.join(' ').length < 1023) ? roles.join(' ') : (roles.join(' ').substr(0, 1012) + '\n[truncated]'),
  59. inline: false
  60. });
  61. }
  62. if (member.displayColor){
  63. embed.color = member.displayColor >= 16777215 ? member.displayColor-- : member.displayColor;
  64. embed.fields.push({
  65. name: 'Color',
  66. value: `#${parseInt(embed.color).toString(16).padStart(6, '0')}`,
  67. inline: true
  68. });
  69. }
  70. let spotify = member.presence.activities.filter(x => x.name == 'Spotify' && x.type == 'LISTENING')[0];
  71. if (spotify){
  72. embed.fields.push({
  73. name: 'Spotify',
  74. value: `${spotify.details} by ${spotify.state} (${formatter.msToHuman(Date.now() - spotify.timestamps.start, 2)} / ${formatter.msToHuman(spotify.timestamps.end - spotify.timestamps.start, 2)})`,
  75. inline: true
  76. });
  77. }
  78. //Moderator Permissions
  79. let modPermsObj = {
  80. 'KICK_MEMBERS': 'Kick Members',
  81. 'BAN_MEMBERS': 'Ban Members',
  82. 'ADMINISTRATOR': '**Administrator**',
  83. 'MANAGE_CHANNELS': 'Manage Channels',
  84. 'MANAGE_GUILD': 'Manage Server',
  85. 'MANAGE_MESSAGES': 'Manage Messages',
  86. 'MENTION_EVERYONE': 'Mention Everyone',
  87. 'MANAGE_NICKNAMES': 'Manage Nicknames',
  88. 'MANAGE_ROLES': 'Manage Roles',
  89. 'MANAGE_WEBHOOKS': 'Manage Webhooks',
  90. 'MANAGE_EMOJIS': 'Manage Emojis'
  91. };
  92. let modPerms = Object.getOwnPropertyNames(modPermsObj);
  93. if (member.permissions.toArray().some(x => modPerms.includes(x))){
  94. let memberPerms = modPerms.filter(x => member.permissions.toArray().includes(x)).map(mPerm => modPermsObj[mPerm]);
  95. embed.fields.push({
  96. name: 'Moderator Permissions',
  97. value: memberPerms.includes('**Administrator**') ? '**Administrator** (all permissions)' : memberPerms.join(', '),
  98. inline: false
  99. });
  100. }
  101. //Server Acknowledgements
  102. let Acknowledge = function(){
  103. if (client.perms.isGod(member.id)) return `${client.emoteHandler.guild('asset', 'staff')} Developer of zneixbot`;
  104. if (client.perms.getUserLvl(member.id) >= client.perms.levels.mod) return `${client.emoteHandler.guild('asset', 'supermod')} Member of zneixbot team`;
  105. if (member.id == client.user.id) return `${client.emoteHandler.guild('asset', 'MrDestructoid')} The real zneixbot`;
  106. if (member.guild.ownerID == member.id) return `${client.emoteHandler.guild('asset', 'broadcaster')} Server Owner`;
  107. if (member.permissions.has('ADMINISTRATOR')) return `${client.emoteHandler.guild('asset', 'mod')} Server Administrator`;
  108. return null;
  109. }
  110. if (Acknowledge()){
  111. embed.fields.push({
  112. name: 'Acknowledgements',
  113. value: Acknowledge(),
  114. inline: false
  115. });
  116. }
  117. }
  118. message.channel.send({embed:embed});
  119. }
  120.  
  121.  
  122. //CACHE
  123. exports.fetchGuildMembers = async function(guild){
  124. if (client.go[guild.id] ? !client.go[guild.id].fetchedMembers : false){
  125. await guild.members.fetch();
  126. if (!client.go[guild.id]) client.go[guild.id] = new Object;
  127. client.go[guild.id].fetchedMembers = true;
  128. }
  129. }
  130. exports.getUserFromMessage = async function(message, { useQuery, withinGuild } = {}){
  131. if (!message.args.length) return message.author;
  132. //message @mention of a user (usually (if not only) of a guild member)
  133. let mentionedUser = message.mentions.users.first();
  134. if (mentionedUser) return mentionedUser;
  135. //userID of someone, who's sharing a server with the bot
  136. let userFromID = client.users.cache.get(message.args[0]);
  137. if (userFromID) return userFromID;
  138. //getting user via exact user.tag (e.g. zneix#4433)
  139. //decided to put that under query, since that uses strings from user input, which may not be 100% correct at all times
  140. if (useQuery){
  141. let userFromTag = withinGuild
  142. ? message.guild.members.cache.find(member => member.user.tag.toLowerCase() == message.args[0].toLowerCase() || member.user.tag.toLowerCase() == message.args.join(' ').toLowerCase())
  143. : client.users.cache.find(user => user.tag.toLowerCase() == message.args[0].toLowerCase() || user.tag.toLowerCase() == message.args.join(' ').toLowerCase());
  144. let Discord = require('discord.js');
  145. if (userFromTag) return userFromTag instanceof Discord.GuildMember ? userFromTag.user : userFromTag;
  146. }
  147. //in servers, looking up guild members
  148. if (message.guild && useQuery){
  149. let queryResult = await message.guild.members.fetch({query: message.args.join(' '), limit: 1});
  150. if (queryResult.size) return queryResult.first().user;
  151. }
  152. //calling Discord API
  153. //saving API calls for obvious non-snowflake values
  154. if (/\d{17,}/.test(message.args[0]) && !withinGuild){
  155. const partialUser = await require('./apicalls').getDiscordUser(message.args[0]);
  156. if (partialUser) return partialUser;
  157. }
  158. //nothing relevant found
  159. return null;
  160. }
  161. exports.getRoleFromMessage = function(message, { useQuery } = {}){
  162. //role @mention
  163. let mentionedRole = message.mentions.roles.first();
  164. if (mentionedRole) return mentionedRole;
  165. //roleID
  166. let roleFromID = message.guild.roles.cache.get(message.args[0]);
  167. if (roleFromID) return roleFromID;
  168. if (useQuery){
  169. //fuzzy search if previous methods didn't work (also filtering out default server role)
  170. const Fuse = require('fuse.js');
  171. let fuse = new Fuse(message.guild.roles.cache.filter(r => r.position != 0).map(r => {
  172. return {
  173. name: r.name,
  174. id: r.id
  175. }
  176. }), {
  177. keys: ['name']
  178. });
  179. let res = fuse.search(message.args.join(' '));
  180. if (res[0]) return message.guild.roles.cache.get(res[0].item.id);
  181. }
  182. return null;
  183. }
Advertisement
Add Comment
Please, Sign In to add comment