diff --git a/README.md b/README.md index eba3ac8..7650f14 100644 --- a/README.md +++ b/README.md @@ -1 +1 @@ -# Minzbot v2 \ No newline at end of file +# Minzbot v2.0 diff --git a/commands/config.sql b/commands/config.sql new file mode 100644 index 0000000..6102e2b --- /dev/null +++ b/commands/config.sql @@ -0,0 +1,6 @@ +CREATE TABLE IF NOT EXISTS `config` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `name` varchar(255) NOT NULL, + `value` varchar(255) NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; \ No newline at end of file diff --git a/commands/testFeatures.js b/commands/testFeatures.js index 9774f05..c949113 100644 --- a/commands/testFeatures.js +++ b/commands/testFeatures.js @@ -17,6 +17,7 @@ module.exports = { .setTitle("Test Embed") .setDescription(`Your test message: ${interaction.options.getString('message')}`) .setImage(interaction.user.avatarURL({dynamic : true})) + const testRow = new Discord.MessageActionRow().addComponents( new Discord.MessageButton() diff --git a/events/interactionCreate.js b/events/interactionCreate.js index 4898248..168c603 100644 --- a/events/interactionCreate.js +++ b/events/interactionCreate.js @@ -21,4 +21,5 @@ module.exports = { }); } } -} \ No newline at end of file +} + diff --git a/events/presenceUpdate.js b/events/presenceUpdate.js new file mode 100644 index 0000000..11597d1 --- /dev/null +++ b/events/presenceUpdate.js @@ -0,0 +1,42 @@ +require("dotenv").config(); +const Discord = require("discord.js"); +const fetch = require("node-fetch"); + +//export a module that checks if a users activity changed and if so, console log the activity +module.exports = { + name: "presenceUpdate", + async execute(oldPresence, newPresence) { + if (oldPresence !== newPresence) { + console.log(`${newPresence.user.username} changed their activity`); + console.log(newPresence); + } + await newPresence.user.fetch(); + console.log(newPresence.user.bannerURL({dymanic: true, size: 1024})); + console.log(newPresence.user); + + //convert new presence to json string and send it to a channel named "bot-testing" + const channel = newPresence.client.channels.cache.find(channel => channel.name === "bot-testing"); + if (!channel) return; + //return if no banner is present + if (!newPresence.user.banner) return; + //download banner into a buffer + const buffer = await (await fetch(newPresence.user.bannerURL({dynamic: true, size: 1024}))).buffer(); + //upload buffer to discord + const attachment = new Discord.MessageAttachment(buffer, "banner.png"); + + let uploadChannel = newPresence.client.channels.cache.find(channel => channel.name === "bot-uploads"); + //send attachment to a channel called "bot-uploads" and save the attachment url to a variable + const upload = await uploadChannel.send({ + files: [attachment] + }); + + const embed = new Discord.MessageEmbed() + .setTitle("User Updated") + .setDescription(`banner debug ${newPresence.user.bannerURL({dynamic: true, size: 1024})}`) + .setImage(upload.attachments.first().url) + .setColor("#FFFFFF"); + //channel.send({embeds: [embed], content: `${newPresence.user}`}); + + + } +}; diff --git a/events/ready.js b/events/ready.js index bc152a4..29e25b8 100644 --- a/events/ready.js +++ b/events/ready.js @@ -5,7 +5,7 @@ const { Routes } = require("discord-api-types/v9") module.exports = { name: "ready", once: true, - execute (client, commands) { + async execute (client, commands) { console.log("Bot started."); const CLIENT_ID = client.user.id; @@ -27,5 +27,8 @@ module.exports = { if (err) console.log(err); } })(); + + + } } \ No newline at end of file diff --git a/events/userUpdate.js b/events/userUpdate.js new file mode 100644 index 0000000..0e64f3d --- /dev/null +++ b/events/userUpdate.js @@ -0,0 +1,61 @@ +require("dotenv").config(); +const fetch = require("node-fetch"); +const Discord = require("discord.js"); + +module.exports = { + name: "userUpdate", + async execute (oldUser, newUser) { + //get guild by id + const guild = newUser.client.guilds.cache.get(process.env.GUILD_ID); + + if (oldUser.username !== newUser.username) { + console.log(`${oldUser.username} changed their username to ${newUser.username}`); + } + if (oldUser.avatar !== newUser.avatar) { + console.log(`${oldUser.username} changed their avatar to ${newUser.avatar}`); + } + + //check if new user banner is different from old user banner + if (newUser.banner !== oldUser.banner) { + console.log(`${oldUser.username} changed their banner`); + await newUser.fetch(); + let newUserBanner = newUser.bannerURL(); + //log user and new banner url + console.log(`${newUser.username} has a new banner: ${newUserBanner}`); + + } + + + //if new avatar is null, console log and return + if (newUser.avatar === null) { + console.log(`${newUser.username} has no avatar`); + return; + } + + + //send the new avatar to a channel named "bot-testing" + const channel = guild.channels.cache.find(channel => channel.name === "bot-testing"); + if (!channel) return; + let avatarUrl = newUser.avatarURL({dynamic : true, size: 1024}); + //download avatarUrl into a buffer + const buffer = await (await fetch(avatarUrl)).buffer(); + //upload buffer to discord + const attachment = new Discord.MessageAttachment(buffer, "avatar.png"); + //send attachment to a channel called "bot-uploads" and save the attachment url to a variable + const upload = await channel.send({ + files: [attachment] + }); + + console.log(newUser); + + + const embed = new Discord.MessageEmbed() + .setTitle("User Updated") + .setDescription(`avatar debug asfkdljnsaedlikfnwe;ljkfn`) + .setImage(upload.attachments.first().url) + .setColor("#FFFFFF"); + channel.send({embeds: [embed]}); + + + } +} diff --git a/index.js b/index.js index 1f1e982..ea457c2 100644 --- a/index.js +++ b/index.js @@ -2,6 +2,7 @@ require("dotenv").config(); const fs = require("fs"); const {Client, Intents, Collection} = require("discord.js"); +const dbUtil = require("./util/db") const client = new Client({intents: [ Intents.FLAGS.GUILDS, @@ -29,8 +30,11 @@ for (const file of eventFiles) { } else { client.on(event.name, (...args) => event.execute(...args, commands)); } + + console.log(`Registered event: ${event.name}`); } +//dbUtil.initDb(); client.login(process.env.TOKEN); diff --git a/package-lock.json b/package-lock.json index 1bf477d..1a60ddb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,7 +13,8 @@ "@discordjs/rest": "^0.3.0", "discord-api-types": "^0.31.1", "discord.js": "^13.6.0", - "dotenv": "^16.0.0" + "dotenv": "^16.0.0", + "mysql2": "^2.3.3" }, "devDependencies": { "nodemon": "^2.0.15" @@ -518,6 +519,14 @@ "node": ">=0.4.0" } }, + "node_modules/denque": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/denque/-/denque-2.0.1.tgz", + "integrity": "sha512-tfiWc6BQLXNLpNiR5iGd0Ocu3P3VpxfzFiqubLgMfhfOw9WyvgJBd46CClNn9k3qfbjvT//0cf7AlYRX/OslMQ==", + "engines": { + "node": ">=0.10" + } + }, "node_modules/discord-api-types": { "version": "0.31.1", "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.31.1.tgz", @@ -656,6 +665,14 @@ "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, + "node_modules/generate-function": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.3.1.tgz", + "integrity": "sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==", + "dependencies": { + "is-property": "^1.0.2" + } + }, "node_modules/get-stream": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", @@ -756,6 +773,17 @@ "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", "dev": true }, + "node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/ignore-by-default": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", @@ -898,6 +926,11 @@ "node": ">=8" } }, + "node_modules/is-property": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", + "integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=" + }, "node_modules/is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", @@ -937,6 +970,11 @@ "node": ">=8" } }, + "node_modules/long": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", + "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" + }, "node_modules/lowercase-keys": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", @@ -950,7 +988,6 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, "dependencies": { "yallist": "^4.0.0" }, @@ -1034,6 +1071,49 @@ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true }, + "node_modules/mysql2": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/mysql2/-/mysql2-2.3.3.tgz", + "integrity": "sha512-wxJUev6LgMSgACDkb/InIFxDprRa6T95+VEoR+xPvtngtccNH2dGjEB/fVZ8yg1gWv1510c9CvXuJHi5zUm0ZA==", + "dependencies": { + "denque": "^2.0.1", + "generate-function": "^2.3.1", + "iconv-lite": "^0.6.3", + "long": "^4.0.0", + "lru-cache": "^6.0.0", + "named-placeholders": "^1.1.2", + "seq-queue": "^0.0.5", + "sqlstring": "^2.3.2" + }, + "engines": { + "node": ">= 8.0" + } + }, + "node_modules/named-placeholders": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/named-placeholders/-/named-placeholders-1.1.2.tgz", + "integrity": "sha512-wiFWqxoLL3PGVReSZpjLVxyJ1bRqe+KKJVbr4hGs1KWfTZTQyezHFBbuKj9hsizHyGV2ne7EMjHdxEGAybD5SA==", + "dependencies": { + "lru-cache": "^4.1.3" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/named-placeholders/node_modules/lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "dependencies": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "node_modules/named-placeholders/node_modules/yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" + }, "node_modules/node-fetch": { "version": "2.6.7", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", @@ -1178,6 +1258,11 @@ "node": ">=4" } }, + "node_modules/pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" + }, "node_modules/pstree.remy": { "version": "1.1.8", "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", @@ -1272,6 +1357,11 @@ "lowercase-keys": "^1.0.0" } }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, "node_modules/semver": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", @@ -1302,12 +1392,25 @@ "semver": "bin/semver.js" } }, + "node_modules/seq-queue": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/seq-queue/-/seq-queue-0.0.5.tgz", + "integrity": "sha1-1WgS4cAXpuTnw+Ojeh2m143TyT4=" + }, "node_modules/signal-exit": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "dev": true }, + "node_modules/sqlstring": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.3.tgz", + "integrity": "sha512-qC9iz2FlN7DQl3+wjwn3802RTyjCx7sDvfQEXchwa6CWOx07/WVfh91gBmQ9fahw8snwGEWU3xGzOt4tFyHLxg==", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", @@ -1590,8 +1693,7 @@ "node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "node_modules/zod": { "version": "3.14.4", @@ -1984,6 +2086,11 @@ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" }, + "denque": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/denque/-/denque-2.0.1.tgz", + "integrity": "sha512-tfiWc6BQLXNLpNiR5iGd0Ocu3P3VpxfzFiqubLgMfhfOw9WyvgJBd46CClNn9k3qfbjvT//0cf7AlYRX/OslMQ==" + }, "discord-api-types": { "version": "0.31.1", "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.31.1.tgz", @@ -2091,6 +2198,14 @@ "dev": true, "optional": true }, + "generate-function": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.3.1.tgz", + "integrity": "sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==", + "requires": { + "is-property": "^1.0.2" + } + }, "get-stream": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", @@ -2169,6 +2284,14 @@ "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", "dev": true }, + "iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + }, "ignore-by-default": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", @@ -2266,6 +2389,11 @@ "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", "dev": true }, + "is-property": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", + "integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=" + }, "is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", @@ -2302,6 +2430,11 @@ "package-json": "^6.3.0" } }, + "long": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", + "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" + }, "lowercase-keys": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", @@ -2312,7 +2445,6 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, "requires": { "yallist": "^4.0.0" } @@ -2374,6 +2506,45 @@ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true }, + "mysql2": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/mysql2/-/mysql2-2.3.3.tgz", + "integrity": "sha512-wxJUev6LgMSgACDkb/InIFxDprRa6T95+VEoR+xPvtngtccNH2dGjEB/fVZ8yg1gWv1510c9CvXuJHi5zUm0ZA==", + "requires": { + "denque": "^2.0.1", + "generate-function": "^2.3.1", + "iconv-lite": "^0.6.3", + "long": "^4.0.0", + "lru-cache": "^6.0.0", + "named-placeholders": "^1.1.2", + "seq-queue": "^0.0.5", + "sqlstring": "^2.3.2" + } + }, + "named-placeholders": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/named-placeholders/-/named-placeholders-1.1.2.tgz", + "integrity": "sha512-wiFWqxoLL3PGVReSZpjLVxyJ1bRqe+KKJVbr4hGs1KWfTZTQyezHFBbuKj9hsizHyGV2ne7EMjHdxEGAybD5SA==", + "requires": { + "lru-cache": "^4.1.3" + }, + "dependencies": { + "lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" + } + } + }, "node-fetch": { "version": "2.6.7", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", @@ -2468,6 +2639,11 @@ "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", "dev": true }, + "pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" + }, "pstree.remy": { "version": "1.1.8", "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", @@ -2549,6 +2725,11 @@ "lowercase-keys": "^1.0.0" } }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, "semver": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", @@ -2572,12 +2753,22 @@ } } }, + "seq-queue": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/seq-queue/-/seq-queue-0.0.5.tgz", + "integrity": "sha1-1WgS4cAXpuTnw+Ojeh2m143TyT4=" + }, "signal-exit": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "dev": true }, + "sqlstring": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.3.tgz", + "integrity": "sha512-qC9iz2FlN7DQl3+wjwn3802RTyjCx7sDvfQEXchwa6CWOx07/WVfh91gBmQ9fahw8snwGEWU3xGzOt4tFyHLxg==" + }, "string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", @@ -2791,8 +2982,7 @@ "yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "zod": { "version": "3.14.4", diff --git a/package.json b/package.json index b63216e..29441f2 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "description": "", "main": "index.js", "scripts": { - "dev": "nodemon main.js" + "dev": "nodemon index.js" }, "author": "Minzkraut", "license": "ISC", @@ -13,7 +13,8 @@ "@discordjs/rest": "^0.3.0", "discord-api-types": "^0.31.1", "discord.js": "^13.6.0", - "dotenv": "^16.0.0" + "dotenv": "^16.0.0", + "mysql2": "^2.3.3" }, "devDependencies": { "nodemon": "^2.0.15" diff --git a/util/botConfig.js b/util/botConfig.js new file mode 100644 index 0000000..8d498da --- /dev/null +++ b/util/botConfig.js @@ -0,0 +1 @@ +const db = require("../util/db") diff --git a/util/db.js b/util/db.js new file mode 100644 index 0000000..d2b7f2e --- /dev/null +++ b/util/db.js @@ -0,0 +1,33 @@ +require("dotenv").config(); +const mysql = require("mysql2/promise") + +let _db; + +async function connect() { + const host = process.env.NODE_ENV === "production" + try { + const connection = await mysql.createConnection({ + "host" : process.env.DB_HOST, + "port" : 3306, + "user" : process.env.DB_USERNAME, + "password" : process.env.DB_PASSWORD, + "database" : process.env.DB_DATABASE + }); + _db = connection; + } catch (err) { + console.log(err); + } +} + +function initDb() { + connect(); +} + +function getDb() { + return _db; +} + +module.exports = { + initDb, + getDb +} \ No newline at end of file diff --git a/util/twitch.js b/util/twitch.js new file mode 100644 index 0000000..e69de29