gaber-elsayed

updates check

Jul 6th, 2021
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.83 KB | None | 0 0
  1. const { MessageEmbed } = require('discord.js');
  2. const request = require('node-superfetch');
  3. const semver = require('semver');
  4. const { stripIndents } = require('common-tags');
  5. const { dependencies } = require('../../package.json');
  6.  
  7. exports.run = async (client, message, args) => {
  8. const needUpdate = [];
  9. for (const [dep, ver] of Object.entries(dependencies)) {
  10. const update = await parseUpdate(dep, ver);
  11. if (!update) continue;
  12. needUpdate.push(update);
  13. }
  14. if (!needUpdate.length) return message.channel.send('all packages are up to date!');
  15. const updatesList = needUpdate.map(pkg => {
  16. const breaking = pkg.breaking ? ' ⚠️' : '';
  17. return `${pkg.name} (${pkg.oldVer} -> ${pkg.newVer})${breaking}`;
  18. });
  19. const embed = new MessageEmbed()
  20. .setAuthor(client.user.username, client.user.displayAvatarURL())
  21. .setColor('#ffe6cc')
  22. .setTitle('Package updates available:')
  23. .setDescription(stripIndents`${updatesList.join('\n')}`)
  24. return message.channel.send(embed);
  25.  
  26. };
  27.  
  28.  
  29. async function fetchVersion(dependency) {
  30. const { body } = await request.get(`https://registry.npmjs.com/${dependency}`);
  31. if (body.time.unpublished) return null;
  32. return body['dist-tags'].latest;
  33. }
  34.  
  35. async function parseUpdate(dep, ver) {
  36. if (ver.startsWith('github:')) return null;
  37. const latest = await fetchVersion(dep);
  38. const clean = ver.replace(/^(\^|<=?|>=?|=|~)/, '');
  39. if (latest === clean) return null;
  40. return {
  41. name: dep,
  42. oldVer: clean,
  43. newVer: latest,
  44. breaking: !semver.satisfies(latest, ver)
  45. };
  46. }
  47.  
  48. exports.help = {
  49. name: "update-check",
  50. description: "very self-explanatory",
  51. usage: `update-check`,
  52. example: `update-check`
  53. }
  54.  
  55. exports.conf = {
  56. aliases: [],
  57. cooldown: 2,
  58. owner: true,
  59. channelPerms: ["EMBED_LINKS"]
  60. }
Advertisement
Add Comment
Please, Sign In to add comment