diff --git a/.dockerignore b/.dockerignore index 7fa30a4..79ba2cd 100644 --- a/.dockerignore +++ b/.dockerignore @@ -4,4 +4,4 @@ datastore Dockerfile LICENSE -README.md \ No newline at end of file +README.md diff --git a/.env_example b/.env_example index e41c215..8ff64e7 100644 --- a/.env_example +++ b/.env_example @@ -1,2 +1,2 @@ DISCORD_TOKEN= -RADIOX_STATIONSLISTURL=https://gitea.cwinfo.org/cwchristerw/radio/raw/branch/master/playlist.json \ No newline at end of file +RADIOX_STATIONSLISTURL=https://gitea.cwinfo.org/cwchristerw/radio/raw/branch/master/playlist.json diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 6b1750e..091e06d 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -16,4 +16,4 @@ updates: interval: "daily" target-branch: "develop" labels: - - "dependencies" \ No newline at end of file + - "dependencies" diff --git a/.github/labeler.yml b/.github/labeler.yml index 5b27493..43d4f25 100644 --- a/.github/labeler.yml +++ b/.github/labeler.yml @@ -4,4 +4,4 @@ dependencies: documentation: - README.md - LICENSE -- .env_example \ No newline at end of file +- .env_example diff --git a/.github/workflows/docker-build.yml b/.github/workflows/docker-build.yml index 56eef1b..521a244 100644 --- a/.github/workflows/docker-build.yml +++ b/.github/workflows/docker-build.yml @@ -16,4 +16,4 @@ jobs: with: install: true - name: Build - run: docker build . # will run buildx \ No newline at end of file + run: docker build . # will run buildx diff --git a/.github/workflows/labeler.yml b/.github/workflows/labeler.yml index ba751b9..de18317 100644 --- a/.github/workflows/labeler.yml +++ b/.github/workflows/labeler.yml @@ -14,4 +14,4 @@ jobs: - uses: actions/labeler@v3 with: repo-token: "${{ secrets.GITHUB_TOKEN }}" - sync-labels: true \ No newline at end of file + sync-labels: true diff --git a/.gitignore b/.gitignore index c83c05a..26247f0 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,5 @@ datastore/ node_modules/ npm-debug.log -.vscode/ .env -build/ \ No newline at end of file +build/ diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..247bf3e --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,6 @@ +{ + "files.trimTrailingWhitespace": true, + "files.insertFinalNewline": true, + "files.trimFinalNewlines": true, + "editor.renderFinalNewline": false +} diff --git a/Dockerfile b/Dockerfile index bcfb1fa..a052374 100644 --- a/Dockerfile +++ b/Dockerfile @@ -14,4 +14,4 @@ RUN npm install RUN npm run build -CMD [ "npm", "start" ] \ No newline at end of file +CMD [ "npm", "start" ] diff --git a/package-lock.json b/package-lock.json index c1627ce..0e61d54 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,7 +13,7 @@ "@discordjs/opus": "^0.6.0", "@discordjs/rest": "^0.1.1-canary.0", "@discordjs/voice": "^0.6.0", - "discord-api-types": "^0.22.0", + "discord-api-types": "^0.23.1", "discord.js": "^13.1.0", "dotenv": "^10.0.0", "libsodium-wrappers": "^0.7.9", @@ -21,7 +21,7 @@ "path": "^0.12.7" }, "devDependencies": { - "@types/node": "^16.7.13", + "@types/node": "^16.9.0", "@types/ws": "^7.4.7", "@typescript-eslint/eslint-plugin": "^4.31.0", "@typescript-eslint/parser": "^4.31.0", @@ -180,6 +180,14 @@ "npm": ">=7.0.0" } }, + "node_modules/@discordjs/builders/node_modules/discord-api-types": { + "version": "0.22.0", + "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.22.0.tgz", + "integrity": "sha512-l8yD/2zRbZItUQpy7ZxBJwaLX/Bs2TGaCthRppk8Sw24LOIWg12t9JEreezPoYD0SQcC2htNNo27kYEpYW/Srg==", + "engines": { + "node": ">=12" + } + }, "node_modules/@discordjs/collection": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-0.2.1.tgz", @@ -259,6 +267,14 @@ "node": ">=16.0.0" } }, + "node_modules/@discordjs/rest/node_modules/discord-api-types": { + "version": "0.22.0", + "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.22.0.tgz", + "integrity": "sha512-l8yD/2zRbZItUQpy7ZxBJwaLX/Bs2TGaCthRppk8Sw24LOIWg12t9JEreezPoYD0SQcC2htNNo27kYEpYW/Srg==", + "engines": { + "node": ">=12" + } + }, "node_modules/@discordjs/rest/node_modules/node-fetch": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.2.tgz", @@ -297,6 +313,14 @@ "node": ">=12.0.0" } }, + "node_modules/@discordjs/voice/node_modules/discord-api-types": { + "version": "0.22.0", + "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.22.0.tgz", + "integrity": "sha512-l8yD/2zRbZItUQpy7ZxBJwaLX/Bs2TGaCthRppk8Sw24LOIWg12t9JEreezPoYD0SQcC2htNNo27kYEpYW/Srg==", + "engines": { + "node": ">=12" + } + }, "node_modules/@discordjs/voice/node_modules/node-addon-api": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", @@ -476,9 +500,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "16.7.13", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.7.13.tgz", - "integrity": "sha512-pLUPDn+YG3FYEt/pHI74HmnJOWzeR+tOIQzUx93pi9M7D8OE7PSLr97HboXwk5F+JS+TLtWuzCOW97AHjmOXXA==" + "version": "16.9.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.9.0.tgz", + "integrity": "sha512-nmP+VR4oT0pJUPFbKE4SXj3Yb4Q/kz3M9dSAO1GGMebRKWHQxLfDNmU/yh3xxCJha3N60nQ/JwXWwOE/ZSEVag==" }, "node_modules/@types/ws": { "version": "7.4.7", @@ -1309,9 +1333,9 @@ } }, "node_modules/discord-api-types": { - "version": "0.22.0", - "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.22.0.tgz", - "integrity": "sha512-l8yD/2zRbZItUQpy7ZxBJwaLX/Bs2TGaCthRppk8Sw24LOIWg12t9JEreezPoYD0SQcC2htNNo27kYEpYW/Srg==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.23.1.tgz", + "integrity": "sha512-igWmn+45mzXRWNEPU25I/pr8MwxHb767wAr51oy3VRLRcTlp5ADBbrBR0lq3SA1Rfw3MtM4TQu1xo3kxscfVdQ==", "engines": { "node": ">=12" } @@ -1351,6 +1375,14 @@ "npm": ">=7.0.0" } }, + "node_modules/discord.js/node_modules/discord-api-types": { + "version": "0.22.0", + "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.22.0.tgz", + "integrity": "sha512-l8yD/2zRbZItUQpy7ZxBJwaLX/Bs2TGaCthRppk8Sw24LOIWg12t9JEreezPoYD0SQcC2htNNo27kYEpYW/Srg==", + "engines": { + "node": ">=12" + } + }, "node_modules/discord.js/node_modules/node-fetch": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.2.tgz", @@ -2897,9 +2929,9 @@ } }, "node_modules/prettier": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.3.2.tgz", - "integrity": "sha512-lnJzDfJ66zkMy58OL5/NY5zp70S7Nz6KqcKkXYzn2tMVrNxvbqaBpg7H3qHaLxCJ5lNMsGuM8+ohS7cZrthdLQ==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.4.0.tgz", + "integrity": "sha512-DsEPLY1dE5HF3BxCRBmD4uYZ+5DCbvatnolqTqcxEgKVZnL2kUfyu7b8pPQ5+hTBkdhU9SLUmK0/pHb07RE4WQ==", "dev": true, "bin": { "prettier": "bin-prettier.js" @@ -3943,9 +3975,9 @@ } }, "node_modules/ws": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.4.tgz", - "integrity": "sha512-zP9z6GXm6zC27YtspwH99T3qTG7bBFv2VIkeHstMLrLlDJuzA7tQ5ls3OJ1hOGGCzTQPniNJoHXIAOS0Jljohg==", + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.5.tgz", + "integrity": "sha512-BAkMFcAzl8as1G/hArkxOxq3G7pjUqQ3gzYbLL0/5zNkph70e+lCoxBGnm6AW1+/aiNeV4fnKqZ8m4GZewmH2w==", "engines": { "node": ">=8.3.0" }, @@ -4096,6 +4128,13 @@ "ow": "^0.27.0", "ts-mixer": "^6.0.0", "tslib": "^2.3.1" + }, + "dependencies": { + "discord-api-types": { + "version": "0.22.0", + "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.22.0.tgz", + "integrity": "sha512-l8yD/2zRbZItUQpy7ZxBJwaLX/Bs2TGaCthRppk8Sw24LOIWg12t9JEreezPoYD0SQcC2htNNo27kYEpYW/Srg==" + } } }, "@discordjs/collection": { @@ -4160,6 +4199,11 @@ "tslib": "^2.3.0" }, "dependencies": { + "discord-api-types": { + "version": "0.22.0", + "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.22.0.tgz", + "integrity": "sha512-l8yD/2zRbZItUQpy7ZxBJwaLX/Bs2TGaCthRppk8Sw24LOIWg12t9JEreezPoYD0SQcC2htNNo27kYEpYW/Srg==" + }, "node-fetch": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.2.tgz", @@ -4190,6 +4234,11 @@ "node-addon-api": "^3.2.1" } }, + "discord-api-types": { + "version": "0.22.0", + "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.22.0.tgz", + "integrity": "sha512-l8yD/2zRbZItUQpy7ZxBJwaLX/Bs2TGaCthRppk8Sw24LOIWg12t9JEreezPoYD0SQcC2htNNo27kYEpYW/Srg==" + }, "node-addon-api": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", @@ -4320,9 +4369,9 @@ "dev": true }, "@types/node": { - "version": "16.7.13", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.7.13.tgz", - "integrity": "sha512-pLUPDn+YG3FYEt/pHI74HmnJOWzeR+tOIQzUx93pi9M7D8OE7PSLr97HboXwk5F+JS+TLtWuzCOW97AHjmOXXA==" + "version": "16.9.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.9.0.tgz", + "integrity": "sha512-nmP+VR4oT0pJUPFbKE4SXj3Yb4Q/kz3M9dSAO1GGMebRKWHQxLfDNmU/yh3xxCJha3N60nQ/JwXWwOE/ZSEVag==" }, "@types/ws": { "version": "7.4.7", @@ -4918,9 +4967,9 @@ } }, "discord-api-types": { - "version": "0.22.0", - "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.22.0.tgz", - "integrity": "sha512-l8yD/2zRbZItUQpy7ZxBJwaLX/Bs2TGaCthRppk8Sw24LOIWg12t9JEreezPoYD0SQcC2htNNo27kYEpYW/Srg==" + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.23.1.tgz", + "integrity": "sha512-igWmn+45mzXRWNEPU25I/pr8MwxHb767wAr51oy3VRLRcTlp5ADBbrBR0lq3SA1Rfw3MtM4TQu1xo3kxscfVdQ==" }, "discord.js": { "version": "13.1.0", @@ -4949,6 +4998,11 @@ "tslib": "^2.3.0" } }, + "discord-api-types": { + "version": "0.22.0", + "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.22.0.tgz", + "integrity": "sha512-l8yD/2zRbZItUQpy7ZxBJwaLX/Bs2TGaCthRppk8Sw24LOIWg12t9JEreezPoYD0SQcC2htNNo27kYEpYW/Srg==" + }, "node-fetch": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.2.tgz", @@ -6123,9 +6177,9 @@ "dev": true }, "prettier": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.3.2.tgz", - "integrity": "sha512-lnJzDfJ66zkMy58OL5/NY5zp70S7Nz6KqcKkXYzn2tMVrNxvbqaBpg7H3qHaLxCJ5lNMsGuM8+ohS7cZrthdLQ==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.4.0.tgz", + "integrity": "sha512-DsEPLY1dE5HF3BxCRBmD4uYZ+5DCbvatnolqTqcxEgKVZnL2kUfyu7b8pPQ5+hTBkdhU9SLUmK0/pHb07RE4WQ==", "dev": true }, "prettier-linter-helpers": { @@ -6890,9 +6944,9 @@ } }, "ws": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.4.tgz", - "integrity": "sha512-zP9z6GXm6zC27YtspwH99T3qTG7bBFv2VIkeHstMLrLlDJuzA7tQ5ls3OJ1hOGGCzTQPniNJoHXIAOS0Jljohg==", + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.5.tgz", + "integrity": "sha512-BAkMFcAzl8as1G/hArkxOxq3G7pjUqQ3gzYbLL0/5zNkph70e+lCoxBGnm6AW1+/aiNeV4fnKqZ8m4GZewmH2w==", "requires": {} }, "xdg-basedir": { diff --git a/package.json b/package.json index 283b9d6..8a808d5 100644 --- a/package.json +++ b/package.json @@ -22,7 +22,7 @@ "@discordjs/opus": "^0.6.0", "@discordjs/rest": "^0.1.1-canary.0", "@discordjs/voice": "^0.6.0", - "discord-api-types": "^0.22.0", + "discord-api-types": "^0.23.1", "discord.js": "^13.1.0", "dotenv": "^10.0.0", "libsodium-wrappers": "^0.7.9", @@ -30,7 +30,7 @@ "path": "^0.12.7" }, "devDependencies": { - "@types/node": "^16.7.13", + "@types/node": "^16.9.0", "@types/ws": "^7.4.7", "@typescript-eslint/eslint-plugin": "^4.31.0", "@typescript-eslint/parser": "^4.31.0", @@ -48,4 +48,4 @@ "node": ">=16.8.0", "npm": ">=7.0.0" } -} \ No newline at end of file +} diff --git a/src/Client.ts b/src/Client.ts index 761e7cd..3bfdcc3 100644 --- a/src/Client.ts +++ b/src/Client.ts @@ -73,11 +73,11 @@ class RadioClient extends Client { this.on("interactionCreate", interaction => { require(`${events}interactionCreate`).execute(this, interaction); }); - + this.on("voiceStateUpdate", (oldState, newState) => { require(`${events}voiceStateUpdate`).execute(this, oldState, newState); }); - + process.on('SIGINT', () => { require(`${events}SIGINT`).execute(this); }); @@ -89,7 +89,11 @@ class RadioClient extends Client { process.on('uncaughtException', (error) => { require(`${events}uncaughtException`).execute(this, error); }); - + + process.on('exit', () => { + this.funcs.logger("Bot", "Stopping"); + }); + this.on("error", error => { console.error(error); }); @@ -98,4 +102,4 @@ class RadioClient extends Client { } } -export default RadioClient \ No newline at end of file +export default RadioClient diff --git a/src/client/commands.js b/src/client/commands.js index 0d737d5..9641933 100644 --- a/src/client/commands.js +++ b/src/client/commands.js @@ -15,7 +15,7 @@ module.exports = { command.data = new SlashCommandBuilder() .setName(command.name) .setDescription(command.description); - + command.data = command.data.toJSON(); if(command.options) { command.options.forEach(function(option) { @@ -67,4 +67,4 @@ module.exports = { } })(); } -} \ No newline at end of file +} diff --git a/src/client/commands/bug.js b/src/client/commands/bug.js index 48091b1..26292d1 100644 --- a/src/client/commands/bug.js +++ b/src/client/commands/bug.js @@ -23,4 +23,4 @@ module.exports = { ephemeral: true }); } -}; \ No newline at end of file +}; diff --git a/src/client/commands/help.js b/src/client/commands/help.js index 212346b..52c4666 100644 --- a/src/client/commands/help.js +++ b/src/client/commands/help.js @@ -26,7 +26,7 @@ module.exports = { .setDescription(message.helpDescription) .setImage('https://waren.io/berriabot-temp-sa7a36a9xm6837br/images/empty-3.png') .setFooter(client.messages.footerText, "https://cdn.discordapp.com/emojis/" + client.messageEmojis["eximiabots"].replace(/[^0-9]+/g, '')); - + interaction.reply({ embeds: [embed], ephemeral: true diff --git a/src/client/commands/invite.js b/src/client/commands/invite.js index 5c66601..c9f69a8 100644 --- a/src/client/commands/invite.js +++ b/src/client/commands/invite.js @@ -19,4 +19,4 @@ module.exports = { ephemeral: true }); } -}; \ No newline at end of file +}; diff --git a/src/client/commands/list.js b/src/client/commands/list.js index 5a18b64..47edaee 100644 --- a/src/client/commands/list.js +++ b/src/client/commands/list.js @@ -13,9 +13,9 @@ module.exports = { ephemeral: true }); } - + const radio = client.radio.get(interaction.guild.id); - + if(radio){ client.funcs.listStations(client, interaction); } else { @@ -39,4 +39,4 @@ module.exports = { }); } } -}; \ No newline at end of file +}; diff --git a/src/client/commands/maintenance.js b/src/client/commands/maintenance.js index c39f999..89e01d2 100644 --- a/src/client/commands/maintenance.js +++ b/src/client/commands/maintenance.js @@ -61,7 +61,7 @@ module.exports = { value: "9" } ); - + const menu = new Discord.MessageActionRow() .addComponents( new Discord.MessageSelectMenu() @@ -85,7 +85,7 @@ module.exports = { .setColor(client.config.embedColor) .setDescription(options.find(option => option.value == action).label) .setFooter(client.messages.footerText, "https://cdn.discordapp.com/emojis/" + client.messageEmojis["eximiabots"].replace(/[^0-9]+/g, '')); - + interaction.reply({ embeds: [embed], ephemeral: true @@ -117,7 +117,7 @@ module.exports = { client.stations = await fetch(client.config.stationslistUrl) .then(client.funcs.checkFetchStatus) .then(response => response.json()); - + client.funcs.logger('Stations', 'Successfully fetched list'); } catch (error) { client.funcs.logger('Stations', 'Fetching list failed'); @@ -133,46 +133,5 @@ module.exports = { } - - /* - if(!client.stations) { - message.errorToGetPlaylist = client.messages.errorToGetPlaylist.replace("%client.config.supportGuild%", client.config.supportGuild); - return interaction.reply(client.messageEmojis["error"] + message.errorToGetPlaylist); - } - - let currentRadios = client.radio.keys(); - let radio = currentRadios.next(); - let stoppedRadios = ""; - - client.user.setStatus('dnd'); - - while (!radio.done) { - let currentRadio = client.radio.get(radio.value); - currentRadio.guild = client.datastore.getEntry(radio.value).guild; - - if(currentRadio){ - client.funcs.statisticsUpdate(client, currentRadio.guild, currentRadio); - currentRadio.connection?.destroy(); - currentRadio.audioPlayer?.stop(); - currentRadio.message?.delete(); - client.radio.delete(radio.value); - stoppedRadios += "-" + radio.value + ": " + currentRadio.guild.name + "\n"; - } - radio = currentRadios.next(); - } - - const embed = new Discord.MessageEmbed() - .setTitle(client.messages.maintenanceTitle) - .setThumbnail("https://cdn.discordapp.com/emojis/" + client.messageEmojis["maintenance"].replace(/[^0-9]+/g, '')) - .setColor(client.config.embedColor) - .setDescription("Stopped all radios" + "\n" + stoppedRadios) - .setImage('https://waren.io/berriabot-temp-sa7a36a9xm6837br/images/empty-3.png') - .setFooter(client.messages.footerText, "https://cdn.discordapp.com/emojis/" + client.messageEmojis["eximiabots"].replace(/[^0-9]+/g, '')); - - interaction.reply({ - embeds: [embed], - ephemeral: true - });*/ - } -}; \ No newline at end of file +}; diff --git a/src/client/commands/next.js b/src/client/commands/next.js index c4ae658..ab3a0f0 100644 --- a/src/client/commands/next.js +++ b/src/client/commands/next.js @@ -5,7 +5,7 @@ module.exports = { async execute(interaction, client, command) { if (client.funcs.check(client, interaction, command)) { const radio = client.radio.get(interaction.guild.id); - + let index = client.stations.findIndex(station => station.name == radio.station.name) + 1; if(index == client.stations.length) index = 0; @@ -20,7 +20,7 @@ module.exports = { client.funcs.statisticsUpdate(client, interaction.guild, radio); radio.audioPlayer.stop(); - + let date = new Date(); radio.station = station; radio.textChannel = interaction.channel; @@ -36,4 +36,4 @@ module.exports = { } } -} \ No newline at end of file +} diff --git a/src/client/commands/nowplaying.js b/src/client/commands/nowplaying.js index bf42da9..b863dc5 100644 --- a/src/client/commands/nowplaying.js +++ b/src/client/commands/nowplaying.js @@ -25,11 +25,11 @@ module.exports = { .setDescription(message.nowplayingDescription) .setImage('https://waren.io/berriabot-temp-sa7a36a9xm6837br/images/empty-3.png') .setFooter(client.messages.footerText, "https://cdn.discordapp.com/emojis/" + client.messageEmojis["eximiabots"].replace(/[^0-9]+/g, '')); - + interaction.reply({ embeds: [embed], ephemeral: true }); } } -}; \ No newline at end of file +}; diff --git a/src/client/commands/play.js b/src/client/commands/play.js index fb29976..661a081 100644 --- a/src/client/commands/play.js +++ b/src/client/commands/play.js @@ -90,7 +90,7 @@ module.exports = { if (radio) { client.funcs.statisticsUpdate(client, interaction.guild, radio); radio.audioPlayer.stop(); - + let date = new Date(); radio.station = station; radio.textChannel = interaction.channel; @@ -141,4 +141,4 @@ module.exports = { }); } } -}; \ No newline at end of file +}; diff --git a/src/client/commands/prev.js b/src/client/commands/prev.js index df987b8..78ac583 100644 --- a/src/client/commands/prev.js +++ b/src/client/commands/prev.js @@ -20,12 +20,12 @@ module.exports = { client.funcs.statisticsUpdate(client, interaction.guild, radio); radio.audioPlayer.stop(); - + let date = new Date(); radio.station = station; radio.textChannel = interaction.channel; radio.startTime = date.getTime(); - + if(interaction.isCommand()) { client.funcs.play(interaction, interaction.guild, client, url); } @@ -36,4 +36,4 @@ module.exports = { } } -} \ No newline at end of file +} diff --git a/src/client/commands/statistics.js b/src/client/commands/statistics.js index df31e33..56c533c 100644 --- a/src/client/commands/statistics.js +++ b/src/client/commands/statistics.js @@ -11,7 +11,7 @@ module.exports = { let currentGuild = client.datastore.getEntry(interaction.guild.id); let global = client.datastore.getEntry("global"); let statistics = ""; - + if(!client.stations) { message.errorToGetPlaylist = client.messages.errorToGetPlaylist.replace("%client.config.supportGuild%", client.config.supportGuild); return interaction.reply({ @@ -35,7 +35,7 @@ module.exports = { } }); } - + const embed = new Discord.MessageEmbed() .setTitle(client.messages.statisticsTitle) .setThumbnail("https://cdn.discordapp.com/emojis/" + client.messageEmojis["statistics"].replace(/[^0-9]+/g, '')) @@ -49,4 +49,4 @@ module.exports = { ephemeral: true }); } -}; \ No newline at end of file +}; diff --git a/src/client/commands/status.js b/src/client/commands/status.js index c40fdbd..66eb727 100644 --- a/src/client/commands/status.js +++ b/src/client/commands/status.js @@ -28,4 +28,4 @@ module.exports = { }); } -}; \ No newline at end of file +}; diff --git a/src/client/commands/stop.js b/src/client/commands/stop.js index fbdb3e9..d457c99 100644 --- a/src/client/commands/stop.js +++ b/src/client/commands/stop.js @@ -38,4 +38,4 @@ module.exports = { }); } } -}; \ No newline at end of file +}; diff --git a/src/client/datastore.js b/src/client/datastore.js index dbacf73..4db0eee 100644 --- a/src/client/datastore.js +++ b/src/client/datastore.js @@ -6,7 +6,7 @@ module.exports = class { this.map = new Map(); this.loadData(); } - + loadData() { const dir = path.join(path.dirname(__dirname), '../datastore'); if (!fs.existsSync(dir)) { @@ -33,7 +33,7 @@ module.exports = class { var statistics = {}; if(!client.stations) return; - + let calculation = guilds.next(); while (!calculation.done) { @@ -47,7 +47,7 @@ module.exports = class { statistics[stations[station].name].time = 0; statistics[stations[station].name].used = 0; } - + statistics[stations[station].name].time = parseInt(statistics[stations[station].name].time)+parseInt(currentGuild.statistics[stations[station].name].time); statistics[stations[station].name].used = parseInt(statistics[stations[station].name].used)+parseInt(currentGuild.statistics[stations[station].name].used); } @@ -84,26 +84,26 @@ module.exports = class { this.map.set(id, newData); this.saveEntry(id, newData); } - + getEntry(id){ return this.map.get(id); } - + updateEntry(guild, newData) { newData.guild.name = guild.name; let date = new Date(); newData.updated = date.toISOString().substring(0, 10) - + this.map.set(guild.id, newData); this.saveEntry(guild.id, newData); //this.showEntry(this.getEntry(guild.id)); } - + showEntry(data){ console.log(data); } - + createTestFile () { let newData = { "guild": { @@ -120,10 +120,10 @@ module.exports = class { } } - + this.updateEntry(newData.guild, newData); } - + saveEntry(file, data) { data = JSON.stringify(data, null, 4); diff --git a/src/client/emojis.js b/src/client/emojis.js index 7e1fbbf..61af51a 100644 --- a/src/client/emojis.js +++ b/src/client/emojis.js @@ -39,4 +39,4 @@ module.exports = { } } } -} \ No newline at end of file +} diff --git a/src/client/events/SIGINT.js b/src/client/events/SIGINT.js index a63248a..6445029 100644 --- a/src/client/events/SIGINT.js +++ b/src/client/events/SIGINT.js @@ -3,16 +3,12 @@ module.exports = { execute(client) { client.user.setStatus('dnd'); - console.log("\n"); - client.funcs.logger("Bot", "Closing"); - console.log("\n"); - client.funcs.saveRadios(client); - + setInterval(() => { if(client.radio.size == 0){ process.exit(); } }, 500); } -} \ No newline at end of file +} diff --git a/src/client/events/SIGTERM.js b/src/client/events/SIGTERM.js index 99e7af3..62c4830 100644 --- a/src/client/events/SIGTERM.js +++ b/src/client/events/SIGTERM.js @@ -3,4 +3,4 @@ module.exports = { execute(client) { process.emit('SIGINT'); } -} \ No newline at end of file +} diff --git a/src/client/events/interactionCreate.js b/src/client/events/interactionCreate.js index 65d7168..4b37466 100644 --- a/src/client/events/interactionCreate.js +++ b/src/client/events/interactionCreate.js @@ -4,7 +4,7 @@ module.exports = { const permissions = interaction.channel.permissionsFor(interaction.client.user); if (!permissions.has('VIEW_CHANNEL')) return; - + if (!permissions.has('EMBED_LINKS')) return interaction.reply({ content: client.messages.noPermsEmbed, ephemeral: true @@ -14,7 +14,7 @@ module.exports = { const commandName = interaction.commandName; const command = client.commands.get(commandName); if (!command) return; - + try { command.execute(interaction, client); } catch (error) { diff --git a/src/client/events/messageCreate.js b/src/client/events/messageCreate.js index 0f8b9d6..939f6b1 100644 --- a/src/client/events/messageCreate.js +++ b/src/client/events/messageCreate.js @@ -16,7 +16,7 @@ module.exports = { } else { return; } - + const args = message.content.slice(prefix.length).split(' '); if (!message.content.startsWith(prefix)) return; if (!args[0]) return; @@ -30,7 +30,7 @@ module.exports = { let newMessage = {}; newMessage.messageCommandsDeprecatedTitle = client.messages.messageCommandsDeprecatedTitle.replace("%client.user.username%", client.user.username); - + const embed = new Discord.MessageEmbed() .setTitle(newMessage.messageCommandsDeprecatedTitle) .setThumbnail("https://cdn.discordapp.com/emojis/" + client.messageEmojis["logo"].replace(/[^0-9]+/g, '')) @@ -55,4 +55,4 @@ module.exports = { console.error(error); } } -} \ No newline at end of file +} diff --git a/src/client/events/messageDelete.js b/src/client/events/messageDelete.js index 9cce584..ee54793 100644 --- a/src/client/events/messageDelete.js +++ b/src/client/events/messageDelete.js @@ -7,4 +7,4 @@ module.exports = { if(msg.id != radio.message.id) return; radio.message = null; } -} \ No newline at end of file +} diff --git a/src/client/events/ready.js b/src/client/events/ready.js index 131ab27..31e9de2 100644 --- a/src/client/events/ready.js +++ b/src/client/events/ready.js @@ -22,7 +22,7 @@ module.exports = { /*DEVELOPERS*/ client.funcs.logger('Developers'); - + client.developers = ""; let user = ""; for (let i = 0; i < client.config.devId.length; i++) { @@ -54,7 +54,7 @@ module.exports = { client.funcs.logger('Stations', 'Fetching list failed'); console.error(error + "\n"); } - + setInterval(async () => { try { client.funcs.logger('Stations', 'Started fetching list – ' + client.config.stationslistUrl); @@ -72,7 +72,7 @@ module.exports = { if(!client.stations) { client.user.setStatus('dnd'); } - + /*GUILDS*/ client.funcs.logger('Guilds', 'Started fetching list'); @@ -84,7 +84,7 @@ module.exports = { console.log("\n"); client.funcs.logger('Guilds', 'Successfully fetched list'); - + /*STATISTICS*/ client.datastore.calculateGlobal(client); @@ -100,4 +100,4 @@ module.exports = { }, 5000); } -} \ No newline at end of file +} diff --git a/src/client/events/uncaughtException.js b/src/client/events/uncaughtException.js index 5df8a0b..ba3d8ac 100644 --- a/src/client/events/uncaughtException.js +++ b/src/client/events/uncaughtException.js @@ -4,4 +4,4 @@ module.exports = { console.log(error.stack); process.emit('SIGINT'); } -} \ No newline at end of file +} diff --git a/src/client/funcs/checkFetchStatus.js b/src/client/funcs/checkFetchStatus.js index 3b6c371..4774d77 100644 --- a/src/client/funcs/checkFetchStatus.js +++ b/src/client/funcs/checkFetchStatus.js @@ -4,4 +4,4 @@ module.exports = function (response) { } else { throw new Error(response.status + " " + response.statusText); } -} \ No newline at end of file +} diff --git a/src/client/funcs/isDev.js b/src/client/funcs/isDev.js index 39e98f8..3992c1e 100644 --- a/src/client/funcs/isDev.js +++ b/src/client/funcs/isDev.js @@ -7,4 +7,4 @@ module.exports = function (devList, authorID){ } }); return response; -} \ No newline at end of file +} diff --git a/src/client/funcs/listStations.js b/src/client/funcs/listStations.js index 6befe09..d0cb036 100644 --- a/src/client/funcs/listStations.js +++ b/src/client/funcs/listStations.js @@ -30,4 +30,4 @@ module.exports = function (client, interaction){ components: [menu], ephemeral: true }); -} \ No newline at end of file +} diff --git a/src/client/funcs/loadState.js b/src/client/funcs/loadState.js index f7ff54b..676685e 100644 --- a/src/client/funcs/loadState.js +++ b/src/client/funcs/loadState.js @@ -7,4 +7,4 @@ module.exports = function loadState(client, guild){ data.state = {}; client.datastore.updateEntry(guild, data); return state; -} \ No newline at end of file +} diff --git a/src/client/funcs/logger.js b/src/client/funcs/logger.js index 80ce35c..610fdc5 100644 --- a/src/client/funcs/logger.js +++ b/src/client/funcs/logger.js @@ -2,4 +2,4 @@ module.exports = function (area, text){ let date = new Date(); console.log('[' + area + '] – ' + date.toISOString()); if(text) console.log(text + '\n'); -} \ No newline at end of file +} diff --git a/src/client/funcs/msToTime.js b/src/client/funcs/msToTime.js index 24574ca..07fdb9a 100644 --- a/src/client/funcs/msToTime.js +++ b/src/client/funcs/msToTime.js @@ -9,4 +9,4 @@ module.exports = function msToTime(duration) { : +hours > 0 ? `${+hours < 10 ? `0${hours}` : hours}:${+minutes < 10 ? `0${minutes}` : minutes}:${+seconds < 10 ? `0${seconds}` : seconds}` : `${+minutes < 10 ? `0${minutes}` : minutes}:${+seconds < 10 ? `0${seconds}` : seconds}`; -} \ No newline at end of file +} diff --git a/src/client/funcs/play.js b/src/client/funcs/play.js index fe81608..464e242 100644 --- a/src/client/funcs/play.js +++ b/src/client/funcs/play.js @@ -47,7 +47,7 @@ module.exports = async function play(interaction, guild, client, url) { .addField(client.messages.nowplayingTitle, message.nowplayingDescription, true) .setImage('https://waren.io/berriabot-temp-sa7a36a9xm6837br/images/empty-3.png') .setFooter(client.messages.footerText, "https://cdn.discordapp.com/emojis/" + client.messageEmojis["eximiabots"].replace(/[^0-9]+/g, '')); - + const buttons = new Discord.MessageActionRow() .addComponents( new Discord.MessageButton() @@ -87,10 +87,10 @@ module.exports = async function play(interaction, guild, client, url) { } message.play = client.messages.play.replace("%radio.station.name%", radio.station.name); - + interaction?.reply({ content: client.messageEmojis["play"] + message.play, ephemeral: true }); - -} \ No newline at end of file + +} diff --git a/src/client/funcs/restoreRadios.js b/src/client/funcs/restoreRadios.js index c1a4a39..10aff24 100644 --- a/src/client/funcs/restoreRadios.js +++ b/src/client/funcs/restoreRadios.js @@ -43,7 +43,7 @@ module.exports = async function restoreRadios(client, guilds) { construct.connection = connection; let date = new Date(); construct.startTime = date.getTime(); - + client.funcs.play(null, guild, client, url, Discord); client.datastore.checkEntry(guild.id); @@ -59,4 +59,4 @@ module.exports = async function restoreRadios(client, guilds) { console.log(error); } }); -} \ No newline at end of file +} diff --git a/src/client/funcs/saveRadios.js b/src/client/funcs/saveRadios.js index 30280e1..9e7b187 100644 --- a/src/client/funcs/saveRadios.js +++ b/src/client/funcs/saveRadios.js @@ -1,11 +1,11 @@ module.exports = function saveRadios(client) { let currentRadios = client.radio.keys(); let radio = currentRadios.next(); - + while (!radio.done) { let currentRadio = client.radio.get(radio.value); currentRadio.guild = client.datastore.getEntry(radio.value).guild; - + if (currentRadio) { client.funcs.statisticsUpdate(client, currentRadio.guild, currentRadio); client.funcs.saveState(client, currentRadio.guild, currentRadio); @@ -14,7 +14,7 @@ module.exports = function saveRadios(client) { currentRadio.message?.delete(); client.radio.delete(radio.value); } - + radio = currentRadios.next(); } -} \ No newline at end of file +} diff --git a/src/client/funcs/saveState.js b/src/client/funcs/saveState.js index eb59553..6ef476a 100644 --- a/src/client/funcs/saveState.js +++ b/src/client/funcs/saveState.js @@ -1,6 +1,6 @@ module.exports = function saveState(client, guild, radio){ client.datastore.checkEntry(guild.id); - + let date = new Date(); let data = client.datastore.getEntry(guild.id); @@ -15,4 +15,4 @@ module.exports = function saveState(client, guild, radio){ data.state.station.owner = radio.station.owner; client.datastore.updateEntry(guild, data); -} \ No newline at end of file +} diff --git a/src/client/funcs/searchStation.js b/src/client/funcs/searchStation.js index f443fd0..9206722 100644 --- a/src/client/funcs/searchStation.js +++ b/src/client/funcs/searchStation.js @@ -59,4 +59,4 @@ module.exports = function searchStation(key, client) { } } return highestProbabilityStation; -} \ No newline at end of file +} diff --git a/src/client/funcs/statisticsUpdate.js b/src/client/funcs/statisticsUpdate.js index 4fcf09c..fcd3ad1 100644 --- a/src/client/funcs/statisticsUpdate.js +++ b/src/client/funcs/statisticsUpdate.js @@ -1,22 +1,22 @@ module.exports = function statisticsUpdate(client, guild, radio) { - + client.datastore.checkEntry(guild.id); - + radio.datastore = client.datastore.getEntry(guild.id); - + if(!radio.datastore.statistics[radio.station.name]){ radio.datastore.statistics[radio.station.name] = {}; radio.datastore.statistics[radio.station.name].time = 0; radio.datastore.statistics[radio.station.name].used = 0; client.datastore.updateEntry(guild, radio.datastore); } - + let date = new Date(); radio.currentTime = date.getTime(); radio.playTime = parseInt(radio.currentTime)-parseInt(radio.startTime); radio.datastore.statistics[radio.station.name].time = parseInt(radio.datastore.statistics[radio.station.name].time)+parseInt(radio.playTime); - + radio.datastore.statistics[radio.station.name].used = parseInt(radio.datastore.statistics[radio.station.name].used)+1; client.datastore.updateEntry(guild, radio.datastore); client.datastore.calculateGlobal(client); -} \ No newline at end of file +} diff --git a/src/client/messages.js b/src/client/messages.js index c0b01af..2719663 100644 --- a/src/client/messages.js +++ b/src/client/messages.js @@ -37,4 +37,4 @@ module.exports = { errorStationURL: "Station can't be URL", messageCommandsDeprecatedTitle: "%client.user.username%", messageCommandsDeprecatedDescription: "We recommend you to reauthorize our bot by clicking the invite link down below, because Discord is planning to remove message content from verified bots [Read More](https://support-dev.discord.com/hc/en-us/articles/4404772028055)" + "\n\n" + "**Invite Bot**" + "\n" + "https://wgi.fi/radiox_invite" + "\n\n" + "This bot now supports slash commands, you should start using them instead. Type / into the message box and select the bot you wish to use. Remember to be careful as there are a few bugs here and there on Discord." + "\n\n" + "We will remove this deprecation message in March of 2022 when RadioX 1.0.0 is released." -}; \ No newline at end of file +}; diff --git a/src/client/utils/typings.ts b/src/client/utils/typings.ts index 79cc341..1e5d860 100644 --- a/src/client/utils/typings.ts +++ b/src/client/utils/typings.ts @@ -1,3 +1,3 @@ export interface command { } -export interface radio {} \ No newline at end of file +export interface radio {} diff --git a/src/config.js b/src/config.js index 2aa884d..c306e50 100644 --- a/src/config.js +++ b/src/config.js @@ -23,4 +23,4 @@ module.exports = { version: process.env.RADIOX_VERSION || process.env.npm_package_version, debug: process.env.DEBUG_MODE || false -} \ No newline at end of file +}