From 867bec2405fbb8f3e29b69a8c523982dff96a262 Mon Sep 17 00:00:00 2001 From: "Aditya N. Tripathi" Date: Sun, 10 Oct 2021 14:53:03 +0530 Subject: [PATCH 1/9] feat: change some info cmds and msgs --- src/commands/General/Chat Bot Info/donate.js | 4 ++-- src/commands/General/Chat Bot Info/stats.js | 4 +++- src/languages/en-US.js | 15 ++++++--------- 3 files changed, 11 insertions(+), 12 deletions(-) diff --git a/src/commands/General/Chat Bot Info/donate.js b/src/commands/General/Chat Bot Info/donate.js index 4144db9d..bbdfd52f 100644 --- a/src/commands/General/Chat Bot Info/donate.js +++ b/src/commands/General/Chat Bot Info/donate.js @@ -5,7 +5,7 @@ module.exports = class extends Command { constructor(...args) { super(...args, { - aliases: ["patreon", "patron"], + aliases: ["patreon", "patron", "premium"], guarded: true, requiredPermissions: ["EMBED_LINKS", "ATTACH_FILES"], description: language => language.get("COMMAND_DONATE_DESCRIPTION") @@ -15,7 +15,7 @@ module.exports = class extends Command { async run(msg) { const embed = new MessageEmbed() .setDescription(msg.language.get("COMMAND_DONATE")) - .setAuthor("PenguBot - Donate and Support", this.client.user.displayAvatarURL(), "https://www.pengubot.com") + .setAuthor("PenguBot - Premium", this.client.user.displayAvatarURL(), "https://www.pengubot.com") .setThumbnail("https://i.imgur.com/bSOBK4s.png") .setColor("RANDOM"); return msg.sendEmbed(embed); diff --git a/src/commands/General/Chat Bot Info/stats.js b/src/commands/General/Chat Bot Info/stats.js index 10cbd7ba..8684b8af 100644 --- a/src/commands/General/Chat Bot Info/stats.js +++ b/src/commands/General/Chat Bot Info/stats.js @@ -13,7 +13,9 @@ module.exports = class extends Command { async run(msg) { let [users, guilds, channels, memory, vc, cpm, listeners] = [0, 0, 0, 0, 0, 0, 0]; - const results = await this.client.shard.broadcastEval(`[this.guilds.cache.reduce((prev, val) => val.memberCount + prev, 0), this.guilds.cache.size, this.channels.cache.size, (process.memoryUsage().heapUsed / 1024 / 1024), this.music.filter(music => music.playing).size, this.health.commands.cmdCount[59].count, this.music.filter(music => music.playing).map(music => music.voiceChannel && music.voiceChannel.members.filter(mem => !mem.user.bot).size).reduce((prev, val) => prev + val, 0)]`); + const results = await this.client.shard.broadcastEval(`[this.guilds.cache.reduce((prev, val) => val.memberCount + prev, 0), this.guilds.cache.size, this.channels.cache.size, (process.memoryUsage().heapUsed / 1024 / 1024), this.music.filter(music => music.playing).size, this.health.commands.cmdCount[59].count, this.music.filter(music => music.playing).map(music => music.voiceChannel && music.voiceChannel.members.filter(mem => !mem.user.bot).size).reduce((prev, val) => prev + val, 0)]`).catch(() => null); + if (!results) return msg.reply("Oops! There appears to be a glitch in the matrix. Please try again later."); + for (const result of results) { users += result[0]; guilds += result[1]; diff --git a/src/languages/en-US.js b/src/languages/en-US.js index e428fc7a..43c39a2a 100644 --- a/src/languages/en-US.js +++ b/src/languages/en-US.js @@ -22,28 +22,25 @@ module.exports = class extends Language { "Moderation, Fun, Utilities and more. It is developed in NodeJS using many different", "technologies such as RethinkDB, JavaScript and Linux.", "", - "• **Author:** [AdityaTD#5346](https://www.AdityaTD.me)", + "• **Author:** [AdityaTD#5346](https://www.AdityaTripathi.co.in)", `• **Version:** ${version}`, "• **Website:** ", "• **Patreon:** ", "• **PayPal:** ", "• **Discord Guild:** ", - "• **GitHub:** ", - "• **Database:** RethinkDB" + "• **GitHub:** " ], COMMAND_DONATE: [ - "PenguBot runs on multipe servers rented out across the globe and that requires the rent. If you'd like to support PenguBot and it's financial costs in return for perks mentioned below please visit the following:", + "Enjoying Pengu? Then you'll definately love Pengu Premium! Support us and recieve some awesome perks for your contribution!", "", "__Perks__:", "• Unlimited Access to Queue Lengths, Volume Adjustment and more!", "• No Vote Locking - No Need To Upvote for Locked Commands", - "• Better Uptime with Patron Only Bot", - "• Special Role in Official Pengu Squad Server", + "• Better Uptime and Premium Support from Pengu's Team", + "• Special Role in Climactic's Official Server", "", "• **Patreon:** https://www.patreon.com/PenguBot", - "• **PayPal:** https://www.paypal.me/adityatripathid", - "• **Crypto Donations:** https://1upcoin.com/donate/adityatd", - "• **PenguBot's Donation Page:** https://www.PenguBot.com/donate" + "• **PenguBot's Premium Page:** https://www.PenguBot.com/premium" ], COMMAND_HELP_NODM: "📪 | You have DMs disabled, I couldn't send you the commands in DMs so here's a link to all the commands: ", COMMAND_UPVOTE: ["Want PenguBot to become bigger and be available in more guilds you visit?", From 7c3693c98434badcb40032facb52b6d41364b62f Mon Sep 17 00:00:00 2001 From: "Aditya N. Tripathi" Date: Sun, 10 Oct 2021 14:56:01 +0530 Subject: [PATCH 2/9] chore: update other languages --- src/languages/es-ES.js | 15 ++++++--------- src/languages/fr-FR.js | 10 ++++------ src/languages/it-IT.js | 7 +++---- src/languages/sar-IT.js | 7 +++---- 4 files changed, 16 insertions(+), 23 deletions(-) diff --git a/src/languages/es-ES.js b/src/languages/es-ES.js index cca1cb14..95f36f89 100644 --- a/src/languages/es-ES.js +++ b/src/languages/es-ES.js @@ -22,28 +22,25 @@ module.exports = class extends Language { "Moderation, Fun, Utilities and more. It is developed in NodeJS using many different", "technologies such as RethinkDB, JavaScript and Linux.", "", - "• **Author:** [AdityaTD#5346](https://www.AdityaTD.me)", + "• **Author:** [AdityaTD#5346](https://www.AdityaTripathi.co.in)", `• **Version:** ${version}`, "• **Website:** ", "• **Patreon:** ", "• **PayPal:** ", "• **Discord Guild:** ", - "• **GitHub:** ", - "• **Database:** RethinkDB" + "• **GitHub:** " ], COMMAND_DONATE: [ - "PenguBot runs on multipe servers rented out across the globe and that requires the rent. If you'd like to support PenguBot and it's financial costs in return for perks mentioned below please visit the following:", + "Enjoying Pengu? Then you'll definately love Pengu Premium! Support us and recieve some awesome perks for your contribution!", "", "__Perks__:", "• Unlimited Access to Queue Lengths, Volume Adjustment and more!", "• No Vote Locking - No Need To Upvote for Locked Commands", - "• Better Uptime with Patron Only Bot", - "• Special Role in Official Pengu Squad Server", + "• Better Uptime and Premium Support from Pengu's Team", + "• Special Role in Climactic's Official Server", "", "• **Patreon:** https://www.patreon.com/PenguBot", - "• **PayPal:** https://www.paypal.me/adityatripathid", - "• **Crypto Donations:** https://1upcoin.com/donate/adityatd", - "• **PenguBot's Donation Page:** https://www.PenguBot.com/donate" + "• **PenguBot's Premium Page:** https://www.PenguBot.com/premium" ], COMMAND_HELP_NODM: "📪 | You have DMs disabled, I couldn't send you the commands in DMs so here's a link to all the commands: ", COMMAND_UPVOTE: ["Want PenguBot to become bigger and be available in more guilds you visit?", diff --git a/src/languages/fr-FR.js b/src/languages/fr-FR.js index b2a3591b..93fba615 100644 --- a/src/languages/fr-FR.js +++ b/src/languages/fr-FR.js @@ -20,16 +20,15 @@ module.exports = class extends Language { COMMAND_INFO: [ "PenguBot est un bot Discord multi-usages rempli de fonctionnalités quels Modération, amusement, utilitaires et plus. Il est développé dans NodeJS en utilisant de nombreuses technologies différentes telles que RethinkDB, JavaScript and Linux.", "", - "• **Auteur:** [AdityaTD#5346](https://www.AdityaTD.me)", + "• **Auteur:** [AdityaTD#5346](https://www.AdityaTripathi.co.in)", `• **Version:** ${version}`, "• **Site Internet:** ", "• **Patreon:** ", "• **Discord Guilde:** ", - "• **GitHub:** ", - "• **Database:** RethinkDB" + "• **GitHub:** " ], COMMAND_DONATE: [ - "PenguBot fonctionne sur plusieurs serveurs loués dans le monde entier, ce qui nécessite un loyer. Si vous souhaitez soutenir PenguBot et que ses coûts financiers sont en contrepartie des avantages mentionnés ci-dessous, veuillez visiter la page suivante:", + "Enjoying Pengu? Then you'll definately love Pengu Premium! Support us and recieve some awesome perks for your contribution!", "", "__Perks__:", "• Accès illimité a la durée de la play, réglage du volume et plus encore!", @@ -38,8 +37,7 @@ module.exports = class extends Language { "• Rôle spécial dans le serveur officiel de Pengu Squad", "", "• **Patreon:** https://www.patreon.com/PenguBot", - "• **Crypto Donations:** https://1upcoin.com/donate/adityatd", - "• **PenguBot's Donation Page:** https://www.PenguBot.com/donate" + "• **PenguBot's Premium Page:** https://www.PenguBot.com/premium" ], COMMAND_HELP_NODM: "📪 | Vous avez les DM désactivés, je ne pouvais pas vous envoyer les commandes dans les DM alors voici un lien vers toutes les commandes: ", COMMAND_UPVOTE: ["Voulez-vous que PenguBot devienne plus grand et soit disponible dans plus de guildes que vous visitez?", diff --git a/src/languages/it-IT.js b/src/languages/it-IT.js index f216cf6d..db4fa2f4 100644 --- a/src/languages/it-IT.js +++ b/src/languages/it-IT.js @@ -20,13 +20,12 @@ module.exports = class extends Language { COMMAND_INFO: [ "PenguBot è un bot multi-funzione per Discord ricco di funzionalità quali Moderazione, Divertimento, Utilità di sistema ed altro.. Sviluppato in NodeJS utilizzando diverse tecnologie quali RethinkDB, JavaScript e Linux.", "", - "• **Autore:** [AdityaTD#5346](https://www.AdityaTD.me)", + "• **Autore:** [AdityaTD#5346](https://www.AdityaTripathi.co.in)", `• **Versione:** ${version}`, "• **Sito Web:** ", "• **Patreon:** ", "• **Server Discord:** ", - "• **GitHub:** ", - "• **Database:** RethinkDB" + "• **GitHub:** " ], COMMAND_DONATE: [ "PenguBot funziona su vari server attorno al mondo e questo richiede un costo. Se ti andasse di supportare PenguBot in questi costi, verrai ricompensato nei seguenti modi:", @@ -39,7 +38,7 @@ module.exports = class extends Language { "", "• **Patreon:** https://www.patreon.com/PenguBot", "• **Crypto Donazioni:** https://1upcoin.com/donate/adityatd", - "• **Pagina di PenguBot per le donazioni:** https://www.PenguBot.com/donate" + "• **Pagina di PenguBot per le premium:** https://www.PenguBot.com/premium" ], COMMAND_HELP_NODM: "📪 | Hai disabilitato i messaggi personali. Non posso inviarti i comandi in privato. Questo il link per la lista dei comandi disponibili : ", COMMAND_UPVOTE: ["Vuoi che PenguBot sia più grande e disponbile su più server che frequenti?", diff --git a/src/languages/sar-IT.js b/src/languages/sar-IT.js index 9e3152d1..3145da56 100644 --- a/src/languages/sar-IT.js +++ b/src/languages/sar-IT.js @@ -20,13 +20,12 @@ module.exports = class extends Language { COMMAND_INFO: [ "PenguBot este uno multi-funtzione pro Discord prenu de funtzionalidadese commente: Moderatzione, Divertimentu, Utilidades de sistema et atteru.. Sviluppadu chin NodeJS utilisande diversasa tecnologiasa commente RethinkDB, JavaScript et Linux.", "", - "• **Autore:** [AdityaTD#5346](https://www.AdityaTD.me)", + "• **Autore:** [AdityaTD#5346](https://www.AdityaTripathi.co.in)", `• **Versione:** ${version}`, "• **Situ Web:** ", "• **Patreon:** ", "• **Server Discord:** ", - "• **GitHub:** ", - "• **Database:** RethinkDB" + "• **GitHub:** " ], COMMAND_DONATE: [ "PenguBot funtziona in varios servers in su mundu. Custa cosa costata in denaru. Si cherese podes supportare PenguBot chin minuju. Asa a che picare carchi pretziosu poterese:", @@ -39,7 +38,7 @@ module.exports = class extends Language { "", "• **Patreon:** https://www.patreon.com/PenguBot", "• **Crypto Donazioni:** https://1upcoin.com/donate/adityatd", - "• **Paghina de PenguBot pro sas donatzionese:** https://www.PenguBot.com/donate" + "• **Paghina de PenguBot pro sas premium:** https://www.PenguBot.com/premium" ], COMMAND_HELP_NODM: "📪 | Hai disabilitato i messaggi personali. Non posso inviarti i comandi in privato. Questo il link per la lista dei comandi disponibili : ", COMMAND_UPVOTE: ["Vuoi che PenguBot sia più grande e disponbile su più server che frequenti?", From cf720797ae5637bafdf2cc0465ebd2844339038f Mon Sep 17 00:00:00 2001 From: "Aditya N. Tripathi" Date: Sun, 10 Oct 2021 15:01:50 +0530 Subject: [PATCH 3/9] chore(ci): update ci for new ght --- .github/workflows/test.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 2f705774..733f19b6 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -12,7 +12,7 @@ jobs: runs-on: ${{ matrix.os }} strategy: matrix: - node_version: [14] + node_version: [15] os: [ubuntu-latest] steps: - name: Checkout Project @@ -28,7 +28,7 @@ jobs: key: ${{ runner.os }}-${{ matrix.node_version }}-${{ hashFiles(matrix.os == 'windows-latest' && '**\yarn.lock' || '**/yarn.lock') }} - name: Install Dependencies run: | - yarn add https://{{secrets.TOKEN}}:x-oauth-basic@github.com/PenguBot/music.git#build + yarn add https://{{secrets.MUSIC}}:x-oauth-basic@github.com/PenguBot/music.git#build yarn - name: Test run: yarn test From e67d34fe8a94ca0d5650b500b19c84999ea95b4e Mon Sep 17 00:00:00 2001 From: "Aditya N. Tripathi" Date: Sun, 10 Oct 2021 15:12:23 +0530 Subject: [PATCH 4/9] chore(ci): change repo url --- .github/workflows/test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 733f19b6..955a3f62 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -28,7 +28,7 @@ jobs: key: ${{ runner.os }}-${{ matrix.node_version }}-${{ hashFiles(matrix.os == 'windows-latest' && '**\yarn.lock' || '**/yarn.lock') }} - name: Install Dependencies run: | - yarn add https://{{secrets.MUSIC}}:x-oauth-basic@github.com/PenguBot/music.git#build + yarn add https://{{secrets.MUSIC}}@github.com/PenguBot/music.git#build yarn - name: Test run: yarn test From 9f9e0c783327e83c707d8c4dd4cbfe83981affad Mon Sep 17 00:00:00 2001 From: "Aditya N. Tripathi" Date: Sun, 10 Oct 2021 21:38:46 +0530 Subject: [PATCH 5/9] chore(ci): trying to change repo url again --- .github/workflows/test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 955a3f62..b908c61a 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -28,7 +28,7 @@ jobs: key: ${{ runner.os }}-${{ matrix.node_version }}-${{ hashFiles(matrix.os == 'windows-latest' && '**\yarn.lock' || '**/yarn.lock') }} - name: Install Dependencies run: | - yarn add https://{{secrets.MUSIC}}@github.com/PenguBot/music.git#build + yarn add git+https://{{secrets.MUSIC}}@github.com/PenguBot/music.git#build yarn - name: Test run: yarn test From 71c7baff9fed2538ba4a79c9db9ef3833eb7311f Mon Sep 17 00:00:00 2001 From: "Aditya N. Tripathi" Date: Sun, 10 Oct 2021 21:43:12 +0530 Subject: [PATCH 6/9] chore: minor oops --- .github/workflows/test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index b908c61a..16f8fd42 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -28,7 +28,7 @@ jobs: key: ${{ runner.os }}-${{ matrix.node_version }}-${{ hashFiles(matrix.os == 'windows-latest' && '**\yarn.lock' || '**/yarn.lock') }} - name: Install Dependencies run: | - yarn add git+https://{{secrets.MUSIC}}@github.com/PenguBot/music.git#build + yarn add git+https://${{secrets.MUSIC}}@github.com/PenguBot/music.git#build yarn - name: Test run: yarn test From e2d06c422867e640b04fc6b29868240c1453c286 Mon Sep 17 00:00:00 2001 From: "Aditya N. Tripathi" Date: Sun, 10 Oct 2021 21:58:39 +0530 Subject: [PATCH 7/9] chore: replace deps with new one --- package.json | 1 + src/commands/Utilities/translate.js | 2 +- yarn.lock | 30 +++++++++++++++++++++++++++++ 3 files changed, 32 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index 2a55ff54..abc20cb5 100644 --- a/package.json +++ b/package.json @@ -27,6 +27,7 @@ }, "homepage": "https://github.com/AdityaTD/PenguBot#readme", "dependencies": { + "@iamtraction/google-translate": "iamtraction/google-translate", "@k3rn31p4nic/google-translate-api": "^1.1.1", "@kcp/functions": "github:pengubot/functions#build", "@lavacord/discord.js": "^0.0.7", diff --git a/src/commands/Utilities/translate.js b/src/commands/Utilities/translate.js index 9c5632f3..2ae1c926 100644 --- a/src/commands/Utilities/translate.js +++ b/src/commands/Utilities/translate.js @@ -1,5 +1,5 @@ const { Command } = require("../../index"); -const translate = require("@k3rn31p4nic/google-translate-api"); +const translate = require("@iamtraction/google-translate"); module.exports = class extends Command { diff --git a/yarn.lock b/yarn.lock index ede9b625..737d9745 100644 --- a/yarn.lock +++ b/yarn.lock @@ -53,6 +53,19 @@ minimatch "^3.0.4" strip-json-comments "^3.1.1" +"@iamtraction/google-translate@https://github.com/iamtraction/google-translate.git": + version "1.1.3" + resolved "https://github.com/iamtraction/google-translate.git#363662416a4f33238c8dcb4e89bba5c4baae9df9" + dependencies: + got "^11.8.2" + +"@iamtraction/google-translate@iamtraction/google-translate": + version "1.1.3" + uid "363662416a4f33238c8dcb4e89bba5c4baae9df9" + resolved "https://codeload.github.com/iamtraction/google-translate/tar.gz/363662416a4f33238c8dcb4e89bba5c4baae9df9" + dependencies: + got "^11.8.2" + "@k3rn31p4nic/google-translate-api@^1.1.1": version "1.1.1" resolved "https://registry.yarnpkg.com/@k3rn31p4nic/google-translate-api/-/google-translate-api-1.1.1.tgz#3869854f7540bbb82afc1b61890281f5513e1717" @@ -844,6 +857,23 @@ got@^11.1.1: p-cancelable "^2.0.0" responselike "^2.0.0" +got@^11.8.2: + version "11.8.2" + resolved "https://registry.yarnpkg.com/got/-/got-11.8.2.tgz#7abb3959ea28c31f3576f1576c1effce23f33599" + integrity sha512-D0QywKgIe30ODs+fm8wMZiAcZjypcCodPNuMz5H9Mny7RJ+IjJ10BdmGW7OM7fHXP+O7r6ZwapQ/YQmMSvB0UQ== + dependencies: + "@sindresorhus/is" "^4.0.0" + "@szmarczak/http-timer" "^4.0.5" + "@types/cacheable-request" "^6.0.1" + "@types/responselike" "^1.0.0" + cacheable-lookup "^5.0.3" + cacheable-request "^7.0.1" + decompress-response "^6.0.0" + http2-wrapper "^1.0.0-beta.5.2" + lowercase-keys "^2.0.0" + p-cancelable "^2.0.0" + responselike "^2.0.0" + has-flag@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" From 25b63f203956327b133d15aff7593578fce55a45 Mon Sep 17 00:00:00 2001 From: "Aditya N. Tripathi" Date: Sun, 10 Oct 2021 22:00:08 +0530 Subject: [PATCH 8/9] chore: forgot to remove it --- package.json | 1 - 1 file changed, 1 deletion(-) diff --git a/package.json b/package.json index abc20cb5..244a831b 100644 --- a/package.json +++ b/package.json @@ -28,7 +28,6 @@ "homepage": "https://github.com/AdityaTD/PenguBot#readme", "dependencies": { "@iamtraction/google-translate": "iamtraction/google-translate", - "@k3rn31p4nic/google-translate-api": "^1.1.1", "@kcp/functions": "github:pengubot/functions#build", "@lavacord/discord.js": "^0.0.7", "@pengubot/music": "github:pengubot/music#build", From 085a51d94a2ab1581cdfd2f21027c362cb01a6a2 Mon Sep 17 00:00:00 2001 From: "Aditya N. Tripathi" Date: Thu, 4 Nov 2021 19:19:13 +0530 Subject: [PATCH 9/9] chore: update the readme --- README.md | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index a46681f5..03aaf1ae 100644 --- a/README.md +++ b/README.md @@ -7,10 +7,15 @@

-

PenguBot is mutli-purpose Discord Bot with over 43,000 guilds and 2,000,000 users.
+

PenguBot is mutli-purpose Discord Bot with over 45,500 guilds and 4,000,000 users.
Join Discord for Support and Development Discussions

+## Hosting +Get Instant Free €20 Credit on [Hetzner](https://bit.ly/HetznerCloudServers) with No Credit Card! Affordable and High Quality Hosting Services. + +[![Hetzner](https://i.imgur.com/YvwLdyZ.png)](https://bit.ly/HetznerCloudServers) + ## Contributors [Vlad](https://github.com/KingDGrizzle) - Help with Migration Script for Database @@ -42,13 +47,7 @@ Join Discord for Support and Developmen [Jacz](https://github.com/MrJacz) -## Hosting -High Quality Affordable Hosting [GalaxyGate](https://bit.ly/GalaxyGate). Visit the link by clicking the image below to know more! - -[![GalaxyGate](https://i.imgur.com/tTbWta8.png)](https://bit.ly/GalaxyGate) - ## Vote on Bot Lists to Support [![Discord Bots](https://discordbots.org/api/widget/303181184718995457.svg)](https://discordbots.org/bot/303181184718995457/vote) -[![Bots for Discord](https://botsfordiscord.com/api/bot/303181184718995457/widget)](https://botsfordiscord.com/bots/303181184718995457) [![Discord Bot List](https://discordbotlist.com/bots/303181184718995457/widget)](https://discordbotlist.com/bots/303181184718995457/upvote) [![Discord Boats](https://discord.boats/api/widget/303181184718995457)](https://discord.boats/bot/303181184718995457/vote)