From cb6790de6a4ea21665d0b43c5603ddb0d60755f8 Mon Sep 17 00:00:00 2001 From: Jim Sim Date: Tue, 13 Apr 2021 11:48:26 -0700 Subject: [PATCH] Add files via upload --- config.json | 11 +++++ index.js | 113 ++++++++++++++++++++++++++++++++++++++++++++++++++++ start.bat | 1 + 3 files changed, 125 insertions(+) create mode 100644 config.json create mode 100644 index.js create mode 100644 start.bat diff --git a/config.json b/config.json new file mode 100644 index 0000000..cd855d5 --- /dev/null +++ b/config.json @@ -0,0 +1,11 @@ +{ + "TOKEN": "Discord Bot Token", + "YOUTUBE_API_KEY": "YOUTUBE_API_KEY", + "SOUNDCLOUD_CLIENT_ID": "", + "MAX_PLAYLIST_SIZE": 100, + "PREFIX": "PREFIX", + "PRUNING": false, + "LOCALE": "en", + "STAY_TIME": 30, + "DEFAULT_VOLUME": 100 +} diff --git a/index.js b/index.js new file mode 100644 index 0000000..221d413 --- /dev/null +++ b/index.js @@ -0,0 +1,113 @@ +/** + * Module Imports + */ +const { Client, Collection } = require("discord.js"); +const { readdirSync } = require("fs"); +const { join } = require("path"); +const { TOKEN, PREFIX, LOCALE } = require("./util/Util"); +const path = require("path"); +const i18n = require("i18n"); + +const client = new Client({ + disableMentions: "everyone", + restTimeOffset: 0 +}); + +client.login(TOKEN); +client.commands = new Collection(); +client.prefix = PREFIX; +client.queue = new Map(); +const cooldowns = new Collection(); +const escapeRegex = (str) => str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"); + +i18n.configure({ + locales: ["en", "es", "ko", "fr", "tr", "pt_br", "zh_cn", "zh_tw"], + directory: path.join(__dirname, "locales"), + defaultLocale: "en", + objectNotation: true, + register: global, + + logWarnFn: function (msg) { + console.log("warn", msg); + }, + + logErrorFn: function (msg) { + console.log("error", msg); + }, + + missingKeyFn: function (locale, value) { + return value; + }, + + mustacheConfig: { + tags: ["{{", "}}"], + disable: false + } +}); + +/** + * Client Events + */ +client.on("ready", () => { + console.log(`${client.user.username} ready!`); + client.user.setActivity(`c/play | codsworth.xyz`, { type: "LISTENING" }); +}); +client.on("warn", (info) => console.log(info)); +client.on("error", console.error); + +/** + * Import all commands + */ +const commandFiles = readdirSync(join(__dirname, "commands")).filter((file) => file.endsWith(".js")); +for (const file of commandFiles) { + const command = require(join(__dirname, "commands", `${file}`)); + client.commands.set(command.name, command); +} + +client.on("message", async (message) => { + if (message.author.bot) return; + if (!message.guild) return; + + const prefixRegex = new RegExp(`^(<@!?${client.user.id}>|${escapeRegex(PREFIX)})\\s*`); + if (!prefixRegex.test(message.content)) return; + + const [, matchedPrefix] = message.content.match(prefixRegex); + + const args = message.content.slice(matchedPrefix.length).trim().split(/ +/); + const commandName = args.shift().toLowerCase(); + + const command = + client.commands.get(commandName) || + client.commands.find((cmd) => cmd.aliases && cmd.aliases.includes(commandName)); + + if (!command) return; + + if (!cooldowns.has(command.name)) { + cooldowns.set(command.name, new Collection()); + } + + const now = Date.now(); + const timestamps = cooldowns.get(command.name); + const cooldownAmount = (command.cooldown || 1) * 1000; + + if (timestamps.has(message.author.id)) { + const expirationTime = timestamps.get(message.author.id) + cooldownAmount; + + if (now < expirationTime) { + const timeLeft = (expirationTime - now) / 1000; + return message.reply( + i18n.__mf("common.cooldownMessage", { time: timeLeft.toFixed(1), name: command.name }) + ); + } + } + + timestamps.set(message.author.id, now); + setTimeout(() => timestamps.delete(message.author.id), cooldownAmount); + + try { + command.execute(message, args); + } catch (error) { + console.error(error); + message.reply(i18n.__("common.errorCommend")).catch(console.error); + } +}); diff --git a/start.bat b/start.bat new file mode 100644 index 0000000..28f2bac --- /dev/null +++ b/start.bat @@ -0,0 +1 @@ +node index.js \ No newline at end of file