index.js 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. import { Client } from "discord.js";
  2. import axios from "axios";
  3. import moment from "moment";
  4. import path, { join } from "path";
  5. import { Low, JSONFile } from "lowdb";
  6. import dotenv from "dotenv";
  7. import schedule from "node-schedule";
  8. dotenv.config();
  9. const __dirname = path.resolve();
  10. // Use JSON file for storage
  11. const file = join(__dirname, "db.json");
  12. const adapter = new JSONFile(file);
  13. const db = new Low(adapter);
  14. const client = new Client();
  15. // Read data from JSON file, this will set db.data content
  16. await db.read();
  17. // If file.json doesn't exist, db.data will be null
  18. if (db.data === null) {
  19. // Set default data
  20. db.data = { config: {} };
  21. db.write();
  22. }
  23. //INIT
  24. client.on("ready", () => {
  25. console.log(`Logged in as ${client.user.tag}!`);
  26. _init();
  27. });
  28. const _init = async () => {
  29. const storageProviderChannel = client.channels.cache.find(
  30. (channel) => channel.name === db?.data?.storageProviderChannelName
  31. );
  32. schedule.scheduleJob(`0 */${db?.data?.timeLimit} * * *`, async function () {
  33. const response = await generateSize();
  34. storageProviderChannel.send(`Current storage size: ${response}`);
  35. });
  36. };
  37. //UTILS
  38. const generateSize = async () => {
  39. if (isCacheOld()) {
  40. return await getSizeFromAPI();
  41. }
  42. return Promise.resolve(db?.data?.config?.size);
  43. };
  44. const generateMsg = async (msg = "", user = "") => {
  45. let size = await generateSize();
  46. msg.edit(`<@${user.id}>, Current storage size: ${size}`);
  47. };
  48. const getSizeFromAPI = async () => {
  49. return axios
  50. .get(db.data?.dataURL)
  51. .then((response) => {
  52. const res = Math.round(response?.data?.data?.rows[0][0]) + "GB";
  53. db.data.config = { timeStamp: moment.utc().format(), size: `${res}` };
  54. db.write();
  55. return res;
  56. })
  57. .catch((error) => {
  58. console.log("API failed", error);
  59. });
  60. };
  61. const isCacheOld = () => {
  62. //returns true if the timestamp is older than 2 hours
  63. let lastTime = db.data?.config?.timeStamp;
  64. if (lastTime) {
  65. const today = moment();
  66. const diff = today.diff(lastTime, "minutes");
  67. console.log(diff);
  68. return diff > 120;
  69. }
  70. return true;
  71. };
  72. // COMMANDS
  73. client.on("message", async (msg) => {
  74. const user = msg.author;
  75. if (msg.content === "/storagesize") {
  76. msg
  77. .reply("Calculating... ")
  78. .then(async (oldMessage) => {
  79. generateMsg(oldMessage, user);
  80. })
  81. .catch((error) => {
  82. console.log(error);
  83. });
  84. }
  85. });
  86. client.login(process.env.TOKEN);