diff --git a/Komugari-master/assets/json/actions.json b/Ajuda/Komugari-master/assets/json/actions.json
similarity index 99%
rename from Komugari-master/assets/json/actions.json
rename to Ajuda/Komugari-master/assets/json/actions.json
index aa1688f..79b16fd 100644
--- a/Komugari-master/assets/json/actions.json
+++ b/Ajuda/Komugari-master/assets/json/actions.json
@@ -20,7 +20,6 @@
],
"hugP": [
- "http://i.imgur.com/pZa9Ppe.gif",
"http://i.imgur.com/QghzxNa.gif",
"http://i.imgur.com/Z5DpKer.gif",
"http://i.imgur.com/J9EDW2g.gif",
diff --git a/Komugari-master/assets/json/errors.json b/Ajuda/Komugari-master/assets/json/errors.json
similarity index 100%
rename from Komugari-master/assets/json/errors.json
rename to Ajuda/Komugari-master/assets/json/errors.json
diff --git a/Komugari-master/assets/json/fortune.json b/Ajuda/Komugari-master/assets/json/fortune.json
similarity index 100%
rename from Komugari-master/assets/json/fortune.json
rename to Ajuda/Komugari-master/assets/json/fortune.json
diff --git a/Komugari-master/assets/json/iku.json b/Ajuda/Komugari-master/assets/json/iku.json
similarity index 100%
rename from Komugari-master/assets/json/iku.json
rename to Ajuda/Komugari-master/assets/json/iku.json
diff --git a/Komugari-master/assets/json/kaomoji.json b/Ajuda/Komugari-master/assets/json/kaomoji.json
similarity index 100%
rename from Komugari-master/assets/json/kaomoji.json
rename to Ajuda/Komugari-master/assets/json/kaomoji.json
diff --git a/Komugari-master/assets/json/pasta.json b/Ajuda/Komugari-master/assets/json/pasta.json
similarity index 100%
rename from Komugari-master/assets/json/pasta.json
rename to Ajuda/Komugari-master/assets/json/pasta.json
diff --git a/Komugari-master/assets/json/permissions.json b/Ajuda/Komugari-master/assets/json/permissions.json
similarity index 100%
rename from Komugari-master/assets/json/permissions.json
rename to Ajuda/Komugari-master/assets/json/permissions.json
diff --git a/Komugari-master/assets/json/pickuplines.json b/Ajuda/Komugari-master/assets/json/pickuplines.json
similarity index 100%
rename from Komugari-master/assets/json/pickuplines.json
rename to Ajuda/Komugari-master/assets/json/pickuplines.json
diff --git a/Komugari-master/assets/json/rightthere.json b/Ajuda/Komugari-master/assets/json/rightthere.json
similarity index 100%
rename from Komugari-master/assets/json/rightthere.json
rename to Ajuda/Komugari-master/assets/json/rightthere.json
diff --git a/Komugari-master/assets/json/skyrim.json b/Ajuda/Komugari-master/assets/json/skyrim.json
similarity index 100%
rename from Komugari-master/assets/json/skyrim.json
rename to Ajuda/Komugari-master/assets/json/skyrim.json
diff --git a/Komugari-master/assets/json/waifus.json b/Ajuda/Komugari-master/assets/json/waifus.json
similarity index 100%
rename from Komugari-master/assets/json/waifus.json
rename to Ajuda/Komugari-master/assets/json/waifus.json
diff --git a/Komugari-master/commands/README.md b/Ajuda/Komugari-master/commands/README.md
similarity index 100%
rename from Komugari-master/commands/README.md
rename to Ajuda/Komugari-master/commands/README.md
diff --git a/Komugari-master/commands/action/cry.js b/Ajuda/Komugari-master/commands/action/cry.js
similarity index 100%
rename from Komugari-master/commands/action/cry.js
rename to Ajuda/Komugari-master/commands/action/cry.js
diff --git a/Komugari-master/commands/action/disgust.js b/Ajuda/Komugari-master/commands/action/disgust.js
similarity index 100%
rename from Komugari-master/commands/action/disgust.js
rename to Ajuda/Komugari-master/commands/action/disgust.js
diff --git a/Komugari-master/commands/action/grope.js b/Ajuda/Komugari-master/commands/action/grope.js
similarity index 100%
rename from Komugari-master/commands/action/grope.js
rename to Ajuda/Komugari-master/commands/action/grope.js
diff --git a/Komugari-master/commands/action/hand.js b/Ajuda/Komugari-master/commands/action/hand.js
similarity index 100%
rename from Komugari-master/commands/action/hand.js
rename to Ajuda/Komugari-master/commands/action/hand.js
diff --git a/Komugari-master/commands/action/hug.js b/Ajuda/Komugari-master/commands/action/hug.js
similarity index 100%
rename from Komugari-master/commands/action/hug.js
rename to Ajuda/Komugari-master/commands/action/hug.js
diff --git a/Komugari-master/commands/action/kiss.js b/Ajuda/Komugari-master/commands/action/kiss.js
similarity index 100%
rename from Komugari-master/commands/action/kiss.js
rename to Ajuda/Komugari-master/commands/action/kiss.js
diff --git a/Komugari-master/commands/action/lewd.js b/Ajuda/Komugari-master/commands/action/lewd.js
similarity index 100%
rename from Komugari-master/commands/action/lewd.js
rename to Ajuda/Komugari-master/commands/action/lewd.js
diff --git a/Komugari-master/commands/action/lick.js b/Ajuda/Komugari-master/commands/action/lick.js
similarity index 100%
rename from Komugari-master/commands/action/lick.js
rename to Ajuda/Komugari-master/commands/action/lick.js
diff --git a/Komugari-master/commands/action/nobully.js b/Ajuda/Komugari-master/commands/action/nobully.js
similarity index 100%
rename from Komugari-master/commands/action/nobully.js
rename to Ajuda/Komugari-master/commands/action/nobully.js
diff --git a/Komugari-master/commands/action/nom.js b/Ajuda/Komugari-master/commands/action/nom.js
similarity index 100%
rename from Komugari-master/commands/action/nom.js
rename to Ajuda/Komugari-master/commands/action/nom.js
diff --git a/Komugari-master/commands/action/noswearing.js b/Ajuda/Komugari-master/commands/action/noswearing.js
similarity index 100%
rename from Komugari-master/commands/action/noswearing.js
rename to Ajuda/Komugari-master/commands/action/noswearing.js
diff --git a/Komugari-master/commands/action/nyan.js b/Ajuda/Komugari-master/commands/action/nyan.js
similarity index 100%
rename from Komugari-master/commands/action/nyan.js
rename to Ajuda/Komugari-master/commands/action/nyan.js
diff --git a/Komugari-master/commands/action/owo.js b/Ajuda/Komugari-master/commands/action/owo.js
similarity index 100%
rename from Komugari-master/commands/action/owo.js
rename to Ajuda/Komugari-master/commands/action/owo.js
diff --git a/Komugari-master/commands/action/pat.js b/Ajuda/Komugari-master/commands/action/pat.js
similarity index 100%
rename from Komugari-master/commands/action/pat.js
rename to Ajuda/Komugari-master/commands/action/pat.js
diff --git a/Komugari-master/commands/action/pout.js b/Ajuda/Komugari-master/commands/action/pout.js
similarity index 100%
rename from Komugari-master/commands/action/pout.js
rename to Ajuda/Komugari-master/commands/action/pout.js
diff --git a/Komugari-master/commands/action/slap.js b/Ajuda/Komugari-master/commands/action/slap.js
similarity index 100%
rename from Komugari-master/commands/action/slap.js
rename to Ajuda/Komugari-master/commands/action/slap.js
diff --git a/Komugari-master/commands/action/smug.js b/Ajuda/Komugari-master/commands/action/smug.js
similarity index 100%
rename from Komugari-master/commands/action/smug.js
rename to Ajuda/Komugari-master/commands/action/smug.js
diff --git a/Komugari-master/commands/action/stare.js b/Ajuda/Komugari-master/commands/action/stare.js
similarity index 100%
rename from Komugari-master/commands/action/stare.js
rename to Ajuda/Komugari-master/commands/action/stare.js
diff --git a/Komugari-master/commands/action/tickle.js b/Ajuda/Komugari-master/commands/action/tickle.js
similarity index 100%
rename from Komugari-master/commands/action/tickle.js
rename to Ajuda/Komugari-master/commands/action/tickle.js
diff --git a/Komugari-master/commands/action/wasted.js b/Ajuda/Komugari-master/commands/action/wasted.js
similarity index 100%
rename from Komugari-master/commands/action/wasted.js
rename to Ajuda/Komugari-master/commands/action/wasted.js
diff --git a/Komugari-master/commands/action/wink.js b/Ajuda/Komugari-master/commands/action/wink.js
similarity index 100%
rename from Komugari-master/commands/action/wink.js
rename to Ajuda/Komugari-master/commands/action/wink.js
diff --git a/Komugari-master/commands/fun/advice.js b/Ajuda/Komugari-master/commands/fun/advice.js
similarity index 100%
rename from Komugari-master/commands/fun/advice.js
rename to Ajuda/Komugari-master/commands/fun/advice.js
diff --git a/Komugari-master/commands/fun/dadjoke.js b/Ajuda/Komugari-master/commands/fun/dadjoke.js
similarity index 100%
rename from Komugari-master/commands/fun/dadjoke.js
rename to Ajuda/Komugari-master/commands/fun/dadjoke.js
diff --git a/Komugari-master/commands/fun/fortune.js b/Ajuda/Komugari-master/commands/fun/fortune.js
similarity index 100%
rename from Komugari-master/commands/fun/fortune.js
rename to Ajuda/Komugari-master/commands/fun/fortune.js
diff --git a/Komugari-master/commands/fun/garfield.js b/Ajuda/Komugari-master/commands/fun/garfield.js
similarity index 100%
rename from Komugari-master/commands/fun/garfield.js
rename to Ajuda/Komugari-master/commands/fun/garfield.js
diff --git a/Komugari-master/commands/fun/giphy.js b/Ajuda/Komugari-master/commands/fun/giphy.js
similarity index 100%
rename from Komugari-master/commands/fun/giphy.js
rename to Ajuda/Komugari-master/commands/fun/giphy.js
diff --git a/Komugari-master/commands/fun/kaomoji.js b/Ajuda/Komugari-master/commands/fun/kaomoji.js
similarity index 100%
rename from Komugari-master/commands/fun/kaomoji.js
rename to Ajuda/Komugari-master/commands/fun/kaomoji.js
diff --git a/Komugari-master/commands/fun/pasta.js b/Ajuda/Komugari-master/commands/fun/pasta.js
similarity index 100%
rename from Komugari-master/commands/fun/pasta.js
rename to Ajuda/Komugari-master/commands/fun/pasta.js
diff --git a/Komugari-master/commands/fun/pickup.js b/Ajuda/Komugari-master/commands/fun/pickup.js
similarity index 100%
rename from Komugari-master/commands/fun/pickup.js
rename to Ajuda/Komugari-master/commands/fun/pickup.js
diff --git a/Komugari-master/commands/fun/rightthere.js b/Ajuda/Komugari-master/commands/fun/rightthere.js
similarity index 100%
rename from Komugari-master/commands/fun/rightthere.js
rename to Ajuda/Komugari-master/commands/fun/rightthere.js
diff --git a/Komugari-master/commands/fun/skyrim.js b/Ajuda/Komugari-master/commands/fun/skyrim.js
similarity index 100%
rename from Komugari-master/commands/fun/skyrim.js
rename to Ajuda/Komugari-master/commands/fun/skyrim.js
diff --git a/Komugari-master/commands/info/avatar.js b/Ajuda/Komugari-master/commands/info/avatar.js
similarity index 100%
rename from Komugari-master/commands/info/avatar.js
rename to Ajuda/Komugari-master/commands/info/avatar.js
diff --git a/Komugari-master/commands/info/role.js b/Ajuda/Komugari-master/commands/info/role.js
similarity index 100%
rename from Komugari-master/commands/info/role.js
rename to Ajuda/Komugari-master/commands/info/role.js
diff --git a/Komugari-master/commands/moderation/lockdown.js b/Ajuda/Komugari-master/commands/moderation/lockdown.js
similarity index 100%
rename from Komugari-master/commands/moderation/lockdown.js
rename to Ajuda/Komugari-master/commands/moderation/lockdown.js
diff --git a/Komugari-master/commands/utility/color.js b/Ajuda/Komugari-master/commands/utility/color.js
similarity index 100%
rename from Komugari-master/commands/utility/color.js
rename to Ajuda/Komugari-master/commands/utility/color.js
diff --git a/Komugari-master/commands/utility/jisho.js b/Ajuda/Komugari-master/commands/utility/jisho.js
similarity index 100%
rename from Komugari-master/commands/utility/jisho.js
rename to Ajuda/Komugari-master/commands/utility/jisho.js
diff --git a/Komugari-master/commands/utility/remindme.js b/Ajuda/Komugari-master/commands/utility/remindme.js
similarity index 100%
rename from Komugari-master/commands/utility/remindme.js
rename to Ajuda/Komugari-master/commands/utility/remindme.js
diff --git a/Komugari-master/commands/utility/steam.js b/Ajuda/Komugari-master/commands/utility/steam.js
similarity index 100%
rename from Komugari-master/commands/utility/steam.js
rename to Ajuda/Komugari-master/commands/utility/steam.js
diff --git a/Komugari-master/commands/utility/temperature.js b/Ajuda/Komugari-master/commands/utility/temperature.js
similarity index 100%
rename from Komugari-master/commands/utility/temperature.js
rename to Ajuda/Komugari-master/commands/utility/temperature.js
diff --git a/Komugari-master/commands/utility/time.js b/Ajuda/Komugari-master/commands/utility/time.js
similarity index 100%
rename from Komugari-master/commands/utility/time.js
rename to Ajuda/Komugari-master/commands/utility/time.js
diff --git a/Komugari-master/commands/utility/weather.js b/Ajuda/Komugari-master/commands/utility/weather.js
similarity index 100%
rename from Komugari-master/commands/utility/weather.js
rename to Ajuda/Komugari-master/commands/utility/weather.js
diff --git a/Ajuda/guide-master/.circleci/config.yml b/Ajuda/guide-master/.circleci/config.yml
deleted file mode 100644
index 089d77e..0000000
--- a/Ajuda/guide-master/.circleci/config.yml
+++ /dev/null
@@ -1,39 +0,0 @@
-# Javascript Node CircleCI 2.0 configuration file
-#
-# Check https://circleci.com/docs/2.0/language-javascript/ for more details
-#
-version: 2
-jobs:
- build:
- docker:
- # specify the version you desire here
- - image: circleci/node:8.10
-
- # Specify service dependencies here if necessary
- # CircleCI maintains a library of pre-built images
- # documented at https://circleci.com/docs/2.0/circleci-images/
- # - image: circleci/mongo:3.4.4
-
- working_directory: ~/guide
-
- steps:
- - checkout
-
- # Download and cache dependencies
- - restore_cache:
- name: Restore Yarn Package Cache
- keys:
- - yarn-packages-{{ checksum "yarn.lock" }}
-
- - run:
- name: Install Dependencies
- command: yarn install
-
- - save_cache:
- name: Save Yarn Package Cache
- key: yarn-packages-{{ checksum "yarn.lock" }}
- paths:
- - ~/.cache/yarn
-
- # run tests!
- - run: yarn lint
diff --git a/Ajuda/guide-master/.editorconfig b/Ajuda/guide-master/.editorconfig
deleted file mode 100644
index 2d120e1..0000000
--- a/Ajuda/guide-master/.editorconfig
+++ /dev/null
@@ -1,11 +0,0 @@
-root = true
-
-[*.{css,js,jsx,md,scss,ts,tsx,vue}]
-end_of_line = lf
-indent_size = 4
-indent_style = tab
-insert_final_newline = true
-trim_trailing_whitespace = true
-
-[*.md]
-trim_trailing_whitespace = false
diff --git a/Ajuda/guide-master/.eslintignore b/Ajuda/guide-master/.eslintignore
deleted file mode 100644
index 198b9c5..0000000
--- a/Ajuda/guide-master/.eslintignore
+++ /dev/null
@@ -1,2 +0,0 @@
-!/guide/.vuepress
-guide/.vuepress/dist
diff --git a/Ajuda/guide-master/.eslintrc.js b/Ajuda/guide-master/.eslintrc.js
deleted file mode 100644
index 9d9f39d..0000000
--- a/Ajuda/guide-master/.eslintrc.js
+++ /dev/null
@@ -1,4 +0,0 @@
-module.exports = {
- extends: 'sora/vue',
- plugins: ['markdown'],
-};
diff --git a/Ajuda/guide-master/.github/ISSUE_TEMPLATE/branching-content.md b/Ajuda/guide-master/.github/ISSUE_TEMPLATE/branching-content.md
deleted file mode 100644
index 0952512..0000000
--- a/Ajuda/guide-master/.github/ISSUE_TEMPLATE/branching-content.md
+++ /dev/null
@@ -1,13 +0,0 @@
----
-name: Branching Content
-about: Content is missing for a certain version and requires branching sections
- or code samples
-labels: 'type: enhancement','meta: branching'
-
----
-
-**Part of the guide or code sample that needs a branching update**
-
-
-**Additional notes**
-
\ No newline at end of file
diff --git a/Ajuda/guide-master/.github/ISSUE_TEMPLATE/bug_report.md b/Ajuda/guide-master/.github/ISSUE_TEMPLATE/bug_report.md
deleted file mode 100644
index c610f49..0000000
--- a/Ajuda/guide-master/.github/ISSUE_TEMPLATE/bug_report.md
+++ /dev/null
@@ -1,27 +0,0 @@
----
-name: Bug report
-about: Create a report to help us improve
-labels: 'type: bug'
-
----
-
-**Describe the bug**
-
-
-**To Reproduce**
-
-
-**Screenshots**
-
-
-**Device (please complete the following information):**
-
-
-**Additional notes**
-
\ No newline at end of file
diff --git a/Ajuda/guide-master/.github/ISSUE_TEMPLATE/config.yml b/Ajuda/guide-master/.github/ISSUE_TEMPLATE/config.yml
deleted file mode 100644
index e2f857b..0000000
--- a/Ajuda/guide-master/.github/ISSUE_TEMPLATE/config.yml
+++ /dev/null
@@ -1,8 +0,0 @@
-blank_issues_enabled: false
-contact_links:
- - name: discord.js discord server
- url: https://discord.gg/bRCvFy9
- about: Please use this Discord Server to ask questions and get support on discord.js. We don't typically answer questions here and they will likely be closed and redirected to the Discord server.
- - name: discord.js Github repository issues page
- url: https://github.com/discordjs/discord.js/issues/new/choose
- about: Please use this issue tracker to suggest new features and/or report bugs about discord.js itself.
diff --git a/Ajuda/guide-master/.github/ISSUE_TEMPLATE/feature_request.md b/Ajuda/guide-master/.github/ISSUE_TEMPLATE/feature_request.md
deleted file mode 100644
index d7d45b4..0000000
--- a/Ajuda/guide-master/.github/ISSUE_TEMPLATE/feature_request.md
+++ /dev/null
@@ -1,18 +0,0 @@
----
-name: Feature request
-about: Suggest an idea for this project
-labels: 'type: request/suggestion'
-
----
-
-**Is your feature request related to a problem? Please describe.**
-
-
-**Describe the solution you'd like**
-
-
-**Describe alternatives you've considered**
-
-
-**Additional notes**
-
\ No newline at end of file
diff --git a/Ajuda/guide-master/.github/ISSUE_TEMPLATE/question.md b/Ajuda/guide-master/.github/ISSUE_TEMPLATE/question.md
deleted file mode 100644
index a33337d..0000000
--- a/Ajuda/guide-master/.github/ISSUE_TEMPLATE/question.md
+++ /dev/null
@@ -1,16 +0,0 @@
----
-name: Question/General support request
-about: This template is for asking questions about the guide.
-labels: 'type: question'
----
-
-
-
-**Part of the guide or code sample the question is about**
-
-
-**Question**
-
diff --git a/Ajuda/guide-master/.github/PULL_REQUEST_TEMPLATE/bug_fix.md b/Ajuda/guide-master/.github/PULL_REQUEST_TEMPLATE/bug_fix.md
deleted file mode 100644
index 8ec45ce..0000000
--- a/Ajuda/guide-master/.github/PULL_REQUEST_TEMPLATE/bug_fix.md
+++ /dev/null
@@ -1,12 +0,0 @@
----
-name: Bug fix
-about: Fixed a bug
-labels: 'type: bug fix'
-
----
-
-**Describe the bug**
-
-
-**Additional notes**
-
\ No newline at end of file
diff --git a/Ajuda/guide-master/.github/PULL_REQUEST_TEMPLATE/typo_fix.md b/Ajuda/guide-master/.github/PULL_REQUEST_TEMPLATE/typo_fix.md
deleted file mode 100644
index 0fc00bd..0000000
--- a/Ajuda/guide-master/.github/PULL_REQUEST_TEMPLATE/typo_fix.md
+++ /dev/null
@@ -1,9 +0,0 @@
----
-name: Typo fix
-about: Fixed a typo
-labels: 'type: spelling/grammar'
-
----
-
-**Spelling/Grammar fix**
-**This Pull Request does not include any semantical changes**
\ No newline at end of file
diff --git a/Ajuda/guide-master/.gitignore b/Ajuda/guide-master/.gitignore
deleted file mode 100644
index 84160b5..0000000
--- a/Ajuda/guide-master/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-node_modules
-guide/.vuepress/dist
diff --git a/Ajuda/guide-master/CONTRIBUTING.md b/Ajuda/guide-master/CONTRIBUTING.md
deleted file mode 100644
index 8962de5..0000000
--- a/Ajuda/guide-master/CONTRIBUTING.md
+++ /dev/null
@@ -1,280 +0,0 @@
-# Contributing
-
-## Local development
-
-Clone the repo into your desired folder, `cd` into it, and install the dependencies.
-
-```bash
-git clone https://github.com/discordjs/guide.git
-cd guide
-yarn # or npm install
-```
-
-You should install the necessary dev dependencies afterwards, so that view the site locally. You can use `yarn serve` to open up a local version of the site at http://localhost:8080. If you need to use a different port, run it as `yarn serve --port=1234`.
-
-### Linting
-
-Remember to always lint your edits/additions before making a commit to ensure everything's lined up and consistent with the rest of the guide. We use ESLint and have a package.json script for linting both JS files and JS codeblocks inside Markdown files. Just install the dependencies and run the lint script.
-
-```bash
-yarn
-yarn lint
-```
-
-#### Caveats
-
-There might come a time where a snippet will contain a parse error, and ESLint won't be able to lint it properly. For example:
-
-
-
-```js
-const sent = await message.channel.send('Hi!');
-console.log(sent.content)
-```
-
-ESLint would error with `Parsing error: Unexpected token message` instead of letting you know that you're missing a semicolon. In this case, it's because of the use of `await` outside of an async function. In situations like this, after you've fixed any obvious errors, you can add an `` comment above the codeblock to have it ignored entirely by ESLint when running the lint script.
-
-## Adding pages
-
-To add a new page to the guide, create a `file-name.md` file inside the folder of your choice. If you want to link to `/dir/some-tutorial.html`, you would create a `some-tutorial.md` file inside a `dir` folder. [VuePress](https://github.com/vuejs/vuepress) will pick up on it and set up the routing appropriately.
-
-With that being said, you will still need to add the link to the sidebar manually. Go to the `/guide/.vuepress/sidebar.js` file and insert a new item with the path to your newly created page.
-
-## General guidelines
-
-Because we want to keep everything as consistent and clean as possible, here are some guidelines we strongly recommend you try to follow when making a contribution.
-
-### Spelling, grammar, and wording
-
-Improper grammar, strange wording, and incorrect spelling are all things that may lead to confusion when a user reads a guide page. It's very important to attempt to keep the content clear and concise. Re-read what you've written and place yourself in the shoes of someone else for a moment to see if you can fully understand everything without any confusion.
-
-Don't worry if you aren't super confident with your grammar/spelling/wording skills; all pull requests get thoroughly reviewed, and comments are left in areas that need to be fixed or could be done better/differently.
-
-#### "You"/"your" instead of "we"/"our"
-
-When explaining parts of a guide, it'd recommended to use "you" instead of "we" in most situations. For example:
-
-```diff
-- To check our Node version, we can run `node -v`.
-+ To check your Node version, you can run `node -v`.
-
-- To delete a message, we can do: `message.delete();`
-+ To delete a message, you can do: `message.delete();`
-
-- Our final code should look like this: ...
-+ Your final code should look like this: ...
-
-- Before we can actually do this, we need to update our configuration file.
-+ Before you can actually do this, you need to update your configuration file.
-```
-
-#### "We" instead of "I"
-
-When refering to yourself, use "we" (as in "the writers of this guide") instead of "I". For example:
-
-```diff
-- If you don't already have this package installed, I would highly recommend doing so.
-+ If you don't already have this package installed, we would highly recommend doing so.
-# Valid alternative:
-+ If you don't already have this package installed, it's highly recommended that you do so.
-
-- In this section, I'll be covering how to do that really cool thing everyone's asking about.
-+ In this section, we'll be covering how to do that really cool thing everyone's asking about.
-```
-
-### Paragraph structure
-
-Tied in with the section above, try to keep things as neatly formatted as possible! If a paragraph gets long, split it up into multiple paragraphs so that it adds some spacing and is easier on the eyes.
-
-#### Tips, warnings, and danger messages
-
-If you have a tip to share with to user, you can format them in a specific way so that it looks appealing and noticable. The same goes for warning and "danger" messages.
-
-```md
-In this section, we'll be doing some stuff!
-
-::: tip
-You can do this stuff even faster if you do this cool thing listed in this tip!
-:::
-
-::: warning
-Make sure you're on version 2.0.0 or above before trying this.
-:::
-
-::: danger
-Be careful; this action is irreversible!
-:::
-```
-
-
-
-### General styling
-
-#### Spacing between entities
-
-Even though this generally does not affect the actual output, you should space out your entities with a single blank line between them; it keeps the source code clean and easier to read. For example:
-
-```md
-## Section title
-
-Here's an example of how you'd do that really cool thing:
-
-```js
-const { data } = request;
-console.log(data);
-```
-
-And here's a sentence that would explain how that works, maybe.
-
-::: tip
-Here's where you'd tell them something even cooler than the really cool thing they just learned.
-:::
-
-::: warning
-This is where you'd warn them about the possible issues that arise when using this method.
-:::
-```
-
-#### Headers and sidebar links
-
-Section headers and sidebar links should generally be short and right to the point. In terms of casing, it should be cased as if it were a regular sentence.
-
-```diff
-# Assuming the page is titled "Embeds"
-- ## How To Make Inline Fields In An Embed
-+ ## Inline fields
-
-# Assuming the page is titled "Webhooks"
-- ## Setting An Avatar On Your Webhook Client
-+ ## Setting an avatar
-```
-
-#### References to code
-
-When making references to pieces of code (e.g. variables, properties, etc.), place those references inside backticks. For example:
-
-```md
-After accessing the `icon` property off of the `data` object, you can send that as a file to Discord.
-
----
-
-If you want to change your bot's username username, you can use the `ClientUser#setUsername` method.
-```
-
-References to class names should be capitalized, but remain outside of backticks. For example:
-
-```md
-Since `guild.members` returns a Collection, we can interate over it with `.forEach()` or a `for ... of` loop.
-
----
-
-Since the `.delete()` method returns a Promise, we need to `await` it when inside a `try`/`catch` block.
-```
-
-### Images and links
-
-If you want to include an image in a page, the image you add should be saved to the repo itself instead of using external services. If you want to link to other sections of the guide, be sure to use relative paths instead of full URLs to the live site. For example:
-
-```diff
-- Here's what the final result would look like:
--
-- 
--
-- If you want to read more about this, you can check out the page on [that other cool stuff](https://discordjs.guide/#/some-really-cool-stuff).
-
-+ Here's what the final result would look like:
-+
-+ 
-+
-+ If you want to read more about this, you can check out the page on [that other cool stuff](/some-really-cool-stuff).
-```
-
-Do note the `~@/images/*` syntax used. The `~@/` part is a shortcut to the base `/guide` directory, which holds all the .md files and the `/images` folder. When it comes to images, this syntax should always be used.
-
-### Code samples
-
-If you're writing a page that teaches the reader how to build something step-by-step, make sure to include the final piece of code in a file inside the `/code-samples` directory. The folder destination inside the `/code-samples` folder should match the destination inside the `/guide` folder. For example: `guide/foo/bar.md` -> `code-samples/foo/bar/index.js`.
-
-```md
-
-## Resulting code
-
-
-
-```
-
-This will automatically generate the link to the proper directory on GitHub for that specific page. Should you need to overwrite the path, you can do so:
-
-```md
-
-## Resulting code
-
-
-
-
-
-
-```
-
-### Faking Discord messages
-
-We have some useful custom helper components that you can use to "fake" Discord message. The reason for this is to make it easy for you to create, easy for anyone in the future to edit, and avoid having to take screenshots and using too many images on a page at once. Here's a preview of the components:
-
-
-
-The syntax to make this display is quite simple as well:
-
-```html
-
-
- !ping
-
-
- Pong! Took 250ms
-
-
-```
-
-The `author` and `avatar` attributes must be strings, and the `bot` attribute must be a boolean. Do note the colon in `:bot="true"`. These components are made with Vue, but if you aren't familiar with Vue, don't worry about it. Just understand that this allows us to pass in the actual boolean `true` and not the string `'true'`. All `` tags must be children of a single `
` tag for it to display properly.
-
-Do note the `
` syntax instead of ``. This is due to how VuePress renders markdown and HTML inside markdown files and doesn't recognize `` as an HTML element, therefore rendering anything indented inside as a regular codeblock.
-
-You can read more about how to use these components by checking out [the package's GitHub repo](https://github.com/Danktuary/vue-discord-message).
-
-### Branch-specific content
-
-On some pages, you'll want to display content that applies only to the stable branch and other content that applies to a different branch. You can use the `` component inside any .md file like so:
-
-```md
-You can use
-`message.channel.fetchMessages()`
-`message.channel.messages.fetch()`
-to fetch all messages in a channel
-```
-
-If you're on the `11.x` branch, you'd see "You can use `message.channel.fetchMessages()` to fetch all messages in a channel. Use the `inline` attribute to make content display inline with the content around it. Otherwise, it'll be displayed on its own line.
-
-You can refer to the `guide/.vuepress/branches.js` file to see which values are valid to use for the `version` attribute.
-
-#### Codeblocks and other markdown
-
-A common use-case for this component would be with codeblocks. Using Vue components inside markdown can get tricky and cause weird errors, so in order for everything to render properly, an extra blank line should be added before and after the component tag. For example (ignoring the `\` before the backticks):
-
-```md
-You can use the following to fetch all messages in a channel:
-
-
-
-\```js
-message.channel.fetchMessages();
-\```
-
-
-
-
-\```js
-message.channel.messages.fetch();
-\```
-
-
-```
diff --git a/Ajuda/guide-master/README.md b/Ajuda/guide-master/README.md
deleted file mode 100644
index 54eecfe..0000000
--- a/Ajuda/guide-master/README.md
+++ /dev/null
@@ -1,24 +0,0 @@
-
-
-
-
-# Discord.js Guide
-
-The official guide for [discord.js](https://github.com/discordjs/discord.js), created and maintained by core members of its community and contributed to by [various others](https://github.com/discordjs/guide/graphs/contributors?type=a).
-
-## About
-
-This guide is aimed at users who are either unfamiliar or inexperienced with Node.js and creating Discord bots. It assumes you have a basic understanding of JavaScript.
-
-There are many different subjects covered, such as:
-
-- How to get a bot [up and running](https://discordjs.guide/#/preparations/) from scratch;
-- How to properly [create](https://discordjs.guide/#/creating-your-bot/), [organize](https://discordjs.guide/#/command-handling/), and [expand](https://discordjs.guide/#/command-handling/adding-features) on your commands;
-- In-depth explanations and examples regarding popular topics (e.g. [reactions](https://discordjs.guide/#/popular-topics/reactions), [embeds](https://discordjs.guide/#/popular-topics/embeds), [canvas](https://discordjs.guide/#/popular-topics/canvas));
-- Working with databases (e.g. [sequelize](https://discordjs.guide/#/sequelize/) and [keyv](https://discordjs.guide/#/keyv/));
-- Getting started with [sharding](https://discordjs.guide/#/sharding/);
-- And much more.
-
-## Contributing
-
-If you're interested in contributing to the guide, you should check out our [GitHub Projects](https://github.com/discordjs/guide/projects) page or [open issues](https://github.com/discordjs/guide/issues). There's a [contribution guide](https://github.com/discordjs/guide/blob/master/CONTRIBUTING.md) you should read once you decide on what you want to contribute.
diff --git a/Ajuda/guide-master/code-samples/.eslintrc.js b/Ajuda/guide-master/code-samples/.eslintrc.js
deleted file mode 100644
index cea0fd9..0000000
--- a/Ajuda/guide-master/code-samples/.eslintrc.js
+++ /dev/null
@@ -1,8 +0,0 @@
-const path = require('path');
-
-module.exports = {
- extends: path.join(__dirname, '..', '.eslintrc.js'),
- env: {
- node: true,
- },
-};
diff --git a/Ajuda/guide-master/code-samples/additional-info/rest-api/11/index.js b/Ajuda/guide-master/code-samples/additional-info/rest-api/11/index.js
deleted file mode 100644
index cf5d200..0000000
--- a/Ajuda/guide-master/code-samples/additional-info/rest-api/11/index.js
+++ /dev/null
@@ -1,51 +0,0 @@
-const Discord = require('discord.js');
-const fetch = require('node-fetch');
-const querystring = require('querystring');
-
-const client = new Discord.Client();
-const prefix = '!';
-
-const trim = (str, max) => str.length > max ? `${str.slice(0, max - 3)}...` : str;
-
-client.once('ready', () => {
- console.log('Ready!');
-});
-
-client.on('message', async message => {
- if (!message.content.startsWith(prefix) || message.author.bot) return;
-
- const args = message.content.slice(prefix.length).split(/ +/);
- const command = args.shift().toLowerCase();
-
- if (command === 'cat') {
- const { file } = await fetch('https://aws.random.cat/meow').then(response => response.json());
-
- message.channel.send(file);
- } else if (command === 'urban') {
- if (!args.length) {
- return message.channel.send('You need to supply a search term!');
- }
-
- const query = querystring.stringify({ term: args.join(' ') });
-
- const { list } = await fetch(`https://api.urbandictionary.com/v0/define?${query}`).then(response => response.json());
-
- if (!list.length) {
- return message.channel.send(`No results found for **${args.join(' ')}**.`);
- }
-
- const [answer] = list;
-
- const embed = new Discord.RichEmbed()
- .setColor('#EFFF00')
- .setTitle(answer.word)
- .setURL(answer.permalink)
- .addField('Definition', trim(answer.definition, 1024))
- .addField('Example', trim(answer.example, 1024))
- .addField('Rating', `${answer.thumbs_up} thumbs up. ${answer.thumbs_down} thumbs down.`);
-
- message.channel.send(embed);
- }
-});
-
-client.login('your-token-goes-here');
diff --git a/Ajuda/guide-master/code-samples/additional-info/rest-api/12/index.js b/Ajuda/guide-master/code-samples/additional-info/rest-api/12/index.js
deleted file mode 100644
index aa52d6a..0000000
--- a/Ajuda/guide-master/code-samples/additional-info/rest-api/12/index.js
+++ /dev/null
@@ -1,51 +0,0 @@
-const Discord = require('discord.js');
-const fetch = require('node-fetch');
-const querystring = require('querystring');
-
-const client = new Discord.Client();
-const prefix = '!';
-
-const trim = (str, max) => (str.length > max ? `${str.slice(0, max - 3)}...` : str);
-
-client.once('ready', () => {
- console.log('Ready!');
-});
-
-client.on('message', async message => {
- if (!message.content.startsWith(prefix) || message.author.bot) return;
-
- const args = message.content.slice(prefix.length).split(/ +/);
- const command = args.shift().toLowerCase();
-
- if (command === 'cat') {
- const { file } = await fetch('https://aws.random.cat/meow').then(response => response.json());
-
- message.channel.send(file);
- } else if (command === 'urban') {
- if (!args.length) {
- return message.channel.send('You need to supply a search term!');
- }
-
- const query = querystring.stringify({ term: args.join(' ') });
-
- const { list } = await fetch(`https://api.urbandictionary.com/v0/define?${query}`).then(response => response.json());
-
- if (!list.length) {
- return message.channel.send(`No results found for **${args.join(' ')}**.`);
- }
-
- const [answer] = list;
-
- const embed = new Discord.MessageEmbed()
- .setColor('#EFFF00')
- .setTitle(answer.word)
- .setURL(answer.permalink)
- .addField('Definition', trim(answer.definition, 1024))
- .addField('Example', trim(answer.example, 1024))
- .addField('Rating', `${answer.thumbs_up} thumbs up. ${answer.thumbs_down} thumbs down.`);
-
- message.channel.send(embed);
- }
-});
-
-client.login('your-token-goes-here');
diff --git a/Ajuda/guide-master/code-samples/command-handling/adding-features/11/commands/args-info.js b/Ajuda/guide-master/code-samples/command-handling/adding-features/11/commands/args-info.js
deleted file mode 100644
index 289f544..0000000
--- a/Ajuda/guide-master/code-samples/command-handling/adding-features/11/commands/args-info.js
+++ /dev/null
@@ -1,12 +0,0 @@
-module.exports = {
- name: 'args-info',
- description: 'Information about the arguments provided.',
- args: true,
- execute(message, args) {
- if (args[0] === 'foo') {
- return message.channel.send('bar');
- }
-
- message.channel.send(`First argument: ${args[0]}`);
- },
-};
diff --git a/Ajuda/guide-master/code-samples/command-handling/adding-features/11/commands/avatar.js b/Ajuda/guide-master/code-samples/command-handling/adding-features/11/commands/avatar.js
deleted file mode 100644
index c213c3c..0000000
--- a/Ajuda/guide-master/code-samples/command-handling/adding-features/11/commands/avatar.js
+++ /dev/null
@@ -1,16 +0,0 @@
-module.exports = {
- name: 'avatar',
- description: 'Get the avatar URL of the tagged user(s), or your own avatar.',
- aliases: ['icon', 'pfp'],
- execute(message) {
- if (!message.mentions.users.size) {
- return message.channel.send(`Your avatar: <${message.author.displayAvatarURL}>`);
- }
-
- const avatarList = message.mentions.users.map(user => {
- return `${user.username}'s avatar: <${user.displayAvatarURL}>`;
- });
-
- message.channel.send(avatarList);
- },
-};
diff --git a/Ajuda/guide-master/code-samples/command-handling/adding-features/11/commands/beep.js b/Ajuda/guide-master/code-samples/command-handling/adding-features/11/commands/beep.js
deleted file mode 100644
index e3345e9..0000000
--- a/Ajuda/guide-master/code-samples/command-handling/adding-features/11/commands/beep.js
+++ /dev/null
@@ -1,7 +0,0 @@
-module.exports = {
- name: 'beep',
- description: 'Beep!',
- execute(message) {
- message.channel.send('Boop.');
- },
-};
diff --git a/Ajuda/guide-master/code-samples/command-handling/adding-features/11/commands/help.js b/Ajuda/guide-master/code-samples/command-handling/adding-features/11/commands/help.js
deleted file mode 100644
index 1f08793..0000000
--- a/Ajuda/guide-master/code-samples/command-handling/adding-features/11/commands/help.js
+++ /dev/null
@@ -1,46 +0,0 @@
-const { prefix } = require('../config.json');
-
-module.exports = {
- name: 'help',
- description: 'List all of my commands or info about a specific command.',
- aliases: ['commands'],
- usage: '[command name]',
- cooldown: 5,
- execute(message, args) {
- const data = [];
- const { commands } = message.client;
-
- if (!args.length) {
- data.push('Here\'s a list of all my commands:');
- data.push(commands.map(command => command.name).join(', '));
- data.push(`\nYou can send \`${prefix}help [command name]\` to get info on a specific command!`);
-
- return message.author.send(data, { split: true })
- .then(() => {
- if (message.channel.type === 'dm') return;
- message.reply('I\'ve sent you a DM with all my commands!');
- })
- .catch(error => {
- console.error(`Could not send help DM to ${message.author.tag}.\n`, error);
- message.reply('it seems like I can\'t DM you!');
- });
- }
-
- const name = args[0].toLowerCase();
- const command = commands.get(name) || commands.find(c => c.aliases && c.aliases.includes(name));
-
- if (!command) {
- return message.reply('that\'s not a valid command!');
- }
-
- data.push(`**Name:** ${command.name}`);
-
- if (command.aliases) data.push(`**Aliases:** ${command.aliases.join(', ')}`);
- if (command.description) data.push(`**Description:** ${command.description}`);
- if (command.usage) data.push(`**Usage:** ${prefix}${command.name} ${command.usage}`);
-
- data.push(`**Cooldown:** ${command.cooldown || 3} second(s)`);
-
- message.channel.send(data, { split: true });
- },
-};
diff --git a/Ajuda/guide-master/code-samples/command-handling/adding-features/11/commands/kick.js b/Ajuda/guide-master/code-samples/command-handling/adding-features/11/commands/kick.js
deleted file mode 100644
index 8428e8d..0000000
--- a/Ajuda/guide-master/code-samples/command-handling/adding-features/11/commands/kick.js
+++ /dev/null
@@ -1,14 +0,0 @@
-module.exports = {
- name: 'kick',
- description: 'Tag a member and kick them (but not really).',
- guildOnly: true,
- execute(message) {
- if (!message.mentions.users.size) {
- return message.reply('you need to tag a user in order to kick them!');
- }
-
- const taggedUser = message.mentions.users.first();
-
- message.channel.send(`You wanted to kick: ${taggedUser.username}`);
- },
-};
diff --git a/Ajuda/guide-master/code-samples/command-handling/adding-features/11/commands/ping.js b/Ajuda/guide-master/code-samples/command-handling/adding-features/11/commands/ping.js
deleted file mode 100644
index 8e6810f..0000000
--- a/Ajuda/guide-master/code-samples/command-handling/adding-features/11/commands/ping.js
+++ /dev/null
@@ -1,8 +0,0 @@
-module.exports = {
- name: 'ping',
- description: 'Ping!',
- cooldown: 5,
- execute(message) {
- message.channel.send('Pong.');
- },
-};
diff --git a/Ajuda/guide-master/code-samples/command-handling/adding-features/11/commands/prune.js b/Ajuda/guide-master/code-samples/command-handling/adding-features/11/commands/prune.js
deleted file mode 100644
index 94f20cc..0000000
--- a/Ajuda/guide-master/code-samples/command-handling/adding-features/11/commands/prune.js
+++ /dev/null
@@ -1,18 +0,0 @@
-module.exports = {
- name: 'prune',
- description: 'Prune up to 99 messages.',
- execute(message, args) {
- const amount = parseInt(args[0]) + 1;
-
- if (isNaN(amount)) {
- return message.reply('that doesn\'t seem to be a valid number.');
- } else if (amount <= 1 || amount > 100) {
- return message.reply('you need to input a number between 1 and 99.');
- }
-
- message.channel.bulkDelete(amount, true).catch(err => {
- console.error(err);
- message.channel.send('there was an error trying to prune messages in this channel!');
- });
- },
-};
diff --git a/Ajuda/guide-master/code-samples/command-handling/adding-features/11/commands/reload.js b/Ajuda/guide-master/code-samples/command-handling/adding-features/11/commands/reload.js
deleted file mode 100644
index 84cee46..0000000
--- a/Ajuda/guide-master/code-samples/command-handling/adding-features/11/commands/reload.js
+++ /dev/null
@@ -1,25 +0,0 @@
-module.exports = {
- name: 'reload',
- description: 'Reloads a command',
- args: true,
- execute(message, args) {
- const commandName = args[0].toLowerCase();
- const command = message.client.commands.get(commandName)
- || message.client.commands.find(cmd => cmd.aliases && cmd.aliases.includes(commandName));
-
- if (!command) {
- return message.channel.send(`There is no command with name or alias \`${commandName}\`, ${message.author}!`);
- }
-
- delete require.cache[require.resolve(`./${commandName}.js`)];
-
- try {
- const newCommand = require(`./${commandName}.js`);
- message.client.commands.set(newCommand.name, newCommand);
- } catch (error) {
- console.log(error);
- return message.channel.send(`There was an error while reloading a command \`${commandName}\`:\n\`${error.message}\``);
- }
- message.channel.send(`Command \`${commandName}\` was reloaded!`);
- },
-};
diff --git a/Ajuda/guide-master/code-samples/command-handling/adding-features/11/commands/server.js b/Ajuda/guide-master/code-samples/command-handling/adding-features/11/commands/server.js
deleted file mode 100644
index d8e6de8..0000000
--- a/Ajuda/guide-master/code-samples/command-handling/adding-features/11/commands/server.js
+++ /dev/null
@@ -1,7 +0,0 @@
-module.exports = {
- name: 'server',
- description: 'Display info about this server.',
- execute(message) {
- message.channel.send(`Server name: ${message.guild.name}\nTotal members: ${message.guild.memberCount}`);
- },
-};
diff --git a/Ajuda/guide-master/code-samples/command-handling/adding-features/11/commands/user-info.js b/Ajuda/guide-master/code-samples/command-handling/adding-features/11/commands/user-info.js
deleted file mode 100644
index a1f5664..0000000
--- a/Ajuda/guide-master/code-samples/command-handling/adding-features/11/commands/user-info.js
+++ /dev/null
@@ -1,7 +0,0 @@
-module.exports = {
- name: 'user-info',
- description: 'Display info about yourself.',
- execute(message) {
- message.channel.send(`Your username: ${message.author.username}\nYour ID: ${message.author.id}`);
- },
-};
diff --git a/Ajuda/guide-master/code-samples/command-handling/adding-features/11/config.json b/Ajuda/guide-master/code-samples/command-handling/adding-features/11/config.json
deleted file mode 100644
index 74c3e2e..0000000
--- a/Ajuda/guide-master/code-samples/command-handling/adding-features/11/config.json
+++ /dev/null
@@ -1,4 +0,0 @@
-{
- "prefix": "!",
- "token": "your-token-goes-here"
-}
diff --git a/Ajuda/guide-master/code-samples/command-handling/adding-features/11/index.js b/Ajuda/guide-master/code-samples/command-handling/adding-features/11/index.js
deleted file mode 100644
index 046a41d..0000000
--- a/Ajuda/guide-master/code-samples/command-handling/adding-features/11/index.js
+++ /dev/null
@@ -1,74 +0,0 @@
-const fs = require('fs');
-const Discord = require('discord.js');
-const { prefix, token } = require('./config.json');
-
-const client = new Discord.Client();
-client.commands = new Discord.Collection();
-
-const commandFiles = fs.readdirSync('./commands').filter(file => file.endsWith('.js'));
-
-for (const file of commandFiles) {
- const command = require(`./commands/${file}`);
- client.commands.set(command.name, command);
-}
-
-const cooldowns = new Discord.Collection();
-
-client.once('ready', () => {
- console.log('Ready!');
-});
-
-client.on('message', message => {
- if (!message.content.startsWith(prefix) || message.author.bot) return;
-
- const args = message.content.slice(prefix.length).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 (command.guildOnly && message.channel.type !== 'text') {
- return message.reply('I can\'t execute that command inside DMs!');
- }
-
- if (command.args && !args.length) {
- let reply = `You didn't provide any arguments, ${message.author}!`;
-
- if (command.usage) {
- reply += `\nThe proper usage would be: \`${prefix}${command.name} ${command.usage}\``;
- }
-
- return message.channel.send(reply);
- }
-
- if (!cooldowns.has(command.name)) {
- cooldowns.set(command.name, new Discord.Collection());
- }
-
- const now = Date.now();
- const timestamps = cooldowns.get(command.name);
- const cooldownAmount = (command.cooldown || 3) * 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(`please wait ${timeLeft.toFixed(1)} more second(s) before reusing the \`${command.name}\` command.`);
- }
- }
-
- 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('there was an error trying to execute that command!');
- }
-});
-
-client.login(token);
diff --git a/Ajuda/guide-master/code-samples/command-handling/adding-features/12/commands/args-info.js b/Ajuda/guide-master/code-samples/command-handling/adding-features/12/commands/args-info.js
deleted file mode 100644
index 289f544..0000000
--- a/Ajuda/guide-master/code-samples/command-handling/adding-features/12/commands/args-info.js
+++ /dev/null
@@ -1,12 +0,0 @@
-module.exports = {
- name: 'args-info',
- description: 'Information about the arguments provided.',
- args: true,
- execute(message, args) {
- if (args[0] === 'foo') {
- return message.channel.send('bar');
- }
-
- message.channel.send(`First argument: ${args[0]}`);
- },
-};
diff --git a/Ajuda/guide-master/code-samples/command-handling/adding-features/12/commands/avatar.js b/Ajuda/guide-master/code-samples/command-handling/adding-features/12/commands/avatar.js
deleted file mode 100644
index 2f5711f..0000000
--- a/Ajuda/guide-master/code-samples/command-handling/adding-features/12/commands/avatar.js
+++ /dev/null
@@ -1,16 +0,0 @@
-module.exports = {
- name: 'avatar',
- description: 'Get the avatar URL of the tagged user(s), or your own avatar.',
- aliases: ['icon', 'pfp'],
- execute(message) {
- if (!message.mentions.users.size) {
- return message.channel.send(`Your avatar: <${message.author.displayAvatarURL()}>`);
- }
-
- const avatarList = message.mentions.users.map(user => {
- return `${user.username}'s avatar: <${user.displayAvatarURL()}>`;
- });
-
- message.channel.send(avatarList);
- },
-};
diff --git a/Ajuda/guide-master/code-samples/command-handling/adding-features/12/commands/beep.js b/Ajuda/guide-master/code-samples/command-handling/adding-features/12/commands/beep.js
deleted file mode 100644
index e3345e9..0000000
--- a/Ajuda/guide-master/code-samples/command-handling/adding-features/12/commands/beep.js
+++ /dev/null
@@ -1,7 +0,0 @@
-module.exports = {
- name: 'beep',
- description: 'Beep!',
- execute(message) {
- message.channel.send('Boop.');
- },
-};
diff --git a/Ajuda/guide-master/code-samples/command-handling/adding-features/12/commands/help.js b/Ajuda/guide-master/code-samples/command-handling/adding-features/12/commands/help.js
deleted file mode 100644
index 1f08793..0000000
--- a/Ajuda/guide-master/code-samples/command-handling/adding-features/12/commands/help.js
+++ /dev/null
@@ -1,46 +0,0 @@
-const { prefix } = require('../config.json');
-
-module.exports = {
- name: 'help',
- description: 'List all of my commands or info about a specific command.',
- aliases: ['commands'],
- usage: '[command name]',
- cooldown: 5,
- execute(message, args) {
- const data = [];
- const { commands } = message.client;
-
- if (!args.length) {
- data.push('Here\'s a list of all my commands:');
- data.push(commands.map(command => command.name).join(', '));
- data.push(`\nYou can send \`${prefix}help [command name]\` to get info on a specific command!`);
-
- return message.author.send(data, { split: true })
- .then(() => {
- if (message.channel.type === 'dm') return;
- message.reply('I\'ve sent you a DM with all my commands!');
- })
- .catch(error => {
- console.error(`Could not send help DM to ${message.author.tag}.\n`, error);
- message.reply('it seems like I can\'t DM you!');
- });
- }
-
- const name = args[0].toLowerCase();
- const command = commands.get(name) || commands.find(c => c.aliases && c.aliases.includes(name));
-
- if (!command) {
- return message.reply('that\'s not a valid command!');
- }
-
- data.push(`**Name:** ${command.name}`);
-
- if (command.aliases) data.push(`**Aliases:** ${command.aliases.join(', ')}`);
- if (command.description) data.push(`**Description:** ${command.description}`);
- if (command.usage) data.push(`**Usage:** ${prefix}${command.name} ${command.usage}`);
-
- data.push(`**Cooldown:** ${command.cooldown || 3} second(s)`);
-
- message.channel.send(data, { split: true });
- },
-};
diff --git a/Ajuda/guide-master/code-samples/command-handling/adding-features/12/commands/kick.js b/Ajuda/guide-master/code-samples/command-handling/adding-features/12/commands/kick.js
deleted file mode 100644
index 8428e8d..0000000
--- a/Ajuda/guide-master/code-samples/command-handling/adding-features/12/commands/kick.js
+++ /dev/null
@@ -1,14 +0,0 @@
-module.exports = {
- name: 'kick',
- description: 'Tag a member and kick them (but not really).',
- guildOnly: true,
- execute(message) {
- if (!message.mentions.users.size) {
- return message.reply('you need to tag a user in order to kick them!');
- }
-
- const taggedUser = message.mentions.users.first();
-
- message.channel.send(`You wanted to kick: ${taggedUser.username}`);
- },
-};
diff --git a/Ajuda/guide-master/code-samples/command-handling/adding-features/12/commands/ping.js b/Ajuda/guide-master/code-samples/command-handling/adding-features/12/commands/ping.js
deleted file mode 100644
index 8e6810f..0000000
--- a/Ajuda/guide-master/code-samples/command-handling/adding-features/12/commands/ping.js
+++ /dev/null
@@ -1,8 +0,0 @@
-module.exports = {
- name: 'ping',
- description: 'Ping!',
- cooldown: 5,
- execute(message) {
- message.channel.send('Pong.');
- },
-};
diff --git a/Ajuda/guide-master/code-samples/command-handling/adding-features/12/commands/prune.js b/Ajuda/guide-master/code-samples/command-handling/adding-features/12/commands/prune.js
deleted file mode 100644
index 94f20cc..0000000
--- a/Ajuda/guide-master/code-samples/command-handling/adding-features/12/commands/prune.js
+++ /dev/null
@@ -1,18 +0,0 @@
-module.exports = {
- name: 'prune',
- description: 'Prune up to 99 messages.',
- execute(message, args) {
- const amount = parseInt(args[0]) + 1;
-
- if (isNaN(amount)) {
- return message.reply('that doesn\'t seem to be a valid number.');
- } else if (amount <= 1 || amount > 100) {
- return message.reply('you need to input a number between 1 and 99.');
- }
-
- message.channel.bulkDelete(amount, true).catch(err => {
- console.error(err);
- message.channel.send('there was an error trying to prune messages in this channel!');
- });
- },
-};
diff --git a/Ajuda/guide-master/code-samples/command-handling/adding-features/12/commands/reload.js b/Ajuda/guide-master/code-samples/command-handling/adding-features/12/commands/reload.js
deleted file mode 100644
index 84cee46..0000000
--- a/Ajuda/guide-master/code-samples/command-handling/adding-features/12/commands/reload.js
+++ /dev/null
@@ -1,25 +0,0 @@
-module.exports = {
- name: 'reload',
- description: 'Reloads a command',
- args: true,
- execute(message, args) {
- const commandName = args[0].toLowerCase();
- const command = message.client.commands.get(commandName)
- || message.client.commands.find(cmd => cmd.aliases && cmd.aliases.includes(commandName));
-
- if (!command) {
- return message.channel.send(`There is no command with name or alias \`${commandName}\`, ${message.author}!`);
- }
-
- delete require.cache[require.resolve(`./${commandName}.js`)];
-
- try {
- const newCommand = require(`./${commandName}.js`);
- message.client.commands.set(newCommand.name, newCommand);
- } catch (error) {
- console.log(error);
- return message.channel.send(`There was an error while reloading a command \`${commandName}\`:\n\`${error.message}\``);
- }
- message.channel.send(`Command \`${commandName}\` was reloaded!`);
- },
-};
diff --git a/Ajuda/guide-master/code-samples/command-handling/adding-features/12/commands/server.js b/Ajuda/guide-master/code-samples/command-handling/adding-features/12/commands/server.js
deleted file mode 100644
index d8e6de8..0000000
--- a/Ajuda/guide-master/code-samples/command-handling/adding-features/12/commands/server.js
+++ /dev/null
@@ -1,7 +0,0 @@
-module.exports = {
- name: 'server',
- description: 'Display info about this server.',
- execute(message) {
- message.channel.send(`Server name: ${message.guild.name}\nTotal members: ${message.guild.memberCount}`);
- },
-};
diff --git a/Ajuda/guide-master/code-samples/command-handling/adding-features/12/commands/user-info.js b/Ajuda/guide-master/code-samples/command-handling/adding-features/12/commands/user-info.js
deleted file mode 100644
index a1f5664..0000000
--- a/Ajuda/guide-master/code-samples/command-handling/adding-features/12/commands/user-info.js
+++ /dev/null
@@ -1,7 +0,0 @@
-module.exports = {
- name: 'user-info',
- description: 'Display info about yourself.',
- execute(message) {
- message.channel.send(`Your username: ${message.author.username}\nYour ID: ${message.author.id}`);
- },
-};
diff --git a/Ajuda/guide-master/code-samples/command-handling/adding-features/12/config.json b/Ajuda/guide-master/code-samples/command-handling/adding-features/12/config.json
deleted file mode 100644
index 74c3e2e..0000000
--- a/Ajuda/guide-master/code-samples/command-handling/adding-features/12/config.json
+++ /dev/null
@@ -1,4 +0,0 @@
-{
- "prefix": "!",
- "token": "your-token-goes-here"
-}
diff --git a/Ajuda/guide-master/code-samples/command-handling/adding-features/12/index.js b/Ajuda/guide-master/code-samples/command-handling/adding-features/12/index.js
deleted file mode 100644
index 046a41d..0000000
--- a/Ajuda/guide-master/code-samples/command-handling/adding-features/12/index.js
+++ /dev/null
@@ -1,74 +0,0 @@
-const fs = require('fs');
-const Discord = require('discord.js');
-const { prefix, token } = require('./config.json');
-
-const client = new Discord.Client();
-client.commands = new Discord.Collection();
-
-const commandFiles = fs.readdirSync('./commands').filter(file => file.endsWith('.js'));
-
-for (const file of commandFiles) {
- const command = require(`./commands/${file}`);
- client.commands.set(command.name, command);
-}
-
-const cooldowns = new Discord.Collection();
-
-client.once('ready', () => {
- console.log('Ready!');
-});
-
-client.on('message', message => {
- if (!message.content.startsWith(prefix) || message.author.bot) return;
-
- const args = message.content.slice(prefix.length).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 (command.guildOnly && message.channel.type !== 'text') {
- return message.reply('I can\'t execute that command inside DMs!');
- }
-
- if (command.args && !args.length) {
- let reply = `You didn't provide any arguments, ${message.author}!`;
-
- if (command.usage) {
- reply += `\nThe proper usage would be: \`${prefix}${command.name} ${command.usage}\``;
- }
-
- return message.channel.send(reply);
- }
-
- if (!cooldowns.has(command.name)) {
- cooldowns.set(command.name, new Discord.Collection());
- }
-
- const now = Date.now();
- const timestamps = cooldowns.get(command.name);
- const cooldownAmount = (command.cooldown || 3) * 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(`please wait ${timeLeft.toFixed(1)} more second(s) before reusing the \`${command.name}\` command.`);
- }
- }
-
- 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('there was an error trying to execute that command!');
- }
-});
-
-client.login(token);
diff --git a/Ajuda/guide-master/code-samples/command-handling/dynamic-commands/11/commands/args-info.js b/Ajuda/guide-master/code-samples/command-handling/dynamic-commands/11/commands/args-info.js
deleted file mode 100644
index 289f544..0000000
--- a/Ajuda/guide-master/code-samples/command-handling/dynamic-commands/11/commands/args-info.js
+++ /dev/null
@@ -1,12 +0,0 @@
-module.exports = {
- name: 'args-info',
- description: 'Information about the arguments provided.',
- args: true,
- execute(message, args) {
- if (args[0] === 'foo') {
- return message.channel.send('bar');
- }
-
- message.channel.send(`First argument: ${args[0]}`);
- },
-};
diff --git a/Ajuda/guide-master/code-samples/command-handling/dynamic-commands/11/commands/avatar.js b/Ajuda/guide-master/code-samples/command-handling/dynamic-commands/11/commands/avatar.js
deleted file mode 100644
index ab2dbcd..0000000
--- a/Ajuda/guide-master/code-samples/command-handling/dynamic-commands/11/commands/avatar.js
+++ /dev/null
@@ -1,15 +0,0 @@
-module.exports = {
- name: 'avatar',
- description: 'Get the avatar URL of the tagged user(s), or your own avatar.',
- execute(message) {
- if (!message.mentions.users.size) {
- return message.channel.send(`Your avatar: ${message.author.displayAvatarURL}`);
- }
-
- const avatarList = message.mentions.users.map(user => {
- return `${user.username}'s avatar: ${user.displayAvatarURL}`;
- });
-
- message.channel.send(avatarList);
- },
-};
diff --git a/Ajuda/guide-master/code-samples/command-handling/dynamic-commands/11/commands/beep.js b/Ajuda/guide-master/code-samples/command-handling/dynamic-commands/11/commands/beep.js
deleted file mode 100644
index e3345e9..0000000
--- a/Ajuda/guide-master/code-samples/command-handling/dynamic-commands/11/commands/beep.js
+++ /dev/null
@@ -1,7 +0,0 @@
-module.exports = {
- name: 'beep',
- description: 'Beep!',
- execute(message) {
- message.channel.send('Boop.');
- },
-};
diff --git a/Ajuda/guide-master/code-samples/command-handling/dynamic-commands/11/commands/kick.js b/Ajuda/guide-master/code-samples/command-handling/dynamic-commands/11/commands/kick.js
deleted file mode 100644
index e892c66..0000000
--- a/Ajuda/guide-master/code-samples/command-handling/dynamic-commands/11/commands/kick.js
+++ /dev/null
@@ -1,13 +0,0 @@
-module.exports = {
- name: 'kick',
- description: 'Tag a member and kick them (but not really).',
- execute(message) {
- if (!message.mentions.users.size) {
- return message.reply('you need to tag a user in order to kick them!');
- }
-
- const taggedUser = message.mentions.users.first();
-
- message.channel.send(`You wanted to kick: ${taggedUser.username}`);
- },
-};
diff --git a/Ajuda/guide-master/code-samples/command-handling/dynamic-commands/11/commands/ping.js b/Ajuda/guide-master/code-samples/command-handling/dynamic-commands/11/commands/ping.js
deleted file mode 100644
index 56e6756..0000000
--- a/Ajuda/guide-master/code-samples/command-handling/dynamic-commands/11/commands/ping.js
+++ /dev/null
@@ -1,7 +0,0 @@
-module.exports = {
- name: 'ping',
- description: 'Ping!',
- execute(message) {
- message.channel.send('Pong.');
- },
-};
diff --git a/Ajuda/guide-master/code-samples/command-handling/dynamic-commands/11/commands/prune.js b/Ajuda/guide-master/code-samples/command-handling/dynamic-commands/11/commands/prune.js
deleted file mode 100644
index 94f20cc..0000000
--- a/Ajuda/guide-master/code-samples/command-handling/dynamic-commands/11/commands/prune.js
+++ /dev/null
@@ -1,18 +0,0 @@
-module.exports = {
- name: 'prune',
- description: 'Prune up to 99 messages.',
- execute(message, args) {
- const amount = parseInt(args[0]) + 1;
-
- if (isNaN(amount)) {
- return message.reply('that doesn\'t seem to be a valid number.');
- } else if (amount <= 1 || amount > 100) {
- return message.reply('you need to input a number between 1 and 99.');
- }
-
- message.channel.bulkDelete(amount, true).catch(err => {
- console.error(err);
- message.channel.send('there was an error trying to prune messages in this channel!');
- });
- },
-};
diff --git a/Ajuda/guide-master/code-samples/command-handling/dynamic-commands/11/commands/server.js b/Ajuda/guide-master/code-samples/command-handling/dynamic-commands/11/commands/server.js
deleted file mode 100644
index d8e6de8..0000000
--- a/Ajuda/guide-master/code-samples/command-handling/dynamic-commands/11/commands/server.js
+++ /dev/null
@@ -1,7 +0,0 @@
-module.exports = {
- name: 'server',
- description: 'Display info about this server.',
- execute(message) {
- message.channel.send(`Server name: ${message.guild.name}\nTotal members: ${message.guild.memberCount}`);
- },
-};
diff --git a/Ajuda/guide-master/code-samples/command-handling/dynamic-commands/11/commands/user-info.js b/Ajuda/guide-master/code-samples/command-handling/dynamic-commands/11/commands/user-info.js
deleted file mode 100644
index a1f5664..0000000
--- a/Ajuda/guide-master/code-samples/command-handling/dynamic-commands/11/commands/user-info.js
+++ /dev/null
@@ -1,7 +0,0 @@
-module.exports = {
- name: 'user-info',
- description: 'Display info about yourself.',
- execute(message) {
- message.channel.send(`Your username: ${message.author.username}\nYour ID: ${message.author.id}`);
- },
-};
diff --git a/Ajuda/guide-master/code-samples/command-handling/dynamic-commands/11/config.json b/Ajuda/guide-master/code-samples/command-handling/dynamic-commands/11/config.json
deleted file mode 100644
index 74c3e2e..0000000
--- a/Ajuda/guide-master/code-samples/command-handling/dynamic-commands/11/config.json
+++ /dev/null
@@ -1,4 +0,0 @@
-{
- "prefix": "!",
- "token": "your-token-goes-here"
-}
diff --git a/Ajuda/guide-master/code-samples/command-handling/dynamic-commands/11/index.js b/Ajuda/guide-master/code-samples/command-handling/dynamic-commands/11/index.js
deleted file mode 100644
index 531489d..0000000
--- a/Ajuda/guide-master/code-samples/command-handling/dynamic-commands/11/index.js
+++ /dev/null
@@ -1,35 +0,0 @@
-const fs = require('fs');
-const Discord = require('discord.js');
-const { prefix, token } = require('./config.json');
-
-const client = new Discord.Client();
-client.commands = new Discord.Collection();
-
-const commandFiles = fs.readdirSync('./commands').filter(file => file.endsWith('.js'));
-
-for (const file of commandFiles) {
- const command = require(`./commands/${file}`);
- client.commands.set(command.name, command);
-}
-
-client.once('ready', () => {
- console.log('Ready!');
-});
-
-client.on('message', message => {
- if (!message.content.startsWith(prefix) || message.author.bot) return;
-
- const args = message.content.slice(prefix.length).split(/ +/);
- const command = args.shift().toLowerCase();
-
- if (!client.commands.has(command)) return;
-
- try {
- client.commands.get(command).execute(message, args);
- } catch (error) {
- console.error(error);
- message.reply('there was an error trying to execute that command!');
- }
-});
-
-client.login(token);
diff --git a/Ajuda/guide-master/code-samples/command-handling/dynamic-commands/12/commands/args-info.js b/Ajuda/guide-master/code-samples/command-handling/dynamic-commands/12/commands/args-info.js
deleted file mode 100644
index 289f544..0000000
--- a/Ajuda/guide-master/code-samples/command-handling/dynamic-commands/12/commands/args-info.js
+++ /dev/null
@@ -1,12 +0,0 @@
-module.exports = {
- name: 'args-info',
- description: 'Information about the arguments provided.',
- args: true,
- execute(message, args) {
- if (args[0] === 'foo') {
- return message.channel.send('bar');
- }
-
- message.channel.send(`First argument: ${args[0]}`);
- },
-};
diff --git a/Ajuda/guide-master/code-samples/command-handling/dynamic-commands/12/commands/avatar.js b/Ajuda/guide-master/code-samples/command-handling/dynamic-commands/12/commands/avatar.js
deleted file mode 100644
index dfadc7f..0000000
--- a/Ajuda/guide-master/code-samples/command-handling/dynamic-commands/12/commands/avatar.js
+++ /dev/null
@@ -1,15 +0,0 @@
-module.exports = {
- name: 'avatar',
- description: 'Get the avatar URL of the tagged user(s), or your own avatar.',
- execute(message) {
- if (!message.mentions.users.size) {
- return message.channel.send(`Your avatar: ${message.author.displayAvatarURL()}`);
- }
-
- const avatarList = message.mentions.users.map(user => {
- return `${user.username}'s avatar: ${user.displayAvatarURL()}`;
- });
-
- message.channel.send(avatarList);
- },
-};
diff --git a/Ajuda/guide-master/code-samples/command-handling/dynamic-commands/12/commands/beep.js b/Ajuda/guide-master/code-samples/command-handling/dynamic-commands/12/commands/beep.js
deleted file mode 100644
index e3345e9..0000000
--- a/Ajuda/guide-master/code-samples/command-handling/dynamic-commands/12/commands/beep.js
+++ /dev/null
@@ -1,7 +0,0 @@
-module.exports = {
- name: 'beep',
- description: 'Beep!',
- execute(message) {
- message.channel.send('Boop.');
- },
-};
diff --git a/Ajuda/guide-master/code-samples/command-handling/dynamic-commands/12/commands/kick.js b/Ajuda/guide-master/code-samples/command-handling/dynamic-commands/12/commands/kick.js
deleted file mode 100644
index e892c66..0000000
--- a/Ajuda/guide-master/code-samples/command-handling/dynamic-commands/12/commands/kick.js
+++ /dev/null
@@ -1,13 +0,0 @@
-module.exports = {
- name: 'kick',
- description: 'Tag a member and kick them (but not really).',
- execute(message) {
- if (!message.mentions.users.size) {
- return message.reply('you need to tag a user in order to kick them!');
- }
-
- const taggedUser = message.mentions.users.first();
-
- message.channel.send(`You wanted to kick: ${taggedUser.username}`);
- },
-};
diff --git a/Ajuda/guide-master/code-samples/command-handling/dynamic-commands/12/commands/ping.js b/Ajuda/guide-master/code-samples/command-handling/dynamic-commands/12/commands/ping.js
deleted file mode 100644
index 56e6756..0000000
--- a/Ajuda/guide-master/code-samples/command-handling/dynamic-commands/12/commands/ping.js
+++ /dev/null
@@ -1,7 +0,0 @@
-module.exports = {
- name: 'ping',
- description: 'Ping!',
- execute(message) {
- message.channel.send('Pong.');
- },
-};
diff --git a/Ajuda/guide-master/code-samples/command-handling/dynamic-commands/12/commands/prune.js b/Ajuda/guide-master/code-samples/command-handling/dynamic-commands/12/commands/prune.js
deleted file mode 100644
index 94f20cc..0000000
--- a/Ajuda/guide-master/code-samples/command-handling/dynamic-commands/12/commands/prune.js
+++ /dev/null
@@ -1,18 +0,0 @@
-module.exports = {
- name: 'prune',
- description: 'Prune up to 99 messages.',
- execute(message, args) {
- const amount = parseInt(args[0]) + 1;
-
- if (isNaN(amount)) {
- return message.reply('that doesn\'t seem to be a valid number.');
- } else if (amount <= 1 || amount > 100) {
- return message.reply('you need to input a number between 1 and 99.');
- }
-
- message.channel.bulkDelete(amount, true).catch(err => {
- console.error(err);
- message.channel.send('there was an error trying to prune messages in this channel!');
- });
- },
-};
diff --git a/Ajuda/guide-master/code-samples/command-handling/dynamic-commands/12/commands/server.js b/Ajuda/guide-master/code-samples/command-handling/dynamic-commands/12/commands/server.js
deleted file mode 100644
index d8e6de8..0000000
--- a/Ajuda/guide-master/code-samples/command-handling/dynamic-commands/12/commands/server.js
+++ /dev/null
@@ -1,7 +0,0 @@
-module.exports = {
- name: 'server',
- description: 'Display info about this server.',
- execute(message) {
- message.channel.send(`Server name: ${message.guild.name}\nTotal members: ${message.guild.memberCount}`);
- },
-};
diff --git a/Ajuda/guide-master/code-samples/command-handling/dynamic-commands/12/commands/user-info.js b/Ajuda/guide-master/code-samples/command-handling/dynamic-commands/12/commands/user-info.js
deleted file mode 100644
index a1f5664..0000000
--- a/Ajuda/guide-master/code-samples/command-handling/dynamic-commands/12/commands/user-info.js
+++ /dev/null
@@ -1,7 +0,0 @@
-module.exports = {
- name: 'user-info',
- description: 'Display info about yourself.',
- execute(message) {
- message.channel.send(`Your username: ${message.author.username}\nYour ID: ${message.author.id}`);
- },
-};
diff --git a/Ajuda/guide-master/code-samples/command-handling/dynamic-commands/12/config.json b/Ajuda/guide-master/code-samples/command-handling/dynamic-commands/12/config.json
deleted file mode 100644
index 74c3e2e..0000000
--- a/Ajuda/guide-master/code-samples/command-handling/dynamic-commands/12/config.json
+++ /dev/null
@@ -1,4 +0,0 @@
-{
- "prefix": "!",
- "token": "your-token-goes-here"
-}
diff --git a/Ajuda/guide-master/code-samples/command-handling/dynamic-commands/12/index.js b/Ajuda/guide-master/code-samples/command-handling/dynamic-commands/12/index.js
deleted file mode 100644
index 531489d..0000000
--- a/Ajuda/guide-master/code-samples/command-handling/dynamic-commands/12/index.js
+++ /dev/null
@@ -1,35 +0,0 @@
-const fs = require('fs');
-const Discord = require('discord.js');
-const { prefix, token } = require('./config.json');
-
-const client = new Discord.Client();
-client.commands = new Discord.Collection();
-
-const commandFiles = fs.readdirSync('./commands').filter(file => file.endsWith('.js'));
-
-for (const file of commandFiles) {
- const command = require(`./commands/${file}`);
- client.commands.set(command.name, command);
-}
-
-client.once('ready', () => {
- console.log('Ready!');
-});
-
-client.on('message', message => {
- if (!message.content.startsWith(prefix) || message.author.bot) return;
-
- const args = message.content.slice(prefix.length).split(/ +/);
- const command = args.shift().toLowerCase();
-
- if (!client.commands.has(command)) return;
-
- try {
- client.commands.get(command).execute(message, args);
- } catch (error) {
- console.error(error);
- message.reply('there was an error trying to execute that command!');
- }
-});
-
-client.login(token);
diff --git a/Ajuda/guide-master/code-samples/command-handling/file-setup/11/commands/args-info.js b/Ajuda/guide-master/code-samples/command-handling/file-setup/11/commands/args-info.js
deleted file mode 100644
index b9d674c..0000000
--- a/Ajuda/guide-master/code-samples/command-handling/file-setup/11/commands/args-info.js
+++ /dev/null
@@ -1,13 +0,0 @@
-module.exports = {
- name: 'args-info',
- description: 'Information about the arguments provided.',
- execute(message, args) {
- if (!args.length) {
- return message.channel.send(`You didn't provide any arguments, ${message.author}!`);
- } else if (args[0] === 'foo') {
- return message.channel.send('bar');
- }
-
- message.channel.send(`First argument: ${args[0]}`);
- },
-};
diff --git a/Ajuda/guide-master/code-samples/command-handling/file-setup/11/commands/avatar.js b/Ajuda/guide-master/code-samples/command-handling/file-setup/11/commands/avatar.js
deleted file mode 100644
index ab2dbcd..0000000
--- a/Ajuda/guide-master/code-samples/command-handling/file-setup/11/commands/avatar.js
+++ /dev/null
@@ -1,15 +0,0 @@
-module.exports = {
- name: 'avatar',
- description: 'Get the avatar URL of the tagged user(s), or your own avatar.',
- execute(message) {
- if (!message.mentions.users.size) {
- return message.channel.send(`Your avatar: ${message.author.displayAvatarURL}`);
- }
-
- const avatarList = message.mentions.users.map(user => {
- return `${user.username}'s avatar: ${user.displayAvatarURL}`;
- });
-
- message.channel.send(avatarList);
- },
-};
diff --git a/Ajuda/guide-master/code-samples/command-handling/file-setup/11/commands/beep.js b/Ajuda/guide-master/code-samples/command-handling/file-setup/11/commands/beep.js
deleted file mode 100644
index e3345e9..0000000
--- a/Ajuda/guide-master/code-samples/command-handling/file-setup/11/commands/beep.js
+++ /dev/null
@@ -1,7 +0,0 @@
-module.exports = {
- name: 'beep',
- description: 'Beep!',
- execute(message) {
- message.channel.send('Boop.');
- },
-};
diff --git a/Ajuda/guide-master/code-samples/command-handling/file-setup/11/commands/kick.js b/Ajuda/guide-master/code-samples/command-handling/file-setup/11/commands/kick.js
deleted file mode 100644
index e892c66..0000000
--- a/Ajuda/guide-master/code-samples/command-handling/file-setup/11/commands/kick.js
+++ /dev/null
@@ -1,13 +0,0 @@
-module.exports = {
- name: 'kick',
- description: 'Tag a member and kick them (but not really).',
- execute(message) {
- if (!message.mentions.users.size) {
- return message.reply('you need to tag a user in order to kick them!');
- }
-
- const taggedUser = message.mentions.users.first();
-
- message.channel.send(`You wanted to kick: ${taggedUser.username}`);
- },
-};
diff --git a/Ajuda/guide-master/code-samples/command-handling/file-setup/11/commands/ping.js b/Ajuda/guide-master/code-samples/command-handling/file-setup/11/commands/ping.js
deleted file mode 100644
index 56e6756..0000000
--- a/Ajuda/guide-master/code-samples/command-handling/file-setup/11/commands/ping.js
+++ /dev/null
@@ -1,7 +0,0 @@
-module.exports = {
- name: 'ping',
- description: 'Ping!',
- execute(message) {
- message.channel.send('Pong.');
- },
-};
diff --git a/Ajuda/guide-master/code-samples/command-handling/file-setup/11/commands/prune.js b/Ajuda/guide-master/code-samples/command-handling/file-setup/11/commands/prune.js
deleted file mode 100644
index 94f20cc..0000000
--- a/Ajuda/guide-master/code-samples/command-handling/file-setup/11/commands/prune.js
+++ /dev/null
@@ -1,18 +0,0 @@
-module.exports = {
- name: 'prune',
- description: 'Prune up to 99 messages.',
- execute(message, args) {
- const amount = parseInt(args[0]) + 1;
-
- if (isNaN(amount)) {
- return message.reply('that doesn\'t seem to be a valid number.');
- } else if (amount <= 1 || amount > 100) {
- return message.reply('you need to input a number between 1 and 99.');
- }
-
- message.channel.bulkDelete(amount, true).catch(err => {
- console.error(err);
- message.channel.send('there was an error trying to prune messages in this channel!');
- });
- },
-};
diff --git a/Ajuda/guide-master/code-samples/command-handling/file-setup/11/commands/server.js b/Ajuda/guide-master/code-samples/command-handling/file-setup/11/commands/server.js
deleted file mode 100644
index d8e6de8..0000000
--- a/Ajuda/guide-master/code-samples/command-handling/file-setup/11/commands/server.js
+++ /dev/null
@@ -1,7 +0,0 @@
-module.exports = {
- name: 'server',
- description: 'Display info about this server.',
- execute(message) {
- message.channel.send(`Server name: ${message.guild.name}\nTotal members: ${message.guild.memberCount}`);
- },
-};
diff --git a/Ajuda/guide-master/code-samples/command-handling/file-setup/11/commands/user-info.js b/Ajuda/guide-master/code-samples/command-handling/file-setup/11/commands/user-info.js
deleted file mode 100644
index a1f5664..0000000
--- a/Ajuda/guide-master/code-samples/command-handling/file-setup/11/commands/user-info.js
+++ /dev/null
@@ -1,7 +0,0 @@
-module.exports = {
- name: 'user-info',
- description: 'Display info about yourself.',
- execute(message) {
- message.channel.send(`Your username: ${message.author.username}\nYour ID: ${message.author.id}`);
- },
-};
diff --git a/Ajuda/guide-master/code-samples/command-handling/file-setup/11/config.json b/Ajuda/guide-master/code-samples/command-handling/file-setup/11/config.json
deleted file mode 100644
index 74c3e2e..0000000
--- a/Ajuda/guide-master/code-samples/command-handling/file-setup/11/config.json
+++ /dev/null
@@ -1,4 +0,0 @@
-{
- "prefix": "!",
- "token": "your-token-goes-here"
-}
diff --git a/Ajuda/guide-master/code-samples/command-handling/file-setup/11/index.js b/Ajuda/guide-master/code-samples/command-handling/file-setup/11/index.js
deleted file mode 100644
index 3751022..0000000
--- a/Ajuda/guide-master/code-samples/command-handling/file-setup/11/index.js
+++ /dev/null
@@ -1,75 +0,0 @@
-const fs = require('fs');
-const Discord = require('discord.js');
-const { prefix, token } = require('./config.json');
-
-const client = new Discord.Client();
-client.commands = new Discord.Collection();
-
-const commandFiles = fs.readdirSync('./commands').filter(file => file.endsWith('.js'));
-
-for (const file of commandFiles) {
- const command = require(`./commands/${file}`);
- client.commands.set(command.name, command);
-}
-
-client.once('ready', () => {
- console.log('Ready!');
-});
-
-client.on('message', message => {
- if (!message.content.startsWith(prefix) || message.author.bot) return;
-
- const args = message.content.slice(prefix.length).split(/ +/);
- const command = args.shift().toLowerCase();
-
- if (command === 'ping') {
- message.channel.send('Pong.');
- } else if (command === 'beep') {
- message.channel.send('Boop.');
- } else if (command === 'server') {
- message.channel.send(`Server name: ${message.guild.name}\nTotal members: ${message.guild.memberCount}`);
- } else if (command === 'user-info') {
- message.channel.send(`Your username: ${message.author.username}\nYour ID: ${message.author.id}`);
- } else if (command === 'info') {
- if (!args.length) {
- return message.channel.send(`You didn't provide any arguments, ${message.author}!`);
- } else if (args[0] === 'foo') {
- return message.channel.send('bar');
- }
-
- message.channel.send(`First argument: ${args[0]}`);
- } else if (command === 'kick') {
- if (!message.mentions.users.size) {
- return message.reply('you need to tag a user in order to kick them!');
- }
-
- const taggedUser = message.mentions.users.first();
-
- message.channel.send(`You wanted to kick: ${taggedUser.username}`);
- } else if (command === 'avatar') {
- if (!message.mentions.users.size) {
- return message.channel.send(`Your avatar: ${message.author.displayAvatarURL}`);
- }
-
- const avatarList = message.mentions.users.map(user => {
- return `${user.username}'s avatar: ${user.displayAvatarURL}`;
- });
-
- message.channel.send(avatarList);
- } else if (command === 'prune') {
- const amount = parseInt(args[0]) + 1;
-
- if (isNaN(amount)) {
- return message.reply('that doesn\'t seem to be a valid number.');
- } else if (amount <= 1 || amount > 100) {
- return message.reply('you need to input a number between 1 and 99.');
- }
-
- message.channel.bulkDelete(amount, true).catch(err => {
- console.error(err);
- message.channel.send('there was an error trying to prune messages in this channel!');
- });
- }
-});
-
-client.login(token);
diff --git a/Ajuda/guide-master/code-samples/command-handling/file-setup/12/commands/args-info.js b/Ajuda/guide-master/code-samples/command-handling/file-setup/12/commands/args-info.js
deleted file mode 100644
index b9d674c..0000000
--- a/Ajuda/guide-master/code-samples/command-handling/file-setup/12/commands/args-info.js
+++ /dev/null
@@ -1,13 +0,0 @@
-module.exports = {
- name: 'args-info',
- description: 'Information about the arguments provided.',
- execute(message, args) {
- if (!args.length) {
- return message.channel.send(`You didn't provide any arguments, ${message.author}!`);
- } else if (args[0] === 'foo') {
- return message.channel.send('bar');
- }
-
- message.channel.send(`First argument: ${args[0]}`);
- },
-};
diff --git a/Ajuda/guide-master/code-samples/command-handling/file-setup/12/commands/avatar.js b/Ajuda/guide-master/code-samples/command-handling/file-setup/12/commands/avatar.js
deleted file mode 100644
index dfadc7f..0000000
--- a/Ajuda/guide-master/code-samples/command-handling/file-setup/12/commands/avatar.js
+++ /dev/null
@@ -1,15 +0,0 @@
-module.exports = {
- name: 'avatar',
- description: 'Get the avatar URL of the tagged user(s), or your own avatar.',
- execute(message) {
- if (!message.mentions.users.size) {
- return message.channel.send(`Your avatar: ${message.author.displayAvatarURL()}`);
- }
-
- const avatarList = message.mentions.users.map(user => {
- return `${user.username}'s avatar: ${user.displayAvatarURL()}`;
- });
-
- message.channel.send(avatarList);
- },
-};
diff --git a/Ajuda/guide-master/code-samples/command-handling/file-setup/12/commands/beep.js b/Ajuda/guide-master/code-samples/command-handling/file-setup/12/commands/beep.js
deleted file mode 100644
index e3345e9..0000000
--- a/Ajuda/guide-master/code-samples/command-handling/file-setup/12/commands/beep.js
+++ /dev/null
@@ -1,7 +0,0 @@
-module.exports = {
- name: 'beep',
- description: 'Beep!',
- execute(message) {
- message.channel.send('Boop.');
- },
-};
diff --git a/Ajuda/guide-master/code-samples/command-handling/file-setup/12/commands/kick.js b/Ajuda/guide-master/code-samples/command-handling/file-setup/12/commands/kick.js
deleted file mode 100644
index e892c66..0000000
--- a/Ajuda/guide-master/code-samples/command-handling/file-setup/12/commands/kick.js
+++ /dev/null
@@ -1,13 +0,0 @@
-module.exports = {
- name: 'kick',
- description: 'Tag a member and kick them (but not really).',
- execute(message) {
- if (!message.mentions.users.size) {
- return message.reply('you need to tag a user in order to kick them!');
- }
-
- const taggedUser = message.mentions.users.first();
-
- message.channel.send(`You wanted to kick: ${taggedUser.username}`);
- },
-};
diff --git a/Ajuda/guide-master/code-samples/command-handling/file-setup/12/commands/ping.js b/Ajuda/guide-master/code-samples/command-handling/file-setup/12/commands/ping.js
deleted file mode 100644
index 56e6756..0000000
--- a/Ajuda/guide-master/code-samples/command-handling/file-setup/12/commands/ping.js
+++ /dev/null
@@ -1,7 +0,0 @@
-module.exports = {
- name: 'ping',
- description: 'Ping!',
- execute(message) {
- message.channel.send('Pong.');
- },
-};
diff --git a/Ajuda/guide-master/code-samples/command-handling/file-setup/12/commands/prune.js b/Ajuda/guide-master/code-samples/command-handling/file-setup/12/commands/prune.js
deleted file mode 100644
index 94f20cc..0000000
--- a/Ajuda/guide-master/code-samples/command-handling/file-setup/12/commands/prune.js
+++ /dev/null
@@ -1,18 +0,0 @@
-module.exports = {
- name: 'prune',
- description: 'Prune up to 99 messages.',
- execute(message, args) {
- const amount = parseInt(args[0]) + 1;
-
- if (isNaN(amount)) {
- return message.reply('that doesn\'t seem to be a valid number.');
- } else if (amount <= 1 || amount > 100) {
- return message.reply('you need to input a number between 1 and 99.');
- }
-
- message.channel.bulkDelete(amount, true).catch(err => {
- console.error(err);
- message.channel.send('there was an error trying to prune messages in this channel!');
- });
- },
-};
diff --git a/Ajuda/guide-master/code-samples/command-handling/file-setup/12/commands/server.js b/Ajuda/guide-master/code-samples/command-handling/file-setup/12/commands/server.js
deleted file mode 100644
index d8e6de8..0000000
--- a/Ajuda/guide-master/code-samples/command-handling/file-setup/12/commands/server.js
+++ /dev/null
@@ -1,7 +0,0 @@
-module.exports = {
- name: 'server',
- description: 'Display info about this server.',
- execute(message) {
- message.channel.send(`Server name: ${message.guild.name}\nTotal members: ${message.guild.memberCount}`);
- },
-};
diff --git a/Ajuda/guide-master/code-samples/command-handling/file-setup/12/commands/user-info.js b/Ajuda/guide-master/code-samples/command-handling/file-setup/12/commands/user-info.js
deleted file mode 100644
index a1f5664..0000000
--- a/Ajuda/guide-master/code-samples/command-handling/file-setup/12/commands/user-info.js
+++ /dev/null
@@ -1,7 +0,0 @@
-module.exports = {
- name: 'user-info',
- description: 'Display info about yourself.',
- execute(message) {
- message.channel.send(`Your username: ${message.author.username}\nYour ID: ${message.author.id}`);
- },
-};
diff --git a/Ajuda/guide-master/code-samples/command-handling/file-setup/12/config.json b/Ajuda/guide-master/code-samples/command-handling/file-setup/12/config.json
deleted file mode 100644
index 74c3e2e..0000000
--- a/Ajuda/guide-master/code-samples/command-handling/file-setup/12/config.json
+++ /dev/null
@@ -1,4 +0,0 @@
-{
- "prefix": "!",
- "token": "your-token-goes-here"
-}
diff --git a/Ajuda/guide-master/code-samples/command-handling/file-setup/12/index.js b/Ajuda/guide-master/code-samples/command-handling/file-setup/12/index.js
deleted file mode 100644
index 3751022..0000000
--- a/Ajuda/guide-master/code-samples/command-handling/file-setup/12/index.js
+++ /dev/null
@@ -1,75 +0,0 @@
-const fs = require('fs');
-const Discord = require('discord.js');
-const { prefix, token } = require('./config.json');
-
-const client = new Discord.Client();
-client.commands = new Discord.Collection();
-
-const commandFiles = fs.readdirSync('./commands').filter(file => file.endsWith('.js'));
-
-for (const file of commandFiles) {
- const command = require(`./commands/${file}`);
- client.commands.set(command.name, command);
-}
-
-client.once('ready', () => {
- console.log('Ready!');
-});
-
-client.on('message', message => {
- if (!message.content.startsWith(prefix) || message.author.bot) return;
-
- const args = message.content.slice(prefix.length).split(/ +/);
- const command = args.shift().toLowerCase();
-
- if (command === 'ping') {
- message.channel.send('Pong.');
- } else if (command === 'beep') {
- message.channel.send('Boop.');
- } else if (command === 'server') {
- message.channel.send(`Server name: ${message.guild.name}\nTotal members: ${message.guild.memberCount}`);
- } else if (command === 'user-info') {
- message.channel.send(`Your username: ${message.author.username}\nYour ID: ${message.author.id}`);
- } else if (command === 'info') {
- if (!args.length) {
- return message.channel.send(`You didn't provide any arguments, ${message.author}!`);
- } else if (args[0] === 'foo') {
- return message.channel.send('bar');
- }
-
- message.channel.send(`First argument: ${args[0]}`);
- } else if (command === 'kick') {
- if (!message.mentions.users.size) {
- return message.reply('you need to tag a user in order to kick them!');
- }
-
- const taggedUser = message.mentions.users.first();
-
- message.channel.send(`You wanted to kick: ${taggedUser.username}`);
- } else if (command === 'avatar') {
- if (!message.mentions.users.size) {
- return message.channel.send(`Your avatar: ${message.author.displayAvatarURL}`);
- }
-
- const avatarList = message.mentions.users.map(user => {
- return `${user.username}'s avatar: ${user.displayAvatarURL}`;
- });
-
- message.channel.send(avatarList);
- } else if (command === 'prune') {
- const amount = parseInt(args[0]) + 1;
-
- if (isNaN(amount)) {
- return message.reply('that doesn\'t seem to be a valid number.');
- } else if (amount <= 1 || amount > 100) {
- return message.reply('you need to input a number between 1 and 99.');
- }
-
- message.channel.bulkDelete(amount, true).catch(err => {
- console.error(err);
- message.channel.send('there was an error trying to prune messages in this channel!');
- });
- }
-});
-
-client.login(token);
diff --git a/Ajuda/guide-master/code-samples/commando/args/commands/first/say.js b/Ajuda/guide-master/code-samples/commando/args/commands/first/say.js
deleted file mode 100644
index 3bb9b0f..0000000
--- a/Ajuda/guide-master/code-samples/commando/args/commands/first/say.js
+++ /dev/null
@@ -1,24 +0,0 @@
-const { Command } = require('discord.js-commando');
-
-module.exports = class SayCommand extends Command {
- constructor(client) {
- super(client, {
- name: 'say',
- aliases: ['parrot', 'copy'],
- group: 'first',
- memberName: 'say',
- description: 'Replies with the text you provide.',
- args: [
- {
- key: 'text',
- prompt: 'What text would you like the bot to say?',
- type: 'string',
- },
- ],
- });
- }
-
- run(message, { text }) {
- return message.reply(text);
- }
-};
diff --git a/Ajuda/guide-master/code-samples/commando/first-command/commands/first/meow.js b/Ajuda/guide-master/code-samples/commando/first-command/commands/first/meow.js
deleted file mode 100644
index 9e7bc0b..0000000
--- a/Ajuda/guide-master/code-samples/commando/first-command/commands/first/meow.js
+++ /dev/null
@@ -1,16 +0,0 @@
-const { Command } = require('discord.js-commando');
-
-module.exports = class MeowCommand extends Command {
- constructor(client) {
- super(client, {
- name: 'meow',
- group: 'first',
- memberName: 'meow',
- description: 'Replies with a meow, kitty cat.',
- });
- }
-
- run(message) {
- return message.say('Meow!');
- }
-};
diff --git a/Ajuda/guide-master/code-samples/commando/getting-started/index.js b/Ajuda/guide-master/code-samples/commando/getting-started/index.js
deleted file mode 100644
index 9ad9359..0000000
--- a/Ajuda/guide-master/code-samples/commando/getting-started/index.js
+++ /dev/null
@@ -1,26 +0,0 @@
-const { CommandoClient } = require('discord.js-commando');
-const path = require('path');
-
-const client = new CommandoClient({
- commandPrefix: '?',
- owner: '278305350804045834',
- invite: 'https://discord.gg/bRCvFy9',
-});
-
-client.registry
- .registerDefaultTypes()
- .registerGroups([
- ['first', 'Your First Command Group'],
- ])
- .registerDefaultGroups()
- .registerDefaultCommands()
- .registerCommandsIn(path.join(__dirname, 'commands'));
-
-client.once('ready', () => {
- console.log(`Logged in as ${client.user.tag}! (${client.user.id})`);
- client.user.setActivity('with Commando');
-});
-
-client.on('error', console.error);
-
-client.login('Your Secret Token');
diff --git a/Ajuda/guide-master/code-samples/creating-your-bot/adding-more-commands/config.json b/Ajuda/guide-master/code-samples/creating-your-bot/adding-more-commands/config.json
deleted file mode 100644
index 74c3e2e..0000000
--- a/Ajuda/guide-master/code-samples/creating-your-bot/adding-more-commands/config.json
+++ /dev/null
@@ -1,4 +0,0 @@
-{
- "prefix": "!",
- "token": "your-token-goes-here"
-}
diff --git a/Ajuda/guide-master/code-samples/creating-your-bot/adding-more-commands/index.js b/Ajuda/guide-master/code-samples/creating-your-bot/adding-more-commands/index.js
deleted file mode 100644
index 81e720f..0000000
--- a/Ajuda/guide-master/code-samples/creating-your-bot/adding-more-commands/index.js
+++ /dev/null
@@ -1,21 +0,0 @@
-const Discord = require('discord.js');
-const { prefix, token } = require('./config.json');
-const client = new Discord.Client();
-
-client.once('ready', () => {
- console.log('Ready!');
-});
-
-client.on('message', message => {
- if (message.content === `${prefix}ping`) {
- message.channel.send('Pong.');
- } else if (message.content === `${prefix}beep`) {
- message.channel.send('Boop.');
- } else if (message.content === `${prefix}server`) {
- message.channel.send(`Server name: ${message.guild.name}\nTotal members: ${message.guild.memberCount}`);
- } else if (message.content === `${prefix}user-info`) {
- message.channel.send(`Your username: ${message.author.username}\nYour ID: ${message.author.id}`);
- }
-});
-
-client.login(token);
diff --git a/Ajuda/guide-master/code-samples/creating-your-bot/commands-with-user-input/11/config.json b/Ajuda/guide-master/code-samples/creating-your-bot/commands-with-user-input/11/config.json
deleted file mode 100644
index 74c3e2e..0000000
--- a/Ajuda/guide-master/code-samples/creating-your-bot/commands-with-user-input/11/config.json
+++ /dev/null
@@ -1,4 +0,0 @@
-{
- "prefix": "!",
- "token": "your-token-goes-here"
-}
diff --git a/Ajuda/guide-master/code-samples/creating-your-bot/commands-with-user-input/11/index.js b/Ajuda/guide-master/code-samples/creating-your-bot/commands-with-user-input/11/index.js
deleted file mode 100644
index e33b93f..0000000
--- a/Ajuda/guide-master/code-samples/creating-your-bot/commands-with-user-input/11/index.js
+++ /dev/null
@@ -1,65 +0,0 @@
-const Discord = require('discord.js');
-const { prefix, token } = require('./config.json');
-const client = new Discord.Client();
-
-client.once('ready', () => {
- console.log('Ready!');
-});
-
-client.on('message', message => {
- if (!message.content.startsWith(prefix) || message.author.bot) return;
-
- const args = message.content.slice(prefix.length).split(/ +/);
- const command = args.shift().toLowerCase();
-
- if (command === 'ping') {
- message.channel.send('Pong.');
- } else if (command === 'beep') {
- message.channel.send('Boop.');
- } else if (command === 'server') {
- message.channel.send(`Server name: ${message.guild.name}\nTotal members: ${message.guild.memberCount}`);
- } else if (command === 'user-info') {
- message.channel.send(`Your username: ${message.author.username}\nYour ID: ${message.author.id}`);
- } else if (command === 'info') {
- if (!args.length) {
- return message.channel.send(`You didn't provide any arguments, ${message.author}!`);
- } else if (args[0] === 'foo') {
- return message.channel.send('bar');
- }
-
- message.channel.send(`First argument: ${args[0]}`);
- } else if (command === 'kick') {
- if (!message.mentions.users.size) {
- return message.reply('you need to tag a user in order to kick them!');
- }
-
- const taggedUser = message.mentions.users.first();
-
- message.channel.send(`You wanted to kick: ${taggedUser.username}`);
- } else if (command === 'avatar') {
- if (!message.mentions.users.size) {
- return message.channel.send(`Your avatar: <${message.author.displayAvatarURL}>`);
- }
-
- const avatarList = message.mentions.users.map(user => {
- return `${user.username}'s avatar: <${user.displayAvatarURL}>`;
- });
-
- message.channel.send(avatarList);
- } else if (command === 'prune') {
- const amount = parseInt(args[0]) + 1;
-
- if (isNaN(amount)) {
- return message.reply('that doesn\'t seem to be a valid number.');
- } else if (amount <= 1 || amount > 100) {
- return message.reply('you need to input a number between 1 and 99.');
- }
-
- message.channel.bulkDelete(amount, true).catch(err => {
- console.error(err);
- message.channel.send('there was an error trying to prune messages in this channel!');
- });
- }
-});
-
-client.login(token);
diff --git a/Ajuda/guide-master/code-samples/creating-your-bot/commands-with-user-input/12/config.json b/Ajuda/guide-master/code-samples/creating-your-bot/commands-with-user-input/12/config.json
deleted file mode 100644
index 74c3e2e..0000000
--- a/Ajuda/guide-master/code-samples/creating-your-bot/commands-with-user-input/12/config.json
+++ /dev/null
@@ -1,4 +0,0 @@
-{
- "prefix": "!",
- "token": "your-token-goes-here"
-}
diff --git a/Ajuda/guide-master/code-samples/creating-your-bot/commands-with-user-input/12/index.js b/Ajuda/guide-master/code-samples/creating-your-bot/commands-with-user-input/12/index.js
deleted file mode 100644
index db12d79..0000000
--- a/Ajuda/guide-master/code-samples/creating-your-bot/commands-with-user-input/12/index.js
+++ /dev/null
@@ -1,65 +0,0 @@
-const Discord = require('discord.js');
-const { prefix, token } = require('./config.json');
-const client = new Discord.Client();
-
-client.once('ready', () => {
- console.log('Ready!');
-});
-
-client.on('message', message => {
- if (!message.content.startsWith(prefix) || message.author.bot) return;
-
- const args = message.content.slice(prefix.length).split(/ +/);
- const command = args.shift().toLowerCase();
-
- if (command === 'ping') {
- message.channel.send('Pong.');
- } else if (command === 'beep') {
- message.channel.send('Boop.');
- } else if (command === 'server') {
- message.channel.send(`Server name: ${message.guild.name}\nTotal members: ${message.guild.memberCount}`);
- } else if (command === 'user-info') {
- message.channel.send(`Your username: ${message.author.username}\nYour ID: ${message.author.id}`);
- } else if (command === 'info') {
- if (!args.length) {
- return message.channel.send(`You didn't provide any arguments, ${message.author}!`);
- } else if (args[0] === 'foo') {
- return message.channel.send('bar');
- }
-
- message.channel.send(`First argument: ${args[0]}`);
- } else if (command === 'kick') {
- if (!message.mentions.users.size) {
- return message.reply('you need to tag a user in order to kick them!');
- }
-
- const taggedUser = message.mentions.users.first();
-
- message.channel.send(`You wanted to kick: ${taggedUser.username}`);
- } else if (command === 'avatar') {
- if (!message.mentions.users.size) {
- return message.channel.send(`Your avatar: <${message.author.displayAvatarURL()}>`);
- }
-
- const avatarList = message.mentions.users.map(user => {
- return `${user.username}'s avatar: <${user.displayAvatarURL()}>`;
- });
-
- message.channel.send(avatarList);
- } else if (command === 'prune') {
- const amount = parseInt(args[0]) + 1;
-
- if (isNaN(amount)) {
- return message.reply('that doesn\'t seem to be a valid number.');
- } else if (amount <= 1 || amount > 100) {
- return message.reply('you need to input a number between 1 and 99.');
- }
-
- message.channel.bulkDelete(amount, true).catch(err => {
- console.error(err);
- message.channel.send('there was an error trying to prune messages in this channel!');
- });
- }
-});
-
-client.login(token);
diff --git a/Ajuda/guide-master/code-samples/creating-your-bot/configuration-files/config.json b/Ajuda/guide-master/code-samples/creating-your-bot/configuration-files/config.json
deleted file mode 100644
index 74c3e2e..0000000
--- a/Ajuda/guide-master/code-samples/creating-your-bot/configuration-files/config.json
+++ /dev/null
@@ -1,4 +0,0 @@
-{
- "prefix": "!",
- "token": "your-token-goes-here"
-}
diff --git a/Ajuda/guide-master/code-samples/creating-your-bot/configuration-files/index.js b/Ajuda/guide-master/code-samples/creating-your-bot/configuration-files/index.js
deleted file mode 100644
index 97823bf..0000000
--- a/Ajuda/guide-master/code-samples/creating-your-bot/configuration-files/index.js
+++ /dev/null
@@ -1,15 +0,0 @@
-const Discord = require('discord.js');
-const config = require('./config.json');
-const client = new Discord.Client();
-
-client.once('ready', () => {
- console.log('Ready!');
-});
-
-client.on('message', message => {
- if (message.content === '!ping') {
- message.channel.send('Pong.');
- }
-});
-
-client.login(config.token);
diff --git a/Ajuda/guide-master/code-samples/creating-your-bot/up-and-running/index.js b/Ajuda/guide-master/code-samples/creating-your-bot/up-and-running/index.js
deleted file mode 100644
index bea736f..0000000
--- a/Ajuda/guide-master/code-samples/creating-your-bot/up-and-running/index.js
+++ /dev/null
@@ -1,14 +0,0 @@
-const Discord = require('discord.js');
-const client = new Discord.Client();
-
-client.once('ready', () => {
- console.log('Ready!');
-});
-
-client.on('message', message => {
- if (message.content === '!ping') {
- message.channel.send('Pong.');
- }
-});
-
-client.login('your-token-goes-here');
diff --git a/Ajuda/guide-master/code-samples/miscellaneous/parsing-mention-arguments/11/config.json b/Ajuda/guide-master/code-samples/miscellaneous/parsing-mention-arguments/11/config.json
deleted file mode 100644
index 74c3e2e..0000000
--- a/Ajuda/guide-master/code-samples/miscellaneous/parsing-mention-arguments/11/config.json
+++ /dev/null
@@ -1,4 +0,0 @@
-{
- "prefix": "!",
- "token": "your-token-goes-here"
-}
diff --git a/Ajuda/guide-master/code-samples/miscellaneous/parsing-mention-arguments/11/index.js b/Ajuda/guide-master/code-samples/miscellaneous/parsing-mention-arguments/11/index.js
deleted file mode 100644
index 8a697e6..0000000
--- a/Ajuda/guide-master/code-samples/miscellaneous/parsing-mention-arguments/11/index.js
+++ /dev/null
@@ -1,59 +0,0 @@
-const Discord = require('discord.js');
-const config = require('./config.json');
-
-const client = new Discord.Client();
-
-function getUserFromMention(mention) {
- if (!mention) return;
-
- if (mention.startsWith('<@') && mention.endsWith('>')) {
- mention = mention.slice(2, -1);
-
- if (mention.startsWith('!')) {
- mention = mention.slice(1);
- }
-
- return client.users.get(mention);
- }
-}
-
-// eslint-disable-next-line no-unused-vars
-function getUserFromMentionRegEx(mention) {
- // The id is the first and only match found by the RegEx.
- const matches = mention.match(/^<@!?(\d+)>$/);
-
- // If supplied variable was not a mention, matches will be null instead of an array.
- if (!matches) return;
-
- // However the first element in the matches array will be the entire mention, not just the ID,
- // so use index 1.
- const id = matches[1];
-
- return client.users.get(id);
-}
-
-client.on('message', message => {
- if (!message.content.startsWith(config.prefix)) return;
-
- const withoutPrefix = message.content.slice(config.prefix.length);
- const split = withoutPrefix.split(/ +/);
- const command = split[0];
- const args = split.slice(1);
-
- if (command === 'avatar') {
- if (args[0]) {
- // Change `getUserFromMention` to `getUserFromMentionRegEx` to try the RegEx variant.
- const user = getUserFromMention(args[0]);
-
- if (!user) {
- return message.reply('Please use a proper mention if you want to see someone else\'s avatar.');
- }
-
- return message.channel.send(`${user.username}'s avatar: ${user.displayAvatarURL}`);
- }
-
- return message.channel.send(`${message.author.username}, your avatar: ${message.author.displayAvatarURL}`);
- }
-});
-
-client.login(config.token);
diff --git a/Ajuda/guide-master/code-samples/miscellaneous/parsing-mention-arguments/12/config.json b/Ajuda/guide-master/code-samples/miscellaneous/parsing-mention-arguments/12/config.json
deleted file mode 100644
index 74c3e2e..0000000
--- a/Ajuda/guide-master/code-samples/miscellaneous/parsing-mention-arguments/12/config.json
+++ /dev/null
@@ -1,4 +0,0 @@
-{
- "prefix": "!",
- "token": "your-token-goes-here"
-}
diff --git a/Ajuda/guide-master/code-samples/miscellaneous/parsing-mention-arguments/12/index.js b/Ajuda/guide-master/code-samples/miscellaneous/parsing-mention-arguments/12/index.js
deleted file mode 100644
index 2ac75a0..0000000
--- a/Ajuda/guide-master/code-samples/miscellaneous/parsing-mention-arguments/12/index.js
+++ /dev/null
@@ -1,55 +0,0 @@
-const Discord = require('discord.js');
-const config = require('./config.json');
-
-const client = new Discord.Client();
-
-function getUserFromMention(mention) {
- if (!mention) return;
-
- if (mention.startsWith('<@') && mention.endsWith('>')) {
- mention = mention.slice(2, -1);
-
- if (mention.startsWith('!')) {
- mention = mention.slice(1);
- }
-
- return client.users.get(mention);
- }
-}
-
-// eslint-disable-next-line no-unused-vars
-function getUserFromMentionRegEx(mention) {
- const matches = mention.match(/^<@!?(\d+)>$/);
- // The id is the first and only match found by the RegEx.
- // However the first element in the matches array will be the entire mention, not just the ID,
- // so use index 1.
- const id = matches[1];
-
- return client.users.get(id);
-}
-
-client.on('message', message => {
- if (!message.content.startsWith(config.prefix)) return;
-
- const withoutPrefix = message.content.slice(config.prefix.length);
- const split = withoutPrefix.split(/ +/);
- const command = split[0];
- const args = split.slice(1);
-
- if (command === 'avatar') {
- if (args[0]) {
- // Change `getUserFromMention` to `getUserFromMentionRegEx` to try the RegEx variant.
- const user = getUserFromMention(args[0]);
-
- if (!user) {
- return message.reply('Please use a proper mention if you want to see someone else\'s avatar.');
- }
-
- return message.channel.send(`${user.username}'s avatar: ${user.displayAvatarURL()}`);
- }
-
- return message.channel.send(`${message.author.username}, your avatar: ${message.author.displayAvatarURL()}`);
- }
-});
-
-client.login(config.token);
diff --git a/Ajuda/guide-master/code-samples/oauth/simple-oauth-webserver/index.html b/Ajuda/guide-master/code-samples/oauth/simple-oauth-webserver/index.html
deleted file mode 100644
index 98970c0..0000000
--- a/Ajuda/guide-master/code-samples/oauth/simple-oauth-webserver/index.html
+++ /dev/null
@@ -1,60 +0,0 @@
-
-
-
- My First OAuth2 App
-
-
-
- Hoi!
-
- Identify Yourself
-
-
-
diff --git a/Ajuda/guide-master/code-samples/oauth/simple-oauth-webserver/index.js b/Ajuda/guide-master/code-samples/oauth/simple-oauth-webserver/index.js
deleted file mode 100644
index b0752a1..0000000
--- a/Ajuda/guide-master/code-samples/oauth/simple-oauth-webserver/index.js
+++ /dev/null
@@ -1,56 +0,0 @@
-const http = require('http');
-const fs = require('fs');
-const url = require('url');
-const fetch = require('node-fetch');
-const FormData = require('form-data');
-
-const port = 53134;
-
-http.createServer((req, res) => {
- let responseCode = 404;
- let content = '404 Error';
-
- const urlObj = url.parse(req.url, true);
-
- if (urlObj.query.code) {
- const accessCode = urlObj.query.code;
- const data = new FormData();
-
- data.append('client_id', 'your client id');
- data.append('client_secret', 'your client secret');
- data.append('grant_type', 'authorization_code');
- data.append('redirect_uri', 'your redirect url');
- data.append('scope', 'your scopes');
- data.append('code', accessCode);
-
- fetch('https://discordapp.com/api/oauth2/token', {
- method: 'POST',
- body: data,
- })
- .then(discordRes => discordRes.json())
- .then(info => {
- console.log(info);
- return info;
- })
- .then(info => fetch('https://discordapp.com/api/users/@me', {
- headers: {
- authorization: `${info.token_type} ${info.access_token}`,
- },
- }))
- .then(userRes => userRes.json())
- .then(console.log);
- }
-
- if (urlObj.pathname === '/') {
- responseCode = 200;
- content = fs.readFileSync('./index.html');
- }
-
- res.writeHead(responseCode, {
- 'content-type': 'text/html;charset=utf-8',
- });
-
- res.write(content);
- res.end();
-})
- .listen(port);
diff --git a/Ajuda/guide-master/code-samples/popular-topics/canvas/11/index.js b/Ajuda/guide-master/code-samples/popular-topics/canvas/11/index.js
deleted file mode 100644
index 8f30a48..0000000
--- a/Ajuda/guide-master/code-samples/popular-topics/canvas/11/index.js
+++ /dev/null
@@ -1,61 +0,0 @@
-const Discord = require('discord.js');
-const Canvas = require('canvas');
-
-const client = new Discord.Client();
-
-client.once('ready', () => {
- console.log('Ready!');
-});
-
-const applyText = (canvas, text) => {
- const ctx = canvas.getContext('2d');
- let fontSize = 70;
-
- do {
- ctx.font = `${fontSize -= 10}px sans-serif`;
- } while (ctx.measureText(text).width > canvas.width - 300);
-
- return ctx.font;
-};
-
-client.on('guildMemberAdd', async member => {
- const channel = member.guild.channels.find(ch => ch.name === 'member-log');
- if (!channel) return;
-
- const canvas = Canvas.createCanvas(700, 250);
- const ctx = canvas.getContext('2d');
-
- const background = await Canvas.loadImage('./wallpaper.jpg');
- ctx.drawImage(background, 0, 0, canvas.width, canvas.height);
-
- ctx.strokeStyle = '#74037b';
- ctx.strokeRect(0, 0, canvas.width, canvas.height);
-
- ctx.font = '28px sans-serif';
- ctx.fillStyle = '#ffffff';
- ctx.fillText('Welcome to the server,', canvas.width / 2.5, canvas.height / 3.5);
-
- ctx.font = applyText(canvas, `${member.displayName}!`);
- ctx.fillStyle = '#ffffff';
- ctx.fillText(`${member.displayName}!`, canvas.width / 2.5, canvas.height / 1.8);
-
- ctx.beginPath();
- ctx.arc(125, 125, 100, 0, Math.PI * 2, true);
- ctx.closePath();
- ctx.clip();
-
- const avatar = await Canvas.loadImage(member.user.displayAvatarURL);
- ctx.drawImage(avatar, 25, 25, 200, 200);
-
- const attachment = new Discord.Attachment(canvas.toBuffer(), 'welcome-image.png');
-
- channel.send(`Welcome to the server, ${member}!`, attachment);
-});
-
-client.on('message', async message => {
- if (message.content === '!join') {
- client.emit('guildMemberAdd', message.member || await message.guild.fetchMember(message.author));
- }
-});
-
-client.login('your-token-goes-here');
diff --git a/Ajuda/guide-master/code-samples/popular-topics/canvas/11/wallpaper.jpg b/Ajuda/guide-master/code-samples/popular-topics/canvas/11/wallpaper.jpg
deleted file mode 100644
index dda9156..0000000
Binary files a/Ajuda/guide-master/code-samples/popular-topics/canvas/11/wallpaper.jpg and /dev/null differ
diff --git a/Ajuda/guide-master/code-samples/popular-topics/canvas/12/index.js b/Ajuda/guide-master/code-samples/popular-topics/canvas/12/index.js
deleted file mode 100644
index 431ae6c..0000000
--- a/Ajuda/guide-master/code-samples/popular-topics/canvas/12/index.js
+++ /dev/null
@@ -1,61 +0,0 @@
-const Discord = require('discord.js');
-const Canvas = require('canvas');
-
-const client = new Discord.Client();
-
-client.once('ready', () => {
- console.log('Ready!');
-});
-
-const applyText = (canvas, text) => {
- const ctx = canvas.getContext('2d');
- let fontSize = 70;
-
- do {
- ctx.font = `${fontSize -= 10}px sans-serif`;
- } while (ctx.measureText(text).width > canvas.width - 300);
-
- return ctx.font;
-};
-
-client.on('guildMemberAdd', async member => {
- const channel = member.guild.channels.find(ch => ch.name === 'member-log');
- if (!channel) return;
-
- const canvas = Canvas.createCanvas(700, 250);
- const ctx = canvas.getContext('2d');
-
- const background = await Canvas.loadImage('./wallpaper.jpg');
- ctx.drawImage(background, 0, 0, canvas.width, canvas.height);
-
- ctx.strokeStyle = '#74037b';
- ctx.strokeRect(0, 0, canvas.width, canvas.height);
-
- ctx.font = '28px sans-serif';
- ctx.fillStyle = '#ffffff';
- ctx.fillText('Welcome to the server,', canvas.width / 2.5, canvas.height / 3.5);
-
- ctx.font = applyText(canvas, `${member.displayName}!`);
- ctx.fillStyle = '#ffffff';
- ctx.fillText(`${member.displayName}!`, canvas.width / 2.5, canvas.height / 1.8);
-
- ctx.beginPath();
- ctx.arc(125, 125, 100, 0, Math.PI * 2, true);
- ctx.closePath();
- ctx.clip();
-
- const avatar = await Canvas.loadImage(member.user.displayAvatarURL({ format: 'jpg' }));
- ctx.drawImage(avatar, 25, 25, 200, 200);
-
- const attachment = new Discord.MessageAttachment(canvas.toBuffer(), 'welcome-image.png');
-
- channel.send(`Welcome to the server, ${member}!`, attachment);
-});
-
-client.on('message', message => {
- if (message.content === '!join') {
- client.emit('guildMemberAdd', message.member);
- }
-});
-
-client.login('your-token-goes-here');
diff --git a/Ajuda/guide-master/code-samples/popular-topics/canvas/12/wallpaper.jpg b/Ajuda/guide-master/code-samples/popular-topics/canvas/12/wallpaper.jpg
deleted file mode 100644
index dda9156..0000000
Binary files a/Ajuda/guide-master/code-samples/popular-topics/canvas/12/wallpaper.jpg and /dev/null differ
diff --git a/Ajuda/guide-master/code-samples/popular-topics/permissions/11/index.js b/Ajuda/guide-master/code-samples/popular-topics/permissions/11/index.js
deleted file mode 100644
index 9ebec7a..0000000
--- a/Ajuda/guide-master/code-samples/popular-topics/permissions/11/index.js
+++ /dev/null
@@ -1,126 +0,0 @@
-const util = require('util');
-const { Client, Permissions } = require('discord.js');
-const client = new Client();
-
-client.once('ready', () => {
- console.log('Ready!');
-});
-
-client.on('message', message => {
- if (message.author.bot || !message.content.startsWith('!')) return;
- if (!message.channel.permissionsFor(client.user).has('SEND_MESSAGES')) return;
-
- const botPerms = ['MANAGE_MESSAGES', 'KICK_MEMBERS', 'MANAGE_ROLES', 'MANAGE_CHANNELS'];
-
- if (!message.guild.me.permissions.has(botPerms)) {
- return message.reply(`I need the permissions ${botPerms.join(', ')} for this demonstration to work properly`);
- }
-
- if (message.content === '!mod-everyone') {
- const everyonePerms = new Permissions(message.guild.defaultRole.permissions);
- const newPerms = everyonePerms.add(['MANAGE_MESSAGES', 'KICK_MEMBERS']);
-
- message.guild.defaultRole.setPermissions(newPerms.bitfield)
- .then(() => message.channel.send('Added mod permissions to `@everyone`.'))
- .catch(console.error);
- } else if (message.content === '!unmod-everyone') {
- const everyonePerms = new Permissions(message.guild.defaultRole.permissions);
- const newPerms = everyonePerms.remove(['MANAGE_MESSAGES', 'KICK_MEMBERS']);
-
- message.guild.defaultRole.setPermissions(newPerms.bitfield)
- .then(() => message.channel.send('Removed mod permissions from `@everyone`.'))
- .catch(console.error);
- } else if (message.content === '!create-mod') {
- if (message.guild.roles.some(role => role.name === 'Mod')) {
- return message.channel.send('A role with the name "Mod" already exists on this server.');
- }
-
- message.guild.createRole({ name: 'Mod', permissions: ['MANAGE_MESSAGES', 'KICK_MEMBERS'] })
- .then(() => message.channel.send('Created Mod role.'))
- .catch(console.error);
- } else if (message.content === '!check-mod') {
- if (message.member.roles.some(role => role.name === 'Mod')) {
- return message.channel.send('You do have a role called Mod.');
- }
-
- message.channel.send('You don\'t have a role called Mod.');
- } else if (message.content === '!can-kick') {
- if (message.member.hasPermission('KICK_MEMBERS')) {
- return message.channel.send('You can kick members.');
- }
-
- message.channel.send('You cannot kick members.');
- } else if (message.content === '!make-private') {
- if (!message.channel.permissionsFor(client.user).has('MANAGE_ROLES')) {
- return message.channel.send('Please make sure I have the `MANAGE_ROLES` permissions in this channel and retry.');
- }
-
- message.channel.replacePermissionOverwrites({
- overwrites: [
- {
- id: message.guild.id,
- deny: ['VIEW_CHANNEL'],
- },
- {
- id: client.user.id,
- allow: ['VIEW_CHANNEL'],
- },
- {
- id: message.author.id,
- allow: ['VIEW_CHANNEL'],
- },
- ],
- })
- .then(() => message.channel.send(`Made channel \`${message.channel.name}\` private.`))
- .catch(console.error);
- } else if (message.content === '!create-private') {
- message.guild.createChannel('private', 'text', [
- {
- id: message.guild.id,
- deny: ['VIEW_CHANNEL'],
- },
- {
- id: message.author.id,
- allow: ['VIEW_CHANNEL'],
- },
- {
- id: client.user.id,
- allow: ['VIEW_CHANNEL'],
- },
- ])
- .then(() => message.channel.send('Created a private channel.'))
- .catch(console.error);
- } else if (message.content === '!unprivate') {
- if (!message.channel.permissionsFor(client.user).has('MANAGE_ROLES')) {
- return message.channel.send('Please make sure i have the permissions MANAGE_ROLES in this channel and retry.');
- }
-
- message.channel.permissionOverwrites.get(message.guild.id).delete()
- .then(() => message.channel.send(`Made channel ${message.channel.name} public.`))
- .catch(console.error);
- } else if (message.content === '!my-permissions') {
- const finalPermissions = message.channel.permissionsFor(message.member);
-
- message.channel.send(util.inspect(finalPermissions.serialize()), { code: 'js' });
- } else if (message.content === '!lock-permissions') {
- if (!message.channel.parent) {
- return message.channel.send('This channel is not placed under a category.');
- }
-
- if (!message.channel.permissionsFor(client.user).has('MANAGE_ROLES')) {
- return message.channel.send('Please make sure i have the permissions MANAGE_ROLES in this channel and retry.');
- }
-
- message.channel.lockPermissions()
- .then(() => {
- message.channel.send(`Synchronized overwrites of \`${message.channel.name}\` with \`${message.channel.parent.name}\`.`);
- })
- .catch(console.error);
- } else if (message.content === '!role-permissions') {
- const roleFinalPermissions = message.channel.permissionsFor(message.member.highestRole);
-
- message.channel.send(util.inspect(roleFinalPermissions.serialize()), { code: 'js' });
- }
-});
-
-client.login('your-token-goes-here');
diff --git a/Ajuda/guide-master/code-samples/popular-topics/permissions/12/index.js b/Ajuda/guide-master/code-samples/popular-topics/permissions/12/index.js
deleted file mode 100644
index 49011d3..0000000
--- a/Ajuda/guide-master/code-samples/popular-topics/permissions/12/index.js
+++ /dev/null
@@ -1,128 +0,0 @@
-const util = require('util');
-const { Client, Permissions } = require('discord.js');
-const client = new Client();
-
-client.once('ready', () => {
- console.log('Ready!');
-});
-
-client.on('message', message => {
- if (message.author.bot || !message.content.startsWith('!')) return;
- if (!message.channel.permissionsFor(client.user).has('SEND_MESSAGES')) return;
-
- const botPerms = ['MANAGE_MESSAGES', 'KICK_MEMBERS', 'MANAGE_ROLES', 'MANAGE_CHANNELS'];
-
- if (!message.guild.me.permissions.has(botPerms)) {
- return message.reply(`I need the permissions ${botPerms.join(', ')} for this demonstration to work properly`);
- }
-
- if (message.content === '!mod-everyone') {
- const everyonePerms = new Permissions(message.guild.defaultRole.permissions);
- const newPerms = everyonePerms.add(['MANAGE_MESSAGES', 'KICK_MEMBERS']);
-
- message.guild.defaultRole.setPermissions(newPerms.bitfield)
- .then(() => message.channel.send('Added mod permissions to `@everyone`.'))
- .catch(console.error);
- } else if (message.content === '!unmod-everyone') {
- const everyonePerms = new Permissions(message.guild.defaultRole.permissions);
- const newPerms = everyonePerms.remove(['MANAGE_MESSAGES', 'KICK_MEMBERS']);
-
- message.guild.defaultRole.setPermissions(newPerms.bitfield)
- .then(() => message.channel.send('Removed mod permissions from `@everyone`.'))
- .catch(console.error);
- } else if (message.content === '!create-mod') {
- if (message.guild.roles.some(role => role.name === 'Mod')) {
- return message.channel.send('A role with the name "Mod" already exists on this server.');
- }
-
- message.guild.roles.create({ data: { name: 'Mod', permissions: ['MANAGE_MESSAGES', 'KICK_MEMBERS'] } })
- .then(() => message.channel.send('Created Mod role.'))
- .catch(console.error);
- } else if (message.content === '!check-mod') {
- if (message.member.roles.some(role => role.name === 'Mod')) {
- return message.channel.send('You do have a role called Mod.');
- }
-
- message.channel.send('You don\'t have a role called Mod.');
- } else if (message.content === '!can-kick') {
- if (message.member.hasPermission('KICK_MEMBERS')) {
- return message.channel.send('You can kick members.');
- }
-
- message.channel.send('You cannot kick members.');
- } else if (message.content === '!make-private') {
- if (!message.channel.permissionsFor(client.user).has('MANAGE_ROLES')) {
- return message.channel.send('Please make sure I have the `MANAGE_ROLES` permissions in this channel and retry.');
- }
-
- message.channel.overwritePermissions({
- permissionOverwrites: [
- {
- id: message.guild.id,
- deny: ['VIEW_CHANNEL'],
- },
- {
- id: client.user.id,
- allow: ['VIEW_CHANNEL'],
- },
- {
- id: message.author.id,
- allow: ['VIEW_CHANNEL'],
- },
- ],
- })
- .then(() => message.channel.send(`Made channel \`${message.channel.name}\` private.`))
- .catch(console.error);
- } else if (message.content === '!create-private') {
- message.guild.channels.create('private', {
- type: 'text', permissionOverwrites: [
- {
- id: message.guild.id,
- deny: ['VIEW_CHANNEL'],
- },
- {
- id: message.author.id,
- allow: ['VIEW_CHANNEL'],
- },
- {
- id: client.user.id,
- allow: ['VIEW_CHANNEL'],
- },
- ],
- })
- .then(() => message.channel.send('Created a private channel.'))
- .catch(console.error);
- } else if (message.content === '!unprivate') {
- if (!message.channel.permissionsFor(client.user).has('MANAGE_ROLES')) {
- return message.channel.send('Please make sure i have the permissions MANAGE_ROLES in this channel and retry.');
- }
-
- message.channel.permissionOverwrites.get(message.guild.id).delete()
- .then(() => message.channel.send(`Made channel ${message.channel.name} public.`))
- .catch(console.error);
- } else if (message.content === '!my-permissions') {
- const finalPermissions = message.channel.permissionsFor(message.member);
-
- message.channel.send(util.inspect(finalPermissions.serialize()), { code: 'js' });
- } else if (message.content === '!lock-permissions') {
- if (!message.channel.parent) {
- return message.channel.send('This channel is not placed under a category.');
- }
-
- if (!message.channel.permissionsFor(client.user).has('MANAGE_ROLES')) {
- return message.channel.send('Please make sure i have the permissions MANAGE_ROLES in this channel and retry.');
- }
-
- message.channel.lockPermissions()
- .then(() => {
- message.channel.send(`Synchronized overwrites of \`${message.channel.name}\` with \`${message.channel.parent.name}\`.`);
- })
- .catch(console.error);
- } else if (message.content === '!role-permissions') {
- const roleFinalPermissions = message.channel.permissionsFor(message.member.roles.highest);
-
- message.channel.send(util.inspect(roleFinalPermissions.serialize()), { code: 'js' });
- }
-});
-
-client.login('your-token-goes-here');
diff --git a/Ajuda/guide-master/code-samples/popular-topics/reactions/11/awaiting-reactions.js b/Ajuda/guide-master/code-samples/popular-topics/reactions/11/awaiting-reactions.js
deleted file mode 100644
index 92caf59..0000000
--- a/Ajuda/guide-master/code-samples/popular-topics/reactions/11/awaiting-reactions.js
+++ /dev/null
@@ -1,33 +0,0 @@
-const Discord = require('discord.js');
-const client = new Discord.Client();
-
-client.once('ready', () => {
- console.log('Ready!');
-});
-
-client.on('message', message => {
- if (message.content === '!react-await') {
- message.react('👍').then(() => message.react('👎'));
-
- const filter = (reaction, user) => {
- return ['👍', '👎'].includes(reaction.emoji.name) && user.id === message.author.id;
- };
-
- message.awaitReactions(filter, { maxMatches: 1, time: 60000, errors: ['time'] })
- .then(collected => {
- const reaction = collected.first();
-
- if (reaction.emoji.name === '👍') {
- message.reply('you reacted with a thumbs up.');
- } else {
- message.reply('you reacted with a thumbs down.');
- }
- })
- .catch(collected => {
- console.log(`After a minute, only ${collected.size} out of 4 reacted.`);
- message.reply('you didn\'t react with neither a thumbs up, nor a thumbs down.');
- });
- }
-});
-
-client.login('your-token-goes-here');
diff --git a/Ajuda/guide-master/code-samples/popular-topics/reactions/11/basic-reacting.js b/Ajuda/guide-master/code-samples/popular-topics/reactions/11/basic-reacting.js
deleted file mode 100644
index a1c4e62..0000000
--- a/Ajuda/guide-master/code-samples/popular-topics/reactions/11/basic-reacting.js
+++ /dev/null
@@ -1,21 +0,0 @@
-const Discord = require('discord.js');
-const client = new Discord.Client();
-
-client.once('ready', () => {
- console.log('Ready!');
-});
-
-client.on('message', message => {
- if (message.content === '!react') {
- message.react('😄');
- } else if (message.content === '!react-custom') {
- message.react('396548322053062656');
- } else if (message.content === '!fruits') {
- message.react('🍎')
- .then(() => message.react('🍊'))
- .then(() => message.react('🍇'))
- .catch(() => console.error('One of the emojis failed to react.'));
- }
-});
-
-client.login('your-token-goes-here');
diff --git a/Ajuda/guide-master/code-samples/popular-topics/reactions/12/awaiting-reactions.js b/Ajuda/guide-master/code-samples/popular-topics/reactions/12/awaiting-reactions.js
deleted file mode 100644
index 2c494e8..0000000
--- a/Ajuda/guide-master/code-samples/popular-topics/reactions/12/awaiting-reactions.js
+++ /dev/null
@@ -1,33 +0,0 @@
-const Discord = require('discord.js');
-const client = new Discord.Client();
-
-client.once('ready', () => {
- console.log('Ready!');
-});
-
-client.on('message', message => {
- if (message.content === '!react-await') {
- message.react('👍').then(() => message.react('👎'));
-
- const filter = (reaction, user) => {
- return ['👍', '👎'].includes(reaction.emoji.name) && user.id === message.author.id;
- };
-
- message.awaitReactions(filter, { max: 1, time: 60000, errors: ['time'] })
- .then(collected => {
- const reaction = collected.first();
-
- if (reaction.emoji.name === '👍') {
- message.reply('you reacted with a thumbs up.');
- } else {
- message.reply('you reacted with a thumbs down.');
- }
- })
- .catch(collected => {
- console.log(`After a minute, only ${collected.size} out of 4 reacted.`);
- message.reply('you didn\'t react with neither a thumbs up, nor a thumbs down.');
- });
- }
-});
-
-client.login('your-token-goes-here');
diff --git a/Ajuda/guide-master/code-samples/popular-topics/reactions/12/basic-reacting.js b/Ajuda/guide-master/code-samples/popular-topics/reactions/12/basic-reacting.js
deleted file mode 100644
index a1c4e62..0000000
--- a/Ajuda/guide-master/code-samples/popular-topics/reactions/12/basic-reacting.js
+++ /dev/null
@@ -1,21 +0,0 @@
-const Discord = require('discord.js');
-const client = new Discord.Client();
-
-client.once('ready', () => {
- console.log('Ready!');
-});
-
-client.on('message', message => {
- if (message.content === '!react') {
- message.react('😄');
- } else if (message.content === '!react-custom') {
- message.react('396548322053062656');
- } else if (message.content === '!fruits') {
- message.react('🍎')
- .then(() => message.react('🍊'))
- .then(() => message.react('🍇'))
- .catch(() => console.error('One of the emojis failed to react.'));
- }
-});
-
-client.login('your-token-goes-here');
diff --git a/Ajuda/guide-master/code-samples/popular-topics/reactions/12/uncached-messages.js b/Ajuda/guide-master/code-samples/popular-topics/reactions/12/uncached-messages.js
deleted file mode 100644
index 2d6c5cf..0000000
--- a/Ajuda/guide-master/code-samples/popular-topics/reactions/12/uncached-messages.js
+++ /dev/null
@@ -1,30 +0,0 @@
-const Discord = require('discord.js');
-const client = new Discord.Client({ partials: ['MESSAGE', 'CHANNEL'] });
-
-client.once('ready', () => {
- console.log('Ready!');
-});
-
-client.on('messageReactionAdd', async (reaction, user) => {
- if (reaction.message.partial) {
- try {
- await reaction.message.fetch();
- } catch (error) {
- console.log('Something went wrong when fetching the message: ', error);
- }
- }
- console.log(`${user.username} reacted with "${reaction.emoji.name}".`);
-});
-
-client.on('messageReactionRemove', async (reaction, user) => {
- if (reaction.message.partial) {
- try {
- await reaction.message.fetch();
- } catch (error) {
- console.log('Something went wrong when fetching the message: ', error);
- }
- }
- console.log(`${user.username} removed their "${reaction.emoji.name}" reaction.`);
-});
-
-client.login('your-token-goes-here');
diff --git a/Ajuda/guide-master/code-samples/sequelize/currency/app.js b/Ajuda/guide-master/code-samples/sequelize/currency/app.js
deleted file mode 100644
index d332ba0..0000000
--- a/Ajuda/guide-master/code-samples/sequelize/currency/app.js
+++ /dev/null
@@ -1,100 +0,0 @@
-const config = require('./config');
-const Discord = require('discord.js');
-
-const client = new Discord.Client();
-const { Users, CurrencyShop } = require('./dbObjects');
-const { Op } = require('sequelize');
-const currency = new Discord.Collection();
-const PREFIX = '!';
-
-/*
- * Make sure you are on at least version 5 of Sequelize! Version 4 as used in this guide will pose a security threat.
- * You can read more about this issue On the [Sequelize issue tracker](https://github.com/sequelize/sequelize/issues/7310).
- */
-
-Reflect.defineProperty(currency, 'add', {
- value: async function add(id, amount) {
- const user = currency.get(id);
- if (user) {
- user.balance += Number(amount);
- return user.save();
- }
- const newUser = await Users.create({ user_id: id, balance: amount });
- currency.set(id, newUser);
- return newUser;
- },
-});
-
-Reflect.defineProperty(currency, 'getBalance', {
- value: function getBalance(id) {
- const user = currency.get(id);
- return user ? user.balance : 0;
- },
-});
-
-client.once('ready', async () => {
- const storedBalances = await Users.findAll();
- storedBalances.forEach(b => currency.set(b.user_id, b));
- console.log(`Logged in as ${client.user.tag}!`);
-});
-
-client.on('message', async message => {
- if (message.author.bot) return;
- currency.add(message.author.id, 1);
-
- if (!message.content.startsWith(PREFIX)) return;
- const input = message.content.slice(PREFIX.length).trim();
- if (!input.length) return;
- const [, command, commandArgs] = input.match(/(\w+)\s*([\s\S]*)/);
-
- if (command === 'balance') {
- const target = message.mentions.users.first() || message.author;
- return message.channel.send(`${target.tag} has ${currency.getBalance(target.id)}💰`);
- } else if (command === 'inventory') {
- const target = message.mentions.users.first() || message.author;
- const user = await Users.findOne({ where: { user_id: target.id } });
- const items = await user.getItems();
-
- if (!items.length) return message.channel.send(`${target.tag} has nothing!`);
- return message.channel.send(`${target.tag} currently has ${items.map(t => `${t.amount} ${t.item.name}`).join(', ')}`);
- } else if (command === 'transfer') {
- const currentAmount = currency.getBalance(message.author.id);
- const transferAmount = commandArgs.split(/ +/).find(arg => !/<@!?\d+>/.test(arg));
- const transferTarget = message.mentions.users.first();
-
- if (!transferAmount || isNaN(transferAmount)) return message.channel.send(`Sorry ${message.author}, that's an invalid amount`);
- if (transferAmount > currentAmount) return message.channel.send(`Sorry ${message.author} you don't have that much.`);
- if (transferAmount <= 0) return message.channel.send(`Please enter an amount greater than zero, ${message.author}`);
-
- currency.add(message.author.id, -transferAmount);
- currency.add(transferTarget.id, transferAmount);
-
- return message.channel.send(`Successfully transferred ${transferAmount}💰 to ${transferTarget.tag}. Your current balance is ${currency.getBalance(message.author.id)}💰`);
- } else if (command === 'buy') {
- const item = await CurrencyShop.findOne({ where: { name: { [Op.like]: commandArgs } } });
- if (!item) return message.channel.send('That item doesn\'t exist.');
- if (item.cost > currency.getBalance(message.author.id)) {
- return message.channel.send(`You don't have enough currency, ${message.author}`);
- }
-
- const user = await Users.findOne({ where: { user_id: message.author.id } });
- currency.add(message.author.id, -item.cost);
- await user.addItem(item);
-
- message.channel.send(`You've bought a ${item.name}`);
- } else if (command === 'shop') {
- const items = await CurrencyShop.findAll();
- return message.channel.send(items.map(i => `${i.name}: ${i.cost}💰`).join('\n'), { code: true });
- } else if (command === 'leaderboard') {
- return message.channel.send(
- currency.sort((a, b) => b.balance - a.balance)
- .filter(user => client.users.has(user.user_id))
- .first(10)
- .map((user, position) => `(${position + 1}) ${(client.users.get(user.user_id).tag)}: ${user.balance}💰`)
- .join('\n'),
- { code: true }
- );
- }
-});
-
-client.login(config.token);
diff --git a/Ajuda/guide-master/code-samples/sequelize/currency/dbInit.js b/Ajuda/guide-master/code-samples/sequelize/currency/dbInit.js
deleted file mode 100644
index 144dbc0..0000000
--- a/Ajuda/guide-master/code-samples/sequelize/currency/dbInit.js
+++ /dev/null
@@ -1,30 +0,0 @@
-const Sequelize = require('sequelize');
-
-/*
- * Make sure you are on at least version 5 of Sequelize! Version 4 as used in this guide will pose a security threat.
- * You can read more about this issue On the [Sequelize issue tracker](https://github.com/sequelize/sequelize/issues/7310).
- */
-
-const sequelize = new Sequelize('database', 'username', 'password', {
- host: 'localhost',
- dialect: 'sqlite',
- logging: false,
- storage: 'database.sqlite',
-});
-
-const CurrencyShop = sequelize.import('models/CurrencyShop');
-sequelize.import('models/Users');
-sequelize.import('models/UserItems');
-
-const force = process.argv.includes('--force') || process.argv.includes('-f');
-
-sequelize.sync({ force }).then(async () => {
- const shop = [
- CurrencyShop.upsert({ name: 'Tea', cost: 1 }),
- CurrencyShop.upsert({ name: 'Coffee', cost: 2 }),
- CurrencyShop.upsert({ name: 'Cake', cost: 5 }),
- ];
- await Promise.all(shop);
- console.log('Database synced');
- sequelize.close();
-}).catch(console.error);
diff --git a/Ajuda/guide-master/code-samples/sequelize/currency/dbObjects.js b/Ajuda/guide-master/code-samples/sequelize/currency/dbObjects.js
deleted file mode 100644
index 4be89ca..0000000
--- a/Ajuda/guide-master/code-samples/sequelize/currency/dbObjects.js
+++ /dev/null
@@ -1,41 +0,0 @@
-const Sequelize = require('sequelize');
-
-/*
- * Make sure you are on at least version 5 of Sequelize! Version 4 as used in this guide will pose a security threat.
- * You can read more about this issue On the [Sequelize issue tracker](https://github.com/sequelize/sequelize/issues/7310).
- */
-
-const sequelize = new Sequelize('database', 'username', 'password', {
- host: 'localhost',
- dialect: 'sqlite',
- logging: false,
- storage: 'database.sqlite',
-});
-
-const Users = sequelize.import('models/Users');
-const CurrencyShop = sequelize.import('models/CurrencyShop');
-const UserItems = sequelize.import('models/UserItems');
-
-UserItems.belongsTo(CurrencyShop, { foreignKey: 'item_id', as: 'item' });
-
-Users.prototype.addItem = async function(item) {
- const useritem = await UserItems.findOne({
- where: { user_id: this.user_id, item_id: item.id },
- });
-
- if (useritem) {
- useritem.amount += 1;
- return useritem.save();
- }
-
- return UserItems.create({ user_id: this.user_id, item_id: item.id, amount: 1 });
-};
-
-Users.prototype.getItems = function() {
- return UserItems.findAll({
- where: { user_id: this.user_id },
- include: ['item'],
- });
-};
-
-module.exports = { Users, CurrencyShop, UserItems };
diff --git a/Ajuda/guide-master/code-samples/sequelize/currency/models/CurrencyShop.js b/Ajuda/guide-master/code-samples/sequelize/currency/models/CurrencyShop.js
deleted file mode 100644
index 1c9099d..0000000
--- a/Ajuda/guide-master/code-samples/sequelize/currency/models/CurrencyShop.js
+++ /dev/null
@@ -1,14 +0,0 @@
-module.exports = (sequelize, DataTypes) => {
- return sequelize.define('currency_shop', {
- name: {
- type: DataTypes.STRING,
- unique: true,
- },
- cost: {
- type: DataTypes.INTEGER,
- allowNull: false,
- },
- }, {
- timestamps: false,
- });
-};
diff --git a/Ajuda/guide-master/code-samples/sequelize/currency/models/UserItems.js b/Ajuda/guide-master/code-samples/sequelize/currency/models/UserItems.js
deleted file mode 100644
index d7854e4..0000000
--- a/Ajuda/guide-master/code-samples/sequelize/currency/models/UserItems.js
+++ /dev/null
@@ -1,13 +0,0 @@
-module.exports = (sequelize, DataTypes) => {
- return sequelize.define('user_item', {
- user_id: DataTypes.STRING,
- item_id: DataTypes.STRING,
- amount: {
- type: DataTypes.INTEGER,
- allowNull: false,
- 'default': 0,
- },
- }, {
- timestamps: false,
- });
-};
diff --git a/Ajuda/guide-master/code-samples/sequelize/currency/models/Users.js b/Ajuda/guide-master/code-samples/sequelize/currency/models/Users.js
deleted file mode 100644
index 67d4f6f..0000000
--- a/Ajuda/guide-master/code-samples/sequelize/currency/models/Users.js
+++ /dev/null
@@ -1,15 +0,0 @@
-module.exports = (sequelize, DataTypes) => {
- return sequelize.define('users', {
- user_id: {
- type: DataTypes.STRING,
- primaryKey: true,
- },
- balance: {
- type: DataTypes.INTEGER,
- defaultValue: 0,
- allowNull: false,
- },
- }, {
- timestamps: false,
- });
-};
diff --git a/Ajuda/guide-master/code-samples/sequelize/tags/sequelize.js b/Ajuda/guide-master/code-samples/sequelize/tags/sequelize.js
deleted file mode 100644
index 7cdabfb..0000000
--- a/Ajuda/guide-master/code-samples/sequelize/tags/sequelize.js
+++ /dev/null
@@ -1,118 +0,0 @@
-const Discord = require('discord.js');
-const Sequelize = require('sequelize');
-
-const client = new Discord.Client();
-const PREFIX = '!';
-
-/*
- * Make sure you are on at least version 5 of Sequelize! Version 4 as used in this guide will pose a security threat.
- * You can read more about this issue On the [Sequelize issue tracker](https://github.com/sequelize/sequelize/issues/7310).
- */
-
-const sequelize = new Sequelize('database', 'username', 'password', {
- host: 'localhost',
- dialect: 'sqlite',
- logging: false,
- // SQLite only
- storage: 'database.sqlite',
-});
-
-const Tags = sequelize.define('tags', {
- name: {
- type: Sequelize.STRING,
- unique: true,
- },
- description: Sequelize.TEXT,
- username: Sequelize.STRING,
- usage_count: {
- type: Sequelize.INTEGER,
- defaultValue: 0,
- allowNull: false,
- },
-});
-
-client.once('ready', () => {
- /*
- * equivalent to: CREATE TABLE tags(
- * name VARCHAR(255),
- * description TEXT,
- * username VARCHAR(255),
- * usage INT
- * );
- */
- Tags.sync();
-});
-
-client.on('message', async message => {
- if (message.content.startsWith(PREFIX)) {
- const input = message.content.slice(PREFIX.length).split(' ');
- const command = input.shift();
- const commandArgs = input.join(' ');
-
- if (command === 'addtag') {
- const splitArgs = commandArgs.split(' ');
- const tagName = splitArgs.shift();
- const tagDescription = splitArgs.join(' ');
-
- try {
- // equivalent to: INSERT INTO tags (name, descrption, username) values (?, ?, ?);
- const tag = await Tags.create({
- name: tagName,
- description: tagDescription,
- username: message.author.username,
- });
- return message.reply(`Tag ${tag.name} added.`);
- } catch (e) {
- if (e.name === 'SequelizeUniqueConstraintError') {
- return message.reply('That tag already exists.');
- }
- return message.reply('Something went wrong with adding a tag.');
- }
- } else if (command === 'tag') {
- const tagName = commandArgs;
-
- // equivalent to: SELECT * FROM tags WHERE name = 'tagName' LIMIT 1;
- const tag = await Tags.findOne({ where: { name: tagName } });
- if (tag) {
- // equivalent to: UPDATE tags SET usage_count = usage_count + 1 WHERE name = 'tagName';
- tag.increment('usage_count');
- return message.channel.send(tag.get('description'));
- }
- return message.reply(`Could not find tag: ${tagName}`);
- } else if (command === 'edittag') {
- const splitArgs = commandArgs.split(' ');
- const tagName = splitArgs.shift();
- const tagDescription = splitArgs.join(' ');
-
- // equivalent to: UPDATE tags (descrption) values (?) WHERE name = ?;
- const affectedRows = await Tags.update({ description: tagDescription }, { where: { name: tagName } });
- if (affectedRows > 0) {
- return message.reply(`Tag ${tagName} was edited.`);
- }
- return message.reply(`Could not find a tag with name ${tagName}.`);
- } else if (command === 'taginfo') {
- const tagName = commandArgs;
-
- // equivalent to: SELECT * FROM tags WHERE name = 'tagName' LIMIT 1;
- const tag = await Tags.findOne({ where: { name: tagName } });
- if (tag) {
- return message.channel.send(`${tagName} was created by ${tag.username} at ${tag.createdAt} and has been used ${tag.usage_count} times.`);
- }
- return message.reply(`Could not find tag: ${tagName}`);
- } else if (command === 'showtags') {
- // equivalent to: SELECT name FROM tags;
- const tagList = await Tags.findAll({ attributes: ['name'] });
- const tagString = tagList.map(t => t.name).join(', ') || 'No tags set.';
- return message.channel.send(`List of tags: ${tagString}`);
- } else if (command === 'removetag') {
- // equivalent to: DELETE from tags WHERE name = ?;
- const tagName = commandArgs;
- const rowCount = await Tags.destroy({ where: { name: tagName } });
- if (!rowCount) return message.reply('That tag did not exist.');
-
- return message.reply('Tag deleted.');
- }
- }
-});
-
-client.login('your-token-goes-here');
diff --git a/Ajuda/guide-master/code-samples/sharding/extended/bot.js b/Ajuda/guide-master/code-samples/sharding/extended/bot.js
deleted file mode 100644
index 94dc4cf..0000000
--- a/Ajuda/guide-master/code-samples/sharding/extended/bot.js
+++ /dev/null
@@ -1,70 +0,0 @@
-const Discord = require('discord.js');
-const client = new Discord.Client();
-const prefix = '!';
-
-function findEmoji(id) {
- const temp = this.emojis.get(id);
- if (!temp) return null;
-
- const emoji = Object.assign({}, temp);
- if (emoji.guild) emoji.guild = emoji.guild.id;
- emoji.require_colons = emoji.requiresColons;
-
- return emoji;
-}
-
-client.on('message', message => {
- if (!message.content.startsWith(prefix) || message.author.bot) return;
-
- const args = message.content.slice(prefix.length).split(/ +/);
- const command = args.shift().toLowerCase();
-
- if (command === 'stats') {
- return client.shard.broadcastEval('this.guilds.size')
- .then(results => {
- return message.channel.send(`Server count: ${results.reduce((prev, val) => prev + val, 0)}`);
- })
- .catch(console.error);
- }
-
- if (command === 'send') {
- if (!args.length) return message.reply('please specify a destination channel id.');
-
- return client.shard.broadcastEval(`
- const channel = this.channels.get('${args[0]}');
- if (channel) {
- channel.send('This is a message from shard ${this.shard.id}!');
- true;
- }
- else {
- false;
- }
- `)
- .then(sentArray => {
- if (!sentArray.includes(true)) {
- return message.reply('I could not find such a channel.');
- }
-
- return message.reply(`I have sent a message to channel \`${args[0]}\`!`);
- });
- }
-
- if (command === 'emoji') {
- if (!args.length) return message.reply('please specify an emoji id to search for.');
-
- return client.shard.broadcastEval(`(${findEmoji}).call(this, '${args[0]}')`)
- .then(emojiArray => {
- const foundEmoji = emojiArray.find(emoji => emoji);
- if (!foundEmoji) return message.reply('I could not find such an emoji.');
-
- return client.rest.makeRequest('get', Discord.Constants.Endpoints.Guild(foundEmoji.guild).toString(), true)
- .then(raw => {
- const guild = new Discord.Guild(client, raw);
- const emoji = new Discord.Emoji(guild, foundEmoji);
- return message.reply(`I have found an emoji ${emoji.toString()}!`);
- });
- });
- }
-});
-
-client.login('token');
diff --git a/Ajuda/guide-master/code-samples/sharding/extended/index.js b/Ajuda/guide-master/code-samples/sharding/extended/index.js
deleted file mode 100644
index 36b1daa..0000000
--- a/Ajuda/guide-master/code-samples/sharding/extended/index.js
+++ /dev/null
@@ -1,5 +0,0 @@
-const { ShardingManager } = require('discord.js');
-const manager = new ShardingManager('./bot.js', { token: 'your-token-goes-here' });
-
-manager.spawn();
-manager.on('launch', shard => console.log(`Launched shard ${shard.id}`));
diff --git a/Ajuda/guide-master/code-samples/sharding/getting-started/bot.js b/Ajuda/guide-master/code-samples/sharding/getting-started/bot.js
deleted file mode 100644
index 720e24c..0000000
--- a/Ajuda/guide-master/code-samples/sharding/getting-started/bot.js
+++ /dev/null
@@ -1,28 +0,0 @@
-const Discord = require('discord.js');
-const client = new Discord.Client();
-const prefix = '!';
-
-
-client.on('message', message => {
- if (!message.content.startsWith(prefix) || message.author.bot) return;
-
- const args = message.content.slice(prefix.length).split(/ +/);
- const command = args.shift().toLowerCase();
-
- if (command === 'stats') {
- const promises = [
- client.shard.fetchClientValues('guilds.size'),
- client.shard.broadcastEval('this.guilds.reduce((prev, guild) => prev + guild.memberCount, 0)'),
- ];
-
- return Promise.all(promises)
- .then(results => {
- const totalGuilds = results[0].reduce((prev, guildCount) => prev + guildCount, 0);
- const totalMembers = results[1].reduce((prev, memberCount) => prev + memberCount, 0);
- return message.channel.send(`Server count: ${totalGuilds}\nMember count: ${totalMembers}`);
- })
- .catch(console.error);
- }
-});
-
-client.login('token');
diff --git a/Ajuda/guide-master/code-samples/sharding/getting-started/index.js b/Ajuda/guide-master/code-samples/sharding/getting-started/index.js
deleted file mode 100644
index 36b1daa..0000000
--- a/Ajuda/guide-master/code-samples/sharding/getting-started/index.js
+++ /dev/null
@@ -1,5 +0,0 @@
-const { ShardingManager } = require('discord.js');
-const manager = new ShardingManager('./bot.js', { token: 'your-token-goes-here' });
-
-manager.spawn();
-manager.on('launch', shard => console.log(`Launched shard ${shard.id}`));
diff --git a/Ajuda/guide-master/guide/.eslintrc.js b/Ajuda/guide-master/guide/.eslintrc.js
deleted file mode 100644
index ff5319c..0000000
--- a/Ajuda/guide-master/guide/.eslintrc.js
+++ /dev/null
@@ -1,9 +0,0 @@
-const path = require('path');
-
-module.exports = {
- extends: path.join(__dirname, '..', '.eslintrc.js'),
- rules: {
- 'no-undef': 'off',
- 'no-unused-vars': 'off',
- },
-};
diff --git a/Ajuda/guide-master/guide/.vuepress/branches.js b/Ajuda/guide-master/guide/.vuepress/branches.js
deleted file mode 100644
index cc1acad..0000000
--- a/Ajuda/guide-master/guide/.vuepress/branches.js
+++ /dev/null
@@ -1,12 +0,0 @@
-export default [
- {
- label: 'v11.5 (stable)',
- version: '11.x',
- aliases: ['11', 'stable'],
- },
- {
- label: 'v12.x (master)',
- version: '12.x',
- aliases: ['12', 'master'],
- },
-];
diff --git a/Ajuda/guide-master/guide/.vuepress/components/Branch.vue b/Ajuda/guide-master/guide/.vuepress/components/Branch.vue
deleted file mode 100644
index 8c0e866..0000000
--- a/Ajuda/guide-master/guide/.vuepress/components/Branch.vue
+++ /dev/null
@@ -1,55 +0,0 @@
-
-
-
-
-
-
-
diff --git a/Ajuda/guide-master/guide/.vuepress/components/BranchSelector.vue b/Ajuda/guide-master/guide/.vuepress/components/BranchSelector.vue
deleted file mode 100644
index ea649c5..0000000
--- a/Ajuda/guide-master/guide/.vuepress/components/BranchSelector.vue
+++ /dev/null
@@ -1,97 +0,0 @@
-
-
- If you want to compare your code to the code we've constructed so far, you can review it over on the GitHub repository
-
- here
- .
-
-
-
-
diff --git a/Ajuda/guide-master/guide/.vuepress/config.js b/Ajuda/guide-master/guide/.vuepress/config.js
deleted file mode 100644
index d0aaee4..0000000
--- a/Ajuda/guide-master/guide/.vuepress/config.js
+++ /dev/null
@@ -1,69 +0,0 @@
-const sidebar = require('./sidebar.js');
-
-const config = {
- title: 'Discord.js Guide',
- description: 'A guide made by the community of discord.js for its users.',
- head: [
- ['link', { rel: 'icon', href: '/favicon.png' }],
- ['meta', { name: 'theme-color', content: '#42b983' }],
- ['meta', { name: 'twitter:card', content: 'summary' }],
- ['meta', { name: 'og:title', content: 'Discord.js Guide' }],
- ['meta', { name: 'og:description', content: 'A guide made by the community of discord.js for its users.' }],
- ['meta', { name: 'og:type', content: 'website' }],
- ['meta', { name: 'og:url', content: 'https://discordjs.guide/' }],
- ['meta', { name: 'og:locale', content: 'en_US' }],
- ['meta', { name: 'og:image', content: '/meta-image.png' }],
- ],
- plugins: [],
- theme: 'yuu',
- themeConfig: {
- yuu: {
- extraOptions: { before: 'BranchSelector' },
- },
- repo: 'discordjs/guide',
- docsDir: 'guide',
- sidebarDepth: 3,
- editLinks: true,
- lastUpdated: true,
- nav: [
- {
- text: 'Home',
- link: '/',
- },
- {
- text: 'Commando',
- link: '/commando/',
- },
- {
- text: 'Discord.js Documentation',
- link: 'https://discord.js.org/#/docs/main/stable/general/welcome',
- },
- ],
- sidebar,
- },
- configureWebpack: {
- resolve: {
- alias: {
- '@': '../',
- },
- },
- },
-};
-
-for (const group of Object.values(config.themeConfig.sidebar)) {
- for (const section of group) {
- if (section.collapsable) continue;
- section.collapsable = false;
- }
-}
-
-if (process.env.NODE_ENV === 'production') {
- config.themeConfig.algolia = {
- apiKey: 'c8d9361fb8403f7c5111887e0edf4b5e',
- indexName: 'discordjs',
- };
-
- config.plugins.push(['@vuepress/google-analytics', { ga: 'UA-108513187-1' }]);
-}
-
-module.exports = config;
diff --git a/Ajuda/guide-master/guide/.vuepress/enhanceApp.js b/Ajuda/guide-master/guide/.vuepress/enhanceApp.js
deleted file mode 100644
index ae6bcf2..0000000
--- a/Ajuda/guide-master/guide/.vuepress/enhanceApp.js
+++ /dev/null
@@ -1,9 +0,0 @@
-import VueDiscordMessage from 'vue-discord-message';
-
-export default ({ Vue }) => {
- Vue.use(VueDiscordMessage, {
- avatars: {
- djs: require('../images/discord-avatar-djs.png'),
- },
- });
-};
diff --git a/Ajuda/guide-master/guide/.vuepress/eventBus.js b/Ajuda/guide-master/guide/.vuepress/eventBus.js
deleted file mode 100644
index c17d88a..0000000
--- a/Ajuda/guide-master/guide/.vuepress/eventBus.js
+++ /dev/null
@@ -1,2 +0,0 @@
-import Vue from 'vue';
-export default new Vue();
diff --git a/Ajuda/guide-master/guide/.vuepress/public/favicon.png b/Ajuda/guide-master/guide/.vuepress/public/favicon.png
deleted file mode 100644
index 123bd61..0000000
Binary files a/Ajuda/guide-master/guide/.vuepress/public/favicon.png and /dev/null differ
diff --git a/Ajuda/guide-master/guide/.vuepress/public/meta-image.png b/Ajuda/guide-master/guide/.vuepress/public/meta-image.png
deleted file mode 100644
index c07f381..0000000
Binary files a/Ajuda/guide-master/guide/.vuepress/public/meta-image.png and /dev/null differ
diff --git a/Ajuda/guide-master/guide/.vuepress/sidebar.js b/Ajuda/guide-master/guide/.vuepress/sidebar.js
deleted file mode 100644
index b1399bd..0000000
--- a/Ajuda/guide-master/guide/.vuepress/sidebar.js
+++ /dev/null
@@ -1,137 +0,0 @@
-module.exports = {
- '/commando/': [
- {
- title: 'Home',
- children: [
- '/',
- '/requesting-more-content',
- ],
- },
- {
- title: 'Getting Started',
- children: [
- '/commando/',
- '/commando/first-command',
- ],
- },
- {
- title: 'Extra Command Info',
- children: [
- '/commando/throttling',
- '/commando/guild-only',
- '/commando/permissions',
- ],
- },
- {
- title: 'Arguments',
- children: [
- '/commando/args',
- '/commando/validators',
- ],
- },
- {
- title: 'Additional Information',
- children: [
- '/commando/client-values',
- '/commando/unknown-command-response',
- ],
- },
- ],
- '/': [
- {
- title: 'Home',
- children: [
- '/',
- 'requesting-more-content',
- ],
- },
- {
- title: 'Installations & Preparations',
- children: [
- '/preparations/',
- '/preparations/setting-up-a-linter',
- '/preparations/setting-up-a-bot-application',
- '/preparations/adding-your-bot-to-servers',
- ],
- },
- {
- title: 'Creating Your Bot',
- children: [
- '/creating-your-bot/',
- '/creating-your-bot/configuration-files',
- '/creating-your-bot/adding-more-commands',
- '/creating-your-bot/commands-with-user-input',
- ],
- },
- {
- title: 'Command Handler',
- children: [
- '/command-handling/',
- '/command-handling/dynamic-commands',
- '/command-handling/adding-features',
- ],
- },
- {
- title: 'Popular Topics',
- children: [
- '/popular-topics/embeds',
- '/popular-topics/errors',
- '/popular-topics/permissions',
- '/popular-topics/permissions-extended',
- '/popular-topics/reactions',
- '/popular-topics/collectors',
- '/popular-topics/partials',
- '/popular-topics/canvas',
- '/popular-topics/common-questions',
- '/popular-topics/miscellaneous-examples',
- ],
- },
- {
- title: 'Miscellaneous',
- children: [
- '/miscellaneous/parsing-mention-arguments',
- '/miscellaneous/useful-packages',
- ],
- },
- {
- title: 'Databases',
- children: [
- '/sequelize/',
- '/sequelize/currency',
- '/keyv/',
- ],
- },
- {
- title: 'Sharding',
- children: [
- '/sharding/',
- '/sharding/additional-information',
- '/sharding/extended',
- ],
- },
- {
- title: 'OAuth2',
- children: [
- '/oauth2/',
- ],
- },
- {
- title: 'Improving Your Dev Environment',
- children: [
- '/improving-dev-environment/pm2',
- '/improving-dev-environment/package-json-scripts',
- ],
- },
- {
- title: 'Additional Information',
- children: [
- '/additional-info/notation',
- '/additional-info/es6-syntax',
- '/additional-info/collections',
- '/additional-info/async-await',
- '/additional-info/rest-api',
- '/additional-info/changes-in-v12',
- ],
- },
- ],
-};
diff --git a/Ajuda/guide-master/guide/.vuepress/styles/index.styl b/Ajuda/guide-master/guide/.vuepress/styles/index.styl
deleted file mode 100644
index f5574e3..0000000
--- a/Ajuda/guide-master/guide/.vuepress/styles/index.styl
+++ /dev/null
@@ -1,13 +0,0 @@
-@media screen and (max-width: 600px) {
- .navbar .home-link .site-name {
- background: url('/favicon.png') top left / contain no-repeat;
- text-indent: -999px;
- }
-}
-
-@media screen and (max-width: 360px) {
- // so that the branch selector and book icon don't overlap each other
- .navbar .links {
- padding-left: 0.25rem !important;
- }
-}
diff --git a/Ajuda/guide-master/guide/README.md b/Ajuda/guide-master/guide/README.md
deleted file mode 100644
index bcf524f..0000000
--- a/Ajuda/guide-master/guide/README.md
+++ /dev/null
@@ -1,26 +0,0 @@
-# Introduction
-
-If you're reading this, it probably means you want to learn how to make a bot with discord.js. Awesome! You've come to the right place.
-This guide will teach you things such as:
-* How to get a bot up and running from scratch;
-* How to properly create, organize, and expand on your commands;
-* How to use the best practices for common situations;
-* and much more.
-
-This guide will also cover subjects like common errors and how to solve them, keeping your code clean, setting up a proper development environment, etc.
-Sounds good? Great! Let's get started, then.
-
-## Before you begin...
-
-Alright, making a bot is cool and all, but there are some prerequisites to it. To create a bot with discord.js, you should have a fairly decent grasp of JavaScript itself.
-While you _can_ make a bot with very little JS and programming knowledge, trying to do so without understanding the language first will only hinder you. You may get stuck on many uncomplicated issues, struggle with solutions to incredibly easy problems, and all-in-all end up frustrated. Sounds pretty annoying if you ask me.
-
-If you don't know JS but would like to learn about it, here are a few links to help get you started:
-
-* [CodeCademy's interactive JavaScript course](https://www.codecademy.com/learn/learn-javascript)
-* [Eloquent JavaScript, a free online book](http://eloquentjavascript.net/)
-* [Nodeschool, for both JavaScript and Node.js lessons](https://nodeschool.io/)
-* [MDN's JavaScript guide and full documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript)
-* [Google, your best friend](https://google.com)
-
-Take your pick, learn some JS, and once you feel like you're confident enough to make a bot, come back and get started!
diff --git a/Ajuda/guide-master/guide/additional-info/async-await.md b/Ajuda/guide-master/guide/additional-info/async-await.md
deleted file mode 100644
index ce232e3..0000000
--- a/Ajuda/guide-master/guide/additional-info/async-await.md
+++ /dev/null
@@ -1,185 +0,0 @@
-# Understanding async/await
-
-If you aren't very familiar with ECMAScript 2017, you may not know about async/await. It's a useful way to handle Promises in a hoisted manner. In addition, it looks cleaner, increases overall readability, and is slightly faster.
-
-## How do Promises work?
-
-Before we can get into async/await, you should know what Promises are and how they work, because async/await is just a way to handle Promises. If you know what Promises are and how to deal with them, then you can skip this part.
-
-Promises are a way to handle asynchronous tasks in Javascript; they are the newer alternative to callbacks. A Promise has a lot of similarities to a progress bar; Promises represent an ongoing process that has not yet finished. A good example for that is a request to a server (e.g discord.js sends requests to Discord's API).
-
-A Promise can have 3 states; pending, resolved, and rejected
-
-The **pending** state means that the Promise still is ongoing and nether resolved nor rejected.
-The **resolved** state means that the Promise is done and was executed without any errors.
-The **rejected** state means that the Promise encountered an error and could not be executed correctly.
-
-One important thing to know is that a Promise can only have one state at a time; it can never be pending and resolved, rejected and resolved, or pending and rejected. You may be asking "How would that look in code?". Here is a small example:
-
-::: tip
-ES6 code is being used in this example. If you do not know what that is, you should read up on that [here](/additional-info/es6-syntax.md).
-:::
-
-```js
-function deleteMessages(amount) {
- return new Promise(resolve => {
- if (amount > 10) throw new Error('You can\'t delete more than 10 Messages at a time.');
- setTimeout(() => resolve('Deleted 10 messages.'), 2000);
- });
-}
-
-deleteMessages(5).then(value => {
- // `deleteMessages` is complete and has not encountered any errors
- // the resolved value will be the string "Deleted 10 messages"
-}).catch(error => {
- // `deleteMessages` encountered an error
- // the error will be an Error Object
-});
-```
-
-In this scenario, the `deleteMessages` function returns a Promise. The `.then()` method will trigger if the Promise was resolved, and the `.catch()` method if the Promise was rejected. But with our function, we resolve the Promise after 2 seconds with the String "Deleted 10 messages.", so the `.catch()` method will never be executed. You can also pass the `.catch()` function as the second parameter of `.then()`.
-
-## How to implement async/await
-
-### Theory
-
-The following information is important to know before working with async/await. You can only use the `await` keyword inside a function that is declared as `async` (you put the `async` keyword before the `function` keyword or before the parameters when using a callback function).
-
-A simple example would be:
-
-```js
-async function declaredAsAsync() {
- // code
-}
-```
-
-or
-
-```js
-const declaredAsAsync = async () => {
- // code
-};
-```
-
-You can use that as well if you use the arrow function as an event listener.
-
-```js
-client.on('event', async (first, last) => {
- // code
-});
-```
-
-An important thing to know is that a function declared as `async` will always return a Promise. In addition to this, if you return something, the Promise will resolve with that value, and if you throw an error, it will reject the Promise with that error.
-
-### Execution with discord.js code
-
-After knowing how Promises work and what they are for, as well as about the theory, let's look at an example in which we'll handle multiple Promises. Let's say you want to react with letters (regional indicators) in a certain order. For this example, you will take the basic template for a discord.js bot with some ES6 adjustments.
-
-```js
-const Discord = require('discord.js');
-const client = new Discord.Client();
-
-const prefix = '?';
-
-client.once('ready', () => {
- console.log('I am ready!');
-});
-
-client.on('message', message => {
- if (message.content === `${prefix}react`) {
- // code inside here
- }
-});
-
-client.login('tokeninhere');
-```
-
-So now we need to put the code in. If you don't know how Node.js asynchronous execution works, you would probably try something like this:
-
-```js
-client.on('message', message => {
- if (message.content === `${prefix}react`) {
- message.react('🇦');
- message.react('🇧');
- message.react('🇨');
- }
-});
-```
-
-But since all of these react methods are started at the same time, it would just be a race to which server request finished first, so there would be no guarantee that it would react in the order you wanted it to. In order to make sure it reacts in order (a, b, c), we need to use the `.then()` callback from the Promises that these methods return. As a result the code we want would mostly look like this:
-
-```js
-client.on('message', message => {
- if (message.content === `${prefix}react`) {
- message.react('🇦')
- .then(() => message.react('🇧'))
- .then(() => message.react('🇨'))
- .catch(error => {
- // handle failure of any Promise rejection inside here
- });
- }
-});
-```
-
-In this piece of code, we [chain resolve](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/then#Chaining) Promises with each other, and if one of the Promises gets rejected, the function we passed to `.catch()` get called. So let's look at how the same code would look with async/await.
-
-```js
-client.on('message', async message => {
- if (message.content === `${prefix}react`) {
- await message.react('🇦');
- await message.react('🇧');
- await message.react('🇨');
- }
-});
-```
-
-That would mostly be the same code with async/await, but how do we catch Promise rejections now since we won't use `.catch()` anymore? That is also a useful feature with async/await; the error will be thrown if you await it so you can just wrap the awaited Promises inside a try/catch and you're good to go.
-
-```js
-client.on('message', async message => {
- if (message.content === `${prefix}react`) {
- try {
- await message.react('🇦');
- await message.react('🇧');
- await message.react('🇨');
- } catch (error) {
- // handle failure of any Promise rejection inside here
- }
- }
-});
-```
-
-This looks clean and is also nice and easy to read.
-
-So you may be asking, "How would I get the value the Promise resolved with?".
-
-Well let's look at an example where you want to delete a sent message.
-
-```js
-client.on('message', message => {
- if (message.content === `${prefix}delete`) {
- message.channel.send('this message will be deleted')
- .then(sentMessage => sentMessage.delete(10000))
- .catch(error => {
- // handle error
- });
- }
-});
-```
-
-The return value of a `.send()` is a Promise what resolves with the sent Message object, but how would the same code with async/await look like?
-
-```js
-client.on('message', async message => {
- if (message.content === `${prefix}delete`) {
- try {
- const sentMessage = await message.channel.send('This message will be deleted in 10 seconds.');
- await sentMessage.delete(10000);
- } catch (error) {
- // handle error
- }
- }
-});
-```
-
-With async/await you can just assign the awaited function to a variable that will represent the returned value. Now you know how you use async/await.
diff --git a/Ajuda/guide-master/guide/additional-info/changes-in-v12.md b/Ajuda/guide-master/guide/additional-info/changes-in-v12.md
deleted file mode 100644
index dbf9f88..0000000
--- a/Ajuda/guide-master/guide/additional-info/changes-in-v12.md
+++ /dev/null
@@ -1,2303 +0,0 @@
-# Updating from v11 to v12
-
-After a long time in development, Discord.js v12 is nearing a stable release, meaning it's time to update from v11 to get new features for your bots! However, with those new features comes a lot of changes to the library that will break code written for v11. This guide will serve as a handy reference for updating your code, covering the most commonly-used methods that have been changed, new topics such as partials and internal sharding, and will also include a comprehensive list of the method and property changes at the end.
-
-## Before You Start
-
-v12 requires Node 10.x or higher to use, so make sure you're up-to-date. To check your Node version, use `node -v` in your terminal or command prompt, and if it's not high enough, update it! There are many resources online to help you get up-to-date.
-
-For now, you do need Git installed and added to your PATH environment, so ensure that's done as well - again, guides are available online for a wide variety of operating systems. Once you have Node up-to-date and Git installed, you can install v12 by running `npm install discordjs/discord.js` in your terminal or command prompt for text-only use, or `npm install discordjs/discord.js node-opus` for voice support.
-
-## Commonly Used Methods That Changed
-
-* All section headers are named in the following convention: `Class#methodOrProperty`.
-* The use of parenthesis designates optional inclusion. For example, `Channel#fetch(Pinned)Message(s)` means that this section will include changes for `Channel#fetchPinnedMessages`, `Channel#fetchMessages`, and `Channel#fetchMessage`.
-* The use of asterisks designates a wildcard. For example, `Channel#send***` means that this section will include changes for `Channel#sendMessage`, `Channel#sendFile`, `Channel#sendEmbed`, and so forth.
-
-### Collection
-
-#### Collection#exists
-
-`collection.exists()` was removed entirely, `collection.some()` should be used to check if an element exists in the collection that satisfies the provided value.
-
-```diff
-- client.users.exists('username', 'Bob');
-+ client.users.some(user => user.username === 'Bob');
-```
-
-#### Collection#filterArray
-
-`collection.filterArray()` was removed entirely, as it was just a helper method for `collection.filter().array()` and most of the time converting a collection to an array is an unnecessary step.
-
-#### Collection#find
-
-`collection.find('property', value)` has been removed entirely, and `collection.find()` only accepts a function in v12.
-
-```diff
-- client.users.find('username', 'Bob');
-+ client.users.find(user => user.username === 'Bob');
-```
-
-#### Collection#findAll
-
-`collection.findAll()` was removed entirely as it just duplicated `collection.filterArray()`'s results.
-
-### Fetch
-
-Some methods that retrieve uncached data have been changed, transformed in the shape of a DataStore.
-
-```diff
-- client.fetchUser('123456789012345678');
-+ client.users.fetch('123456789012345678');
-
-- guild.fetchMember('123456789012345678');
-+ guild.members.fetch('123456789012345678');
-
-- guild.fetchMembers();
-+ guild.members.fetch();
-
-- textChannel.fetchMessage('123456789012345678');
-+ textChannel.messages.fetch('123456789012345678');
-
-- textChannel.fetchMessages({ limit: 10 });
-+ textChannel.messages.fetch({ limit: 10 });
-
-- textChannel.fetchPinnedMessages();
-+ textChannel.messages.fetchPinned();
-```
-
-### Send
-
-All the `.send***()` methods have been removed in favor of one general `.send()` method.
-
-```diff
-- channel.sendMessage('Hey!');
-+ channel.send('Hey!');
-
-- channel.sendEmbed(embedVariable);
-+ channel.send(embedVariable);
-+ channel.send({ embed: embedVariable });
-```
-
-`channel.send(embedVariable)` will only work if that variable is an instance of the `MessageEmbed` class; object literals won't give you the expected result unless your embed data is inside an `embed` key.
-
-```diff
-- channel.sendCode('js', 'const version = 11;');
-+ channel.send('const version = 12;', { code: 'js' });
-
-- channel.sendFile('./file.png');
-- channel.sendFiles(['./file-one.png', './file-two.png']);
-+ channel.send({
- files: [{
- attachment: 'entire/path/to/file.jpg',
- name: 'file.jpg'
- }]
-+ channel.send({
- files: ['https://cdn.discordapp.com/icons/222078108977594368/6e1019b3179d71046e463a75915e7244.png?size=2048']
-});
-```
-
-### Roles
-
-The `GuildMember.roles` Collection has been changed to a DataStore in v12, so a lot of the associated methods for interacting with a member's roles have changed as well. They're no longer on the GuildMember object itself, but instead now on the `GuildMemberRoleStore` DataStore.
-
-```diff
-- guildMember.addRole('123456789012345678');
-- guildMember.addRoles(['123456789012345678', '098765432109876543']);
-+ guildMember.roles.add('123456789012345678');
-+ guildMember.roles.add(['123456789012345678', '098765432109876543']);
-
-- guildMember.removeRole('123456789012345678');
-- guildMember.removeRoles(['123456789012345678', '098765432109876543']);
-+ guildMember.roles.remove('123456789012345678');
-+ guildMember.roles.remove(['123456789012345678', '098765432109876543']);
-
-- guildMember.setRoles(['123456789012345678', '098765432109876543']);
-+ guildMember.roles.set(['123456789012345678', '098765432109876543']);
-```
-
-In addition, the GuildMember properties related to roles have also been moved to the `GuildMemberRoleStore` DataStore.
-
-```diff
-- guildMember.colorRole;
-+ guildMember.roles.color;
-
-- guildMember.highestRole;
-+ guildMember.roles.highest;
-
-- guildMember.hoistRole;
-+ guildMember.roles.hoist;
-```
-
-### Ban and Unban
-
-The method to ban members and users have been moved to the `GuildMemberStore` Data Store.
-
-```diff
-- guild.ban('123456789012345678');
-+ guild.members.ban('123456789012345678');
-
-- guild.unban('123456789012345678');
-+ guild.members.unban('123456789012345678');
-```
-
-### Image URLs
-
-Some image-related properties like `user.avatarURL` are now a method in v12, so that you can apply some options to them, eg. to affect their display size.
-
-```diff
-- user.avatarURL;
-+ user.avatarURL();
-
-- user.displayAvatarURL;
-+ user.displayAvatarURL();
-
-- guild.iconURL;
-+ guild.iconURL();
-
-- guild.splashURL;
-+ guild.splashURL();
-```
-
-### RichEmbed Constructor
-
-The RichEmbed constructor has been removed and now the `MessageEmbed` constructor is used. It is largely the same to use, the only difference being the removal of `RichEmbed.attachFile()` - `MessageEmbed.attachFiles()` accepts a single file as a parameter as well.
-
-### String Concatenation
-
-v12 has changed how string concatenation works with stringifying objects. The `valueOf` any data structure will return its id, which affects how it behaves in strings, eg. using an object for a mention. In v11, you used to be able to use `channel.send(userObject + ' has joined!')` and it would automatically stringify the object and it would become the mention (`@user has joined!`), but in v12, it will now send a message that says `123456789012345678 has joined` instead. Using template literals (\`\`) will still return the mention, however.
-
-```diff
-- channel.send(userObject + ' has joined!')
-+ channel.send(`${userObject} has joined!`)
-```
-
-### User Account-Only Methods
-
-All user account-only methods have been removed, as they are no longer publicly accessible from the API.
-
-### Voice
-
-v12 has a new voice system that improves stability but also comes with some changes to playing audio:
-
-```diff
-# Applies to VoiceConnection and VoiceBroadcast
-- connection.playFile('file.mp3')
-+ connection.play('file.mp3')
-
-- connection.playStream(stream)
-+ connection.play(stream)
-
-- connection.playArbitraryInput(input)
-+ connection.play(input)
-
-- connection.playBroadcast(broadcast)
-+ connection.play(broadcast)
-
-- connection.playOpusStream(stream)
-+ connection.play(stream, { type: 'opus' })
-
-- connection.playConvertedStream(stream)
-+ connection.play(stream, { type: 'converted' })
-```
-
-You can now also play Ogg Opus files or WebM Opus files directly without the need for FFmpeg in v12:
-
-```js
-connection.play(fs.createReadStream('file.ogg'), { type: 'ogg/opus' });
-connection.play(fs.createReadStream('file.webm'), { type: 'webm/opus' });
-```
-
-It is also possible to define initial values for `plp`, `fec` and `bitrate` when playing a stream. Minus bitrate, these are new configurable options in v12 that can help when playing audio on unstable network connections.
-
-```diff
-- connection.playStream(stream).setBitrate(96)
-+ connection.play(stream, { bitrate: 96 })
-```
-
-If you don't want to alter the volume of a stream while you're playing it, you can disable volume to improve performance. This cannot be reverted during playback.
-
-```js
-connection.play(stream, { volume: false });
-```
-
-The internal voice system in v12 now uses streams where possible, and as such StreamDispatcher itself is now a WritableStream. It also comes with new changes:
-
-```diff
-- dispatcher.end()
-+ dispatcher.destroy()
-
-- dispatcher.on('end', handler)
-+ dispatcher.on('finish', handler)
-```
-
-You can manually control how many audio packets should be queued before playing audio for more consistent playback using the `highWaterMark` option (defaults to 12)
-```js
-connection.play(stream, { highWaterMark: 512 });
-```
-
-If you're frequently pausing/resuming an audio stream, you can enable playing silence packets while paused to prevent audio glitches on the Discord client
-```js
-// Passing true plays silence
-dispatcher.pause(true);
-```
-
-#### Broadcasts
-
-Broadcasts themselves now contain a `BroadcastDispatcher` that shares a similar interface to the `StreamDispatcher` and can be used to control the playback of an audio stream.
-
-```diff
-- client.createVoiceBroadcast()
-+ client.voice.createBroadcast()
-
-- broadcast.dispatchers
-+ broadcast.subscribers
-```
-
----
-::: danger
-This stuff should keep getting shoved to the bottom, with the commonly-used methods that are changed, as well as topic overviews added before it.
-:::
-
-The section headers for breaking changes will be named after the v11 classes/methods/properties and will be in alphabetical order, so that you can easily find what you're looking for. The section headers for additions will be named after the v12 classes/methods/properties, to reflect their current syntax appropriately.
-
-"Difference" codeblocks will be used to display the old methods vs the newer ones—the red being what's been removed and the green being its replacement. Some bits may have more than one version of being handled. Regular JavaScript syntax codeblocks will be used to display the additions.
-
-::: danger
-While this list has been carefully crafted, it may be incomplete! If you notice pieces of missing or inaccurate data, we encourage you to [submit a pull request](https://github.com/Danktuary/Making-Bots-with-Discord.js)!
-:::
-
-## Breaking Changes and Deletions
-
-Stuff that has gone through and updated - anything under Additions at the end will still likely need descriptions:
-
-Any voice-related classes may change at any time, as they're still actively being worked on, and will be finalized at a later date.
-
-* Activity [(additions)](/additional-info/changes-in-v12.md#activity)
-* ActivityFlags [(additions)](/additional-info/changes-in-v12.md#activityflags)
-* APIMessage [(additions)](/additional-info/changes-in-v12.md#apimessage)
-* Base [(additions)](/additional-info/changes-in-v12.md#base)
-* BaseClient [(additions)](/additional-info/changes-in-v12.md#baseclient)
-* BitField [(additions)](/additional-info/changes-in-v12.md#bitfield)
-* BroadcastDispatcher [(additions)](/additional-info/changes-in-v12.md#broadcastdispatcher)
-* Channel (changed send/fetch to TextChannel) [(additions)](/additional-info/changes-in-v12.md#channel)
-* ClientApplication [(additions)](/additional-info/changes-in-v12.md#clientapplication)
-* Client [(changes)](/additional-info/changes-in-v12.md#client) [(additions)](/additional-info/changes-in-v12.md#client-1)
-* ClientOptions [(changes)](/additional-info/changes-in-v12.md#clientoptions) [(additions)](/additional-info/changes-in-v12.md#clientoptions-1)
-* ClientUser [(changes)](/additional-info/changes-in-v12.md#clientuser) [(additions)](/additional-info/changes-in-v12.md#clientuser-1)
-* Collection [(changes)](/additional-info/changes-in-v12.md#collection)
-* Collector [(changes)](/additional-info/changes-in-v12.md#collector) [(additions)](/additional-info/changes-in-v12.md#collector-1)
-* CollectorOptions [(additions)](/additional-info/changes-in-v12.md#collectoroptions)
-* DMChannel [(changes)](/additional-info/changes-in-v12.md#dmchannel) [(additions)](/additional-info/changes-in-v12.md#dmchannel-1)
-* Emoji [(changes)](/additional-info/changes-in-v12.md#emoji)
-* EvaluatedPermissions [(changes)](/additional-info/changes-in-v12.md#evaluatedpermissions)
-* Game [(changes)](/additional-info/changes-in-v12.md#game)
-* GroupDMChannel [(changes)](/additional-info/changes-in-v12.md#groupdmchannel)
-* Guild [(changes)](/additional-info/changes-in-v12.md#guild) [(additions)](/additional-info/changes-in-v12.md#guild-1)
-* GuildChannel [(changes)](/additional-info/changes-in-v12.md#guildchannel) [(additions)](/additional-info/changes-in-v12.md#guildchannel-1)
-* GuildMember [(changes)](/additional-info/changes-in-v12.md#guildmember)
-* HTTPError [(additions)](/additional-info/changes-in-v12.md#httperror)
-* Integration [(additions)](/additional-info/changes-in-v12.md#integrations)
-* Invite [(changes)](/additional-info/changes-in-v12.md#invite)
-* Message [(changes)](/additional-info/changes-in-v12.md#message) [(additions)](/additional-info/changes-in-v12.md#message-1)
-* MessageAttachment [(changes)](/additional-info/changes-in-v12.md#messageattachment) [(additions)](/additional-info/changes-in-v12.md#messageattachment-1)
-* MessageCollectorOptions [(changes)](/additional-info/changes-in-v12.md#messagecollectoroptions)
-* MessageEmbed [(changes)](/additional-info/changes-in-v12.md#messageembed) [(additions)](/additional-info/changes-in-v12.md#messageembed-1)
-* MessageMentions [(changes)](/additional-info/changes-in-v12.md#messagementions)
-* MessageReaction [(changes)](/additional-info/changes-in-v12.md#messagereaction)
-* OAuth2Application [(changes)](/additional-info/changes-in-v12.md#oauth2application)
-* PartialGuild [(changes)](/additional-info/changes-in-v12.md#partialguildchannel)
-* PartialGuildChannel [(changes)](/additional-info/changes-in-v12.md#partialguildchannel)
-* Permissions [(changes)](/additional-info/changes-in-v12.md#permissions) [(additions)](/additional-info/changes-in-v12.md#permissions-1)
-* Presence [(changes)](/additional-info/changes-in-v12.md#presence) [(additions)](/additional-info/changes-in-v12.md#presence-1)
-* ReactionCollector [(additions)](/additional-info/changes-in-v12.md#reactioncollector)
-* ReactionEmoji [(changes)](/additional-info/changes-in-v12.md#)
-* RichEmbed [(changes)](/additional-info/changes-in-v12.md#richembed)
-* RichPresenceAssets [(changes)](/additional-info/changes-in-v12.md#richpresenceassets)
-* Role [(changes)](/additional-info/changes-in-v12.md#role)
-* Shard [(changes)](/additional-info/changes-in-v12.md#shard)
-* ShardClientUtil [(changes)](/additional-info/changes-in-v12.md#shardclientutil)
-* ShardingManager [(changes)](/additional-info/changes-in-v12.md#shardingmanager)
-* StreamDispatcher [(changes)](/additional-info/changes-in-v12.md#streamdispatcher)
-* TextChannel [(changes)](/additional-info/changes-in-v12.md#textchannel) [(additions)](/additional-info/changes-in-v12.md#textchannel-1)
-* User [(changes)](/additional-info/changes-in-v12.md#user) [(additions)](/additional-info/changes-in-v12.md#user-1)
-* Util [(changes)](/additional-info/changes-in-v12.md#util) [(additions)](/additional-info/changes-in-v12.md#util-1)
-* VoiceBroadcast [(changes)](/additional-info/changes-in-v12.md#voicebroadcast) [(additions)](/additional-info/changes-in-v12.md#voicebroadcast-1)
-* VoiceChannel [(additions)](/additional-info/changes-in-v12.md#voicechannel)
-* VoiceConnection [(changes)](/additional-info/changes-in-v12.md#voiceconnection)
-* VoiceReceiver [(changes)](/additional-info/changes-in-v12.md#voicereceiver) [(additions)](/additional-info/changes-in-v12.md#voicereceiver-1)
-* VoiceRegion [(changes)](/additional-info/changes-in-v12.md#voiceregion)
-* VoiceState [(additions)](/additional-info/changes-in-v12.md#voicestate)
-* VolumeInterface [(changes)](/additional-info/changes-in-v12.md#volumeinterface) [(additions)](/additional-info/changes-in-v12.md#volumeinterface-1)
-* Webhook [(changes)](/additional-info/changes-in-v12.md#webhook) [(additions)](/additional-info/changes-in-v12.md#webhook-1)
-* WebhookClient [(changes)](/additional-info/changes-in-v12.md#webhookclient)
-* WebSocketManager [(additions)](/additional-info/changes-in-v12.md#websocketmanager)
-* WebSocketShard [(additions)](/additional-info/changes-in-v12.md#websocketshard)
-
-Stuff Mark didn't do:
-
-* MessageAttachment
-
-### Dependencies
-
-#### Snekfetch
-
-Please note that `snekfetch` has been removed as a dependency, and has been replaced by `node-fetch`. `snekfetch` has been deprecated by its developer and is no longer maintained.
-
-### Attachment
-
-The `Attachment` class has been removed in favor of the `MessageAttachment` class.
-
-### Client
-
-#### Client#fetchUser
-
-`client.fetchUser()` has been removed and transformed in the shape of a DataStore.
-
-```diff
-- client.fetchUser('123456789012345678');
-+ client.users.fetch('123456789012345678');
-```
-
-#### Client#broadcasts
-
-`client.broadcasts` has been removed and is now in the `ClientVoiceManager` class.
-
-```diff
-- client.broadcasts;
-+ client.voice.broadcasts;
-```
-
-#### Client#browser
-
-`client.browser` has been changed to be an internal constant and is no longer available publicly.
-
-#### Client#channels
-
-`client.channels` has been changed from a Collection to a DataStore.
-
-#### Client#clientUserGuildSettingsUpdate
-
-The `client.clientUserGuildSettingsUpdate` event has been removed entirely, along with all other user account-only properties and methods.
-
-#### Client#clientUserSettingsUpdate
-
-The `client.clientUserSettingsUpdate` event has been removed entirely, along with all other user account-only properties and methods.
-
-#### Client#disconnect
-
-The `client.disconnect` event has been removed in favor of the `client.shardDisconnected` event to make use of internal sharding.
-
-```diff
-- client.on('disconnect', event => {});
-+ client.on('shardDisconnected', (event, shardID) => {});
-```
-
-#### Client#emojis
-
-`client.emojis` has been changed from a Collection to a DataStore.
-
-#### Client#guildMemberSpeaking
-
-The `speaking` parameter has been changed from a `boolean` value to a read-only `Speaking` class.
-
-#### Client#guilds
-
-`client.guilds` has been changed from a Collection to a DataStore.
-
-#### Client#ping
-
-`client.ping` has been moved to the WebSocketManager under `client.ws.ping`
-
-```diff
-- client.ping
-+ client.ws.ping
-```
-
-#### Client#pings
-
-`client.pings` has been moved to the `WebSocketShard` class to make use of internal sharding. The `Client` class has a `Collection` of `WebSocketShard`s available via `client.ws.shards`; alternatively, the `WebSocketShard` can be found as a property of other structures, eg `guild.shard`.
-
-```diff
-- client.pings;
-+ guild.shard.pings;
-```
-
-#### Client#presences
-
-`client.presences` has been removed to reduce extraneous getters.
-
-#### Client#reconnecting
-
-The `client.reconnecting` event has been removed in favor of the `client.shardReconnecting` event to make use of internal sharding.
-
-```diff
-- client.on('reconnecting', () => console.log('Successfully reconnected.'));
-+ client.on('shardReconnecting', id => console.log(`Shard with ID ${id} reconnected.`));
-```
-
-#### Client#resume
-
-The `client.resume` event has been removed in favor of the `client.shardResumed` event to make use of internal sharding.
-
-```diff
-- client.on('resume', replayed => console.log(`Resumed connection and replayed ${replayed} events.`));
-+ client.on('shardResumed', (replayed, shardID) => console.log(`Shard ID ${shardID} resumed connection and replayed ${replayed} events.`));
-```
-
-#### Client#status
-
-The `client.status` property has been removed and is now in the `WebSocketManager` class. In addition, it is no longer a getter.
-
-```diff
-- client.status;
-+ client.ws.status;
-```
-
-#### Client#syncGuilds
-
-`client.syncGuilds()` has been removed entirely, along with all other user account-only properties and methods.
-
-#### Client#typingStop
-
-The `client.typingStop` event has been removed entirely, as it was an event created by the library and not an actual Discord WebSocket event.
-
-#### Client#userNoteUpdate
-
-The `client.userNoteUpdate` event has been removed entirely, along with all other user account-only properties and methods.
-
-#### Client#users
-
-`client.users` has been changed from a Collection to a DataStore.
-
-#### Client#voiceConnections
-
-`client.voiceConnections` has been removed and is now in the `ClientVoiceManager` class. In addition, the `Collection` is no longer a getter.
-
-```diff
-- client.voiceConnections;
-+ client.voice.connections;
-```
-
-#### Client#voiceStateUpdate
-
-The `client.voiceStateUpdate` event now returns `oldState` and `newState` representing the `VoiceState` of the member before and after the update, as opposed to the member itself.
-
-```diff
-- client.on('voiceStateUpdate', (oldMember, newMember) => console.log(oldMember));
-+ client.on('voiceStateUpdate', (oldState, newState) => console.log(oldState));
-```
-
-### ClientOptions
-
-There have been several changes made to the `ClientOptions` object located in `client#options`.
-
-#### ClientOptions#apiRequestMethod
-
-`clientOptions.apiRequestMethod` has been made sequential and is used internally.
-
-#### ClientOptions#shardId
-
-`clientOptions.shardId` has been changed to `clientOptions.shards` and now also accepts an array of numbers.
-
-```diff
-- options.shardId: 1
-+ options.shards: [1, 2, 3]
-```
-
-#### ClientOptions#shards
-
-`clientOptions.shards` has been removed and is functionally equivalent to `clientOptions.totalShardCount` on v12.
-
-#### ClientOptions#sync
-
-`clientOptions.sync` has been removed entirely, along with all other user account-only properties and methods.
-
-### ClientUser
-
-#### ClientUser#acceptInvite
-
-`clientUser.acceptInvite()` has been removed entirely, along with all other user account-only properties and methods.
-
-#### ClientUser#addFriend
-
-`clientUser.addFriend()` has been removed entirely, along with all other user account-only properties and methods.
-
-#### ClientUser#avatarURL
-
-`clientUser.avatarURL` is now a method, as opposed to a property. It also allows you to determine the file format and size to return.
-
-```diff
-- clientUser.avatarURL;
-+ clientUser.avatarURL();
-+ clientUser.avatarURL({ format: 'png', size: 1024 });
-```
-
-#### ClientUser#block
-
-`clientUser.block()` has been removed entirely, along with all other user account-only properties and methods.
-
-#### ClientUser#blocked
-
-`clientUser.blocked` has been removed entirely, along with all other user account-only properties and methods.
-
-#### ClientUser#createGuild
-
-`clientUser.createGuild()` has been transformed in the shape of a DataStore. In addition, the second and third parameters in `clientUser.createGuild()` have been changed/removed, leaving it with a total of two parameters. The `region` and `icon` parameters from v11 have been merged into an object as the second parameter.
-
-```diff
-- clientUser.createGuild('New server', 'us-east', './path/to/file.png');
-+ clientUser.guilds.create('New server', { region: 'us-east', icon: './path/to/file.png' });
-```
-
-#### ClientUser#displayAvatarURL
-
-`clientUser.displayAvatarURL` is now a method, as opposed to a property. It also allows you to determine the file format and size to return.
-
-```diff
-- clientUser.displayAvatarURL;
-+ clientUser.displayAvatarURL();
-+ clientUser.displayAvatarURL({ format: 'png', size: 1024 });
-```
-
-#### ClientUser#email
-
-`clientUser.email` has been removed entirely, along with all other user account-only properties and methods.
-
-#### ClientUser#fetchMentions
-
-`clientUser.fetchMentions()` has been removed entirely, along with all other user account-only properties and methods.
-
-#### ClientUser#fetchProfile
-
-`clientUser.fetchProfile()` has been removed entirely, along with all other user account-only properties and methods.
-
-#### ClientUser#friends
-
-`clientUser.friends` has been removed entirely, along with all other user account-only properties and methods.
-
-#### ClientUser#guildSettings
-
-`clientUser.guildSettings` has been removed entirely, along with all other user account-only properties and methods.
-
-#### ClientUser#mfaEnabled
-
-`clientUser.mfaEnabled` has been removed entirely, along with all other user account-only properties and methods.
-
-#### ClientUser#mobile
-
-`clientUser.mobile` has been removed entirely, along with all other user account-only properties and methods.
-
-#### ClientUser#note
-
-`clientUser.note` has been removed entirely, along with all other user account-only properties and methods.
-
-#### ClientUser#notes
-
-`clientUser.notes` has been removed entirely, along with all other user account-only properties and methods.
-
-#### ClientUser#premium
-
-`clientUser.premium` has been removed entirely, along with all other user account-only properties and methods.
-
-#### ClientUser#removeFriend
-
-`clientUser.removeFriend()` has been removed entirely, along with all other user account-only properties and methods.
-
-#### ClientUser#send\*\*\*
-
-Just like the `TextChannel#send***` methods, all the `.send***()` methods have been removed in favor of one general `.send()` method. Read through the [TextChannel#send\*\*\*](/additional-info/changes-in-v12.md#channelsend) section for more information.
-
-#### ClientUser#setGame
-
-`clientUser.setGame()` has been changed to `clientUser.setActivity()`. The second parameter is no longer for providing a streaming URL, but rather an object that allows you to provide the URL and activity type.
-
-```diff
-- clientUser.setGame('with my bot friends!');
-+ clientUser.setActivity('with my bot friends!');
-
-- clientUser.setGame('with my bot friends!', 'https://twitch.tv/your/stream/here');
-+ clientUser.setActivity('with my bot friends!', { url: 'https://twitch.tv/your/stream/here', type: 'STREAMING' });
-```
-
-#### ClientUser#setNote
-
-`clientUser.setNote()` has been removed entirely, along with all other user account-only properties and methods.
-
-#### ClientUser#setPassword
-
-`clientUser.setPassword()` has been removed entirely, along with all other user account-only properties and methods.
-
-#### ClientUser#settings
-
-`clentUser.settings` has been removed entirely, along with all other user account-only properties and methods.
-
-#### ClientUser#unblock
-
-`clientUser.unblock()` has been removed entirely, along with all other user account-only properties and methods.
-
-### ClientUserChannelOverride
-
-The `ClientUserChannelOverride` class has been removed entirely, along with all other user account-only properties and methods.
-
-### ClientUserGuildSettings
-
-The `ClientUserGuildSettings` class has been removed entirely, along with all other user account-only properties and methods.
-
-### ClientUserSettings
-
-The `ClientUserSettings` class has been removed entirely, along with all other user account-only properties and methods.
-
-### ClientUserChannelOverride
-
-The `ClientUserChannelOverride` class has been removed entirely.
-
-### ClientUserGuildSettings
-
-The `ClientUserGuildSettings` class has been removed entirely.
-
-### ClientUserSettings
-
-The `ClientUserSettings` class has been removed entirely.
-
-### Collection
-
-#### Collection#find/findKey
-
-Both methods will now return `undefined` if nothing is found.
-
-#### Collection#deleteAll
-
-`collection.deleteAll()` has been removed in favor of map's default `clear()` method.
-
-```diff
-- roles.deleteAll();
-+ roles.clear();
-```
-
-#### Collection#exists
-
-`collection.exists()` has been removed entirely in favor of `collection.some()`
-
-```diff
-- client.users.exists('username', 'Bob');
-+ client.users.some(user => user.username === 'Bob');
-```
-
-#### Collection#filterArray
-
-`collection.filterArray()` has been removed completely.
-
-#### Collection#findAll
-
-`collection.findAll()` has been removed completely as the same functionality can be obtained through `collection.filter()`.
-
-#### Collection#first/firstKey/last/lastKey/random/randomKey
-
-The `amount` parameter of these methods now allows a negative number which will start the query from the end of the collection instead of the start.
-
-#### Collection#tap
-
-`collection.tap` runs a specific function over the collection instead of mimicking `.forEach()`, this functionality was moved to `collection.each()`.
-
-### Collector
-
-#### Collector#cleanup
-
-`collector.cleanup()` has been removed entirely.
-
-#### Collector#handle
-
-`collector.handle()` has been changed to `collector.handleCollect()`.
-
-#### Collector#postCheck
-
-`collector.postCheck()` has been changed to `collector.checkEnd()`.
-
-### DMChannel
-
-#### DMChannel#acknowledge
-
-`dmChannel.acknowledge()` has been removed entirely, along with all other user account-only properties and methods.
-
-#### DMChannel#createCollector
-
-`dmChannel.createCollector()` has been removed in favor of `dmChannel.createMessageCollector()`.
-
-#### DMChannel#fetch(Pinned)Message(s)
-
-`dmChannel.fetchMessage(s)` has been transformed in the shape of a DataStore. See the [TextChannel#fetch(Pinned)Message(s)](/additional-info/changes-inv-v12.md#channel) section for more information.
-
-#### DMChannel#search
-
-`dmChannel.search()` has been removed entirely, along with all other user account-only properties and methods.
-
-#### DMChannel#send\*\*\*
-
-Just like the `TextChannel#send***` methods, all the `.send***()` methods have been removed in favor of one general `.send()` method. Read through the [TextChannel#send\*\*\*](/additional-info/changes-in-v12.md#channelsend) section for more information.
-
-### Emoji
-
-`Emoji` now extends `Base` and represent either a `GuildEmoji` or `ReactionEmoji`, and some of the specific properties have moved to their respective object, instead of everything on the base `Emoji` object.
-
-#### Emoji#\*\*\*RestrictedRole(s)
-
-The helper methods to add and remove a role or roles from the roles allowed to use the emoji have been removed from `emoji.edit()` and are now set via `guildEmoji.edit()`.
-
-```diff
-- emoji.addRestrictedRole('123456789012345678');
-- emoji.addRestrictedRoles(['123456789012345678', '098765432109876543']);
-- emoji.removeRestrictedRole('1234567890123345678');
-- emoji.removedRestrictedRoles(['123456789012345678', '098765432109876543']);
-+ emoji.edit({ roles: ['123456789012345678', '098765432109876543'] })
-```
-
-#### Emoji#deletable
-
-`emoji.deletable` has been moved to `guildEmoji.deletable`.
-
-#### Emoji#fetchAuthor
-
-`emoji.fetchAuthor()` has been moved to `guildEmoji.fetchAuthor()`.
-
-#### Emoji#guild
-
-`emoji.guild` has been moved to `guildEmoji.guild`.
-
-#### Emoji#setName
-
-`emoji.setName()` has been moved to `guildEmoji.setName()`.
-
-### EvaluatedPermissions
-
-`evaluatedPermissions` has been removed entirely, see the `Permissions` page.
-
-### Game
-
-The `Game` class has been removed in favor of the `Activity` class to be consistent with the API.
-
-```diff
-- user.presence.game
-+ user.presence.activity
-```
-
-### GroupDMChannel
-
-The `GroupDMChannel` class has been deprecated from the Discord API. While it's still available through Gamebridge for now, that will also be removed in the future. In addition, group DM's has always been unreliable and hacky to work with a bot.
-
-### Guild
-
-#### Guild#acknowledge
-
-`guild.acknowledge()` has been removed entirely, along with all other user account-only properties and methods.
-
-#### Guild#allowDMs
-
-`guild.allowDMs()` has been removed entirely, along with all other user account-only properties and methods.
-
-#### Guild#ban
-
-`guild.ban()` has been moved to the `GuildMemberStore`. In addition, the second parameter in `guild.members.ban()` has been changed. The `options` parameter no longer accepts a number, nor a string.
-
-```diff
-- guild.ban(user, 7);
-+ guild.members.ban(user, { days: 7 });
-
-- guild.ban(user, 'Too much trolling');
-+ guild.members.ban(user, { reason: 'Too much trolling' });
-```
-
-#### Guild#Channels
-
-`guild.channels` is now a DataStore instead of a Collection.
-
-#### Guild#createChannel
-
-`guild.createChannel()` has been transformed in the shape of a DataStore. The second, third and fourth parameters in `guild.createChannel()` have been changed/removed, leaving it with a total of two parameters, the second one being an object with all of the options available in `ChannelData`.
-
-```diff
-- guild.createChannel('new-channel', 'text', permissionOverwriteArray, 'New channel added for fun!');
-+ guild.channels.create('new-channel', 'text', { overwrites: permissionOverwriteArray, reason: 'New channel added for fun!' });
-```
-
-#### Guild#createEmoji
-
-`guild.createEmoji()` has been transformed in the shape of a DataStore. The third and fourth parameters in `guild.createEmoji()` have been changed/removed, leaving it with a total of three parameters. The `roles` and `reason` parameters from v11 have been merged into an object as the third parameter.
-
-```diff
-- guild.createEmoji('./path/to/file.png', 'NewEmoji', collectionOfRoles, 'New emoji added for fun!');
-+ guild.emojis.create('./path/to/file.png', 'NewEmoji', { roles: collectionOfRoles, reason: 'New emoji added for fun!' });
-```
-
-#### Guild#createRole
-
-`guild.createRole()` has been transformed in the shape of a DataStore. The first and second parameters in `guild.createRole()` have been changed/removed, leaving it with a total of one parameter. The `data` and `reason` parameters from v11 have been moved into an object as the first parameter.
-
-```diff
-- guild.createRole(roleData, 'New staff role!');
-+ guild.roles.create({ data: roleData, reason: 'New staff role!' });
-```
-
-#### Guild#deleteEmoji
-
-`Guild.deleteEmoji()` has been removed and transformed in the shape of a DataStore. Note the possible use of `resolve()` as a broader alternative to `get()`.
-
-```diff
-- guild.deleteEmoji('123456789012345678');
-+ guild.emojis.resolve('123456789012345678').delete();
-```
-
-#### Guild#defaultChannel
-
-Unfortunately, "default" channels don't exist in Discord anymore, and as such, the `guild.defaultChannel` property has been removed with no alternative.
-
-**Q:** "I previously had a welcome message system (or something similar) set up using that property. What can I do now?"
-
-**A:** There are a few ways to tackle this. Using the example of a welcome message system, you can:
-
-1. Set up a database table to store the channel ID in a column when someone uses a `!welcome-channel #channel-name` command, for example. Then inside the `guildMemberAdd` event, use `client.channels.get('id')` and send a message to that channel. This is the most reliable method and gives server staff freedom to rename the channel as they please.
-2. Make a new command that creates a `welcome-messages` channel, use `guild.channels.find(channel => channel.name === 'welcome-messages')`, and send a message to that channel. This method will work fine in most cases, but will break if someone on that server decides to rename the channel. This may also give you unexpected results, due to Discord allowing multiple channels to have the same name.
-
-::: tip
-Not sure how to set up a database? Check out [this page](/sequelize/)!
-:::
-
-#### Guild#emojis
-
-`guild.emojis` has been transformed in the shape of a DataStore.
-
-#### Guild#fetchBans
-
-`guild.fetchBans()` will return a `Collection` of objects in v12, whereas v11 would return a `Collection` of `User` objects.
-
-```diff
-- guild.fetchBans().then(bans => console.log(`${bans.first().tag} was banned`));
-+ guild.fetchBans().then(bans => console.log(`${bans.first().user.tag} was banned because "${bans.first().reason}"`));
-```
-
-#### Guild#fetchMember(s)
-
-`guild.fetchMember()` and `guild.fetchMembers()` were both removed and transformed in the shape of DataStores. In addition, `guild.members.fetch()` will return a `Collection` of `GuildMember` objects in v12, whereas v11 would return a `Guild` object.
-
-```diff
-- guild.fetchMember('123456789012345678');
-+ guild.members.fetch('123456789012345678');
-```
-
-```diff
-- guild.fetchMembers();
-+ guild.members.fetch();
-```
-
-#### Guild#iconURL
-
-`guild.iconURL` is now a method, as opposed to a property. It also allows you to determine the file format and size to return.
-
-```diff
-- guild.iconURL;
-+ guild.iconURL();
-+ guild.iconURL({ format: 'png', size: 1024 });
-```
-
-#### Guild#messageNotifications
-
-`guild.messageNotifications` has been removed entirely, along with all other user account-only properties and methods.
-
-#### Guild#mobilePush
-
-`guild.mobilePush` has been removed entirely, along with all other user account-only properties and methods.
-
-#### Guild#muted
-
-`guild.muted` has been removed entirely, along with all other user account-only properties and methods.
-
-#### Guild#position
-
-`guild.position` has been removed entirely, along with all other user account-only properties and methods.
-
-#### Guild#presences
-
-`guild.presences` is now a DataStore instead of a Collection.
-
-#### Guild#pruneMembers
-
-`guild.pruneMembers()` has been transformed in the shape of a DataStore. In addition, the first, second, and third parameters in the method have been changed or removed, leaving it with a total of one parameter. The `days`, `dry`, and `reason` parameters from v11 have been merged into an object as the first parameter.
-
-```diff
-- guild.pruneMembers(7, true, 'Scheduled pruning');
-+ guild.members.prune({ days: 7, dry: true, reason: 'Scheduled pruning' });
-```
-
-#### Guild#roles
-
-`guild.roles` is now a DataStore instead of a Collection.
-
-#### Guild#search
-
-`guild.search()` has been removed entirely, along with all other user account-only properties and methods.
-
-#### Guild#setChannelPosition
-
-`guild.setChannelPosition()` has been removed entirely. As an alternative, you can use `channel.setPosition()`, or `guild.setChannelPositions()`, which accepts accepts the same form of data as `guild.setChannelPosition` but inside an array.
-
-```diff
-- guild.setChannelPosition({ channel: '123456789012345678', position: 1 });
-+ guild.setChannelPositions([{ channel: '123456789012345678', position: 1 }]);
-+ channel.setPosition(1);
-```
-
-#### Guild#setPosition
-
-`guild.setPosition()` has been removed entirely, along with all other user account-only properties and methods.
-
-#### Guild#setRolePosition
-
-`guild.setRolePosition()` has been removed entirely as an extraneous helper method. As an alternative, you can use `role.setPosition()`.
-
-```diff
-- guild.setRolePosition({ role: '123456789012345678', position: 1 });
-+ role.setPosition(1);
-```
-
-#### Guild#splashURL
-
-`guild.splashURL` is now a method, as opposed to a property. It also allows you to determine the file format and size to return.
-
-```diff
-- guild.splashURL;
-+ guild.splashURL();
-+ guild.splashURL({ format: 'png', size: 1024 });
-```
-
-#### Guild#suppressEveryone
-
-`guild.suppressEveryone` has been removed entirely, along with all other user account-only properties and methods.
-
-#### Guild#sync
-
-`guild.sync()` has been removed entirely, along with all other user account-only properties and methods.
-
-#### Guild#unban
-
-`guild.unban()` has been transformed in the shape of a DataStore and is now a method on `GuildMemberStore`. In addition, it also now optionally accepts a string as a second parameter for `reason`.
-
-```diff
-- guild.unban('123456789012345678');
-+ guild.members.unban('123456789012345678', 'Ban appealed.');
-```
-
-### GuildChannel
-
-The properties of a channel relating to its position have been renamed. `guildChannel.calculatedPosition` is now `guildChannel.position`. `guildChannel.position` is now more clearly named `guildChannel.rawPosition` to denote that it's directly from the API without any sorting.
-
-```diff
-- channel.calculatedPosition;
-+ channel.position;
-
-- channel.position;
-+ channel.rawPosition;
-```
-
-#### GuildChannel#clone
-
-The first, second, third, and fourth parameters in `channel.clone()` have been changed/removed, leaving it with a total of one parameter. The `name`, `withPermissions`, `withTopic`, and `reason` parameters from v11 have been merged into an object as the first parameter. Several other parameters have also been added to the options object.
-
-#### GuildChannel#createInvite
-
-The second parameter in `channel.createInvite()` has been removed, leaving it with a total of one parameter. The `reason` parameter from v11 have been merged into an object as the first parameter.
-
-```diff
-- channel.createInvite({ temporary: true }, 'Just testing');
-+ channel.createInvite({ temporary: true, reason: 'Just testing' });
-```
-
-#### GuildChannel#members
-
-`guildChannel.members` has been removed from `guildChannel.members` and added to `textChannel.members` and `voiceChannel.members`.
-
-#### GuildChannel#messageNotifications
-
-`guildChannel.messageNotifications` has been removed entirely, along with all other user account-only properties.
-
-#### GuildChannel#muted
-
-`guildChannel.muted` has been removed entirely, along with all other user account-only properties.
-
-#### GuildChannel#\*\*\*Permissions
-
-`guildChannel.memberPermissions` and `guildChannel.rolePermissions` are now private.
-
-#### GuildChannel#replacePermissionOverwrites
-
-`guildChannel.replacePermissionOverwrites` has been removed entirely.
-
-#### GuildChannel#setPosition
-
-The second parameter in `channel.setPosition()` has been changed. The `relative` parameter from v11 has been merged into an object.
-
-```diff
-- channel.setPosition(10, true);
-+ channel.setPosition(10, { relative: true, reason: 'Basic organization' });
-```
-
-### GuildMember
-
-#### GuildMember\*\*\*Role(s)
-
-All of the methods to modify a member's roles have been moved to the `GuildMemberRoleStore`.
-
-```diff
-- guildMember.addRole('123456789012345678');
-- guildMember.addRoles(['123456789012345678', '098765432109876543']);
-+ guildMember.roles.add('123456789012345678');
-+ guildMember.roles.add(['123456789012345678', '098765432109876543']);
-
-- guildMember.removeRole('123456789012345678');
-- guildMember.removeRoles(['123456789012345678', '098765432109876543']);
-+ guildMember.roles.remove('123456789012345678');
-+ guildMember.roles.remove(['123456789012345678', '098765432109876543']);
-
-- guildMember.setRoles(['123456789012345678', '098765432109876543']);
-+ guildMember.roles.set(['123456789012345678', '098765432109876543']);
-```
-
-#### GuildMember#ban
-
-`guildMember.ban()` has been transformed in the shape of a DataStore and is now a method on `GuildMemberStore`. The second parameter has been changed from a string or an object to only accept an object. The `reason` and `days` parameters are keys in the `options` object.
-
-```diff
-- member.ban(user, 7);
-+ guild.members.ban(user, { days: 7 });
-
-- member.ban(user, 'Too much trolling');
-+ guild.members.ban(user, { reason: 'Too much trolling' });
-```
-
-#### GuildMember#\*\*\*Role
-
-`guildMember.colorRole`, `guildMember.highestRole` and `guildMember.hoistRole` have all been moved to the `GuildMemberRoleStore` DataStore.
-
-```diff
-- guildMember.colorRole;
-+ guildMember.roles.color;
-
-- guildMember.highestRole;
-+ guildMember.roles.highest;
-
-- guildMember.hoistRole;
-+ guildMember.roles.hoist;
-```
-
-#### GuildMember#\*\*\*deaf
-
-`guildMember.deaf`, `guildMember.selfDeaf` and `guildMember.serverDeaf` have all been moved to the `VoiceState` class.
-
-```diff
-- guildMember.deaf;
-+ guildMember.voice.deaf;
-
-- guildMember.selfDeaf;
-+ guildMember.voice.selfDeaf;
-
-- guildMember.serverDeaf;
-+ guildMember.voice.serverDeaf;
-```
-
-#### GuildMember#hasPermission
-
-The `explicit` parameter has been removed entirely. The `checkAdmin` and `checkOwner` parameters have been changed into a single `options` object with those values as keys.
-
-```diff
-- guildMember.hasPermission('MANAGE_MESSAGES', true, false, false);
-+ guildMember.hasPermission('MANAGE_MESSAGES', { checkAdmin: false, checkOwner: false });
-```
-
-#### GuildMember#hasPermissions
-
-`guildMember.hasPermissions()` has been removed in favor of `guildMember.hasPermission()`.
-
-```diff
-- guildMember.hasPermissions(['MANAGE_MESSAGES', 'MANAGE_ROLES']);
-+ guildMember.hasPermission(['MANAGE_MESSAGES', 'MANAGE_ROLES']);
-```
-
-#### GuildMember#lastMessage
-
-The `guildMember.lastMessage` property is now read-only.
-
-#### GuildMember#missingPermissions
-
-`guildMember.missingPermissions` has been removed entirely.
-
-#### GuildMember#\*\*\*mute
-
-`guildMember.mute`, `guildMember.selfMute` and `guildMember.serverMute` have all been moved to the `VoiceState` class.
-
-```diff
-- guildMember.mute;
-+ guildMember.voice.mute;
-
-- guildMember.selfMute;
-+ guildMember.voice.selfMute;
-
-- guildMember.serverMute;
-+ guildMember.voice.serverMute;
-```
-
-#### GuildMember#roles
-
-`guildMember.roles` is now a DataStore instead of a Collection.
-
-#### GuildMember#send\*\*\*
-
-Just like the `textChannel#send***` methods, all the `.send***()` methods have been removed in favor of one general `.send()` method. Read through the [textChannel#send\*\*\*](/additional-info/changes-in-v12.md#channelsend) section for more information.
-
-#### GuildMember#set\*\*\*
-
-Along with the rest of the voice-related methods and properties, the methods for moving, muting and deafening a member have been moved to the `VoiceState` class.
-
-```diff
-- guildMember.setDeaf(true);
-+ guildMember.voice.setDeaf(true);
-
-- guildMember.setMute(true);
-+ guildMember.voice.setMute(true);
-
-- guildMember.setVoiceChannel('123456789012345678');
-+ guildMember.voice.setChannel('123456789012345678');
-```
-
-#### GuildMember#speaking
-
-`guildMember.speaking` has been moved to the `VoiceState` class.
-
-```diff
-- guildMember.speaking;
-+ guildMember.voice.speaking;
-```
-
-#### GuildMember#voice\*\*\*
-
-`guildMember.voiceChannel`, `guildMember.voiceChannelID` and `guildMember.voiceSessionID` have all been moved to the `VoiceState` class, which is read-only.
-
-```diff
-- guildMember.voiceChannel;
-+ guildMember.voice.channel;
-
-- guildMember.voiceChannelID;
-+ guildMember.voice.channelID;
-
-- guildMember.voiceSessionID;
-+ guildMember.voice.sessionID;
-```
-
-### Invite
-
-#### Invite#\*\*\*ChannelCount
-
-`invite.textChannelCount` and `invite.voiceChannelCount` have both been removed entirely.
-
-### Message
-
-#### Message#acknowledge
-
-`message.acknowledge()` has been removed entirely, along with all other user account-only properties and methods.
-
-#### Message#clearReactions
-
-`message.clearReactions()` has been transformed in the shape of a DataStore.
-
-```diff
-- message.clearReactions();
-+ message.reactions.removeAll();
-```
-
-#### Message#delete
-
-The first parameter in `message.delete()` has been changed. The `timeout` parameter from v11 have been merged into an object as the first parameter. In addition, there is now another optional key in the object, `reason`.
-
-```diff
-- message.delete(5000);
-+ message.delete({ timeout: 5000, reason: 'It had to be done.' });
-```
-
-#### Message#editCode
-
-In the same sense that the `channel.sendCode()` method was removed, `message.editCode()` has also been removed entirely.
-
-```diff
-- message.editCode('js', 'const version = 11;');
-+ message.edit('const version = 12;', { code: 'js' });
-```
-
-#### Message#hit
-
-`message.hit` has been removed entirely, as it was used for user-account only searches.
-
-#### Message#is(Member)Mentioned
-
-`message.isMentioned()` and `message.isMemberMentioned()` have been removed in favor of `message.mentions.has()`.
-
-```diff
-- message.isMentioned('123456789012345678');
-- message.isMemberMentioned('123456789012345678');
-+ message.mentions.has('123456789012345678');
-```
-
-#### Message#member
-
-`message.member` is now read-only.
-
-### MessageAttachment
-
-The `MessageAttachment` class constructor parameters have changed to reflect that `Attachment` has been removed and rolled into `MessageAttachment`.
-
-#### MessageAttachment#client
-
-`attachment.client` has been removed entirely so an attachment can be constructed without needing the full client.
-
-#### MessageAttachment#filename
-
-`attachment.filename` has been renamed to `attachment.name`.
-
-#### MessageAttachment#filesize
-
-`attachment.filesize` has been renamed to `attachment.size`.
-
-### MessageCollector
-
-See the `Collector` section for most of the changes to `MessageCollector`, such as the new `dispose` method and event. Changes to the `MessageCollector` constructor in particular are as follows:
-
-#### MessageCollector#channel
-
-A `GroupDMChannel` is no longer able to be used for a collector, only `DMChannel` and `TextChannel`.
-
-#### MessageCollector#message
-
-The `messageCollector.message` event has been removed in favor of the generic `collector.on` event.
-
-### MessageCollectorOptions
-
-#### MessageCollectorOptions#max(Matches)
-
-The `max` and `maxMatches` properties of the `MessageCollector` class have been renamed and repurposed.
-
-```diff
-- `max`: The The maximum amount of messages to process.
-+ `maxProcessed`: The maximum amount of messages to process.
-
-- `maxMatches`: The maximum amount of messages to collect.
-+ `max`: The maximum amount of messages to collect.
-```
-
-### MessageEmbed
-
-`MessageEmbed` now encompasses both the received embeds in a message and the constructor - the `RichEmbed` constructor was removed in favor of `MessageEmbed`.
-
-#### MessageEmbed#attachFiles
-
-`RichEmbed.attachFile()` is the only method that did not make the transition from v11 to v12. The `MessageEmbed.attachFiles()` works for one or more files.
-
-#### MessageEmbed#client
-
-`messageEmbed.client` has been removed entirely so a new embed can be constructed without needing the full client.
-
-#### MessageEmbed#message
-
-`messageEmbed.message` has been removed entirely so a new embed can be constructed without needing the full client.
-
-### MessageMentions
-
-#### MessageMentions#has
-
-`mentions.has()` has been added, replacing `message.isMentioned()` and `message.isMemberMentioned()`. It has two paramets: the first is `data` representing a `User`, `GuildMember`, `Role`, or `GuildChannel` and an optional `options` object.
-
-```diff
-- message.isMentioned('123456789012345678');
-- message.isMemberMentioned('123456789012345678');
-+ message.mentions.has('123456789012345678');
-+ message.mentions.has('123456789012345678', { ignoreDirect: true, ignoreRoles: true, ignoreEveryone: true });
-```
-
-### MessageReaction
-
-#### MessageReaction#fetchUsers
-
-`messageReaction.fetchUsers()` has been transformed in the shape of a DataStore. In addition, the first parameter has been removed in favor of an object.
-
-```diff
-- reaction.fetchUsers(50);
-+ reaction.users.fetch({ limit: 50 });
-```
-
-#### MessageReaction#remove
-
-`messageReaction.remove()` has been transformed in the shape of a DataStore.
-
-```diff
-- reaction.remove();
-+ reaction.users.remove();
-```
-
-### OAuth2Application
-
-The `OAuth2Application` class has been renamed to `ClientApplication`.
-
-#### OAuth2Application#bot
-
-`application.bot` has been removed entirely.
-
-#### OAuth2Application#flags
-
-`application.flags` has been removed entirely.
-
-#### OAuth2Application#iconURL
-
-`application.iconURL` is now a method, as opposed to a property. It also allows you to determine the file format and size to return.
-
-```diff
-- user.iconURL;
-+ user.iconURL();
-+ user.iconURL({ format: 'png', size: 1024 });
-```
-
-#### OAuth2Application#redirectURLs
-
-`application.redirectURLs` has been removed entirely.
-
-#### OAuth2Application#reset
-
-`application.reset()` has been removed entirely, as it was an endpoint for user accounts.
-
-#### OAuth2Application#rpcApplicationState
-
-`application.rpcApplicationState` has been removed entirely.
-
-#### OAuth2Application#secret
-
-`application.secret` has been removed entirely.
-
-### PartialGuild(Channel)
-
-The `PartialGuild` and `PartialGuildChannel` classes for use with invites have been removed entirely.
-
-### Permissions
-
-#### Permissions#_member
-
-`permissions._member` has been removed entirely.
-
-#### Permissions#flags
-
-The following permission flags have been renamed:
-
-* `READ_MESSAGES` -> `VIEW_CHANNEL`
-* `EXTERNAL_EMOJIS` -> `USE_EXTERNAL_EMOJIS`
-* `MANAGE_ROLES_OR_PERMISSIONS` -> `MANAGE_ROLES`
-
-#### Permission#hasPermission(s)
-
-`permissions.hasPermission()` and `permissions.hasPermissions()` have been removed entirely in favor of `permissions.has()`. This change reduces extraneous helper methods.
-
-#### Permissions#missingPermissions
-
-`permissions.missingPermissions()` has been renamed to `permissions.missing()` and also refactored. The second parameter in v11 was named `explicit`, described as "Whether to require the user to explicitly have the exact permissions", defaulting to `false`. However, the second parameter in v11 is named `checkAdmin`, described as "Whether to allow the administrator permission to override", defaulting to `true`.
-
-```diff
-- permissions.missingPermissions(['MANAGE_SERVER']);
-+ permissions.missing(['MANAGE_SERVER']);
-```
-
-#### Permissions#raw
-
-`permissions.raw` has been removed in favor of `permissions.bitfield`.
-
-```diff
-- permissions.raw;
-+ permissions.bitfield;
-```
-
-#### Permissions#resolve
-
-`permissions.resolve()` has been removed entirely.
-
-### Presence
-
-#### Presence#game
-
-`presence.game` has been removed in favor of the `Activity` class.
-
-```diff
-- presence.game;
-+ presence.activity;
-```
-
-### RichEmbed
-
-The `RichEmbed` class has been removed in favor of the `MessageEmbed` class.
-
-#### RichEmbed#attachFile
-
-`RichEmbed.attachFile()` has been removed in favor of `MessageEmbed.attachFiles()`.
-
-```diff
-- new RichEmbed().attachFile('attachment://file-namme.png');
-+ new MessageEmbed().attachFiles(['attachment://file-namme.png']);
-
-- new RichEmbed().attachFile({ attachment: './file-name.png' });
-+ new MessageEmbed().attachFiles([{ attachment: './file-name.png' }]);
-
-- new RichEmbed().attachFile(new Attachment('./file-name.png'));
-+ new MessageEmbed().attachFiles([new MessageAttachment('./file-name.png')]);
-```
-
-### RichPresenceAssets
-
-#### RichPresenceAssets#\*\*\*ImageURL
-
-Both properties relating to the rich presence's image URL have been changed to be a method, as opposed to a property. It also allows you to determine the file format and size to return.
-
-```diff
-- asset.smallImageURL;
-- asset.largeImageURL;
-+ asset.smallImageURL();
-+ asset.largeImageURL({ format: 'png', size: 1024 });
-```
-
-### Role
-
-The properties of a role relating to its position have been renamed. `role.calculatedPosition` is now `role.position`. `role.position` is now more clearly named `role.rawPosition` to denote that it's directly from the API without any sorting.
-
-```diff
-- role.calculatedPosition;
-+ role.position;
-
-- role.position;
-+ role.rawPosition;
-```
-
-#### Role#hasPermission(s)
-
-`role.hasPermission()` and `role.hasPermissions()` have been removed in favor of `permissions.has()`.
-
-```diff
-- role.hasPermission('MANAGE_MESSAGES');
-+ role.permissions.has('MANAGE_MESSAGES');
-```
-
-```diff
-- role.hasPermissions(['MANAGE_MESSAGES', 'MANAGE_SERVER']);
-+ role.permissions.has(['MANAGE_MESSAGES', 'MANAGE_SERVER']);
-```
-
-#### Role#serialize
-
-`role.serialize()` has been removed as an extraneous helper method.
-
-```diff
-- role.serialize();
-+ role.permissions.serialize();
-```
-
-#### Role#setPosition
-
-The optional, second parameter of the `role.setPosition()` method has been changed to an object; its keys are `relative` (a boolean) and `reason` (a string).
-
-```diff
-- role.setPosition(3, true);
-+ role.setPosition(3, { relative: true, reason: 'Needed to be higher.' });
-```
-
-### Shard
-
-The `death` and `spawn` events for a shard can also include a `Worker` in addition to the `ChildProcess` that was exited or spawned.
-
-#### Shard#args
-
-`shard.args` is now a property of the shard and has been removed as a parameter from the constructor.
-
-#### Shard#respawn
-
-`shard.respawn` now takes a second, optional parameter `spawnTimeout`, how long to wait in milliseconds until the shard's `Client` becomes ready.
-
-#### Shard#spawn
-
-The parameters in v11 have been removed and replaced with a single, optional parameter, `spawnTimeout`.
-
-### ShardClientUtil
-
-In order to make use of workers introduced in Node v10.5.0, a new `mode` parameter is available in the constructor.
-
-#### ShardClientUtil#id
-
-`shardClientUtil.id` has been removed and replaced with `shardClientUtil.ids`, which is an array of shard IDs of the current client.
-
-#### ShardClientUtil#singleton
-
-`shardCLientUtil` now has a second parameter `mode` to specify whether it's a `process` or `worker`.
-
-### ShardingManager
-
-#### ShardingManger#_spawn
-
-The private method `shardingManager._spawn()` has been removed entirely.
-
-#### ShardingManager#createShard
-
-The `id` parameter is now optional and defaults to `this.shards.size`.
-
-#### ShardingManager#launch
-
-The `shardingManager.launch` event has been removed entirely and replaced with the `shardingManager.shardCreate` event.
-
-#### ShardingManager#message
-
-The `shardingManager.message` event has been removed from this class and is now on the `Shard` class.
-
-#### ShardingManager#respawnAll
-
-The `waitForReady` parameter has been renamed to `spawnTimeout`, and the `currentShardIndex` parameter has been removed entirely.
-
-#### ShardingManager#spawn
-
-A third, optional parameter `spawnTimeout` has been added, specifying how long to wait in miliseconds to wait until the `Client` is ready; the default is `30000`.
-
-### StreamDispatcher
-
-`StreamDispatcher` now extends `WritableStream` from Node, you can see the docs [here](https://nodejs.org/api/stream.html#stream_class_stream_writable).
-
-#### StreamDispatcher#destroyed
-
-`streamDispatcher.destroyed` has been removed entirely.
-
-#### StreamDispatcher#end
-
-The `end` event and method are now extended from the `WritableStream` class in Node, instead of being custom functions.
-
-#### StreamDispatcher#passes
-
-`streamDispatcher.passes` has been removed entirely.
-
-#### StreamDispatcher#pause
-
-The `streamDispatcher.pause` method now takes an optional parameter `silence`, to specify whether to play silence while paused to prevent audio glitches. Its value is a `boolean` and defaults to `false`.
-
-```diff
-- dispatcher.pause();
-+ dispatcher.pause(true);
-```
-
-#### StreamDispatcher#stream
-
-The `streamDispatcher.stream` property has been removed entirely and has been replaced with the `streamDispatcher.broadcast` property, which is the broadcast controlling the stream, if any.
-
-#### StreamDispatcher#time
-
-The `streamDispatcher.time` property has been renamed to `streamDispatcher.streamTime`.
-
-### TextChannel
-
-#### TextChannel#acknowledge
-
-Has been removed entirely, along with all other user account-only methods and properties.
-
-#### TextChannel#\*\*\*position
-
-See the [GuildChannel](/additional-info/changes-in-v12.md#guildchannel) section for changes to positions.
-
-#### TextChannel#clone
-
-All parameters have been removed and reconfigured into a single object.
-
-```diff
-- channel.clone(undefined, true, false, 'Needed a clone');
-+ channel.clone({ name: undefined, reason: 'Needed a clone' });
-```
-
-#### TextChannel#createCollector
-
-`textChannel.createCollector()` has been removed entirely in favor of `textChannel.createMessageCollector()`.
-
-See [this section](/additional-info/changes-in-v12.md#messagecollector) for changes to the `MessageCollector` class.
-
-```diff
-- channel.createCollector(filterFunction, { maxMatches: 2, max: 10, time: 15000 });
-+ channel.createMessageCollector(filterFunction, { max: 2, maxProcessed: 10, time: 15000 });
-```
-
-#### TextChannel#memberPermissions
-
-This method is now private.
-
-#### TextChannel#rolePermissions
-
-This method is now private.
-
-#### TextChannel#search
-
-This method has been removed, along with all other user account-only methods.
-
-#### TextChannel#send\*\*\*
-
-All the `.send***()` methods have been removed in favor of one general `.send()` method.
-
-```diff
-- channel.sendMessage('Hey!');
-+ channel.send('Hey!');
-```
-
-```diff
-- channel.sendEmbed(embedVariable);
-+ channel.send(embedVariable);
-+ channel.send({ embed: embedVariable });
-```
-
-::: warning
-`channel.send(embedVariable)` will only work if that variable is an instance of the `MessageEmbed` class; object literals won't give you the expected result unless your embed data is inside an `embed` key.
-:::
-
-```diff
-- channel.sendCode('js', 'const version = 11;');
-+ channel.send('const version = 12;', { code: 'js' });
-```
-
-```diff
-- channel.sendFile('./file.png');
-- channel.sendFiles(['./file-one.png', './file-two.png']);
-+ channel.send({
- files: [{
- attachment: 'entire/path/to/file.jpg',
- name: 'file.jpg',
- }]
-+ channel.send({
- files: ['https://cdn.discordapp.com/icons/222078108977594368/6e1019b3179d71046e463a75915e7244.png?size=2048']
-});
-```
-
-```diff
-- channel.sendFiles(['./file-one.png', './file-two.png']);
-+ channel.send({ files: [{ attachment: './file-one.png' }, { attachment: './file-two.png' }] });
-+ channel.send({ files: [new MessageAttachment('./file-one.png'), new MessageAttachment('./file-two.png')] });
-```
-
-#### TextChannel#fetch(Pinned)Message(s)
-
-`channel.fetchMessage()`, `channel.fetchMessages()`, and `channel.fetchPinnedMessages()` were all removed and transformed in the shape of DataStores.
-
-```diff
-- channel.fetchMessage('123456789012345678');
-+ channel.messages.fetch('123456789012345678');
-```
-
-```diff
-- channel.fetchMessages({ limit: 100 });
-+ channel.messages.fetch({ limit: 100 });
-```
-
-```diff
-- channel.fetchPinnedMessages();
-+ channel.messages.fetchPinned();
-```
-
-### User
-
-#### User#addFriend
-
-`user.addFriend()` has been removed entirely, along with all other user account-only methods.
-
-#### User#avatarURL
-
-`user.avatarURL` is now a method, as opposed to a property. It also allows you to determine the file format and size to return.
-
-```diff
-- user.avatarURL;
-+ user.avatarURL();
-+ user.avatarURL({ format: 'png', size: 1024 });
-```
-
-#### User#block
-
-`user.block()` has been removed entirely, along with all other user account-only methods.
-
-#### User#displayAvatarURL
-
-`user.displayAvatarURL` is now a method, as opposed to a property. It also allows you to determine the file format and size to return.
-
-```diff
-- user.displayAvatarURL;
-+ user.displayAvatarURL();
-+ user.displayAvatarURL({ format: 'png', size: 1024 });
-```
-
-#### User#fetchProfile
-
-`user.fetchProfile()` has been removed entirely, along with all other user account-only methods.
-
-#### User#note
-
-`user.note` has been removed entirely, along with all other user account-only methods.
-
-#### User#removeFriend
-
-`user.removeFriend()` has been removed entirely, along with all other user account-only methods.
-
-#### User#setNote
-
-`user.setNote()` has been removed entirely, along with all other user account-only methods.
-
-#### User#send\*\*\*
-
-Just like the `textChannel#send***` methods, all the `.send***()` methods have been removed in favor of one general `.send()` method. Read through the [textChannel#send\*\*\*](/additional-info/changes-in-v12.md#channelsend) section for more information.
-
-#### User#unblock
-
-`user.unblock()` has been removed entirely, along with all other user account-only methods.
-
-### UserConnection
-
-The `UserConnection` class has been removed entirely, along with all other user account-only properties.
-
-### UserProfile
-
-The `UserProfile` class has been removed entirely, along with all other user account-only properties.
-
-### VoiceBroadcast
-
-`VoiceBroadcast` now implements `PlayInterface` instead of `VolumeInterface`.
-
-#### VoiceBroadcast#currentTranscoder
-
-This property has been removed entirely.
-
-#### VoiceBroadcast#destroy
-
-This method has been removed entirely.
-
-#### VoiceBroadcast#dispatchers
-
-This property has been renamed to `subscribers` and is no longer read-only.
-
-```diff
-- broadcast.dispatchers;
-+ broadcast.subscribers;
-```
-
-#### VoiceBroadcast#end
-
-This event has been removed from the `VoiceBroadcast` class and is implemented from the `WritableStream` class from Node, which `BroadcastDispatcher` implements.
-
-#### VoiceBroadcast#error
-
-This event has been removed from the `VoiceBroadcast` class to the `BroadcastDispatcher` class.
-
-#### VoiceBroadcast#pause
-
-This method has been removed from the `VoiceBroadcast` class to the `BroadcastDispatcher` class.
-
-#### VoiceBroadcast#play\*\*\*
-
-All `.play\*\*\*()` methods have been removed and transformed into a single `.play()` method.
-
-#### VoiceBroadcast#prism
-
-This property has been removed entirely.
-
-#### VoiceBroadcast#resume
-
-This method has been removed from the `VoiceBroadcast` class to the `BroadcastDispatcher` class.
-
-#### VoiceBroadcast#warn
-
-This event has been removed entirely.
-
-### VoiceConnection
-
-The `VoiceConnection` class also implements the new `PlayInterface` class in addition to extending `EventEmitter` from Node.
-
-#### VoiceConnection#createReceiver
-`voiceconnection.createReceiver()` has been removed, there is now a single receiver that be accessed from `voiceConnection.receiver`
-
-#### VoiceConnection#play\*\*\*\
-
-All `connection.play\*\*\*()` methods have been removed in favor of one, flexible `.play()` method.
-
-#### VoiceConnection#prism
-
-This property has been removed entirely.
-
-#### VoiceConnection#receivers
-
-This property has been removed entirely.
-
-#### VoiceConnection#sendVoiceStateUpdate
-
-This method has been removed entirely.
-
-#### VoiceConnection#set\*\*\*
-
-Both `connection.setSessionID()` and `connection.setTokenAndEndpoint()` have been removed entirely.
-
-### VoiceReceiver
-
-#### VoiceReceiver#create\*\*\*Stream
-
-Both the `receiver.createOpusStream()` and `receiver.createPCMStream()` methods have been condensed into one method, `receiver.createStream()`, which also optionally accepts a `ReceiveStreamOptions` object for the stream.
-
-```diff
-- receiver.createOpusStream('123456789012345678');
-- receiver.createPCMStream('123456789012345678');
-+ receiver.createStream('123456789012345678', { mode: 'opus', end: 'silence' });
-```
-
-#### VoiceReceiver#destroy
-
-This method has been removed entirely, refer to `StreamDispatcher#destroy` for documentation.
-
-#### VoiceReceiver#destroyed
-
-This property has been removed entirely.
-
-#### VoiceReceiver#opus
-
-This event has been removed entirely.
-
-#### VoiceReceiver#pcm
-
-This event has been removed entirely.
-
-#### VoiceReceiver#recreate
-
-This method has been removed entirely.
-
-#### VoiceReceiver#voiceConnection
-
-This property has been removed entirely.
-
-#### VoiceReceiver#warn
-
-This event has been removed entirely, use the `receiver.debug` event instead.
-
-### VoiceRegion
-
-#### VoiceRegion#sampleHostname
-
-This property has been removed entirely.
-
-### Webhook
-
-#### Webhook#send\*\*\*
-
-Just like the `TextChannel#send***` methods, all the `.send***()` methods have been removed in favor of one general `.send()` method. Read through the [TextChannel#send\*\*\*](/additional-info/changes-in-v12.md#channelsend) section for more information.
-
-### WebhookClient
-
-The `WebhookClient` class now extends `BaseClient` and implements `Webhook` instead of just extending `Webhook`, so a lot of methods and properties are documented there, as opposed to on the client.
-
----
-
-## Additions
-
-::: warning
-Remember to add examples for the additions.
-:::
-
-### Activity
-
-### ActivityFlags
-
-### ActivityOptions
-
-These are options for setting an `Activity`.
-
-### APIMessage
-
-### Base
-
-### BaseClient
-
-### BitField
-
-### BroadcastDispatcher
-
-### CategoryChannel
-
-#### CategoryChannel#members
-
-Similar to `textChannel#members` and `voiceChannel#members`, `categoryChannel#members` returns a `Collection` of `GuildMembers` who can see the category, mapped by their ID.
-
-### Channel
-
-#### Channel#toString
-
-`channel.toString()` was moved from `GuildChannel` to `Channel`.
-
-#### Channel#type
-
-`channel.type` now may also return `unknown`.
-
-### Client
-
-#### Client#clearImmediate
-
-#### Client#guildIntegrationsUpdate
-
-#### Client#invalidated
-
-#### Client#setImmediate
-
-#### Client#webhookUpdate
-
-### ClientApplication
-
-This is a not a new class; it was formerly called `OAuth2Application` in v11. Changes and deletions to methods and properties are covered above (link needed). Additions are as follow:
-
-#### ClientApplication#cover(Image)
-
-`ClientApplication.cover` and its associated method `ClientApplication.coverImage()` return the URL to the application's cover image, with optional modifiers if applied in the method.
-
-```js
-ClientApplication.coverImage({ width: 1024, height: 1024 });
-```
-
-#### ClientApplication#fetchAssets
-
-`ClientApplication.fetchAssests()` returns a promise that resolves into an array of `ClientAsset` objects, each of which contains `id`, `name` and `type` keys.
-
-### ClientOptions
-
-#### ClientOptions#partials
-
-`clientOptions.partials` has been added to allow for partial structures - see the `Partials` section of the guide for more details.
-
-#### ClientOptions#retry
-
-`clientOptions.retry` has been added to allow a maximum amount of reconnect attempts on 5XX errors.
-
-#### ClientOptions#presence
-
-`clientOptions.presence` has been added to specify presence data to set upon login.
-
-### ClientVoiceManager
-
-### Collector
-
-#### Collector#(handle)Dispose
-
-`collector.handleDispose` and `collector.dispose()` have been added to remove an element from the collection.
-
-### CollectorOptions
-
-#### CollectorOptions#dispose
-
-`collectorOptions.dispose` has been added to allow for deleted data to be removed from the collection.
-
-### DataStore
-
-The DataStore class was added in order to store various data types. Uses include
-- RoleStore
-- UserStore
-- GuildStore
-- ChannelStore
-- MessageStore
-- PresenceStore
-- ReactionStore
-- GuildEmojiStore
-- GuildMemberStore
-- GuildChannelStore
-- ReactionUserStore
-- GuildEmojiRoleStore
-- GuildMemberRoleStore
-
-### DiscordAPIError
-
-#### DiscordAPIError#httpStatus
-
-The `DiscordAPIError#httpStatus` has been added with the 4xx status code that the error returns. See [the MDN docs](https://developer.mozilla.org/en-US/docs/Web/HTTP/Status#Client_error_responses) for more details.
-
-### DMChannel
-
-#### DMChannel#lastMessage
-
-The message object of the last message in the channel, if one was sent. It is a read-only property.
-
-#### DMChannel#lastPin\*\*\*
-
-Two properties have been added, `dmChannel#lastPinAt` (read-only) and `dmChannel#lastPinStamp`, which returns the Date and timestamp, respectively, of the last pinned message if one is present.
-
-### Guild
-
-#### Guild#createIntegration
-
-`guild.createIntegration()` has been added.
-
-#### Guild#fetchEmbed
-
-`guild.fetchEmbed` has been added.
-
-#### Guild#fetchIntegrations
-
-`guild.fetchIntegrations()` has been added.
-
-#### Guild#fetchVanityCode
-
-`guild.fetchVanityCode()` has been added.
-
-#### Guild#setEmbed
-
-`guild.setEmbed()` has been added.
-
-#### Guild#shard(ID)
-
-`guild.shard` (read-only) and `guild.shardID` have been added, representing the information of the shard the guild is on.
-
-### GuildAuditLogs
-
-#### GuildAuditLogs#Actions
-
-`auditLogs.Actions()` has been added (static method).
-
-#### GuildAuditLogs#Targets
-
-`auditLogs.Targets()` has been added (static method).
-
-### GuildChannel
-
-#### GuildChannel#permissionsLocked
-
-`guildChannel.permissionsLocked` is a boolean value representing if the `permissionOverwrites` of the channel match its parent's `permissionOverwrites`.
-
-#### GuildChannel#updateOverwrites
-
-Creates or update an existing overwrite for a user or role. The first parameter is a `PermissionOverwriteOption` object; the second, optional parameter is `reason`, a string.
-
-```js
-channel.updateOverwrite(message.author, {
- SEND_MESSAGES: false,
-});
-```
-
-#### GuildChannel#viewable
-
-`guildChannel.viewable` is a boolean value representing whether the channel is visible to the client user.
-
-### HTTPError
-
-### Integration
-
-### Message
-
-#### Message#activity
-
-`message.activity` has been added.
-
-#### Message#application
-
-`message.application` has been added.
-
-#### Message.url
-
-`message.url` has been added in order to provide a URL to jump to the message.
-
-### MessageAttachment
-
-#### MessageAttachment#setAttachment
-
-`attachment.setAttachment()` has been added.
-
-#### MessageAttachment#setFile
-
-`attachment.setFile()` has been added.
-
-#### MessageAttachment#setName
-
-`attachment.setName()` has been added.
-
-### MessageEmbed
-
-#### MessageEmbed#files
-
-`MessageEmbed.files` has been added as an array of files in the `MessageEmbed`.
-
-#### MessageEmbed#length
-
-`MessageEmbed.length` has been added. It returns a `number` equal to all of the fields, title, description, and footer.
-
-### Permissions
-
-#### Permissions#flags
-`PRIORITY_SPEAKER` has been added.
-
-### PlayInterface
-
-This is a new class to play audio over `VoiceConnection`s and `VoiceBroadcast`s.
-
-### Presence
-
-#### Presence#clientStatus
-
-The new `presence.clientStatus` property returns an object with three keys: `web`, `mobile` and `desktop`; their values are a `PresenceStatus` string. This property allows you to check which client the member or user is using to access Discord.
-
-#### Presence#guild
-
-`presence.guild` has been added as a helper property to represent the `Guild` the presence belongs to, if applicable.
-
-#### Presence#member
-
-`presence.member` is a read-only property to represent the `GuildMember` the presence belongs to, if applicable.
-
-#### Presence#user(ID)
-
-`presence.user` (read-only) and `presence.userID` are properties to represent a `User` and its ID that the presence belongs to. The former can be null if the `User` is not cached.
-
-### ReactionCollector
-
-#### ReactionCollector#empty
-
-`reactionCollector.empty()` has been added as a method to remove all collected reactions from the collector.
-
-#### ReactionCollector#key
-
-#### ReactionCollector#remove
-
-The new `remove` event emits when a collected reaction is un-reacted, if the `dispose` option is set to `true`
-
-### Shard
-
-#### Shard#_evals
-
-The private property `_evals` has been added to map ongoing promises for calls to `shard.eval()`.
-
-#### Shard#_fetches
-
-The private property `_fetches` has been added to map ongoing promises for calls to `shard.fetchClientValues()`.
-
-#### Shard#worker
-
-### ShardClientUtil
-
-#### ShardClientUtil#client
-
-#### ShardClientUtil#parentPort
-
-The message port for the master process, if the mode of the `ShardClientUtil` is `worker`.
-
-#### ShardClientUtil#respawnAll
-
-`shardClientUtil.respawnAll()` will request a respawn of all shards. It has three parameters, all of which are optional: `shardDelay`, how to long to wait in milliseconds between each shard; `respawnDelay`, how long to wait between killing the shard's process or worker and restarting it; and `spawnTimeout`, how long to wait in milliseconds for a shard to become ready before moving to the next shard.
-
-### Speaking
-
-The `Speaking` class has been added as a data structure to interact with the bitfields present when a `GuildMember` is speaking, or in the `VoiceConnection#speaking` event.
-
-### StreamDispatcher
-
-#### StreamDispatcher#bitrateEditable
-
-#### StreamDispatcher#paused\*\*\*
-
-Two new properties have been added, `pausedSince` and `pausedTime`, to represent the timestamp when the stream was paused, and how long it's been paused for in milliseconds, respectively.
-
-#### StreamDispatcher#set\*\*\*
-
-Several new methods have been added to adjust various aspects of the stream. Methods marked with a \* denote that they're usable only with a compatible Opus stream.
-
-- `setFEC()`\* - whether to forward error correction or not if using a compatible Opus stream
-- `setPLP()`\* - sets the expected packet loss percentage if using a compatible Opus stream
-- `setVolume()` - sets the volume relative to the input stream
-- `setVolumeDecibels()` - sets the volume in decibels
-- `setVolumeLogarithmic()` - sets the volume so that a perceived value of `0.5` is half the perceived volume, etc.
-
-#### StreamDispatcher#volumeChange
-
-A new event listener, it is emitted when a volume change in the stream is detected.
-
-```js
-dispatcher.on('volumeChange', (oldVolume, newVolume) => {
- console.log(`Volume changed from ${oldVolume} to ${newVolume}.`);
-});
-```
-
-### TextChannel
-
-#### TextChannel#lastPinTimestamp
-
-`TextChannel.lastPinTimestamp` was added.
-
-#### TextChannel#lastPinAt
-
-`TextChannel.lastPinAt` was added.
-
-### User
-
-#### User#lastMessageChannelID
-
-#### User#locale
-
-`user.locale` has been added.
-
-### Util
-
-#### Util#cleanContent
-
-This new method converts all mentions to their equivalent text.
-
-#### Util#discordSort
-
-This new method sorts a `Collection` by Discord's position and ID.
-
-#### Util#flatten
-
-This new method flattens any object. Any `Collection`s in the object will be converted to an array of keys.
-
-#### Util#resolveColor
-
-This new method resolves a `ColorResolvable` into a color number.
-
-#### Util#resolveString
-
-THis new method resolves a `StringResolvable` into a string.
-
-#### Util#Constants
-
-#### Constant.Colors
-`WHITE` and `YELLOW` have been added as values.
-
-### VoiceBroadcast
-
-#### VoiceBroadcast#dispatcher
-
-This new property represents the master dispatcher - if any - that controls everything played by subscribed dispatchers.
-
-### VoiceChannel
-
-#### VoiceChannel#editable
-
-This new property returns a `boolean` value whether the client can edit the `VoiceChannel` or not, eg. any change to the channel besides moving it via `channel.setPosition()`. It differs from `channel.manageable` in that it also checks if the client has the `CONNECT` permissions for that particular channel.
-
-### VoiceReceiver
-
-#### VoiceReceiver#debug
-
-This new event is emitted whenever there is a warning and will emit either with an `Error` object or string, depending on what causes it to be emitted.
-
-### VoiceState
-
-### VolumeInterface
-
-#### VolumeInterface#volumeEditable
-
-This new property returns a `boolean` value whether the client can edit the volume of the stream.
-
-### Webhook
-
-#### Webhook#url
-
-This new property returns a `string` representing the URL of the webhook, and is read-only.
-
-### WebSocketManager
-
-This new class represents the manager of the websocket connection for the client.
-
-### WebSocketShard
-
-This new class represents a `Shard`'s websocket connection.
diff --git a/Ajuda/guide-master/guide/additional-info/collections.md b/Ajuda/guide-master/guide/additional-info/collections.md
deleted file mode 100644
index 609179c..0000000
--- a/Ajuda/guide-master/guide/additional-info/collections.md
+++ /dev/null
@@ -1,107 +0,0 @@
-# Collections
-
-Discord.js comes with this utility class known as `Collection`.
-It extends JavaScript's native `Map` class, so it has all the features of `Map` and more!
-
-::: warning
-If you're not familiar with `Map`, read [MDN's page on it](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map) before continuing. You should be familiar with `Array` [methods](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array) as well. We will also be using some ES6 features, so read up [here](/additional-info/es6-syntax.md) if you do not know what they are.
-:::
-
-In essence, `Map` allow for an association between unique keys and their values, but lack an iterative interface.
-For example, how can you transform every value or filter the entries in a `Map` easily?
-This is the point of the `Collection` class!
-
-## Array-like Methods
-
-Many of the methods on `Collection` are based on their namesake in `Array`. One of them is `find`:
-
-```js
-// Assume we have an array of users and a collection of the same users.
-array.find(u => u.discriminator === '1000');
-collection.find(u => u.discriminator === '1000');
-```
-
-The interface of the callback function is very similar between the two.
-For arrays, callbacks are usually passed the parameters `(value, index, array)`, where `value` is the value it iterated to,
-`index` is the current index, and `array` is the array itself. For collections, you would have `(value, key, collection)`.
-Here, `value` is the same, but `key` is the key of the value, and `collection` is the collection itself instead.
-
-Methods that follow this philosophy of staying close to the `Array` interface are as follows:
-
-- `find`
-- `filter` - Note that this returns a `Collection` rather than an `Array`.
-- `map` - Yet this returns an `Array` of values instead of a `Collection`!
-- `every`
-- `some`
-- `reduce`
-- `concat`
-- `sort`
-
-## Converting to Array
-
-There are two ways you might want to convert a `Collection` into an `Array`. The first way is the `array` or `keyArray` methods.
-They simply create an array from the items in the collection, but also caches it too:
-
-```js
-// Not computed again the second time, it is cached!
-collection.array();
-collection.array();
-
-// Any change to the collection, however, invalidates the cache.
-// This call to `array` must be recomputed.
-collection.delete('81440962496172032');
-collection.array();
-```
-
-This caching behavior is undesirable if you are planning to mutate the array, so instead, you can use `Array.from`:
-
-```js
-// For values.
-Array.from(collection.values());
-
-// For keys.
-Array.from(collection.keys());
-
-// For [key, value] pairs.
-Array.from(collection);
-```
-
-::: warning
-Many people use `array` way too much! This leads to unneeded caching of data and confusing code. Before you use `array` or similar, ask yourself if whatever you are trying to do can't be done with the given `Map` or `Collection` methods or with a for-of loop.
-:::
-
-## Extra Utilities
-
-Some methods are not from `Array` and are instead completely new to standard JavaScript.
-
-```js
-// A random value. Be careful, this uses `array` so caching is done.
-collection.random();
-
-// The first value.
-collection.first();
-
-// The first 5 values.
-collection.first(5);
-
-// Similar to `first`, but from the end. This uses `array`.
-collection.last();
-collection.last(2);
-
-// Removes from the collection anything that meets a criteria.
-// Sort of like `filter`, but in-place.
-collection.sweep(user => user.username === 'Bob');
-```
-
-A more complicated method is `partition`, which splits a collection into two, based on a certain criteria.
-You can think of it as two `filter`s, but done at the same time:
-
-```js
-// `bots` is a Collection of users where their `bot` property was true.
-// `humans` is a Collection where the property was false instead!
-const [bots, humans] = collection.partition(u => u.bot);
-
-// Both return true.
-bots.every(b => b.bot);
-humans.every(h => !h.bot);
-```
diff --git a/Ajuda/guide-master/guide/additional-info/es6-syntax.md b/Ajuda/guide-master/guide/additional-info/es6-syntax.md
deleted file mode 100644
index 6905aa0..0000000
--- a/Ajuda/guide-master/guide/additional-info/es6-syntax.md
+++ /dev/null
@@ -1,271 +0,0 @@
-# ES6 syntax examples
-
-If you've used JavaScript for only a (relatively) small amount of time or just aren't very experienced with it, you might not be aware of what ES6 is and its crazy beneficial features. Since this is a guide primarily for Discord bots, we'll be using some discord.js code as an example of what you might have, versus what you could do to benefit from ES6.
-
-Here's the startup code we'll be using:
-
-
-
-```js
-const Discord = require('discord.js');
-const client = new Discord.Client();
-const config = require('./config.json');
-
-client.once('ready', () => {
- console.log('Ready!');
-});
-
-const { prefix } = config;
-
-client.on('message', message => {
- if (message.content === prefix + 'ping') {
- message.channel.send('Pong.');
- } else if (message.content === prefix + 'beep') {
- message.channel.send('Boop.');
- } else if (message.content === prefix + 'server') {
- message.channel.send('Guild name: ' + message.guild.name + '\nTotal members: ' + message.guild.memberCount);
- } else if (message.content === prefix + 'user-info') {
- message.channel.send('Your username: ' + message.author.username + '\nYour ID: ' + message.author.id);
- }
-});
-
-client.login(config.token);
-```
-
-If you haven't noticed, this piece of code is actually already using a bit of ES6 in here! The `const` keyword and arrow function syntax (`() => ...`) are a part of ES6, and are recommended to use whenever possible.
-
-As for the code above, there are a few places where things can be done better. Let's look at them.
-
-## Template literals
-
-If you check the code above, it's currently doing things like `prefix + 'name'` and `'Your username: ' + message.author.username`, which is perfectly valid. It is a bit hard to read, though, it's not too fun to constantly type out. Fortunately, there's a better alternative.
-
-
-
-```js
-// ES5 version, as we currently have it
-else if (message.content === prefix + 'server') {
- message.channel.send('Guild name: ' + message.guild.name + '\nTotal members: ' + message.guild.memberCount);
-}
-else if (message.content === prefix + 'user-info') {
- message.channel.send('Your username: ' + message.author.username + '\nYour ID: ' + message.author.id);
-}
-```
-
-
-
-```js
-// ES6 version, using template literals
-else if (message.content.startsWith(`${prefix}server`)) {
- message.channel.send(`Guild name: ${message.guild.name}\nTotal members: ${message.guild.memberCount}`);
-}
-else if (message.content.startsWith(`${prefix}user-info`)) {
- message.channel.send(`Your username: ${message.author.username}\nYour ID: ${message.author.id}`);
-}
-```
-
-Easier to read, easier to write! The best of both worlds.
-
-### Template literals vs string concatenation
-
-If you've used other programming languages, you might be familiar with the term "string interpolation". Template literals would be JavaScript's implementation of string interpolation. If you're familiar with the heredoc syntax, it's very much like that; it allows for string interpolation, as well as multiline strings.
-
-The example below won't go too much into detail about it, but if you're interested in reading more, you can [read about them on MDN](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Template_literals).
-
-```js
-// variables/function used throughout the examples
-const username = 'Sanctuary';
-const password = 'pleasedonthackme';
-
-function letsPretendThisDoesSomething() {
- return 'Yay for dummy data.';
-}
-```
-
-
-
-```js
-// regular string concatenation
-console.log('Your username is: **' + username + '**.');
-console.log('Your password is: **' + password + '**.');
-
-console.log('1 + 1 = ' + (1 + 1));
-
-console.log('And here\'s a function call: ' + letsPretendThisDoesSomething());
-
-console.log(
- 'Putting strings on new lines\n'
- + 'can be a bit painful\n'
- + 'with string concatenation. :('
-);
-```
-
-```js
-// template literals
-console.log(`Your password is: **${password}**.`);
-console.log(`Your username is: **${username}**.`);
-
-console.log(`1 + 1 = ${1 + 1}`);
-
-console.log(`And here's a function call: ${letsPretendThisDoesSomething()}`);
-
-console.log(`
- Putting strings on new lines
- is a breeze
- with template literals! :)
-`);
-
-// NOTE: template literals will also render the indentation inside them
-// there are ways around that, which we'll discuss in another section.
-```
-
-You can see how it makes things easier and more readable. In some cases, it can even make your code shorter! This one is something you'll definitely want to take advantage of as much as possible.
-
-## Arrow functions
-
-Arrow functions are shorthand for regular functions, with the addition that they use a lexical `this` context inside of their own. If you don't know what the `this` keyword is referring to, don't worry about it; you'll learn more about it as you advance.
-
-Here are some examples of ways you can benefit from arrow functions over regular functions:
-
-
-
-```js
-// regular functions, full ES5
-client.once('ready', function() {
- console.log('Ready!');
-});
-
-client.on('typingStart', function(channel, user) {
- console.log(user + ' started typing in ' + channel);
-});
-
-client.on('message', function(message) {
- console.log(message.author + ' sent: ' + message.content);
-});
-
-var doubleAge = function(age) {
- return 'Your age doubled is: ' + (age * 2);
-};
-
-// inside a message collector command
-var filter = function(m) {
- return m.content === 'I agree' && !m.author.bot;
-};
-
-var collector = message.createReactionCollector(filter, { time: 15000 });
-```
-
-```js
-// arrow functions, full ES6
-client.once('ready', () => console.log('Ready!'));
-
-client.on('typingStart', (channel, user) => console.log(`${user} started typing in ${channel}`));
-
-client.on('message', message => console.log(`${message.author} sent: ${message.content}`));
-
-const doubleAge = age => `Your age doubled is: ${age * 2}`;
-
-// inside a message collector command
-const filter = m => m.content === 'I agree' && !m.author.bot;
-const collector = message.createReactionCollector(filter, { time: 15000 });
-```
-
-There are a few important things you should note here:
-
-* The parenthesis around function parameters are optional when you have only one parameter, but required otherwise. If you feel like this will confuse you at times, it may be a good idea to just always use parenthesis.
-* You can cleanly put what you need on a single line without curly braces.
-* Omitting curly braces will make arrow functions use **implicit return**, but only if you have a single-line expression. The `doubleAge` and `filter` variables are a good example of this.
-* Unlike the `function someFunc() { ... }` declaration, arrow functions cannot be used to create functions with such syntax. You can create a variable and give it an anonymous arrow function as the value, though (as seen with the `doubleAge` and `filter` variables).
-
-We won't be covering the lexical `this` scope with arrow functions in here, but you can Google around if you're still curious. Again, if you aren't sure what `this` is or when you need it, reading about lexical `this` first may only confuse you.
-
-## Destructuring
-
-Destructuring is an easy way to extract items from an object or array. If you've never seen the syntax for it before, it can be a bit confusing, but it's actually very easy to understand once explained!
-
-### Object destructuring
-
-Here's a common example where object destructuring would come in handy:
-
-
-
-```js
-const config = require('./config.json');
-const prefix = config.prefix;
-const token = config.token;
-
-// Alternative version (not recommended)
-const prefix = require('./config.json').prefix;
-const token = require('./config.json').token;
-```
-
-This is a bit verbose and not the most fun to write out each time. Object destructuring simplifies this, making it easier to both read and write. Take a look:
-
-```js
-const { prefix, token } = require('./config.json');
-```
-
-Object destructuring takes those properties from the object and stores them in variables. If the property doesn't exist, it'll still create a variable, but with the value of `undefined`. So instead of using `config.token` in your `client.login()` method, you'd simply use `token`. And since destructuring creates a variable for us, you don't even need that `const prefix = config.prefix` line. Pretty cool!
-
-Additionally, you could do this for your commands.
-
-```js
-client.on('message', message => {
- const { content } = message;
-
- if (content === `${prefix}ping`) {
- // ping command here...
- } else if (content === `${prefix}beep`) {
- // beep command here...
- }
- // other commands here...
-});
-```
-
-It is a bit less to write out, and also looks cleaner, but shouldn't be necessary if you follow along with the [command handler](/command-handling/) part of the guide.
-
-You can also rename variables when destructuring, if necessary. A good example of when you'd need to do so is when you're extracting a property with a name that's already being used, or conflicts with a reserved keyword. The syntax is as follows:
-
-```js
-// `default` is a reserved keyword
-const { 'default': defaultValue } = someObject;
-
-console.log(defaultValue);
-// 'Some default value here'
-```
-
-### Array destructuring
-
-Array destructuring syntax is very similar to object destructuring, except that you use brackets instead of curly braces. In addition, since you're using it on an array, you destructure the items in the same order the array is. Without array destructuring, this is how you'd extract items from an array:
-
-```js
-// assuming we're in a `profile` command and have an `args` variable
-const name = args[0];
-const age = args[1];
-const location = args[2];
-```
-
-Just like the first example with object destructuring, this is a bit verbose and not fun to write out. Array destructuring eases this pain.
-
-```js
-const [name, age, location] = args;
-```
-
-A single line of code that makes things much cleaner! In some cases, you may not even need all items in the array (e.g. when using `string.match(regex)`). Array destructuring still allows you to operate in the same sense.
-
-```js
-const [, username, id] = message.content.match(someRegex);
-```
-
-In this snippet, we use a comma without providing a name for the item in the array we don't need. You can also give it a dummy name if you prefer, of course; it's entirely preference at that point.
-
-## var, let, and const
-
-Since there are many, many articles out there that can explain this part more in depth, we'll only be giving you a TL;DR and an article link if you choose to read more about it.
-
-1. The `var` keyword is what was (and can still be) used in JS before `let` and `const` came to surface. There are actually many issues with `var`, though, such as it being function-scoped, hoisting related issues, and allowing redeclaration.
-2. The `let` keyword is essentially the new `var`; it addresses many of the issues `var` has, but its biggest factor would be that it's block-scoped and disallows redeclaration (*not* reassignment).
-3. The `const` keyword is for giving variables a constant value which may not be reassigned. `const`, like `let`, is also block-scoped.
-
-The general rule of thumb recommended by this guide is to use `const` wherever possible, `let` otherwise, and avoid using `var`. Here's a [helpful article](https://madhatted.com/2016/1/25/let-it-be) if you want to read more about this subject.
-
diff --git a/Ajuda/guide-master/guide/additional-info/notation.md b/Ajuda/guide-master/guide/additional-info/notation.md
deleted file mode 100644
index fddc221..0000000
--- a/Ajuda/guide-master/guide/additional-info/notation.md
+++ /dev/null
@@ -1,58 +0,0 @@
-# Understanding notation
-
-Throughout out the discord.js docs and when asking for help on the official server, you will run into many different kinds of notations. To help you understand the texts that you read, we will be going over some common notations.
-
-::: tip
-Always keep in mind that notation is not always rigorous. There will be typos, misunderstandings, or context that will cause notation to differ from the usual meanings.
-:::
-
-## Classes
-
-Some common notations are used to refer to a class or the properties, methods, or events of a class. There are many variations on these notations, and they are very flexible depending on the person, so use your best judgement when reading them.
-
-The notation `` means an instance of the `Class` class. For example, a snippet like `.reply('hello')` is asking you to replace `` with some value that is an instance of `Message`, e.g. `msg.reply('hello')`. It could also just be a placeholder, e.g. `` would mean a placeholder for some ID.
-
-The notation `Class#foo` can refer to the `foo` property, method, or event of the `Class` class. Specifically which one the writer meant needs to be determined from context. For example:
-
-- `Message#author`, means that you should refer to the `author` property on a `Message`.
-- `TextChannel#send`, means that you should refer to the `send` method on a `TextChannel`.
-- `Client#message`, means that you should refer to the `message` event on a `Client`.
-
-::: tip
-Remember that this notation is not valid JavaScript, it is a shorthand to refer to a certain piece of code.
-:::
-
-Sometimes, the notation is extended, which can help you determine which one the writer meant. For example, `TextChannel#send(content, options)` is definitely a method of `TextChannel`, since it uses function notation. And, `Client#event:message` is an event, since it says that it is an event.
-
-The important thing to take away from this notation is that the `#` symbol signifies that the property, method, or event can only be accessed through an instance of the class. Unfortunately, this notation is often abused, e.g. `#send` (`` is already an instance so this makes no sense), or `Util#resolveColor` (`resolveColor` is a static method, this should be written `Util.resolveColor`), so always refer back to the docs if you are confused.
-
-An example of where this notation is used is in the documentation's search feature.
-
-
-
-Notice the use of the `.` operator for the static method, `Role.comparePositions` and the `#` notation for the method, `Role#comparePositionsTo`.
-
-## Types
-
-In the discord.js docs, there are type signatures everywhere, such as in properties, parameters, or return values. If you do not come from a statically typed language, you may not know what certain notations mean.
-
-The symbol `*` means any type. For example, methods that return `*` means that they can return anything, and a parameter of type `*` can be anything.
-
-The symbol `?` means that the type is nullable. You can see it before or after the type (e.g. `?T` or `T?`). What this symbol means is that the value can be of the type `T` or it can be `null`. An example is the property `GuildMember#nickname` which has the type `?string` since a member may or may not have a nickname.
-
-The expression `T[]` means an array of `T`. You can sometimes see multiple brackets `[]`, meaning that the array is multi-dimensional, e.g. `string[][]`.
-
-The expression `...T` signifies a rest parameter of type `T`. This means that the function can take any amount of arguments, and all those arguments must be of the type `T`.
-
-The operator `|`, which can be read as "or", creates a union type, e.g. `A|B|C`. Simply, it means the value can be of any one of the types given.
-
-The angle brackets `<>` are used for generic types or parameterized types. This means a type that uses another type(s). The notation looks like `A` where `A` is the type and `B` is a type parameter. If this is hard to follow, it is enough to keep in mind that whenever you see `A` you can think an `A` that contains `B`. Examples:
-
-- `Array` means an array of strings.
-- `Promise` means a `Promise` that contains a `User`.
-- `Array>` would be an array of `Promise`s each containing a `User` or a `GuildMember`.
-- `Collection` would be a `Collection`, containing key-value pairs where the keys are `Snowflake`s, and the values are `User`s.
-
-
-
-In this piece of the docs, you can see three type signatures, `StringResolvable`, `MessageOptions or MessageAdditions`, and `Promise<(Message|Array)>`. The meaning of the word "or" here is the same as `|`.
diff --git a/Ajuda/guide-master/guide/additional-info/rest-api.md b/Ajuda/guide-master/guide/additional-info/rest-api.md
deleted file mode 100644
index b748be9..0000000
--- a/Ajuda/guide-master/guide/additional-info/rest-api.md
+++ /dev/null
@@ -1,257 +0,0 @@
-# Using a REST API
-
-REST APIs are extremely popular on the web and allow you to freely grab a site's data if that site has an available API over an HTTP connection.
-
-If you've ever seen a music bot that accepts a YouTube query instead of just a video's URL, then you've seen a REST API in action. As a matter of fact, discord.js is made to use Discord's API. So, you've probably used an API yourself.
-
-## Making HTTP requests with Node
-
-In these examples we are going to be using [node-fetch](https://www.npmjs.com/package/node-fetch) which is a great library for making HTTP requests.
-
-To install node-fetch, run the following command:
-
-```bash
-npm install node-fetch
-```
-
-## Skeleton code
-
-To start off, you're just going to be using this skeleton code:
-
-
-
-
-```js
-const { Client, RichEmbed } = require('discord.js');
-
-const client = new Client();
-const prefix = '!';
-
-client.once('ready', () => {
- console.log('Ready!');
-});
-
-client.on('message', async message => {
- if (!message.content.startsWith(prefix) || message.author.bot) return;
-
- const args = message.content.slice(prefix.length).split(/ +/);
- const command = args.shift().toLowerCase();
-
- // ...
-});
-
-client.login('your-token-goes-here');
-```
-
-
-
-```js
-const { Client, MessageEmbed } = require('discord.js');
-
-const client = new Client();
-const prefix = '!';
-
-client.once('ready', () => {
- console.log('Ready!');
-});
-
-client.on('message', async message => {
- if (!message.content.startsWith(prefix) || message.author.bot) return;
-
- const args = message.content.slice(prefix.length).split(/ +/);
- const command = args.shift().toLowerCase();
-
- // ...
-});
-
-client.login('your-token-goes-here');
-```
-
-
-::: tip
-We're going to take advantage of [destructuring](/additional-info/es6-syntax.md#destructuring) in this tutorial to maintain readability.
-:::
-
-## Using node-fetch
-
-node-fetch is a lightweight module that brings the [Fetch API](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API) which is available in browsers to node. It is a promised based library. If you aren't already familiar with promises, you should read up on them [here](/additional-info/async-await.md).
-
-In this tutorial we'll be making a bot with 2 API-based commands. The first will be using [random.cat](https://aws.random.cat) and the other will use [Urban Dictionary](https://www.urbandictionary.com).
-
-To require node-fetch, you'd do:
-
-```js
-const fetch = require('node-fetch');
-```
-
-### Random Cat
-
-Random cat's API is available at https://aws.random.cat/meow and returns a [JSON](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON) response. To actually fetch data from the API, you're going to do the following:
-
-```js
-fetch('https://aws.random.cat/meow').then(response => response.json());
-```
-
-Now, of course it seems like this does nothing but what it's doing is launching a request to the random.cat server and random.cat is returning some JSON that contains a `file` property which is a string containing a link to a random cat. node-fetch returns a response object which we can change into JSON with `response.json()`. Next, let's implement this into a command. The code should look similar to this:
-
-
-
-```js
-if (command === 'cat') {
- const { file } = await fetch('https://aws.random.cat/meow').then(response => response.json());
-
- message.channel.send(file);
-}
-```
-
-So, here's what's happening in this code:
-
-1. You're sending a `GET` request to random.cat.
-2. random.cat sees your request and gets a random file from their database.
-3. random.cat then sends that file's URL as a JSON object that contains a link to the image.
-4. node-fetch recieves the response and deserializes it with `reponse.json()`.
-5. You then send the object's `file` property in Discord.
-
-::: warning
-The response will only be parsed if the server's `Content-Type` header includes `application/json`. In some cases you may have to apply the `.text()` method instead of `.json()` and `JSON.parse()` it yourself.
-:::
-
-### Urban Dictionary
-
-Urban Dictionary's API is available at https://api.urbandictionary.com/v0/define, accepts a `term` parameter, and also returns a JSON response.
-
-First, you're going to need to fetch data from the API. To do this, you'd do:
-
-
-
-```js
-const querystring = require('querystring');
-
-if (command === 'urban') {
- if (!args.length) {
- return message.channel.send('You need to supply a search term!');
- }
-
- const query = querystring.stringify({ term: args.join(' ') });
-
- const { list } = await fetch(`https://api.urbandictionary.com/v0/define?${query}`).then(response => response.json());
-}
-```
-
-Here, we use Node's native [querystring module](https://nodejs.org/api/querystring.html) to create a [query string](https://en.wikipedia.org/wiki/Query_string) for the URL so that the Urban Dictionary server can parse it and know what to search for.
-
-If you were to do `!urban hello world`, then the URL would become https://api.urbandictionary.com/v0/define?term=hello%20world since the string gets encoded.
-
-You can get the respective properties from the returned JSON. If you were to view it in your browser, it usually looks like a bunch of mumbo jumbo. If it doesn't, great! If it does, then you should get a JSON formatter/viewer. If you're using Chrome, [JSON Formatter](https://chrome.google.com/webstore/detail/json-formatter/bcjindcccaagfpapjjmafapmmgkkhgoa) is one of the more popular extensions. If you're not using Chrome, search for "JSON formatter/viewer <your browser>" and get one.
-
-Now, if you look at the JSON, you can see that's a `list` property, which is an array of objects containing various definitions for the term (maximum 10). Something you always want to do when making API based commands is to handle there being no results. So, let's throw a random term in there (e.g. `njaksdcas`) and then look at the response. The `list` array should then be empty. Now you are ready to start writing!
-
-As explained above we want to check if the API returned any answers for our query like so:
-
-```js
-if (!list.length) {
- return message.channel.send(`No results found for **${args.join(' ')}**.`);
-}
-```
-
-After making sure that there are results, you will use those results. For now, let's simply send back the definition and nothing more. It's as simple as:
-
-```js
-message.channel.send(list[0].definition);
-```
-
-Here, you are simply getting the first object from the array of objects called `list` and grabbing its `definition` property.
-
-If you've followed the tutorial, you should have something like this:
-
-
-
- !urban njaksdcas
-
-
- User, No results for **njaksdcas**
-
-
- !urban hello world
-
-
- The easiest, and first program any newbie would write. Applies for any language. Also what you would see in the first chapter of most programming books.
-
-
-
-Now, let's just make this an [embed](/popular-topics/miscellaneous-examples.md#sending-an-embed).
-
-We are also going to be defining a utility function at the top of our file so that our embed doesn't error when the field value is over 1024 characters. Here is a bit of code to do that:
-
-```js
-const trim = (str, max) => ((str.length > max) ? `${str.slice(0, max - 3)}...` : str);
-```
-
-This is how we'll be structuring the embed:
-
-
-
-```js
-const [answer] = list;
-
-const embed = new RichEmbed()
- .setColor('#EFFF00')
- .setTitle(answer.word)
- .setURL(answer.permalink)
- .addField('Definition', trim(answer.definition, 1024))
- .addField('Example', trim(answer.example, 1024))
- .addField('Rating', `${answer.thumbs_up} thumbs up. ${answer.thumbs_down} thumbs down.`);
-
-message.channel.send(embed);
-```
-
-
-
-
-```js
-const [answer] = list;
-
-const embed = new MessageEmbed()
- .setColor('#EFFF00')
- .setTitle(answer.word)
- .setURL(answer.permalink)
- .addField('Definition', trim(answer.definition, 1024))
- .addField('Example', trim(answer.example, 1024))
- .addField('Rating', `${answer.thumbs_up} thumbs up. ${answer.thumbs_down} thumbs down.`);
-
-message.channel.send(embed);
-```
-
-
-
-Now, if you do that same command again, you should get this:
-
-
-
- !urban hello world
-
-
-
-
-
- The easiest, and first program any newbie would write. Applies for any language. Also what you would see in the first chapter of most programming books.
-
-
- programming noob: Hey I just attended my first programming lesson earlier!
- .NET Veteran: Oh? What can you do?
- programming noob: I could make a dialog box pop up which says "Hello World!" !!!
- .NET Veteran: lmao.. hey guys! look.. check out this "hello world" programmer
-
-## Resulting code
-
-
diff --git a/Ajuda/guide-master/guide/command-handling/README.md b/Ajuda/guide-master/guide/command-handling/README.md
deleted file mode 100644
index b2bb9c7..0000000
--- a/Ajuda/guide-master/guide/command-handling/README.md
+++ /dev/null
@@ -1,129 +0,0 @@
-# Command handling
-
-As mentioned in a previous chapter, unless your bot project is a small one, it's not a very good idea to have a single file with a giant if/else if chain for commands. If you want to implement features into your bot and make your development process a lot less painful, you'll definitely want to use (or in this case, create) a command handler. Let's get started on that!
-
-Here's the base code we'll be using:
-
-```js
-const Discord = require('discord.js');
-const { prefix, token } = require('./config.json');
-
-const client = new Discord.Client();
-
-client.once('ready', () => {
- console.log('Ready!');
-});
-
-client.on('message', message => {
- if (!message.content.startsWith(prefix) || message.author.bot) return;
-
- const args = message.content.slice(prefix.length).split(/ +/);
- const command = args.shift().toLowerCase();
-
- if (command === 'ping') {
- message.channel.send('Pong.');
- } else if (command === 'beep') {
- message.channel.send('Boop.');
- }
- // other commands...
-});
-
-client.login(token);
-```
-
-::: tip
-We'll be moving over the commands created in [the previous page](/creating-your-bot/commands-with-user-input.md) as well, but for the sake of keeping the base code short, those commands have been omitted from the codeblock above.
-:::
-
-## Individual command files
-
-Before anything, you may want to create a backup of your current bot file. If you've followed along so far, your entire folder structure should look something like this:
-
-
-
-In the same folder, create a new folder and name it `commands`. This is where you'll store all of your commands, of course. Head over to your `commands` folder, create a new file named `ping.js`, and copy & paste in the following code:
-
-```js
-module.exports = {
- name: 'ping',
- description: 'Ping!',
- execute(message, args) {
- message.channel.send('Pong.');
- },
-};
-```
-
-You can go ahead and do the same for the rest of your commands as well, putting their respective blocks of code inside the `execute()` function. If you've been using the same code as the guide thus far, you can copy & paste your commands into their own files now just fine without any issue, as long as you follow the format above. The `description` property is optional, but will be useful for the dynamic help command we'll be covering later.
-
-::: tip
-`module.exports` is how you export data in Node.js so that you can `require()` it in other files. If you're unfamiliar with it and want to read more, you can take a look at [the documentation](https://nodejs.org/api/modules.html#modules_module_exports) for more info.
-:::
-
-::: tip
-If you need to access your client instance from inside one of your command files, you can access it via `message.client`. If you need to access things such as external files or modules, you should re-require them at the top of the file.
-:::
-
-## Dynamically reading command files
-
-Back in your main file, make these two additions:
-
-```diff
-+ const fs = require('fs');
-const Discord = require('discord.js');
-const { prefix, token } = require('./config.json');
-
-const client = new Discord.Client();
-+ client.commands = new Discord.Collection();
-```
-
-::: tip
-`fs` is Node's native file system module. You can read the docs about it [here](https://nodejs.org/api/fs.html).
-:::
-
-::: tip
-If you aren't exactly sure what Collections are, they're a class that extend JS's native Map class and include more extensive, useful functionality. You can read about Maps [here](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map), and see all the available Collection methods [here](https://discord.js.org/#/docs/main/11.5.1/class/Collection)[here](https://discord.js.org/#/docs/collection/master/class/Collection).
-:::
-
-This next step is how you'll dynamically retrieve all your newly created command files. Add this below your `client.commands` line:
-
-```js
-const commandFiles = fs.readdirSync('./commands').filter(file => file.endsWith('.js'));
-```
-
-The `fs.readdirSync()` method will return an array of all the file names in that directory, e.g. `['ping.js', 'beep.js']`. The filter is there to make sure any non-JS files are left out of the array. With that array, you can loop over it and dynamically set your commands to the Collection you made above.
-
-```js
-for (const file of commandFiles) {
- const command = require(`./commands/${file}`);
-
- // set a new item in the Collection
- // with the key as the command name and the value as the exported module
- client.commands.set(command.name, command);
-}
-```
-
-By this point, your code should look something like this:
-
-```js
-const fs = require('fs');
-const Discord = require('discord.js');
-const { prefix, token } = require('./config.json');
-
-const client = new Discord.Client();
-client.commands = new Discord.Collection();
-
-const commandFiles = fs.readdirSync('./commands').filter(file => file.endsWith('.js'));
-
-for (const file of commandFiles) {
- const command = require(`./commands/${file}`);
- client.commands.set(command.name, command);
-}
-
-// `client.on('...')` events and such below this point
-```
-
-As for setting up your files, that's it for now. In the next chapter, you'll learn how to make your commands execute dynamically!
-
-## Resulting code
-
-
diff --git a/Ajuda/guide-master/guide/command-handling/adding-features.md b/Ajuda/guide-master/guide/command-handling/adding-features.md
deleted file mode 100644
index bb012b4..0000000
--- a/Ajuda/guide-master/guide/command-handling/adding-features.md
+++ /dev/null
@@ -1,453 +0,0 @@
-# Additional features
-
-::: tip
-This page is a follow-up and bases its code off of [the previous page](/command-handling/dynamic-commands.md).
-:::
-
-The command handler you've been building so far doesn't do much aside from dynamically load and execute commands. Those two things alone are great, but definitely not the only things you want. Before diving into it, let's do some quick refactoring in preparation.
-
-```diff
- const args = message.content.slice(prefix.length).split(/ +/);
-- const command = args.shift().toLowerCase();
-+ const commandName = args.shift().toLowerCase();
-
-- if (!client.commands.has(command)) return;
-+ if (!client.commands.has(commandName)) return;
-+
-+ const command = client.commands.get(commandName);
-
- try {
-- client.commands.get(command).execute(message, args);
-+ command.execute(message, args);
- }
-```
-
-In this short (but necessary) refactor, you:
-
-1. Renamed the original `command` variable to `commandName` (to be descriptive about what it actually is, and so that you can name one of our variables as `command` later).
-2. Changed the following `if` statement appropriately.
-3. Made a variable named `command` which is the actual command object.
-4. Changed the line inside the `try/catch` statement to use the `command` variable instead.
-
-Now you can start adding features!
-
-## Required arguments
-
-For this section, we'll be using the `args-info.js` command as an example. If you chose to keep it, it should look like this now:
-
-```js
-module.exports = {
- name: 'args-info',
- description: 'Information about the arguments provided.',
- execute(message, args) {
- if (!args.length) {
- return message.channel.send(`You didn't provide any arguments, ${message.author}!`);
- } else if (args[0] === 'foo') {
- return message.channel.send('bar');
- }
-
- message.channel.send(`Arguments: ${args}\nArguments length: ${args.length}`);
- },
-};
-```
-
-This is fine if you only have a few commands that require arguments. However, if you plan on making a lot of commands and don't want to copy & paste that `if` statement each time, it'd be a smart idea to change that check into something simpler.
-
-Here are the changes you'll be making:
-
-```diff
-+ args: true,
- execute(message, args) {
-- if (!args.length) {
-- return message.channel.send(`You didn't provide any arguments, ${message.author}!`);
-- }
-- else if (args[0] === 'foo') {
-+ if (args[0] === 'foo') {
- return message.channel.send('bar');
- }
-
- message.channel.send(`Arguments: ${args}\nArguments length: ${args.length}`);
- },
-```
-
-And then in your main file:
-
-```diff
- const command = client.commands.get(commandName);
-+
-+ if (command.args && !args.length) {
-+ return message.channel.send(`You didn't provide any arguments, ${message.author}!`);
-+ }
-+
-```
-
-Now whenever you set `args` to `true` in one of your command files, it'll perform this check and supply feedback if necessary.
-
-### Expected command usage
-
-It's good UX (user experience) to let the user know that a command requires arguments when they don't provide any (it also prevents your code from breaking). Letting them know what kind of arguments are expected is even better.
-
-Here's a simple implementation of such a thing. For this example, pretend you have a `!role` command, where the first argument is the user to give the role, and the second argument is the name of the role to give them.
-
-In your `role.js` file:
-
-```diff
- args: true,
-+ usage: '',
- execute(message, args) {
-```
-
-In your main file:
-
-```diff
- if (command.args && !args.length) {
-- return message.channel.send(`You didn't provide any arguments, ${message.author}!`);
-+ let reply = `You didn't provide any arguments, ${message.author}!`;
-+
-+ if (command.usage) {
-+ reply += `\nThe proper usage would be: \`${prefix}${command.name} ${command.usage}\``;
-+ }
-+
-+ return message.channel.send(reply);
- }
-```
-
-Use an `if` statement to check if the `usage` property exists (and is truthy) first, so that you don't accidentally end up with `undefined` in the reply string (in the case that you forget to properly supply the property in your command file, or some similar incident). A simple precaution such as this can greatly improve the user experience.
-
-## Guild only commands
-
-Some commands are meant to be used only inside servers and won't work whatsoever in DMs. A prime example of this would be a kick command. You can add a property to the necessary commands to determine whether or not it should be only available outside of servers.
-
-In the kick command you created in an earlier chapter, make the following changes:
-
-```diff
-module.exports = {
- name: 'kick',
- description: 'Kick a user from the server.',
-+ guildOnly: true,
-```
-
-And in your main file, above the args checking line, add this in:
-
-```js
-if (command.guildOnly && message.channel.type !== 'text') {
- return message.reply('I can\'t execute that command inside DMs!');
-}
-```
-
-Now when you try to use the kick command inside a DM, you'll get the appropriate response which will also prevent your bot from throwing an error.
-
-
-
- !kick
-
-
- I can't execute that command inside DMs!
-
-
-
-## Cooldowns
-
-Spam is something you generally want to avoid - especially if one of your commands requires calls to other APIs, or takes a bit of time to build/send. This is also a very common feature bot developers want to integrate into their projects, so let's get started on that!
-
-You'll be using the ping command to test this on. Add in the following bit of code:
-
-```diff
-module.exports = {
- name: 'ping',
-+ cooldown: 5,
- execute(message) {
- message.channel.send('Pong.');
- },
-};
-```
-
-This is the amount (in seconds) that the user will have to wait before being able to properly use that command again. You'll be using Collections again to store what you need.
-
-In your main file, add in this line (preferably somewhere above your `ready` event):
-
-```js
-const cooldowns = new Discord.Collection();
-```
-
-Again in your main file, directly above the `try/catch`, add in the following:
-
-```js
-if (!cooldowns.has(command.name)) {
- cooldowns.set(command.name, new Discord.Collection());
-}
-
-const now = Date.now();
-const timestamps = cooldowns.get(command.name);
-const cooldownAmount = (command.cooldown || 3) * 1000;
-
-if (timestamps.has(message.author.id)) {
- // ...
-}
-```
-
-You check if the `cooldowns` Collection has the command set in it yet. If not, then add it in. Next, 3 variables are created:
-
-1. A variable with the current timestamp.
-2. A variable that `.get()`s the Collection for the triggered command.
-3. A variable that gets the necessary cooldown amount. If you don't supply it in your command file, it'll default to 3. Afterwards, convert it to the proper amount of milliseconds.
-
-After that, create a simple `if` statement to check if the `timestamps` Collection has the author ID in it yet.
-
-Continuing with your current setup, this is the complete `if` statement:
-
-```js
-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(`please wait ${timeLeft.toFixed(1)} more second(s) before reusing the \`${command.name}\` command.`);
- }
-}
-```
-
-Since the `timestamps` Collection has the author ID in it, you `.get()` it and then sum it up with the `cooldownAmount` variable, in order to get the correct expiration timestamp. You then check to see if it's actually expired or not.
-
-If the `expirationTime` has not passed, you return a message letting the user know how much time is left until they can use that command again. As you will see shortly, the author ID should be deleted from the `timestamps` Collection upon expiration, but you should take this extra precaution to avoid potential UX problems.
-
-Finally, if the `timestamps` Collection doesn't have the message author's ID (or if the author ID did not get deleted as planned), `.set()` the author ID with the current timestamp and create a `setTimeout()` to automatically delete it after the cooldown period has passed:
-
-```js
-timestamps.set(message.author.id, now);
-setTimeout(() => timestamps.delete(message.author.id), cooldownAmount);
-```
-
-## Command aliases
-
-It's a good idea to allow users to trigger your commands in more than one way; it gives them the freedom of choosing what to send and may even make some command names easier to remember. Luckily, setting up aliases for your commands is quite simple.
-
-For this bit of the guide, we'll be using the avatar command as a target. Around Discord, your profile picture is referred to as an "avatar" - however, not everyone calls it that. Some people prefer "icon" or "pfp" (profile picture). With that in mind, let's update the avatar command to allow all 3 of those triggers.
-
-Open your `avatar.js` file and add in the following line:
-
-```diff
-module.exports = {
- name: 'avatar',
-+ aliases: ['icon', 'pfp'],
-```
-
-The `aliases` property should always contain an array of strings. In your main file, here are the changes you'll need to make:
-
-```diff
-- if (!client.commands.has(commandName)) return;
--
-- const command = client.commands.get(commandName);
-+ const command = client.commands.get(commandName)
-+ || client.commands.find(cmd => cmd.aliases && cmd.aliases.includes(commandName));
-+
-+ if (!command) return;
-```
-
-Making those two small changes, you get this:
-
-
-
-## A dynamic help command
-
-If you don't use a framework or command handler for your projects, you'll have a tough time setting up an always up-to-date help command. Luckily, that's not the case here. Start by creating a new command file inside your `commands` folder and populate it as you normally would.
-
-```js
-module.exports = {
- name: 'help',
- description: 'List all of my commands or info about a specific command.',
- aliases: ['commands'],
- usage: '[command name]',
- cooldown: 5,
- execute(message, args) {
- // ...
- },
-};
-```
-
-You're going to need your prefix variable a couple times inside this command, so make sure to require that at the very top of the file (outside of the `module.exports` bit).
-
-```js
-const { prefix } = require('../config.json');
-```
-
-Inside the `execute()` function, set up some variables and an if/else statement to determine whether it should display a list of all the command names or only information about a specific command.
-
-```js
-const data = [];
-const { commands } = message.client;
-
-if (!args.length) {
- // ...
-}
-
-// ...
-```
-
-You can use `.push()` on the `data` variable to append the info you want and then DM it to the message author once you're done.
-
-Inside the if statement, this is what you'll need:
-
-```js
-data.push('Here\'s a list of all my commands:');
-data.push(commands.map(command => command.name).join(', '));
-data.push(`\nYou can send \`${prefix}help [command name]\` to get info on a specific command!`);
-
-return message.author.send(data, { split: true })
- .then(() => {
- if (message.channel.type === 'dm') return;
- message.reply('I\'ve sent you a DM with all my commands!');
- })
- .catch(error => {
- console.error(`Could not send help DM to ${message.author.tag}.\n`, error);
- message.reply('it seems like I can\'t DM you! Do you have DMs disabled?');
- });
-```
-
-There's nothing really complex here; all you do is append some strings, `.map()` over the `commands` Collection, and add an additional string to let the user know how to trigger information about a specific command.
-
-Since help messages can get messy, you'll be DMing it to the message author instead of posting it in the requested channel. However, there is something very important you should consider: the possibility of not being able to DM the user, whether it be that they have DMs disabled on that server or overall, or they have the bot blocked. For that reason, you should `.catch()` it and let them know.
-
-::: tip
-If you weren't already aware, `.send()` takes 2 parameters: the content to send, and the message options to pass in. You can read about the `MessageOptions` type [here](https://discord.js.org/#/docs/main/11.5.1/typedef/MessageOptions)[here](https://discord.js.org/#/docs/main/master/typedef/MessageOptions). Using `split: true` here will automatically split our help message into 2 or more messages in the case that it exceeds the 2,000 character limit.
-:::
-
-::: tip
-Because the `data` variable is an array, you can take advantage of discord.js' functionality where it will `.join()` any array sent with a `\n` character. If you prefer to not rely on that in the chance that it changes in the future, you can simply append `.join('\n')` to the end of that yourself.
-:::
-
-Below the `if (!args.length)` statement is where you'll send the help message for the command they specified.
-
-```js
-const name = args[0].toLowerCase();
-const command = commands.get(name) || commands.find(c => c.aliases && c.aliases.includes(name));
-
-if (!command) {
- return message.reply('that\'s not a valid command!');
-}
-
-data.push(`**Name:** ${command.name}`);
-
-if (command.aliases) data.push(`**Aliases:** ${command.aliases.join(', ')}`);
-if (command.description) data.push(`**Description:** ${command.description}`);
-if (command.usage) data.push(`**Usage:** ${prefix}${command.name} ${command.usage}`);
-
-data.push(`**Cooldown:** ${command.cooldown || 3} second(s)`);
-
-message.channel.send(data, { split: true });
-```
-
-Once you get the command based off the name or alias they gave, you can start `.push()`ing what you need into the `data` variable. Not all commands will have descriptions, aliases, or usage strings, so you use an if statement for each of those to append them conditionally. After that, send back all the relevant information.
-
-At the end of it all, you should be getting this as a result:
-
-
-
- !help
-
-
- Here's a list of all my commands:
- args-info, avatar, beep, help, kick, ping, prune, server, user-info
- You can send `!help [command name]` to get info on a specific command!
-
-
- !help avatar
-
-
- **Name:** avatar
- **Aliases:** icon,pfp
- **Description:** Get the avatar URL of the tagged user(s), or your own avatar.
- **Cooldown:** 3 second(s)
-
-
-
-No more manually editing your help command! If you aren't completely satisfied with how it looks, you can always adjust it to your liking later.
-
-::: tip
-If you want to add categories or other information to your commands you can simply add properties reflecting it to your `module.exports`. If you only want to show a subset of commands remember that `commands` is a Collection you can [filter](https://discord.js.org/#/docs/main/11.5.1/class/Collection?scrollTo=filter)[filter](https://discord.js.org/#/docs/collection/master/class/Collection?scrollTo=filter) to fit your specific needs!
-:::
-
-## Reloading commands
-
-When writing your commands, you may find it tedious to restart your bot every time you want to test even the slightest change in your code. However, if you have a command handler, reloading commands can be done with a single bot command.
-
-Create a new command file and paste in the usual format:
-
-```js
-module.exports = {
- name: 'reload',
- description: 'Reloads a command',
- execute(message, args) {
- // ...
- },
-};
-```
-
-In this command, you will be using a command name or alias as the only argument. First off, you need to check if the command you want to reload exists. This can be done in a similar fashion as getting a command in your main file.
-Note that you can skip the first line if you use the [argument checker](/command-handling/adding-features.html#required-arguments) from above:
-
-```js
-if (!args.length) return message.channel.send(`You didn't pass any command to reload, ${message.author}!`);
-const commandName = args[0].toLowerCase();
-const command = message.client.commands.get(commandName)
- || message.client.commands.find(cmd => cmd.aliases && cmd.aliases.includes(commandName));
-
-if (!command) return message.channel.send(`There is no command with name or alias \`${commandName}\`, ${message.author}!`);
-```
-
-:::tip
-A lot of library specific structures have `client` as a property. That means you don't have to pass the client reference as a parameter to commands to access for example `client.guilds` or `client.commands`, but can directly access the respective properties directly from the `message` object, as shown in the snippet above.
-:::
-
-Now, in theory, all there is to do, is to delete the previous command from `client.commands` and require the file again. In practice though, you cannot do this that easily as `require()` caches the file. If you were to require it again, you would simply load the previously cached file without any of your changes. In order to remove the file from the cache, you need to add the following line to your code:
-
-```js
-delete require.cache[require.resolve(`./${commandName}.js`)];
-```
-
-After removing the command from the cache, all you have to do is require the file again and add the freshly loaded command to `client.commands`:
-
-```js
-try {
- const newCommand = require(`./${commandName}.js`);
- message.client.commands.set(newCommand.name, newCommand);
-} catch (error) {
- console.log(error);
- message.channel.send(`There was an error while reloading a command \`${commandName}\`:\n\`${error.message}\``);
-}
-```
-
-The snippet above uses a `try/catch` block to load the command file and add it to `client.commands`. In case of an error it will log the full error to console and notify the user about it with the error's message component `error.message`. Note the you never actually delete the command from the commands collection, and instead just overwrite it. This prevents you from deleting a command, and ending up with no command at all after a failed `require()` call, as each use of the reload command checks that collection again.
-
-The last thing you might want to add is sending a message if the reload was successful:
-
-```js
-message.channel.send(`Command \`${commandName}\` was reloaded!`);
-```
-
-## Conclusion
-
-At this point of the guide, you should now have a command handler with some very basic (but useful) features! If you see fit, you can expand upon the current structure to make something even better and easier for you to use in the future.
-
-## Resulting code
-
-
diff --git a/Ajuda/guide-master/guide/command-handling/dynamic-commands.md b/Ajuda/guide-master/guide/command-handling/dynamic-commands.md
deleted file mode 100644
index a841d18..0000000
--- a/Ajuda/guide-master/guide/command-handling/dynamic-commands.md
+++ /dev/null
@@ -1,72 +0,0 @@
-# Dynamic commands
-
-::: tip
-This page is a follow-up and bases its code off of [the previous page](/command-handling/).
-:::
-
-## How it works
-
-Now that you have a Collection of all our commands, you can use them easily! But before diving straight into it, it'd be a good idea to familiarize yourself with how you'll turn these basic if statements into something much more dynamic and robust. So let's continue with 1 more if statement example, and then we'll move onto the real stuff.
-
-As always, the red is what you'll remove and the green is what you'll replace it with.
-
-```diff
-if (command === 'ping') {
-- message.channel.send('Pong.');
-+ client.commands.get('ping').execute(message, args);
-}
-```
-
-You `.get()` the ping command and call its `.execute()` method while passing in the `message` and `args` variables as the method arguments. Instead of putting your ping command code directly in the if statement, you can call it directly like that instead. Granted, this version is actually longer than what you had before for your ping command, but commands usually aren't that short.
-
-So, if you wanted to (assuming that you've copied & pasted all of your commands into their own files by now), this could be your entire message event:
-
-```js
-client.on('message', message => {
- if (!message.content.startsWith(prefix) || message.author.bot) return;
-
- const args = message.content.slice(prefix.length).split(/ +/);
- const command = args.shift().toLowerCase();
-
- if (command === 'ping') {
- client.commands.get('ping').execute(message, args);
- } else if (command === 'beep') {
- client.commands.get('beep').execute(message, args);
- } else if (command === 'server') {
- client.commands.get('server').execute(message, args);
- }
- // do the same for the rest of the commands...
-});
-```
-
-That would work perfectly fine, but it isn't dynamic; you'd still have to add an if statement and the same old code each time you wanted to register a new command, which is less than ideal.
-
-## Dynamically executing commands
-
-At this point, you can take that entire if/else if chain and delete it; you won't need anything past the `const command = ...` line. Instead, you'll be replacing it with this:
-
-```js
-if (!client.commands.has(command)) return;
-
-try {
- client.commands.get(command).execute(message, args);
-} catch (error) {
- console.error(error);
- message.reply('there was an error trying to execute that command!');
-}
-```
-
-If there isn't a command with that name, exit early. If there is, `.get()` the command and call its `.execute()` method while passing in your `message` and `args` variables as the method arguments. In case something goes wrong, log the error and report back to the member to let them know.
-
-... and that's it! Whenever you want to add a new command, you simply make a new file in your `commands` directory, name it what you want, and then do what you did for the other commands.
-
-In the next chapter, we'll be going through how to implement some basic features into your brand new command handler. Currently, it's hardly a command "handler" at this point; it's a command loader and executor, if you wish to see it that way. You'll learn how to implement some new features and the logic behind them, such as:
-
-* Command aliases
-* Cooldowns
-* Guild only commands
-* A dynamic help message
-
-## Resulting code
-
-
diff --git a/Ajuda/guide-master/guide/commando/README.md b/Ajuda/guide-master/guide/commando/README.md
deleted file mode 100644
index c90519d..0000000
--- a/Ajuda/guide-master/guide/commando/README.md
+++ /dev/null
@@ -1,123 +0,0 @@
----
-forceTheme: blue
----
-
-# Getting started with Commando
-
-When you got your first bot up and running with Discord.js, you should've installed Discord.js using npm, Node.js' Package Manager. The same applies to Commando, which must be separately installed. You can do this in one of two ways:
-
-Stable (v11): `npm install discord.js-commando`
-Master (v12): `npm install discordjs/Commando`
-
-::: warning
-You need at least Node.js version 8.0.0 to use Commando. Master branch will also require you to install [Git](https://git-scm.com/downloads).
-:::
-
-If you're using Discord.js master, you'll need Commando master, and vice versa for stable.
-
-## Creating your index.js file
-
-While it doesn't have to be called `index.js`, this file is the main file for your bot, which handles everything from registering new commands to logging in your client.
-
-The first thing you have to do is require Commando. Contrary to what you may think, you do **not** need to require Discord.js to use Commando. Commando handles all discord.js-related functions within itself, and the Commando client extends discord.js', so you'll rarely ever have to touch core discord.js!
-
-You'll also be requiring `path`. Don't worry, you don't have to install `path`; it comes bundled with Node.
-
-```js
-const { CommandoClient } = require('discord.js-commando');
-const path = require('path');
-```
-
-The next step is to create a new CommandoClient. There's also a few options you will need to set.
-
-```js
-const client = new CommandoClient({
- commandPrefix: '?',
- owner: '278305350804045834',
- invite: 'https://discord.gg/bRCvFy9',
-});
-```
-
-In the `commandPrefix` parameter, you should insert the prefix you intend to use for your bot. As of writing, you can only have one, so choose wisely! However, note that mentioning your bot will **always** be allowed alongside the prefix you set here. In other words, this prefix and mentions are how your users will call your bot. **No, there is no way to disable mentions being a prefix!**
-
-After that is the `owner` parameter, which should contain the ID for the owner of the bot. It can be either a string of one ID, or an array of many.
-
-::: danger
-The users you set here have complete control over the bot. They can use eval and other owner-only commands, ignore command throttling, and bypass all user permissions! Be sure to only give this to people you trust!
-:::
-
-The final option, `invite`, is the **full** invite URL to your bot's support server. While not a required option, it's a good idea to have a support server on hand to handle questions and concerns your users may have about your bot if it is public. If not, it's safe to leave this option out.
-
-Next you're going to register the command groups, args types, and default commands. Then, you register the commands in a folder. You can name the folder whatever you want, but it's recommended to stick with `commands`, as it makes the most sense.
-
-```js
-client.registry
- .registerDefaultTypes()
- .registerGroups([
- ['first', 'Your First Command Group'],
- ['second', 'Your Second Command Group'],
- ])
- .registerDefaultGroups()
- .registerDefaultCommands()
- .registerCommandsIn(path.join(__dirname, 'commands'));
-```
-
-Doing this you've also created your first command group! Make another folder called `first` in your `commands` folder so that you can put the commands for that group in there. The group will be displayed in the help command as `Your First Command Group`. You can use any name you want for either of these options, but do note that the key (`first`) **must be lowercase**!
-
-Adding more command groups is as simple as adding another option to the array and making another folder.
-
-
-
-```js
-.registerGroups([
- ['first', 'Your First Command Group'],
- ['second', 'Your Second Command Group'],
- ['third', 'Your Third Command Group'],
-])
-```
-
-Should you want to disable a default command, such as if you wanted to make your own help command and replace the default one, you can pass that as an option in `registerDefaultCommands`.
-
-
-
-```js
-.registerDefaultCommands({
- help: false,
-})
-```
-
-Next, you're going to need to create a ready event and an error event, as usual.
-
-```js
-client.once('ready', () => {
- console.log(`Logged in as ${client.user.tag}! (${client.user.id})`);
- client.user.setActivity('with Commando');
-});
-
-client.on('error', console.error);
-```
-
-This will send a message to your console when the bot is ready, and set the bot's playing status to "with Commando". You can set both to whatever you wish.
-
-Last but certainly not least, log the bot in.
-
-```js
-client.login('your-token-goes-here');
-```
-
-::: danger
-You should use environment variables or a `config.json` for your token instead of passing it directly!
-:::
-
-And there you have it! You've set up your `index.js` file! In the end your file structure should look like this, along with whatever `.gitignore` or `config.json` you may have:
-
-```
-/commands
- /first
-index.js
-package.json
-```
-
-## Resulting code
-
-
diff --git a/Ajuda/guide-master/guide/commando/args.md b/Ajuda/guide-master/guide/commando/args.md
deleted file mode 100644
index 99dbd30..0000000
--- a/Ajuda/guide-master/guide/commando/args.md
+++ /dev/null
@@ -1,122 +0,0 @@
----
-forceTheme: blue
----
-
-# Using arguments in commands
-
-Sometimes when using commands you may want to get data from the user, and change the response accordingly. In this section, you'll create a command that pulls a string from the message and says it back to the user!
-
-## String arguments
-
-A `string` argument is simply the text after the command name and prefix. For example: `?say Hi there!` would cause the argument to be `Hi there!`. It's quite simple to create one.
-
-First, go into your `first` folder and make a new file called `say.js`. Once you have it, set up your command class and everything just like the one in the meow command.
-
-```js
-const { Command } = require('discord.js-commando');
-
-module.exports = class SayCommand extends Command {
- constructor(client) {
- super(client, {
- name: 'say',
- aliases: ['parrot', 'copy'],
- group: 'first',
- memberName: 'say',
- description: 'Replies with the text you provide.',
- });
- }
-
- run(message) {
- // empty for now
- }
-};
-```
-
-Place a `,` after the `description` field, because you're going to be adding an `args` field.
-
-The `args` field is simply an array of objects, each containing data for that argument.
-
-
-
-```js
-super(client, {
- name: 'say',
- aliases: ['parrot', 'copy'],
- group: 'first',
- memberName: 'say',
- description: 'Replies with the text you provide.',
- args: [
- {
- key: 'text',
- prompt: 'What text would you like the bot to say?',
- type: 'string',
- },
- ],
-});
-```
-
-See? Simple.
-
-- `key` is the name of the argument. When you define it in your `run` method, this is what you'll be using.
-- `prompt` is the text that displays if no argument is provided. If someone uses just `?say`, that prompt will come up asking for the text.
-- `type` is the type the argument is a part of. This can be many things, including `string`, `integer`, `user`, `member`, etc.
-
-Adding more args is as simple as adding another object to the array, like so:
-
-
-
-```js
-args: [
- {
- key: 'text',
- prompt: 'What text would you like the bot to say?',
- type: 'string',
- },
- {
- key: 'otherThing',
- prompt: 'What is this other useless thing?',
- type: 'string',
- },
-]
-```
-
-You can also set arguments to default to a specific value:
-
-
-
-```js
-{
- key: 'otherThing',
- prompt: 'What is this other useless thing?',
- type: 'string',
- default: 'dog',
-},
-```
-
-As you can see, they're very powerful things.
-
-Head on over to your `run` method and set the `text` arg to a variable.
-
-
-
-```js
-run(message, { text }) {
- // empty for now
-}
-```
-
-Next, make the `run` method return the text back to the user.
-
-
-
-```js
-run(message, { text }) {
- return message.reply(text);
-}
-```
-
-And there you have it, a say command using args!
-
-## Resulting code
-
-
diff --git a/Ajuda/guide-master/guide/commando/client-values.md b/Ajuda/guide-master/guide/commando/client-values.md
deleted file mode 100644
index 77e0143..0000000
--- a/Ajuda/guide-master/guide/commando/client-values.md
+++ /dev/null
@@ -1,19 +0,0 @@
----
-forceTheme: blue
----
-
-# Using client values in commands
-
-This one is easy. If you want any value from the client object, normally, you'd do this:
-
-```js
-client.guilds.size;
-```
-
-However, in Commando, you have to use `this` to get these values.
-
-```js
-this.client.guilds.size;
-```
-
-It's really that simple!
diff --git a/Ajuda/guide-master/guide/commando/first-command.md b/Ajuda/guide-master/guide/commando/first-command.md
deleted file mode 100644
index a6abbf2..0000000
--- a/Ajuda/guide-master/guide/commando/first-command.md
+++ /dev/null
@@ -1,76 +0,0 @@
----
-forceTheme: blue
----
-
-# Your first command
-
-Now that you've set up a command group and registered your command folder, you're ready to make your first command file! First, you're going to need to create a new file for the command. Hop over to your `commands` folder, and then your `first` folder, and make a new file called `meow.js`. This is going to be a simple command that only replies with a message when used. We'll go into arguments and all that later.
-
-Once you have your file, it's time to get started!
-
-## Creating your command class
-
-Before you do anything, at the start of your file, you're going to need to require Commando again. Specifically its Command class.
-
-```js
-const { Command } = require('discord.js-commando');
-```
-
-Commands are classes exported with `module.exports`. Create the class and set `module.exports` to it. You will also set a bunch of options here, which will be explained below.
-
-```js
-module.exports = class MeowCommand extends Command {
- constructor(client) {
- super(client, {
- name: 'meow',
- aliases: ['kitty-cat'],
- group: 'first',
- memberName: 'meow',
- description: 'Replies with a meow, kitty cat.',
- });
- }
-};
-```
-
-Don't let this scare you, it's actually very simple.
-
-- `name` is the name of the command.
-- `aliases` are other ways the command can be called. You can have as many as you want!
-- `group` is the command group the command is a part of.
-- `memberName` is the name of the command within the group (this can be different from the name).
-- `description` is the help text displayed when the help command is used.
-
-There are many more properties you can use, but those will be explained in their own sections.
-
-## Creating your run method
-
-The next thing you're going to need is a `run` method. This should go right below the constructor for the command. Inside, you'll return a message:
-
-```js
-module.exports = class MeowCommand extends Command {
- constructor(client) {
- super(client, {
- name: 'meow',
- group: 'first',
- memberName: 'meow',
- description: 'Replies with a meow, kitty cat.',
- });
- }
-
- run(message) {
- return message.say('Meow!');
- }
-};
-```
-
-As you can see, the `run` method is simply the code you want the bot to run when the command is used. This can be anything you can do in normal Discord.js, as Commando is simply an extension.
-
-You may have also noticed that I used `message.say` instead of `message.channel.send`. This is Commando's magic. Instead of `send`, use `say`. For embeds, use `embed`. For code, use `code`. The only exception to this is files, which are still sent the same as normal.
-
-The reason for this is that Commando allows editing messages into commands, and using these methods allows Commando to save the messages for that use. It also checks if it can send a message to the current channel, so you get two things in one!
-
-Now fire up the bot as normal and use your command! It should automatically be `?meow` to use it.
-
-## Resulting code
-
-
diff --git a/Ajuda/guide-master/guide/commando/guild-only.md b/Ajuda/guide-master/guide/commando/guild-only.md
deleted file mode 100644
index f719a7e..0000000
--- a/Ajuda/guide-master/guide/commando/guild-only.md
+++ /dev/null
@@ -1,44 +0,0 @@
----
-forceTheme: blue
----
-
-# Setting a command as guild-only
-
-Sometimes, you may need to require a command to only be usable in servers. Maybe it displays server information, maybe it gets a server emoji, no matter what it does, setting it as guild-only is very simple!
-
-First, go get the command you want to make guild-only.
-
-```js
-const { Command } = require('discord.js-commando');
-
-module.exports = class MeowCommand extends Command {
- constructor(client) {
- super(client, {
- name: 'meow',
- group: 'first',
- memberName: 'meow',
- description: 'Replies with a meow, kitty cat.',
- });
- }
-
- run(message) {
- return message.say('Meow!');
- }
-};
-```
-
-After `description`, add a `guildOnly` setting and set it to `true`.
-
-
-
-```js
-super(client, {
- name: 'meow',
- group: 'first',
- memberName: 'meow',
- description: 'Replies with a meow, kitty cat.',
- guildOnly: true,
-});
-```
-
-And that's all there is to it! Now when used in a DM, the bot will not permit the command to be used, and you will no longer receive errors!
diff --git a/Ajuda/guide-master/guide/commando/permissions.md b/Ajuda/guide-master/guide/commando/permissions.md
deleted file mode 100644
index 12727a5..0000000
--- a/Ajuda/guide-master/guide/commando/permissions.md
+++ /dev/null
@@ -1,63 +0,0 @@
----
-forceTheme: blue
----
-
-# Handling permissions
-
-Sometimes you may need a user to have a certain permission to use a command, or maybe your bot needs a permission to make the command work. Well, Commando makes both of these very simple.
-
-## User and client permissions
-
-First, go grab the command you want to use permissions with.
-
-```js
-const { Command } = require('discord.js-commando');
-
-module.exports = class MeowCommand extends Command {
- constructor(client) {
- super(client, {
- name: 'meow',
- group: 'first',
- memberName: 'meow',
- description: 'Replies with a meow, kitty cat.',
- });
- }
-
- run(message) {
- return message.say('Meow!');
- }
-};
-```
-
-You can then use the `userPermissions` and `clientPermissions` options to check for certain permissions. If you wanted to restrict the `meow` command, requiring the user to have the ability to manage messages, and the client full administrator access, you'd do the following:
-
-
-
-```js
-super(client, {
- name: 'meow',
- group: 'first',
- memberName: 'meow',
- description: 'Replies with a meow, kitty cat.',
- clientPermissions: ['ADMINISTRATOR'],
- userPermissions: ['MANAGE_MESSAGES'],
-});
-```
-
-All you need to do is set the properties to an array of permission flags. A list of those can be found [here](https://discord.js.org/#/docs/main/11.5.1/class/Permissions?scrollTo=s-FLAGS)[here](https://discord.js.org/#/docs/main/master/class/Permissions?scrollTo=s-FLAGS).
-
-## Owner-only commands
-
-Another thing you may want to do is set a command as owner-only. This will make a command only usable by the bot owner(s). Doing this is even simpler than the client/userPermissions, all you have to do is set the `ownerOnly` parameter to `true`.
-
-
-
-```js
-super(client, {
- name: 'meow',
- group: 'first',
- memberName: 'meow',
- description: 'Replies with a meow, kitty cat.',
- ownerOnly: true,
-});
-```
diff --git a/Ajuda/guide-master/guide/commando/throttling.md b/Ajuda/guide-master/guide/commando/throttling.md
deleted file mode 100644
index 4acc005..0000000
--- a/Ajuda/guide-master/guide/commando/throttling.md
+++ /dev/null
@@ -1,52 +0,0 @@
----
-forceTheme: blue
----
-
-# Throttling
-
-Throttling is like rate-limiting; it allows the command to be used only in a certain period of time—a cooldown of sorts. This is useful for commands that rely on API calls, or commands that can be spammy, to allow them to not be overused by one user.
-
-First, grab a command file you want to use throttling with.
-
-```js
-const { Command } = require('discord.js-commando');
-
-module.exports = class MeowCommand extends Command {
- constructor(client) {
- super(client, {
- name: 'meow',
- group: 'first',
- memberName: 'meow',
- description: 'Replies with a meow, kitty cat.',
- });
- }
-
- run(message) {
- return message.say('Meow!');
- }
-};
-```
-
-Add the `throttling` property to the command. `throttling` is an object, which contains two things:
-
-- `usages` is the amount of times the command can be used in the given time period.
-- `duration` is the amount of time the cooldown lasts, in seconds.
-
-Make it have 2 usages allowed in a 10 second period.
-
-
-
-```js
-super(client, {
- name: 'meow',
- group: 'first',
- memberName: 'meow',
- description: 'Replies with a meow, kitty cat.',
- throttling: {
- usages: 2,
- duration: 10,
- },
-});
-```
-
-The command now has a cooldown. If a user tries to use the `meow` command more than 2 times in 10 seconds, it will not allow them to use it until the 10 seconds have fully passed. While useless in a command like `meow`, this can be very useful for other, heavier commands you don't want abused.
diff --git a/Ajuda/guide-master/guide/commando/unknown-command-response.md b/Ajuda/guide-master/guide/commando/unknown-command-response.md
deleted file mode 100644
index 37004a1..0000000
--- a/Ajuda/guide-master/guide/commando/unknown-command-response.md
+++ /dev/null
@@ -1,30 +0,0 @@
----
-forceTheme: blue
----
-
-# Removing the unknown command response
-
-Sometimes, you may want to remove the unknown command response from your bot. Be it Cleverbot or some other reason, sometimes you just want it gone, and it's quite simple to remove.
-
-Head over to your `index.js` file and find your `client` variable. You're going to be adding a new setting here.
-
-```js
-const client = new CommandoClient({
- commandPrefix: '?',
- owner: '278305350804045834',
- invite: 'https://discord.gg/bRCvFy9',
-});
-```
-
-All you have to do to remove the unknown command response is set `unknownCommandResponse` to `false`.
-
-```js
-const client = new CommandoClient({
- commandPrefix: '?',
- owner: '278305350804045834',
- invite: 'https://discord.gg/bRCvFy9',
- unknownCommandResponse: false,
-});
-```
-
-That's all there is to it!
diff --git a/Ajuda/guide-master/guide/commando/validators.md b/Ajuda/guide-master/guide/commando/validators.md
deleted file mode 100644
index d0d31a0..0000000
--- a/Ajuda/guide-master/guide/commando/validators.md
+++ /dev/null
@@ -1,76 +0,0 @@
----
-forceTheme: blue
----
-
-# Using argument validators
-
-Sometimes you're going to want an argument to be a certain thing, e.g. check if it's a specific piece of text, or check the length. This can be accomplished with a `validate` function in your arg.
-
-## Basic validators
-
-What if you have a command where your first argument has to match a certain text? For example: if you wanted your `say` command to allow a maximum of 200 characters. It's very simple.
-
-First, pull the argument from your say command:
-
-
-
-```js
-args: [
- {
- key: 'text',
- prompt: 'What text would you like the bot to say?',
- type: 'string',
- },
-],
-```
-
-Add a blank `validate` function to the arg.
-
-
-
-```js
-args: [
- {
- key: 'text',
- prompt: 'What text would you like the bot to say?',
- type: 'string',
- validate: text => {},
- },
-],
-```
-
-Inside your `validate` function, check to see if the length is below 201 characters.
-
-
-
-```js
-args: [
- {
- key: 'text',
- prompt: 'What text would you like the bot to say?',
- type: 'string',
- validate: text => text.length < 201,
- },
-],
-```
-
-And now you've got a validator that checks if the length is 200!
-
-## oneOf
-
-Another property you can use to validate arguments is the `oneOf` option. This option forces the argument of be _one of_ the options provided in an array. If you wanted to make an argument that required a "yes" or "no" response, you'd do this:
-
-
-
-```js
-args: [
- {
- key: 'option',
- prompt: 'Yes or No?',
- type: 'string',
- oneOf: ['yes', 'no'],
- },
-],
-```
-
-That's it! This will automatically be case-insensitive, so you don't have to worry about that.
diff --git a/Ajuda/guide-master/guide/creating-your-bot/README.md b/Ajuda/guide-master/guide/creating-your-bot/README.md
deleted file mode 100644
index 870adbd..0000000
--- a/Ajuda/guide-master/guide/creating-your-bot/README.md
+++ /dev/null
@@ -1,100 +0,0 @@
-# Getting your bot up & running
-
-We're finally getting to the exciting parts! Since your bot is in your server now, the next step is to start coding and get it online!
-
-## Creating the bot file
-
-Open up your preferred code editor (whether it be [Visual Studio Code](https://code.visualstudio.com/), [Atom](https://atom.io/), [Sublime Text](https://www.sublimetext.com/), or any other editor of your choice) and create a new file. If you're brand new and aren't sure what to use, go with Visual Studio Code.
-
-It's suggested that you save the file as `index.js`, but you may name it whatever you wish, as long as it ends with `.js`.
-
-::: tip
-You can quickly create a new file by using the `Ctrl + N` shortcut on your keyboard, and then using `Ctrl + S` to save the file.
-:::
-
-## Logging in to Discord
-
-Once you've created a new file, do a quick check to see if you have everything setup properly. Copy & paste the following code into your file and save it. Don't worry if you don't understand it right away—it'll be explained a bit more in depth after this.
-
-```js
-const Discord = require('discord.js');
-const client = new Discord.Client();
-
-client.once('ready', () => {
- console.log('Ready!');
-});
-
-client.login('your-token-goes-here');
-```
-
-Head back to your console window, type in `node your-file-name.js`, and press enter. If you see the `Ready!` message after a few seconds, you're good to go! If not, try going back a few steps and make sure you followed everything correctly.
-
-::: tip
-Don't feel like typing the file name each time? Open up your `package.json` file, look for something like `"main": "index.js"`, and change `"index.js"` to whatever your file name is. After saving, you can simply run the `node .` shortcut in your console to start the process!
-:::
-
-### Start-up code explained
-
-Here's the same code with comments, so it's easier to understand what's going on.
-```js
-// require the discord.js module
-const Discord = require('discord.js');
-
-// create a new Discord client
-const client = new Discord.Client();
-
-// when the client is ready, run this code
-// this event will only trigger one time after logging in
-client.once('ready', () => {
- console.log('Ready!');
-});
-
-// login to Discord with your app's token
-client.login('your-token-goes-here');
-```
-
-Although it's not a lot, it's good to know what each bit of your code does. But, as it currently is, this won't really do anything. You probably want to add some commands that run whenever someone sends a specific message, right? Let's get started on that, then!
-
-## Listening for messages
-
-First, make sure to close the process in your console. You can do so by pressing `Ctrl + C` inside the console. Go back to your code editor and add the following piece of code above the `client.login()` line.
-
-```js
-client.on('message', message => {
- console.log(message.content);
-});
-```
-
-Notice how the code uses `.on` rather than `.once` like in the ready event. This means that it can trigger multiple times. Save the file, go back to your console, and start the process up again. Whenever a message is sent inside a channel your bot has access to, the message's content will be logged to your console. Go ahead and test it out!
-
-::: tip
-Inside your console, you can press the up arrow on your keyboard to bring up the latest commands you've run. Pressing `Up` and then `Enter` after closing the process is a nice, quick way to start it up again (as opposed to typing out the name each time).
-:::
-
-## Replying to messages
-
-Logging to the console is great and all, but it doesn't really provide any feedback for the end user. Let's create a basic ping/pong command before you move on to making real commands. Remove the `console.log(message.content)` line from your code and replace it with the following:
-
-```js
-if (message.content === '!ping') {
- // send back "Pong." to the channel the message was sent in
- message.channel.send('Pong.');
-}
-```
-
-Restart your bot and then send `!ping` to a channel your bot has access to. If all goes well, you should see something like this:
-
-
-
- !ping
-
-
- Pong.
-
-
-
-You've successfully created your first Discord bot command! Exciting stuff, isn't it? This is only the beginning, so let's move on to making some more commands.
-
-## Resulting code
-
-
diff --git a/Ajuda/guide-master/guide/creating-your-bot/adding-more-commands.md b/Ajuda/guide-master/guide/creating-your-bot/adding-more-commands.md
deleted file mode 100644
index 83165c1..0000000
--- a/Ajuda/guide-master/guide/creating-your-bot/adding-more-commands.md
+++ /dev/null
@@ -1,173 +0,0 @@
-# Adding more commands
-
-::: tip
-This page is a follow-up and bases its code off of [the previous page](/creating-your-bot/configuration-files.md).
-:::
-
-A bot with nothing but a single command would be really boring, and you probably have a bunch of command ideas floating around in your head already, right? Let's begin, then.
-
-Here's what your message event should currently look like:
-
-```js
-client.on('message', message => {
- if (message.content === '!ping') {
- message.channel.send('Pong.');
- }
-});
-```
-
-Before doing anything else, make a property to store the prefix you've configured. Instead of `const config = ...`, you can use destructuring to extract the prefix variable from the config file, and the token as well while you're at it.
-
-```diff
-- const config = require('./config.json');
-+ const { prefix, token } = require('./config.json');
-```
-
-```diff
-- client.login(config.token);
-+ client.login(token);
-```
-
-From now on, if you change the prefix or token in your config.json file, it'll change in your bot file as well. You'll be using the prefix variable a lot soon.
-
-::: tip
-If you aren't familiar with some of this syntax, it may be because some of this is ES6 syntax. If it does confuse you, you should check out [this guide page](/additional-info/es6-syntax.md) before continuing.
-:::
-
-## Simple command structure
-
-You already have an if statement that checks messages for a ping/pong command. Adding other command checks is just as easy; just chain an `else if` to your existing condition.
-
-```js
-if (message.content === `${prefix}ping`) {
- message.channel.send('Pong.');
-} else if (message.content === `${prefix}beep`) {
- message.channel.send('Boop.');
-}
-```
-
-There are a few potential issues with this. For example, the ping command won't work if you send `!ping test`. It will only match `!ping` and nothing else. The same goes for the other command. If you want your commands to be more flexible, you can do the following:
-
-```js
-if (message.content.startsWith(`${prefix}ping`)) {
- message.channel.send('Pong.');
-} else if (message.content.startsWith(`${prefix}beep`)) {
- message.channel.send('Boop.');
-}
-```
-
-Now the ping command will trigger whenever the message _starts with_ `!ping`! Sometimes this is what you want, but other times, you may want to match only exactly `!ping` - it varies from case to case, so be mindful of what you need when creating commands.
-
-::: warning
-Be aware that this will also match `!pingpong`, `!pinguin`, and the like. This is not a huge problem for now, so don't worry; you'll see better ways to check for commands later.
-:::
-
-## Displaying real data
-
-Let's start displaying some real data. For now, we'll be displaying basic member/server info.
-
-### Server info command
-
-Make another if statement to check for commands using `server` as the command name. You've already interacted with the Message object via `message.channel.send()`. You get the message object, access the channel it was sent in, and send a message to it. Just like how `message.channel` gives you the message's _channel_, `message.guild` gives you the message's _server_.
-
-::: tip
-Servers are referred to as "guilds" in the Discord API and discord.js library. Whenever you see someone say "guild", they mean server.
-:::
-
-
-
-```js
-else if (message.content === `${prefix}server`) {
- message.channel.send(`This server's name is: ${message.guild.name}`);
-}
-```
-
-The code above would result in this:
-
-
-
- !server
-
-
- This server's name is: Discord Bot Tutorial
-
-
-
-If you want to expand upon that command and add some more info, here's an example of what you can do:
-
-
-
-```js
-else if (message.content === `${prefix}server`) {
- message.channel.send(`Server name: ${message.guild.name}\nTotal members: ${message.guild.memberCount}`);
-}
-```
-
-That would display both the server name _and_ the amount of members in it.
-
-
-
- !server
-
-
- Server name: Discord Bot Tutorial
- Total members: 3
-
-
-
-You can, of course, modify this to your liking. You may want to also display the date the server was created, or the server's region. You would do those in the same manner - use `message.guild.createdAt` or `message.guild.region`, respectively.
-
-::: tip
-Want a list of all the properties you can access and all the methods you can call on a server? Refer to [the discord.js documentation site](https://discord.js.org/#/docs/main/11.5.1/class/Guild)[the discord.js documentation site](https://discord.js.org/#/docs/main/master/class/Guild)!
-:::
-
-### Member info command
-
-Set up another if statement and use the command name `user-info`.
-
-
-
-```js
-else if (message.content === `${prefix}user-info`) {
- message.channel.send(`Your username: ${message.author.username}\nYour ID: ${message.author.id}`);
-}
-```
-
-This will display the message author's **username** (not nickname, if they have one set), as well as their user ID.
-
-
-
- !user-info
-
-
- Your username: User
- Your ID: 20833034795932416
-
-
-
-::: tip
-`message.author` refers to the user who sent the message. For a full list of all the properties and methods for the author object (a member of the `User` class), check out [the documentation page for it](https://discord.js.org/#/docs/main/11.5.1/class/User)[the documentation page for it](https://discord.js.org/#/docs/main/master/class/User).
-:::
-
-And there you have it! As you can see, it's quite simple to add additional commands.
-
-## The problem with `if`/`else if`
-
-If you don't plan to make more than 7 or 8 commands for your bot, then using an if/else if chain is perfectly fine; it's presumably a small project at that point, so you shouldn't need to spend too much time on it. However, this isn't the case for most of us.
-
-You probably want your bot to be feature-rich and easy to configure and develop, right? Using a giant if/else if chain won't let you achieve that, and will only hinder your development process. After you read up on [creating arguments](/creating-your-bot/commands-with-user-input.md), we'll be diving right into something called a "command handler" - code that makes handling commands easier and much more efficient.
-
-Before continuing, here's a small list of reasons why you shouldn't use if/else if chains for anything that's not a small project:
-
-* Takes longer to find a piece of code you want.
-* Easier to fall victim to [spaghetti code](https://en.wikipedia.org/wiki/Spaghetti_code).
-* Difficult to maintain as it grows.
-* Difficult to debug.
-* Difficult to organize.
-* General bad practice.
-
-In short, it's just not a good idea. But that's what this guide is for! Go ahead and read the next few pages to prevent these issues before they happen, learning new things along the way.
-
-## Resulting code
-
-
diff --git a/Ajuda/guide-master/guide/creating-your-bot/commands-with-user-input.md b/Ajuda/guide-master/guide/creating-your-bot/commands-with-user-input.md
deleted file mode 100644
index 1096658..0000000
--- a/Ajuda/guide-master/guide/creating-your-bot/commands-with-user-input.md
+++ /dev/null
@@ -1,402 +0,0 @@
-# Commands with user input (a.k.a. "arguments")
-
-::: tip
-This page is a follow-up and bases its code off of [the previous page](/creating-your-bot/adding-more-commands.md).
-:::
-
-Sometimes you'll want to determine the result of a command depending on user input. It's a very common case with a very simple solution. This section will teach you how to extract user input from a message and use it in your code. Generally, you'll hear other people refer to this as "arguments", and you should refer to them as that as well.
-
-## Basic arguments
-
-We'll actually be tackling 2 things at once here. Things will be explained along the way, so don't worry if you don't understand immediately.
-
-Go to your main bot file and find the `client.on('message', ...)` bit. Add the following block of code at the top of this event listeners callback function (the part we replaced with `...` here).
-
-```js
-// client.on('message', message => {
-if (!message.content.startsWith(prefix) || message.author.bot) return;
-
-const args = message.content.slice(prefix.length).split(' ');
-const command = args.shift().toLowerCase();
-// the rest of your code
-```
-
-1. If the message either doesn't start with the prefix or was sent by a bot, exit early.
-2. Create an `args` variable that slices off the prefix entirely and then splits it into an array by spaces.
-3. Create a `command` variable by calling `args.shift()`, which will take the first element in array and return it while also removing it from the original array (so that you don't have the command name string inside the `args` array).
-
-Hopefully that's a bit clearer, if there was any confusion. Let's create a quick command to check out the result of our new addition:
-
-
-
-```js
-// using the new `command` variable, this makes it easier to manage!
-// you can switch your other commands to this format as well
-else if (command === 'args-info') {
- if (!args.length) {
- return message.channel.send(`You didn't provide any arguments, ${message.author}!`);
- }
-
- message.channel.send(`Command name: ${command}\nArguments: ${args}`);
-}
-```
-
-If you try it out, you'll get something like this:
-
-
-
- !args-info here are my arguments
-
-
- Command name: args-info
- Arguments: here,are,my,arguments
-
-
-
-Looks good! Don't worry about the comma separation; that's the expected output when trying to send an array as a string.
-
-Now that you have an array of arguments, you can interact with it accordingly! Try out this small addition to the command:
-
-
-
-```js
-else if (command === 'args-info') {
- if (!args.length) {
- return message.channel.send(`You didn't provide any arguments, ${message.author}!`);
- }
- else if (args[0] === 'foo') {
- return message.channel.send('bar');
- }
-
- message.channel.send(`First argument: ${args[0]}`);
-}
-```
-
-So if the first argument provided is equal to "foo", then send back "bar". Otherwise, just send back the argument the user provided.
-
-
-
-### Caveats
-
-Currently, you're using `.split(' ')` to split the command arguments. However, there's actually a slight issue with this. As is, it'll split the string by each and every space. Well, what happens if someone accidentally (or even purposely) adds additional spaces? Here's what:
-
-
-
- !args-info here are my arguments
-
-
- Command name: args-info
- Arguments: here,,,,,are,,,,,my,,,,,,arguments
- Argument length: 20
-
-
-
-If you've never done something like this before, this probably isn't what you'd expect, right? Thankfully, there's a simple solution for this issue. The red line is what to remove, and the green line is what to replace it with.
-
-```diff
-- const args = message.content.slice(prefix.length).split(' ');
-+ const args = message.content.slice(prefix.length).split(/ +/);
-```
-
-
-
- !args-info here are my arguments
-
-
- Command name: args-info
- Arguments: here,are,my,arguments
- Argument length: 4
-
-
-
-Awesome! Nothing to worry in that regard about now. You're now using something called a "regular expression" (commonly referred to as "regex") to handle that small (but important) bug.
-
-## Common situations with arguments
-
-Here is where we'll be going over a few common situations where you'll want to make sure that an argument fits a certain criteria.
-
-## Mentions
-
-Using the example of a kick command, you most likely want it to allow the user to use the command and mention the person to kick, right? We won't actually be constructing the full kick command in this example, but here's how you can go about it:
-
-
-
-```js
-else if (command === 'kick') {
- // grab the "first" mentioned user from the message
- // this will return a `User` object, just like `message.author`
- const taggedUser = message.mentions.users.first();
-
- message.channel.send(`You wanted to kick: ${taggedUser.username}`);
-}
-```
-
-And as you can see, it works!
-
-
-
- !kick Tutorial Bot
-
-
- You wanted to kick: Tutorial Bot
-
-
-
-But what happens if you try to use the command without mentioning anybody? If you try it yourself, you'll notice that the bot doesn't respond (due to it crashing), and you should see something like this in your console:
-
-```
-message.channel.send(`You wanted to kick: ${taggedUser.username}`);
- ^
-
-TypeError: Cannot read property 'username' of undefined
-```
-
-That's because you're trying to access the `username` property of a user you didn't mention! Since `message.mentions.users` is a Collection and you're trying to call `.first()` on an empty Collection, it'll return `undefined`. You can add a quick sanity check above the `const taggedUser = ...` line to prevent this from happening.
-
-```js
-if (!message.mentions.users.size) {
- return message.reply('you need to tag a user in order to kick them!');
-}
-```
-
-::: tip
-If you're wondering what `message.reply()` does, it's just an alternative for `message.channel.send()` which also prepends a mention of the person who sent the message, unless used in a DM. It can be very useful for providing feedback!
-:::
-
-Since `message.mentions.users` is a Collection, it has a `.size` property. If no users are mentioned, it'll return 0 (which is a `falsy` value), meaning you can do `if (!value)` to check if it's falsy.
-
-If you try again, it should work as expected.
-
-
-
- !kick
-
-
- User, you need to tag a user to kick them!
-
-
- !kick Tutorial Bot
-
-
- You wanted to kick: Tutorial Bot
-
-
-
-### Working with multiple mentions
-
-Let's say you have some sort of `!avatar` command, where it'll display the avatar of all the mentioned users, or your own avatar if no users were mentioned. Focus on that 2nd part for now - how would you go about displaying your own avatar if no users were mentioned? Taking the snippet for the code you just used, you can do it just like this:
-
-
-
-
-
-```js
-else if (command === 'avatar') {
- if (!message.mentions.users.size) {
- return message.channel.send(`Your avatar: <${message.author.displayAvatarURL}>`);
- }
-
- // ...
-}
-```
-
-
-
-
-
-
-```js
-else if (command === 'avatar') {
- if (!message.mentions.users.size) {
- return message.channel.send(`Your avatar: <${message.author.displayAvatarURL()}>`);
- }
-
- // ...
-}
-```
-
-
-
-That part is simple; just recycle the if statement you used in the section above and displaying the link to your avatar.
-
-
-
-The next part is where it takes a turn - displaying the avatars of all the mentioned users. But it's simpler than you may think! `message.mentions.users` returns a Collection (as previously mentioned), which you can loop over in a number of different ways. You'll be using `.map()` to loop here, since it allows you to easily collect and store data in a variable in order to send 1 final message in the end, as opposed to multiple.
-
-
-
-
-
-```js
-else if (command === 'avatar') {
- if (!message.mentions.users.size) {
- return message.channel.send(`Your avatar: <${message.author.displayAvatarURL}>`);
- }
-
- const avatarList = message.mentions.users.map(user => {
- return `${user.username}'s avatar: <${user.displayAvatarURL}>`;
- });
-
- // send the entire array of strings as a message
- // by default, discord.js will `.join()` the array with `\n`
- message.channel.send(avatarList);
-}
-```
-
-
-
-
-
-
-```js
-else if (command === 'avatar') {
- if (!message.mentions.users.size) {
- return message.channel.send(`Your avatar: <${message.author.displayAvatarURL()}>`);
- }
-
- const avatarList = message.mentions.users.map(user => {
- return `${user.username}'s avatar: <${user.displayAvatarURL()}>`;
- });
-
- // send the entire array of strings as a message
- // by default, discord.js will `.join()` the array with `\n`
- message.channel.send(avatarList);
-}
-```
-
-
-
-And ta-da! You now have a list of avatar links of all the users you tagged.
-
-
-
-It does take up a lot of screen, but this is just an example command anyway.
-
-::: tip
-If you're looking for a more advanced way to handle mentions as arguments you can check out [this guide](/miscellaneous/parsing-mention-arguments.md).
-:::
-
-## Number ranges
-
-Sometimes you'll want users to give you input that ranges from X to Y, but nothing outside of that. Additionally, you want to make sure that they do give you an actual number and not random characters. A good example of this would be a `!prune` command, where it deletes X messages in the channel, depending on what the user inputs.
-
-The first step would be to check if the input they gave is an actual number.
-
-
-
-```js
-else if (command === 'prune') {
- const amount = parseInt(args[0]);
-
- if (isNaN(amount)) {
- return message.reply('that doesn\'t seem to be a valid number.');
- }
-
- // ...
-}
-```
-
-And if you test it, it should work as expected.
-
-
-
- !prune some-string
-
-
- User, that doesn't seem to be a valid number.
-
-
-
-So what you need to do next is check if the first argument is between X and Y. Following the idea of a prune command, you'll most likely want to use the `.bulkDelete()` method, which allows you to delete multiple messages in one fell swoop.
-
-With that being said, that method does have its limits: you can only delete a minimum of 2 and a maximum of 100 messages (at a time). Fortunately, there are a few ways to deal with that. One of those ways would be to just check the value of the `amount` variable, like so:
-
-```js
-if (isNaN(amount)) {
- return message.reply('that doesn\'t seem to be a valid number.');
-} else if (amount < 2 || amount > 100) {
- return message.reply('you need to input a number between 2 and 100.');
-}
-
-// ...
-```
-
-Now all that's left is to delete the messages! It's a simple single line of code:
-
-```js
-message.channel.bulkDelete(amount);
-```
-
-And you've got a working prune command! Create a test channel, send a few random messages, and test it out.
-
-### Caveats
-
-You should note that there are actually a few caveats with the `.bulkDelete()` method. The first would be the trying to delete messages older than 2 weeks, which would normally error. Here's an easy fix for that:
-
-```js
-message.channel.bulkDelete(amount, true);
-```
-
-The second parameter in the `.bulkDelete()` method will filter out messages older than 2 weeks if you give it a truthy value. So if there are 50 messages and 25 of them are older than 2 weeks, it'll only delete the first 25 without throwing an error. However, if all the messages you're trying to delete are older than 2 weeks, then it will still throw an error. Knowing this, you should catch that error by chaining a `.catch()`.
-
-```js
-message.channel.bulkDelete(amount, true).catch(err => {
- console.error(err);
- message.channel.send('there was an error trying to prune messages in this channel!');
-});
-```
-
-::: tip
-If you aren't familiar with the `.catch()` method, it's used to catch errors on Promises. Unsure what Promises are? Google around for more info!
-:::
-
-The other caveat with this is that the `!prune {number}` message you sent will also count towards the amount deleted. What this means is that if you send `!prune 2`, it'll delete that message and only one other. There are a couple ways around this, but we'll be taking the easiest route for the sake of the tutorial. Here are the edits to make to your current code:
-
-```diff
-- const amount = parseInt(args[0]);
-+ const amount = parseInt(args[0]) + 1;
-```
-
-```diff
-- else if (amount < 2 || amount > 100) {
-- return message.reply('you need to input a number between 2 and 100.');
-- }
-+ else if (amount <= 1 || amount > 100) {
-+ return message.reply('you need to input a number between 1 and 99.');
-+ }
-```
-
-## Resulting code
-
-
diff --git a/Ajuda/guide-master/guide/creating-your-bot/configuration-files.md b/Ajuda/guide-master/guide/creating-your-bot/configuration-files.md
deleted file mode 100644
index ad88b8a..0000000
--- a/Ajuda/guide-master/guide/creating-your-bot/configuration-files.md
+++ /dev/null
@@ -1,56 +0,0 @@
-# Configuration files
-
-::: tip
-This page is a follow-up and bases its code off of [the previous page](/creating-your-bot/).
-:::
-
-As you get deeper into development, you may need to interact with sensitive data or data that gets used in multiple locations, such as:
-
-* Database passwords
-* API keys
-* Command prefix(es)
-* A list of bot owner IDs
-
-Having that kind of data hard-coded in each of your files can be a bit bothersome and is less than ideal, to say the least. This is where configuration files come in - they're great for storing static data that can be easily updated in a single place.
-
-## Implementing your config file
-
-Go to your code editor and make a new file. Add in the code below and save it as `config.json`, in the same directory as your main bot file.
-
-```json
-{
- "prefix": "!",
- "token": "your-token-goes-here"
-}
-```
-
-Go back to your main bot file, locate the `const client = new Discord.Client()` line, and add this above it:
-
-```js
-const config = require('./config.json');
-```
-
-Next, copy your token from the `client.login('your-token-goes-here')` line and paste into the `config.json` file. Make sure to keep it between the double quotes.
-
-Now you can simply do `client.login(config.token)` to login! If you want to use a different prefix than `!`, you can change that as well.
-
-## Storing additional data
-
-As previously mentioned, you'll probably want to store more than just your token and prefix at one point or another. If you want to store more data, just add another key/value pair to the list!
-
-```json
-{
- "prefix": "!",
- "token": "your-token-goes-here",
- "meaning_of_life": 42,
- "passwords_array": ["please", "dont", "hack", "me"],
- "secret_passcodes": {
- "bank": 1234,
- "home": 4321
- }
-}
-```
-
-## Resulting code
-
-
diff --git a/Ajuda/guide-master/guide/images/18e2dwi.png b/Ajuda/guide-master/guide/images/18e2dwi.png
deleted file mode 100644
index 368684c..0000000
Binary files a/Ajuda/guide-master/guide/images/18e2dwi.png and /dev/null differ
diff --git a/Ajuda/guide-master/guide/images/1IWSJ1C.png b/Ajuda/guide-master/guide/images/1IWSJ1C.png
deleted file mode 100644
index 845a78e..0000000
Binary files a/Ajuda/guide-master/guide/images/1IWSJ1C.png and /dev/null differ
diff --git a/Ajuda/guide-master/guide/images/1ch98sm.png b/Ajuda/guide-master/guide/images/1ch98sm.png
deleted file mode 100644
index de71456..0000000
Binary files a/Ajuda/guide-master/guide/images/1ch98sm.png and /dev/null differ
diff --git a/Ajuda/guide-master/guide/images/2vsIPEP.png b/Ajuda/guide-master/guide/images/2vsIPEP.png
deleted file mode 100644
index 26f093c..0000000
Binary files a/Ajuda/guide-master/guide/images/2vsIPEP.png and /dev/null differ
diff --git a/Ajuda/guide-master/guide/images/3rLGb1s.png b/Ajuda/guide-master/guide/images/3rLGb1s.png
deleted file mode 100644
index f1bcda8..0000000
Binary files a/Ajuda/guide-master/guide/images/3rLGb1s.png and /dev/null differ
diff --git a/Ajuda/guide-master/guide/images/49jali8.png b/Ajuda/guide-master/guide/images/49jali8.png
deleted file mode 100644
index 1750ff9..0000000
Binary files a/Ajuda/guide-master/guide/images/49jali8.png and /dev/null differ
diff --git a/Ajuda/guide-master/guide/images/6qTlDW0.png b/Ajuda/guide-master/guide/images/6qTlDW0.png
deleted file mode 100644
index a7ec866..0000000
Binary files a/Ajuda/guide-master/guide/images/6qTlDW0.png and /dev/null differ
diff --git a/Ajuda/guide-master/guide/images/8CQvVRV.png b/Ajuda/guide-master/guide/images/8CQvVRV.png
deleted file mode 100644
index ce78fcf..0000000
Binary files a/Ajuda/guide-master/guide/images/8CQvVRV.png and /dev/null differ
diff --git a/Ajuda/guide-master/guide/images/9JfHooY.png b/Ajuda/guide-master/guide/images/9JfHooY.png
deleted file mode 100644
index 0c6fa65..0000000
Binary files a/Ajuda/guide-master/guide/images/9JfHooY.png and /dev/null differ
diff --git a/Ajuda/guide-master/guide/images/9fejia2.png b/Ajuda/guide-master/guide/images/9fejia2.png
deleted file mode 100644
index a24f454..0000000
Binary files a/Ajuda/guide-master/guide/images/9fejia2.png and /dev/null differ
diff --git a/Ajuda/guide-master/guide/images/A8l70bj.png b/Ajuda/guide-master/guide/images/A8l70bj.png
deleted file mode 100644
index 2a05eac..0000000
Binary files a/Ajuda/guide-master/guide/images/A8l70bj.png and /dev/null differ
diff --git a/Ajuda/guide-master/guide/images/BAUsjyg.png b/Ajuda/guide-master/guide/images/BAUsjyg.png
deleted file mode 100644
index 85d2c30..0000000
Binary files a/Ajuda/guide-master/guide/images/BAUsjyg.png and /dev/null differ
diff --git a/Ajuda/guide-master/guide/images/BbcuyJ6.png b/Ajuda/guide-master/guide/images/BbcuyJ6.png
deleted file mode 100644
index 50b1a28..0000000
Binary files a/Ajuda/guide-master/guide/images/BbcuyJ6.png and /dev/null differ
diff --git a/Ajuda/guide-master/guide/images/BmS09fY.png b/Ajuda/guide-master/guide/images/BmS09fY.png
deleted file mode 100644
index e2179e7..0000000
Binary files a/Ajuda/guide-master/guide/images/BmS09fY.png and /dev/null differ
diff --git a/Ajuda/guide-master/guide/images/DDzEgdZ.png b/Ajuda/guide-master/guide/images/DDzEgdZ.png
deleted file mode 100644
index 45dbfd7..0000000
Binary files a/Ajuda/guide-master/guide/images/DDzEgdZ.png and /dev/null differ
diff --git a/Ajuda/guide-master/guide/images/DFfdFw4.png b/Ajuda/guide-master/guide/images/DFfdFw4.png
deleted file mode 100644
index 9e0be8f..0000000
Binary files a/Ajuda/guide-master/guide/images/DFfdFw4.png and /dev/null differ
diff --git a/Ajuda/guide-master/guide/images/DgDVtcv.png b/Ajuda/guide-master/guide/images/DgDVtcv.png
deleted file mode 100644
index bd00c9d..0000000
Binary files a/Ajuda/guide-master/guide/images/DgDVtcv.png and /dev/null differ
diff --git a/Ajuda/guide-master/guide/images/E1CZqFT.png b/Ajuda/guide-master/guide/images/E1CZqFT.png
deleted file mode 100644
index a58a4c9..0000000
Binary files a/Ajuda/guide-master/guide/images/E1CZqFT.png and /dev/null differ
diff --git a/Ajuda/guide-master/guide/images/I2ruNRf.png b/Ajuda/guide-master/guide/images/I2ruNRf.png
deleted file mode 100644
index 98c55eb..0000000
Binary files a/Ajuda/guide-master/guide/images/I2ruNRf.png and /dev/null differ
diff --git a/Ajuda/guide-master/guide/images/Ja4Ywf4.png b/Ajuda/guide-master/guide/images/Ja4Ywf4.png
deleted file mode 100644
index 9771715..0000000
Binary files a/Ajuda/guide-master/guide/images/Ja4Ywf4.png and /dev/null differ
diff --git a/Ajuda/guide-master/guide/images/NKw7P2q.png b/Ajuda/guide-master/guide/images/NKw7P2q.png
deleted file mode 100644
index 2ccb69a..0000000
Binary files a/Ajuda/guide-master/guide/images/NKw7P2q.png and /dev/null differ
diff --git a/Ajuda/guide-master/guide/images/NUvOWqG.png b/Ajuda/guide-master/guide/images/NUvOWqG.png
deleted file mode 100644
index 05f202a..0000000
Binary files a/Ajuda/guide-master/guide/images/NUvOWqG.png and /dev/null differ
diff --git a/Ajuda/guide-master/guide/images/RMv88.png b/Ajuda/guide-master/guide/images/RMv88.png
deleted file mode 100644
index 591cd41..0000000
Binary files a/Ajuda/guide-master/guide/images/RMv88.png and /dev/null differ
diff --git a/Ajuda/guide-master/guide/images/UCndZMo.png b/Ajuda/guide-master/guide/images/UCndZMo.png
deleted file mode 100644
index b494f45..0000000
Binary files a/Ajuda/guide-master/guide/images/UCndZMo.png and /dev/null differ
diff --git a/Ajuda/guide-master/guide/images/branding/banner-alt-transparent.png b/Ajuda/guide-master/guide/images/branding/banner-alt-transparent.png
deleted file mode 100644
index f701860..0000000
Binary files a/Ajuda/guide-master/guide/images/branding/banner-alt-transparent.png and /dev/null differ
diff --git a/Ajuda/guide-master/guide/images/branding/banner-large.png b/Ajuda/guide-master/guide/images/branding/banner-large.png
deleted file mode 100644
index cca421f..0000000
Binary files a/Ajuda/guide-master/guide/images/branding/banner-large.png and /dev/null differ
diff --git a/Ajuda/guide-master/guide/images/branding/banner-small.png b/Ajuda/guide-master/guide/images/branding/banner-small.png
deleted file mode 100644
index 700f41c..0000000
Binary files a/Ajuda/guide-master/guide/images/branding/banner-small.png and /dev/null differ
diff --git a/Ajuda/guide-master/guide/images/branding/banner-transparent.png b/Ajuda/guide-master/guide/images/branding/banner-transparent.png
deleted file mode 100644
index 0243476..0000000
Binary files a/Ajuda/guide-master/guide/images/branding/banner-transparent.png and /dev/null differ
diff --git a/Ajuda/guide-master/guide/images/branding/banner.png b/Ajuda/guide-master/guide/images/branding/banner.png
deleted file mode 100644
index dd2cd92..0000000
Binary files a/Ajuda/guide-master/guide/images/branding/banner.png and /dev/null differ
diff --git a/Ajuda/guide-master/guide/images/branding/book-large.png b/Ajuda/guide-master/guide/images/branding/book-large.png
deleted file mode 100644
index 177d5fb..0000000
Binary files a/Ajuda/guide-master/guide/images/branding/book-large.png and /dev/null differ
diff --git a/Ajuda/guide-master/guide/images/branding/book-small.png b/Ajuda/guide-master/guide/images/branding/book-small.png
deleted file mode 100644
index 123bd61..0000000
Binary files a/Ajuda/guide-master/guide/images/branding/book-small.png and /dev/null differ
diff --git a/Ajuda/guide-master/guide/images/branding/book.png b/Ajuda/guide-master/guide/images/branding/book.png
deleted file mode 100644
index 3be4309..0000000
Binary files a/Ajuda/guide-master/guide/images/branding/book.png and /dev/null differ
diff --git a/Ajuda/guide-master/guide/images/branding/logo-alt-transparent.png b/Ajuda/guide-master/guide/images/branding/logo-alt-transparent.png
deleted file mode 100644
index a27fdf2..0000000
Binary files a/Ajuda/guide-master/guide/images/branding/logo-alt-transparent.png and /dev/null differ
diff --git a/Ajuda/guide-master/guide/images/branding/logo-large.png b/Ajuda/guide-master/guide/images/branding/logo-large.png
deleted file mode 100644
index b14ccb6..0000000
Binary files a/Ajuda/guide-master/guide/images/branding/logo-large.png and /dev/null differ
diff --git a/Ajuda/guide-master/guide/images/branding/logo-simple.png b/Ajuda/guide-master/guide/images/branding/logo-simple.png
deleted file mode 100644
index 4ca90e3..0000000
Binary files a/Ajuda/guide-master/guide/images/branding/logo-simple.png and /dev/null differ
diff --git a/Ajuda/guide-master/guide/images/branding/logo-small.png b/Ajuda/guide-master/guide/images/branding/logo-small.png
deleted file mode 100644
index c07f381..0000000
Binary files a/Ajuda/guide-master/guide/images/branding/logo-small.png and /dev/null differ
diff --git a/Ajuda/guide-master/guide/images/branding/logo-transparent.png b/Ajuda/guide-master/guide/images/branding/logo-transparent.png
deleted file mode 100644
index ad22a3b..0000000
Binary files a/Ajuda/guide-master/guide/images/branding/logo-transparent.png and /dev/null differ
diff --git a/Ajuda/guide-master/guide/images/branding/logo.png b/Ajuda/guide-master/guide/images/branding/logo.png
deleted file mode 100644
index ab75880..0000000
Binary files a/Ajuda/guide-master/guide/images/branding/logo.png and /dev/null differ
diff --git a/Ajuda/guide-master/guide/images/canvas.jpg b/Ajuda/guide-master/guide/images/canvas.jpg
deleted file mode 100644
index 9634bc0..0000000
Binary files a/Ajuda/guide-master/guide/images/canvas.jpg and /dev/null differ
diff --git a/Ajuda/guide-master/guide/images/chalk-red.png b/Ajuda/guide-master/guide/images/chalk-red.png
deleted file mode 100644
index 390876a..0000000
Binary files a/Ajuda/guide-master/guide/images/chalk-red.png and /dev/null differ
diff --git a/Ajuda/guide-master/guide/images/chalk-ugly.png b/Ajuda/guide-master/guide/images/chalk-ugly.png
deleted file mode 100644
index 39bb8a2..0000000
Binary files a/Ajuda/guide-master/guide/images/chalk-ugly.png and /dev/null differ
diff --git a/Ajuda/guide-master/guide/images/create-app.png b/Ajuda/guide-master/guide/images/create-app.png
deleted file mode 100644
index b00a4ac..0000000
Binary files a/Ajuda/guide-master/guide/images/create-app.png and /dev/null differ
diff --git a/Ajuda/guide-master/guide/images/create-bot.png b/Ajuda/guide-master/guide/images/create-bot.png
deleted file mode 100644
index 97ff9fb..0000000
Binary files a/Ajuda/guide-master/guide/images/create-bot.png and /dev/null differ
diff --git a/Ajuda/guide-master/guide/images/created-bot.png b/Ajuda/guide-master/guide/images/created-bot.png
deleted file mode 100644
index c7fe08a..0000000
Binary files a/Ajuda/guide-master/guide/images/created-bot.png and /dev/null differ
diff --git a/Ajuda/guide-master/guide/images/currency_er_diagram.svg b/Ajuda/guide-master/guide/images/currency_er_diagram.svg
deleted file mode 100644
index 13b0f3a..0000000
--- a/Ajuda/guide-master/guide/images/currency_er_diagram.svg
+++ /dev/null
@@ -1,2 +0,0 @@
-
-
diff --git a/Ajuda/guide-master/guide/images/discord-avatar-djs.png b/Ajuda/guide-master/guide/images/discord-avatar-djs.png
deleted file mode 100644
index 7f71f70..0000000
Binary files a/Ajuda/guide-master/guide/images/discord-avatar-djs.png and /dev/null differ
diff --git a/Ajuda/guide-master/guide/images/jnE3tVM.png b/Ajuda/guide-master/guide/images/jnE3tVM.png
deleted file mode 100644
index 0e1b602..0000000
Binary files a/Ajuda/guide-master/guide/images/jnE3tVM.png and /dev/null differ
diff --git a/Ajuda/guide-master/guide/images/ooaOAeu.png b/Ajuda/guide-master/guide/images/ooaOAeu.png
deleted file mode 100644
index 149cec8..0000000
Binary files a/Ajuda/guide-master/guide/images/ooaOAeu.png and /dev/null differ
diff --git a/Ajuda/guide-master/guide/images/qEIaiam.png b/Ajuda/guide-master/guide/images/qEIaiam.png
deleted file mode 100644
index fd02008..0000000
Binary files a/Ajuda/guide-master/guide/images/qEIaiam.png and /dev/null differ
diff --git a/Ajuda/guide-master/guide/images/qSCjlEB.png b/Ajuda/guide-master/guide/images/qSCjlEB.png
deleted file mode 100644
index 2b2020c..0000000
Binary files a/Ajuda/guide-master/guide/images/qSCjlEB.png and /dev/null differ
diff --git a/Ajuda/guide-master/guide/images/r6CiT3M.png b/Ajuda/guide-master/guide/images/r6CiT3M.png
deleted file mode 100644
index 20cf841..0000000
Binary files a/Ajuda/guide-master/guide/images/r6CiT3M.png and /dev/null differ
diff --git a/Ajuda/guide-master/guide/images/search.png b/Ajuda/guide-master/guide/images/search.png
deleted file mode 100644
index 2b1f733..0000000
Binary files a/Ajuda/guide-master/guide/images/search.png and /dev/null differ
diff --git a/Ajuda/guide-master/guide/images/send.png b/Ajuda/guide-master/guide/images/send.png
deleted file mode 100644
index 387e781..0000000
Binary files a/Ajuda/guide-master/guide/images/send.png and /dev/null differ
diff --git a/Ajuda/guide-master/guide/images/wallpaper.jpg b/Ajuda/guide-master/guide/images/wallpaper.jpg
deleted file mode 100644
index dda9156..0000000
Binary files a/Ajuda/guide-master/guide/images/wallpaper.jpg and /dev/null differ
diff --git a/Ajuda/guide-master/guide/images/winston.png b/Ajuda/guide-master/guide/images/winston.png
deleted file mode 100644
index 78596b5..0000000
Binary files a/Ajuda/guide-master/guide/images/winston.png and /dev/null differ
diff --git a/Ajuda/guide-master/guide/improving-dev-environment/package-json-scripts.md b/Ajuda/guide-master/guide/improving-dev-environment/package-json-scripts.md
deleted file mode 100644
index 56616e7..0000000
--- a/Ajuda/guide-master/guide/improving-dev-environment/package-json-scripts.md
+++ /dev/null
@@ -1,78 +0,0 @@
-# Setting up package.json scripts
-
-An easy way to run scripts like a script to start your bot, a script to lint your bot's files or whatever scripts you use, is by storing them in your `package.json` file. After you store these scripts in your `package.json` file, you can just type `npm run start` to start your bot, or `npm run lint` to lint your code for errors.
-
-## Getting started
-
-::: tip
-Before getting started, you'll need to have a `package.json` file. If you don't have a `package.json` file yet, you can run `npm init -y` in the console to generate one.
-:::
-
-If you haven't touched your `package.json` file yet (excluding installing dependencies), your `package.json` file should look similar to the following:
-
-```json
-{
- "name": "my-bot",
- "version": "1.0.0",
- "description": "A Discord bot!",
- "main": "index.js",
- "scripts": {
- "test": "echo \"Error: no test specified\" && exit 1"
- },
- "keywords": [],
- "author": "",
- "license": "ISC"
-}
-```
-
-Let's zoom in more. Below `main`, you'll see `scripts`. You can specify your scripts there. In this guide, we'll show how to start and lint your bot using a `package.json` script.
-
-## Adding your first script
-
-::: tip
-We'll assume you have finished the [creating your first bot](/creating-your-bot/) section of the guide. If you haven't, ensure to follow it first!
-:::
-
-Over at your `package.json` file, add the following line to the `scripts`:
-
-```json
-"start": "node ."
-```
-
-::: tip
-The `node .` script will run the file which you have specified at the `main` entry in your `package.json` file. If you don't have it set yet, make sure to set `main` to your bot's main file!
-:::
-
-Now, whenever you run the `npm run start` script in your bot's directory, it will run the `node .` command. Let's create another script to lint your code via the command line.
-
-::: tip
-If you do not have ESLint installed globally, you can use [npx](https://alligator.io/workflow/npx/) to run the ESLint script for your local directory. For more info on how to set it up, you can read the site [here](https://alligator.io/workflow/npx/).
-:::
-Add the following line to your scripts:
-
-```json
-"lint": "eslint ."
-```
-
-Now, whenever you run the `npm run lint` script, ESLint will lint your `index.js` file.
-
-Your `package.json` file should now look similar to the following:
-
-```json
-{
- "name": "my-bot",
- "version": "1.0.0",
- "description": "A Discord bot!",
- "main": "index.js",
- "scripts": {
- "test": "echo \"Error: no test specified\" && exit 1",
- "start": "node .",
- "lint": "eslint ."
- },
- "keywords": [],
- "author": "",
- "license": "ISC"
-}
-```
-
-And that's it! You can always add more scripts now, being able to run them with `npm run script-name`.
diff --git a/Ajuda/guide-master/guide/improving-dev-environment/pm2.md b/Ajuda/guide-master/guide/improving-dev-environment/pm2.md
deleted file mode 100644
index 2406c28..0000000
--- a/Ajuda/guide-master/guide/improving-dev-environment/pm2.md
+++ /dev/null
@@ -1,114 +0,0 @@
-# Managing your bot process with PM2
-
-PM2 is a process manager. It manages your applications' states, so you can start, stop, restart and delete processes. It offers features such as monitoring running processes and setting up a "start with operating system" (be that Windows, Linux or Mac) so your processes start when you boot your system.
-
-## Installation
-
-You can install PM2 via npm:
-
-```bash
-npm install --global pm2
-```
-
-Or, if you use Yarn:
-
-```bash
-yarn global add pm2
-```
-
-## Starting your app
-
-After PM2 has been installed, the easiest way you can start your app is by going to the directory your bot is in, and then run the following:
-
-```bash
-pm2 start your-app-name.js
-```
-
-### Additional notes
-
-The `pm2 start` script allows for more optional command-line arguments.
-
-- `--name`: This allows you to set the name of your process when listing it up with `pm2 list` or `pm2 monit`:
-
-```bash
-pm2 start your-app-name.js --name "Some cool name"
-```
-
-- `--watch`: This option will automatically restart your process as soon as a file change has been detected, which can be useful for development environments:
-
-```bash
-pm2 start your-app-name.js --watch
-```
-
-::: tip
-The `pm2 start` command can take more optional parameters, but for now only these 2 are relevant for us. If you want to see all the parameters available, you can check the documentation of pm2 [here](https://pm2.io/doc/en/runtime/reference/pm2-cli/).
-:::
-
-Once the process is launched with pm2, you can run `pm2 monit` to monitor any and all console outputs from the processes started by pm2. This accounts for any `console.log()` in your code or outputted errors.
-
-## Setting up booting with your system
-
-Perhaps one of the more useful features of PM2 is being able to boot up with your Operating System. This will ensure that your bot processes will always be started after an (unexpected) reboot (e.g. after a power outage).
-
-The initial steps to run differ per OS. In this guide, we'll cover those for Windows and for Linux/MacOS.
-
-### Initial steps for Windows
-
-::: tip
-Run these from an administrative command prompt to avoid getting hit with a bunch of UAC dialogs.
-:::
-
-**Install the [pm2-windows-service](https://www.npmjs.com/package/pm2-windows-service) package from npm:**
-
-```bash
-npm install --global pm2-windows-service
-```
-
-**After installation has finished, install the service by running the following command:**
-
-```bash
-pm2-service-install
-```
-::: tip
-You can use the `-n` parameter to set the service name: `pm2-service-install -n "the-service-name"`
-:::
-
-### Initial steps for Linux/MacOS
-
-You need to get a start script, which you can get by running the following command:
-
-```bash
-# Detects the available init system, generates the config and enables startup system
-pm2 startup
-```
-
-Or, if you want to manually specify your machine select one of the options with the command:
-
-```bash
-pm2 startup [ubuntu | ubuntu14 | ubuntu12 | centos | centos6 | arch | oracle | amazon | macos | darwin | freesd | systemd | systemv | upstart | launchd | rcd | openrc]
-```
-
-The output of running one of the commands listed above will output a command for you to run with all environment variables and options configured for you.
-
-**Example output for an Ubuntu user:**
-
-```bash
-[PM2] You have to run this command as root. Execute the following command:
- sudo su -c "env PATH=$PATH:/home/user/.nvm/versions/node/v8.9/bin pm2 startup ubuntu -u user --hp /home/user
-```
-
-After running that command, you can continue to the next step.
-
-### Saving the current process list
-
-To save the current process list so it will automatically get started after a restart, run the following command:
-
-```bash
-pm2 save
-```
-
-To disable this, you can run the following command:
-
-```bash
-pm2 unstartup
-```
diff --git a/Ajuda/guide-master/guide/keyv/README.md b/Ajuda/guide-master/guide/keyv/README.md
deleted file mode 100644
index 7b62fd1..0000000
--- a/Ajuda/guide-master/guide/keyv/README.md
+++ /dev/null
@@ -1,164 +0,0 @@
-# Storing data with Keyv
-
-[Keyv](https://github.com/lukechilds/keyv) is a simple key-value store that works with multiple backends. It's fully scalable for [sharding](/sharding/) and supports JSON storage.
-
-## Installation
-
-```bash
-npm install --save keyv
-```
-
-Keyv requires an additional package depending on which persistent backend you would prefer to use. If you want to keep everything in memory, you can skip this part. Otherwise, install one of the below.
-
-```bash
-npm install --save @keyv/redis
-npm install --save @keyv/mongo
-npm install --save @keyv/sqlite
-npm install --save @keyv/postgres
-npm install --save @keyv/mysql
-```
-
-Now that Keyv and any necessary drivers are installed, create an instance of Keyv.
-
-
-```js
-const Keyv = require('keyv');
-
-// One of the following
-const keyv = new Keyv(); // for in-memory storage
-const keyv = new Keyv('redis://user:pass@localhost:6379');
-const keyv = new Keyv('mongodb://user:pass@localhost:27017/dbname');
-const keyv = new Keyv('sqlite://path/to/database.sqlite');
-const keyv = new Keyv('postgresql://user:pass@localhost:5432/dbname');
-const keyv = new Keyv('mysql://user:pass@localhost:3306/dbname');
-```
-
-Make sure to handle connection errors.
-
-```js
-keyv.on('error', err => console.error('Keyv connection error:', err));
-```
-
-For more detailed setup, check out the [Keyv readme](https://github.com/lukechilds/keyv/blob/master/README.md).
-
-## Usage
-
-Keyv exposes a familiar [Map](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map)-like API. However, it only has `set`, `get`, `delete`, and `clear` methods. Additionally, instead of immediately returning data, these methods return [Promises](/additional-info/async-await.md) that resolve with the data.
-
-```js
-(async () => {
- // true
- await keyv.set('foo', 'bar');
-
- // bar
- await keyv.get('foo');
-
- // undefined
- await keyv.clear();
-
- // undefined
- await keyv.get('foo');
-})();
-```
-
-## Application
-
-Although Keyv can be used in any scenario where you need key-value data, we will focus on setting up a per-guild prefix configuration using Sqlite.
-
-::: tip
-This section will still work with any provider supported by Keyv. We recommend PostgreSQL for larger applications.
-:::
-
-### Setup
-
-```js
-const Discord = require('discord.js');
-const Keyv = require('keyv');
-
-const client = new Discord.Client();
-const prefixes = new Keyv('sqlite://path/to.sqlite');
-const globalPrefix = '.';
-```
-
-### Command handler
-
-This guide uses a very basic command handler with some added complexity to allow for multiple prefixes. For more a more robust command handler, look at the [command handling](/command-handling/) guide.
-
-```js
-client.on('message', async message => {
- if (message.author.bot) return;
-
- let args;
- // handle messages in a guild
- if (message.guild) {
- let prefix;
-
- if (message.content.startsWith(globalPrefix)) {
- prefix = globalPrefix;
- } else {
- // check the guild-level prefix
- const guildPrefix = await prefixes.get(message.guild.id);
- if (message.content.startsWith(guildPrefix)) prefix = guildPrefix;
- }
-
- // if we found a prefix, setup args; otherwise, this isn't a command
- if (!prefix) return;
- args = message.content.slice(prefix.length).split(/\s+/);
- } else {
- // handle DMs
- const slice = message.content.startsWith(globalPrefix) ? globalPrefix.length : 0;
- args = message.content.slice(slice).split(/\s+/);
- }
-
- // get the first space-delimited argument after the prefix as the command
- const command = args.shift().toLowerCase();
-});
-```
-
-### Prefix command
-
-Now that you have a command handler, make a command to allow people to use your prefix system.
-
-
-```js
-if (command === 'prefix') {
- // if there's at least one argument, set the prefix
- if (args.length) {
- await prefixes.set(message.guild.id, args[0]);
- return message.channel.send(`Successfully set prefix to \`${args[0]}\``);
- }
-
- return message.channel.send(`Prefix is \`${await prefixes.get(message.guild.id) || globalPrefix}\``);
-}
-```
-
-You will probably want to setup additional validation such as required permissions and maximum prefix length.
-
-### Usage
-
-
-
- .prefix
-
-
- Prefix is `.`
-
-
- .prefix $
-
-
- Successfully set prefix to `$`
-
-
- $prefix
-
-
- Prefix is `$`
-
-
-
-## Next steps
-
-Keyv can be used in a variety of other applications, such as guild settings; simply create another instance with a different [namespace](https://github.com/lukechilds/keyv#namespaces) for each setting. Additionally, it can be [extended](https://github.com/lukechilds/keyv#third-party-storage-adapters) to work with whatever storage backend you prefer.
-
-Check out the [Keyv repository](https://github.com/lukechilds/keyv) for more information.
diff --git a/Ajuda/guide-master/guide/miscellaneous/parsing-mention-arguments.md b/Ajuda/guide-master/guide/miscellaneous/parsing-mention-arguments.md
deleted file mode 100644
index 7b5ed07..0000000
--- a/Ajuda/guide-master/guide/miscellaneous/parsing-mention-arguments.md
+++ /dev/null
@@ -1,198 +0,0 @@
-# Parsing mention arguments
-
-In a previous chapter you learned how to build commands with user input, you also learned how to use *mentions* as user input.
-However, using `message.mentions` can lead to a few problems.
-For example you do not really know which mention belongs to which argument.
-Or if you are splitting the message's content by spaces to get the args,
-then the mentions will still take up space in your args array which can mess up the rest of your args parsing if you are not careful.
-
-Say you are writing a bot for moderating your server. Obviously you will want a kick or a ban command which allows you to mention the person you are trying to ban.
-But what happens if you try to use the command like this?
-
-```
-!ban @Offender Because he was rude to @Victim
-```
-
-You might expect it to ban @Offender, because that is who you mentioned first.
-However, the Discord API does not send the mentions in the order they appear; They are sorted by their ID instead.
-
-If the @Victim happens to have joined Discord before @Offender and thus has a smaller ID he might get banned instead.
-Or maybe someone uses a command incorrectly, the bot might still accept it but it will create an unexpected outcome.
-Say someone accidentally used the ban command like this:
-
-```
-!ban Because he was rude to @Victim
-```
-
-The bot will still ban someone, but it will be the @Victim again. `message.mentions.users` still contains a mention, which the bot will use. But in reality you would want your bot to be able to tell the user he used the command incorrectly.
-
-## How Discord mentions work
-
-Discord uses a special syntax to embed mentions in a message. For user mentions it is the user's ID with `<@` at the start and `>` at the end, like this: `<@86890631690977280>`. If they have a nickname there will also be a be a `!` after the `@`.
-Role mentions and channel mentions work similarly. Role mentions look like `<@&134362454976102401>` and channel mentions like `<#222197033908436994>`.
-
-That means when you receive a message from the Discord API and it contains mentions the message's content will contain that special syntax.
-If you send
-
-
-
- I think we should add GoodPerson to the Mod role.
-
-
-
-then the `message.content` for that message will look something like this
-
-
-```js
-'I think we should add <@86890631690977280> to the <@&134362454976102401> role.'
-```
-
-## Implementation
-
-So, how do you actually use this new information for your bot?
-Most of your code will not change, however instead of using `message.mentions` to find the mentioned users you will have to do it manually.
-This may sound scary at first, but once you see the code you will see it is actually pretty simple.
-
-Say you already have a simple command handler like this:
-
-```js
-client.on('message', message => {
- if (!message.content.startsWith(config.prefix)) return;
-
- const withoutPrefix = message.content.slice(config.prefix.length);
- const split = withoutPrefix.split(/ +/);
- const command = split[0];
- const args = split.slice(1);
-});
-```
-
-Now you can easily test the waters by upgrading the avatar command from [last time](/creating-your-bot/commands-with-user-input.md).
-This is what we have so far. It is pretty simple, it will show the avatar of who used the command.
-
-```js
-if (command === 'avatar') {
- const user = message.author;
-
- return message.channel.send(`${user.username}'s avatar: ${user.displayAvatarURL}`);
-}
-```
-
-But how do you actually get the correct user now? Well, this requires a few simple steps.
-Putting it into a function will make it easily reusable. We will use the name `getUserFromMention` here.
-
-```js
-function getUserFromMention(mention) {
- if (!mention) return;
-
- if (mention.startsWith('<@') && mention.endsWith('>')) {
- mention = mention.slice(2, -1);
-
- if (mention.startsWith('!')) {
- mention = mention.slice(1);
- }
-
- return client.users.get(mention);
- }
-}
-```
-
-As you can see it is a fairly straight forward function.
-It essentially just works itself through the structure of the mention bit by bit:
- 1. Check if the mention starts with the `<@` and ends with a `>` and then remove those.
- 2. If the user has a nickname and their mention contains a `!` remove that as well.
- 3. Only the ID should be left now, so use that to fetch the user from the `client.users` Collection.
-Whenever it encounters an error with the mention (i.e. invalid structure) it simply returns `undefined` to signal the mention is invalid.
-
-::: tip
-The `.slice()` method is used in a more advance way here. You can read the [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/slice) for more info.
-:::
-
-Now you have a nifty function you can use whenever you need to convert a raw mention into a proper user object.
-Plugging it into the command will give you this:
-
-```js
-if (command === 'avatar') {
- if (args[0]) {
- const user = getUserFromMention(args[0]);
- if (!user) {
- return message.reply('Please use a proper mention if you want to see someone else\'s avatar.');
- }
-
- return message.channel.send(`${user.username}'s avatar: ${user.displayAvatarURL}`);
- }
-
- return message.channel.send(`${message.author.username}, your avatar: ${message.author.displayAvatarURL}`);
-}
-```
-
-And here we simply plug the new function into the command.
-If the user supplied an argument it should be the user mention, so it just gets passed right into the function.
-
-And that is it! Simple, isn't it? Start up your bot and see if it works.
-
-
-
-So now, instead of using `message.mentions` you can use your new, fantastic function.
-This will allow you to add proper checks for all your args, so that you can tell when a command was used correctly and when it was used incorrectly.
-
-But this does not mark the end of the page. If you feel adventurous you can read on and learn how to use Regular Expressions to easily convert a mention into a user object in just two lines.
-
-### Using Regular Expressions
-
-Previously you learn how to use rudimentary string related functions to turn the special mention syntax Discord uses into a proper discord.js User object.
-But using Regular Expressions (aka "RegEx" or "RegExp"), you can condense all that logic into a single line! Crazy, right?
-
-If you have never worked with Regular Expressions before, this might seem daunting. But in fact, you already have used regular expressions. Remember `withoutPrefix.split(/ +/);`? This little `/ +/` is actually a Regular Expression. The `/` on either side tell JavaScript where the Regular Expression begins and where it ends, the stuff inbetween is it is content.
-
-::: tip
-For a more detailed explanation please consult the [MDN's documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp).
-:::
-
-The RegEx you will use for user mentions will look like this: `/^<@!?(\d+)>$/`.
-Here is how the RegEx works:
-
- 1. The `^` at the beginning and the `$` at the end mean that the mention has to take up the entire string.
- 2. You have the typical `<@` and `>` at the beginning and end.
- 3. The `?` after the `!` indicates that the `!` is optional.
- 4. `\d+` means the RegEx will look for multiple digits, which will be the ID.
- 5. The parentheses around the `\d+` create a capture group, which allows us to get the ID out of the mention.
-
-Using the `.match()` method on strings you can get the values of the capture group, i.e., the ID of the mention.
-
-::: warning
-Discord.js has [built-in patterns](https://discord.js.org/#/docs/main/11.5.1/class/MessageMentions?scrollTo=s-CHANNELS_PATTERN)[built-in patterns](https://discord.js.org/#/docs/main/master/class/MessageMentions?scrollTo=s-CHANNELS_PATTERN)
-for matching mentions, however as of version 11.4 they do not contain any groups
-and thus aren't useful for actually getting the ID out of the mention.
-:::
-
-Updating your `getUserFromMention` function to use RegEx gives you this:
-
-```js
-function getUserFromMention(mention) {
- // The id is the first and only match found by the RegEx.
- const matches = mention.match(/^<@!?(\d+)>$/);
-
- // If supplied variable was not a mention, matches will be null instead of an array.
- if (!matches) return;
-
- // However the first element in the matches array will be the entire mention, not just the ID,
- // so use index 1.
- const id = matches[1];
-
- return client.users.get(id);
-}
-```
-
-See? That is *much* shorter, and not that complicated.
-If you run your bot again now everything should still work the same.
-
-## Resulting code
-
-
diff --git a/Ajuda/guide-master/guide/miscellaneous/useful-packages.md b/Ajuda/guide-master/guide/miscellaneous/useful-packages.md
deleted file mode 100644
index 4c6e2a3..0000000
--- a/Ajuda/guide-master/guide/miscellaneous/useful-packages.md
+++ /dev/null
@@ -1,189 +0,0 @@
-# Useful packages
-
-## moment.js
-
-::: tip
-Official documentation: https://momentjs.com/docs/
-:::
-
-Moment is a powerful package for working with dates in JavaScript.
-It allows you to quickly and easily format dates in any way you want or parse strings back into JavaScript Date objects.
-There are even some extensions for it to allow you work with durations and more.
-
-For example if you wanted to ask your users to give you a date,
-you can use moment to turn it in a Date object you can use in your code:
-
-
-```js
-const input = await message.channel.awaitMessages(m => m.author.id === message.author.id, {
- max: 4,
- time: 10e3,
- errors: ['time'],
-});
-const date = moment(input.first().content);
-```
-
-Using the "moment-duration-format" extension we could tell the user how many days in the future or past the date is:
-
-```js
-if (date.isValid()) {
- const now = moment();
- const duration = date - now;
- const formatted = moment.duration(duration, 'ms').format();
-
- if (duration > 0) {
- message.channel.send(`The date you gave me is ${formatted} into the future.`);
- } else {
- message.channel.send(`The date you gave me is ${formatted} into the past.`);
- }
-} else {
- message.channel.send('You didn\'t give me a valid date.');
-}
-```
-
-## ms
-
-::: tip
-Official documentation: https://github.com/zeit/ms
-:::
-
-Ms is another tool for working with times in JavaScript. However, ms specializes on durations.
-It allows you to convert times in milliseconds into human readable formats, and vice versa.
-
-Example:
-
-
-```js
-await message.channel.send('Send two messages and I\'ll tell you how far apart you sent them.');
-const messages = await message.channel.awaitMessages(m => m.author.id === message.author.id. {
- max: 2,
- time: 30e3,
- errors: ['time'],
-});
-
-const difference = messages.last().createdTimestamp - messages.first().createdTimestamp;
-const formatted = ms(difference);
-
-message.channel.send(`You sent the two messages ${formatted} apart.`);
-```
-
-## common-tags
-
-::: tip
-Official documentation: https://github.com/declandewet/common-tags
-:::
-
-Common-tags is a library all about working with template literals.
-So far you have probably only used them for interpolating variables into your strings, but they can do a whole lot more.
-If you got time, you should check out [the MDN's documentation about *tagged literals*.](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals#Tagged_templates).
-
-Ever got annoyed your multi-line strings had nasty bits of indentation in them,
-but you did not want to remove the indentation in your source code?
-common-tags got you covered:
-
-```js
-const packageName = 'common-tags';
-
-if (someCondition) {
- const poem = stripIndents`
- I like ${packageName}.
- It makes my strings so pretty,
- you should use it too.
- `;
-
- console.log(poem);
-}
-```
-
-This will print your little poem like expected, but it will not have any tabs or other whitespace on the left.
-
-But this is just the start! Another set of useful functions are the list-related functions:
-`inlineLists`, `commaLists`, etc.
-With those you can easily interpolate arrays into your strings without them looking ugly:
-
-```js
-const options = ['add', 'delete', 'edit'];
-
-// -> Do you want me to add, delete or edit the channel?
-message.channel.send(oneLineCommaListsOr`
- Do you want me to ${options} the channel?
-`);
-```
-
-Check the the documentation to find more useful functions.
-
-## chalk
-
-::: tip
-Official documentation: https://www.npmjs.com/package/chalk
-:::
-
-Chalk is not exactly useful for Discord bots themselves, but it will make your terminal output a lot prettier and organized.
-This package lets you color and style your `console.log`s in many, many different ways; No more simple white on black.
-
-Let's say you want your error messages to be easily visible; Let us give them a nice red color:
-
-```js
-console.log(chalk.redBright('FATAL ERROR'), 'Something really bad happened!');
-```
-
-
-
-You can also chain multiple different multipliers.
-If you wanted to have green text, a grey background and have it all underlined that is absolutely possible:
-
-```js
-console.log(chalk.green.bgBrightBlack.underline('This is so pretty.'));
-```
-
-
-
-## winston
-
-::: tip
-Official documentation: https://github.com/winstonjs/winston
-:::
-
-Winston is "a logger for just about everything".
-You can log to the terminal, you can log to a file, etc.
-"But wait," I hear you cry, "what's wrong with `console.log`?".
-Well, the answer is simple: `console.log` is slow, very slow, and not very versatile.
-Whenver you make a call to `console.log` your program halts, it has to wait for console.log to finish.
-While it does that your program can do nothing else. That does not sound very good, does it?
-Well, that is exactly what winston is for.
-
-Winston is fast and highly configurable. It has different log levels for all your needs, it can log to files, the terminal, etc.
-Like moment.js it also has extension packages. So if there is something you feel is missing you can probably find one that fits your needs.
-
-Now, there really are *a lot* of options, so it is recommended you take a look at the docs yourself.
-But let us get a quick overview of what it can do:
-
-```js
-const client = new Discord.Client();
-const logger = winston.createLogger({
- transports: [
- new winston.transports.Console(),
- new winston.transports.File({ filename: 'log' }),
- ],
- format: winston.format.printf(log => `[${log.level.toUpperCase()}] - ${log.message}`),
-});
-
-client.on('ready', () => logger.log('info', 'The bot is online!'));
-client.on('debug', m => logger.log('debug', m));
-client.on('warn', m => logger.log('warn', m));
-client.on('error', m => logger.log('error', m));
-
-process.on('uncaughtException', error => logger.log('error', error));
-
-client.login('token');
-```
-
-The above code creates a simple logger which will log to both the console and a file called "log" (defined by the `transports` options).
-The `format` option tells the logger which format to use for the messages, by default it outputs JSON objects.
-While useful, JSON is not very readable, so we are defining a custom format which just displays the log level in all caps alongside the message.
-If you wanted to you could also use the chalk module to make the logger's format a bit prettier by applying colors, etc.
-
-
-
-Winston is not the only logging library out there though, so if you are not convinced you should google around a bit and
-you should find something you will like.
diff --git a/Ajuda/guide-master/guide/oauth2/README.md b/Ajuda/guide-master/guide/oauth2/README.md
deleted file mode 100644
index 8e1ef46..0000000
--- a/Ajuda/guide-master/guide/oauth2/README.md
+++ /dev/null
@@ -1,261 +0,0 @@
-# Getting started with OAuth2
-
-OAuth2 enables application developers to build applications that utilize authentication and data from the Discord API. This can be used to create things such as web dashboard to display user info, fetch linked third-party accounts like Twitch or Steam, access users' guild information without actually being in the guild, and much more. OAuth2 can greatly extend the functionality of your bot if used correctly.
-
-## A quick example
-
-### Setting up a basic web server
-
-Most of the time, OAuth2 is used in websites to get information about its users from an external service. In this example, you will use Node.js' built-in `http` module to create a web server to use a user's Discord information to greet them. First, create a file named `index.js` which will be used to start the server.
-
-```js
-const http = require('http');
-const fs = require('fs');
-const port = 53134;
-
-http.createServer((req, res) => {
- let responseCode = 404;
- let content = '404 Error';
-
- if (req.url === '/') {
- responseCode = 200;
- content = fs.readFileSync('./index.html');
- }
-
- res.writeHead(responseCode, {
- 'content-type': 'text/html;charset=utf-8',
- });
-
- res.write(content);
- res.end();
-})
- .listen(port);
-```
-
-Right now, you have designated that the contents of an `index.html` file will be served to the user when they visit the root domain, so create an `index.html` file in the same directory with the following contents.
-
-```html
-
-
-
- My First OAuth2 App
-
-
-
- Hoi!
-
-
-
-```
-
-You can start your server with `node index.js`. Once you start it, try connecting to http://localhost:53134 and you should see "Hoi!".
-
-### Getting an OAuth2 url
-
-Now that you have your web server up and running, it's time to get some information from Discord. Head over to [your Discord applications](https://discordapp.com/developers/applications/) and click "Create an application", where you'll be greeted with the following page:
-
-
-
-Take note of the `client id` field, the `client secret` field, and the "OAuth2" link on the left side of the page. For now, click on "OAuth2" and add a redirect url to `http://localhost:53134` like so:
-
-
-
-Once you've added your redirect url, you will want to generate an OAuth2 url. Lower down on the page, you can conveniently find an OAuth2 Url Generator provided by Discord. Use this to generate a url for yourself with the `identify` scope.
-
-
-
-The `identify` scope will allow your application to get basic user information from Discord. A list of all scopes can be found [here](https://discordapp.com/developers/docs/topics/oauth2#shared-resources-oauth2-scopes).
-
-### Putting it together
-
-You have your website, and you have a url. Now you need to use those two things to get an access token. For basic applications like [SPAs](https://en.wikipedia.org/wiki/Single-page_application), getting an access token directly is enough to work with. If you want to do this, make sure the `response_type` in the url is `token`. However, this means you will not get a refresh token, which means the user will have to explicitly re-authorize when this access token has expired.
-
-After you change the response type, you can test the url right away. Try visiting it in your browser and you will be directed to a page that looks like this.
-
-
-
-You can see that by clicking `Authorize`, you are allowing the application to access your username and avatar. Once you click through, you should be redirected to the redirect url with a [fragment identifier](https://en.wikipedia.org/wiki/Fragment_identifier) appended to it. You now have an access token and can make requests to Discord's API to get information on the user. Modify `index.html` to add your OAuth2 url and to take advantage of the access token if it exists. Even though [`URLSearchParams`](https://developer.mozilla.org/en-US/docs/Web/API/URLSearchParams) is for working with query strings, it can work here because the structure of the fragment follows that of a query string after removing the leading "#".
-
-```html
-
-
-
- My First OAuth2 App
-
-
-
- Hoi!
-
- Identify Yourself
-
-
-
-```
-
-Here you just grab the access token and type from the url if it's there and use it to get info on the user, which is then used to greet them. In the following sections, we'll go over various details of Discord and OAuth2.
-
-## More details
-
-### The state parameter
-
-OAuth2's protocols provide a `state` parameter which is supported by Discord. This is used to help prevent [CSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery) attacks and can also be used to represent the state of your application. This should be generated per user and appended to the OAuth2 url. For a very basic example, you can use a randomly generated string encoded in Base64 as the state parameter.
-
-```js
-function generateRandomString() {
- const rand = Math.floor(Math.random() * 10);
- let randStr = '';
-
- for (let i = 0; i < 20 + rand; i++) {
- randStr += String.fromCharCode(33 + Math.floor(Math.random() * 94));
- }
-
- return randStr;
-}
-
-// ...
-
-// generate and store the string
-const randStr = generateRandomString();
-localStorage.setItem('stateParameter', randStr);
-
-document.getElementById('login').href += `&state=${btoa(randStr)}`;
-```
-
-When you visit a url with a `state` parameter appended to it and then click `Authorize`, you'll notice that after being redirected, the url will also have the `state` parameter appended to it, which you should then check against what was stored. You can modify the script in your `index.html` file to handle this.
-
-```js
-const fragment = new URLSearchParams(window.location.hash.slice(1));
-
-if (fragment.has('access_token')) {
- const urlState = fragment.get('state');
- const stateParameter = localStorage.getItem('stateParameter');
- if (stateParameter !== atob(decodeURIComponent(urlState))) {
- return console.log('You may have been clickjacked!');
- }
-}
-```
-
-::: tip
-Don't forgo security for a tiny bit of convenience!
-:::
-
-### OAuth2 flows
-
-What you did in the quick example was go through the `implicit grant` flow, which passed the access token straight to the user's browser. This is great and simple, but you don't get to refresh the token without the user and it is less secure than going through the `authorization code grant`. This involves recieving an access code, which is then exchanged by your server for an access token. Notice that this way, the access token never actually reaches the user throughout the process.
-
-#### Authorization code grant
-
-Unlike the quick example, you need an OAuth2 url where the `response_type` is `code`. Once you've obtained it, try visiting the link and authorizing your application. You should notice that instead of a hash, the redirect url now has a single query parameter appended to it like `?code=ACCESS_CODE`. Modify your `index.js` file to pull the parameter out of the url if it exists. You can use the `url` module to do this for us.
-
-```js
-const url = require('url');
-
-// ...
-
-const urlObj = url.parse(req.url, true);
-
-if (urlObj.query.code) {
- const accessCode = urlObj.query.code;
- console.log(`The access code is: ${accessCode}`);
-}
-
-if (urlObj.pathname === '/') {
- responseCode = 200;
- content = fs.readFileSync('./index.html');
-}
-```
-
-Now, that you have to exchange this code with Discord for an access token. To do this, you need your `client_id` and `client_secret`. If you've forgotten them, head over to [your applications](https://discordapp.com/developers/applications) and get them. You can use `node-fetch` along with `form-data` to make requests to Discord; you can install them with `npm i node-fetch` and `npm i form-data` respectively.
-
-Require these new modules and make your request.
-
-```js
-const fetch = require('node-fetch');
-const FormData = require('form-data');
-
-// ...
-
-const data = new FormData();
-
-data.append('client_id', 'your client id');
-data.append('client_secret', 'your client secret');
-data.append('grant_type', 'authorization_code');
-data.append('redirect_uri', 'your redirect url');
-data.append('scope', 'the scopes');
-data.append('code', accessCode);
-
-fetch('https://discordapp.com/api/oauth2/token', {
- method: 'POST',
- body: data,
-})
- .then(res => res.json())
- .then(console.log);
-```
-
-::: warning
-The content-type for the token url must be `application/x-www-form-urlencoded`. This is why `form-data` is used.
-:::
-
-Now try visiting your OAuth2 url and authorizing your application. Once you're redirected, you should see something like this in your console.
-
-```json
-{ "access_token": "an access token",
- "token_type": "Bearer",
- "expires_in": 604800,
- "refresh_token": "a refresh token",
- "scope": "identify" }
-```
-
-Now that you have an access token and a refresh token, try fetching the user's information. It's the exact same as how it was done in the html file.
-
-```js
-fetch('https://discordapp.com/api/oauth2/token', {
- method: 'POST',
- body: data,
-})
- .then(res => res.json())
- .then(info => fetch('https://discordapp.com/api/users/@me', {
- headers: {
- authorization: `${info.token_type} ${info.access_token}`,
- },
- }))
- .then(console.log);
-```
-
-::: tip
-To maintain security, store the access token server side but associate it with a session ID that you generate for the user.
-:::
-
-## Additional reading
-
-[RFC 6759](https://tools.ietf.org/html/rfc6749)
-[Discord Docs for OAuth2](https://discordapp.com/developers/docs/topics/oauth2)
-
-## Resulting code
-
-
diff --git a/Ajuda/guide-master/guide/popular-topics/canvas.md b/Ajuda/guide-master/guide/popular-topics/canvas.md
deleted file mode 100644
index 28ba7b7..0000000
--- a/Ajuda/guide-master/guide/popular-topics/canvas.md
+++ /dev/null
@@ -1,715 +0,0 @@
-# Image manipulation with Canvas
-
-## Setting up Canvas
-
-Canvas is an image manipulation tool that allows you to modify images with code. We'll explore how to use this module in a heavily requested feature: guild member welcome messages. But first, you must go through the intense labor of installing Canvas. It's highly recommended that you use a Linux distribution for this because it'll be much easier to install on.
-
-::: tip
-This guide is last tested with `canvas^2.6.0`, so make sure you have this or a similar version after installation.
-:::
-
-::: warning
-Be sure that you're familiar with things like [async/await](/additional-info/async-await.md) and [object destructuring](/additional-info/es6-syntax.md#object-destructuring) before continuing, as we'll be making use of features like these.
-:::
-
-## Installation
-
-### Windows
-
-You will need a package called Windows Build Tools. You may install it with npm with the following command: `npm i --global --production windows-build-tools`, or with yarn by running the following: `yarn global add --production windows-build-tools`. It is also bundled with Chocolatey, should you choose that installation path. Afterwards, you should follow the instructions detailed [here](https://github.com/Automattic/node-canvas/wiki/Installation:-Windows). Additionally, make sure Node and Cairo are **both** either 32-bit or 64-bit; having a 32-bit version of one and a 64-bit version of the other will cause errors.
-
-If you are *still* unable to install Canvas, you might want to consider installing [Microsoft Visual Studio 2015](https://www.visualstudio.com/vs/older-downloads/).
-
-### Other distributions
-
-You can run one of the commands listed [here](https://github.com/Automattic/node-canvas#compiling) to install the necessary tools Canvas needs.
-
-### Package installation
-
-After installing all the necessary software, run `npm i canvas` if you use npm, or `yarn add canvas` if you use Yarn.
-
-## Getting started
-
-Here is the base code you'll be using to get started:
-
-```js
-const Discord = require('discord.js');
-const Canvas = require('canvas');
-
-const client = new Discord.Client();
-
-client.once('ready', () => {
- console.log('Ready!');
-});
-
-client.on('guildMemberAdd', member => {
- const channel = member.guild.channels.find(ch => ch.name === 'member-log');
- if (!channel) return;
-
- channel.send(`Welcome to the server, ${member}!`);
-});
-
-client.login('your-token-goes-here');
-```
-
-To make testing this feature much easier, you can add a simple command that'll "fake" a new member joining.
-
-
-
-
-```js
-client.on('message', async message => {
- if (message.content === '!join') {
- client.emit('guildMemberAdd', message.member || await message.guild.fetchMember(message.author));
- }
-});
-```
-
-
-
-
-```js
-client.on('message', message => {
- if (message.content === '!join') {
- client.emit('guildMemberAdd', message.member);
- }
-});
-```
-
-
-
-What this will do is trigger the `guildMemberAdd` event while passing in the message author's GuildMember object. Of course, you should remove this command once you're doing adding this feature to your actual bot.
-
-### Basic image loading
-
-The end goal will be to display the user's avatar, username, and a simple "Welcome!" message when they join. After importing the Canvas module and initializing it, you should load the images. With Canvas, you have to specify where the image comes from first, naturally, and then specify how it gets loaded into the actual Canvas using `ctx`, which is what you will use to interact with Canvas.
-
-::: tip
-`node-canvas` works almost identical to HTML5 Canvas. You can read the HTML5 Canvas tutorials on [w3Schools](https://www.w3schools.com/html/html5_canvas.asp) and [MDN](https://developer.mozilla.org/en-US/docs/Web/API/Canvas_API) for more information later!
-:::
-
-
-
-```js
-client.on('guildMemberAdd', async member => {
- const channel = member.guild.channels.find(ch => ch.name === 'member-log');
- if (!channel) return;
-
- // Set a new canvas to the dimensions of 700x250 pixels
- const canvas = Canvas.createCanvas(700, 250);
- // ctx (context) will be used to modify a lot of the canvas
-
- const ctx = canvas.getContext('2d');
-
- channel.send(`Welcome to the server, ${member}!`);
-});
-```
-
-Now, you need to load the image you want to use into Canvas. In order to have more sufficient coverage, we'll first show you how to load a basic image from a local directory. We'll be using [this image](~@/images/canvas.jpg) as the background in the welcome image, but you can use whatever you want. Be sure to download the file, name it `wallpaper.jpg`, and save it inside the same directory as your main bot file.
-
-
-
-```js
-client.on('guildMemberAdd', async member => {
- const channel = member.guild.channels.find(ch => ch.name === 'member-log');
- if (!channel) return;
-
- const canvas = Canvas.createCanvas(700, 250);
- const ctx = canvas.getContext('2d');
-
- // Since the image takes time to load, you should await it
- const background = await Canvas.loadImage('./wallpaper.jpg');
- // This uses the canvas dimensions to stretch the image onto the entire canvas
- ctx.drawImage(background, 0, 0, canvas.width, canvas.height);
- // Use helpful Attachment class structure to process the file for you
- const attachment = new Discord.Attachment(canvas.toBuffer(), 'welcome-image.png');
-
- channel.send(`Welcome to the server, ${member}!`, attachment);
-});
-```
-
-
-
-
-```js
-client.on('guildMemberAdd', async member => {
- const channel = member.guild.channels.find(ch => ch.name === 'member-log');
- if (!channel) return;
-
- const canvas = Canvas.createCanvas(700, 250);
- const ctx = canvas.getContext('2d');
-
- // Since the image takes time to load, you should await it
- const background = await Canvas.loadImage('./wallpaper.jpg');
- // This uses the canvas dimensions to stretch the image onto the entire canvas
- ctx.drawImage(background, 0, 0, canvas.width, canvas.height);
- // Use helpful Attachment class structure to process the file for you
- const attachment = new Discord.MessageAttachment(canvas.toBuffer(), 'welcome-image.png');
-
- channel.send(`Welcome to the server, ${member}!`, attachment);
-});
-```
-
-
-
-
-
-::: tip
-If you get an error such as `Error: error while reading from input stream`, then the provided path to the file was incorrect.
-:::
-
-### Manipulating images
-
-Next, let's place a border around the image, for the sake of demonstration purposes.
-
-
-
-```js
-client.on('guildMemberAdd', async member => {
- const channel = member.guild.channels.find(ch => ch.name === 'member-log');
- if (!channel) return;
-
- const canvas = Canvas.createCanvas(700, 250);
- const ctx = canvas.getContext('2d');
-
- const background = await Canvas.loadImage('./wallpaper.jpg');
- ctx.drawImage(background, 0, 0, canvas.width, canvas.height);
-
- // Select the color of the stroke
- ctx.strokeStyle = '#74037b';
- // Draw a rectangle with the dimensions of the entire canvas
- ctx.strokeRect(0, 0, canvas.width, canvas.height);
-
- const attachment = new Discord.Attachment(canvas.toBuffer(), 'welcome-image.png');
-
- channel.send(`Welcome to the server, ${member}!`, attachment);
-});
-```
-
-
-
-
-```js
-client.on('guildMemberAdd', async member => {
- const channel = member.guild.channels.find(ch => ch.name === 'member-log');
- if (!channel) return;
-
- const canvas = Canvas.createCanvas(700, 250);
- const ctx = canvas.getContext('2d');
-
- const background = await Canvas.loadImage('./wallpaper.jpg');
- ctx.drawImage(background, 0, 0, canvas.width, canvas.height);
-
- // Select the color of the stroke
- ctx.strokeStyle = '#74037b';
- // Draw a rectangle with the dimensions of the entire canvas
- ctx.strokeRect(0, 0, canvas.width, canvas.height);
-
- const attachment = new Discord.MessageAttachment(canvas.toBuffer(), 'welcome-image.png');
-
- channel.send(`Welcome to the server, ${member}!`, attachment);
-});
-```
-
-
-
-
-
-A bit plain, right? Fear not, for you have a bit more to do until you reach completion. Since the goal of guide page is focused more on actual code than design, let's just place a basic square shaped avatar for now on the left side of the image. In interest of coverage, you will also make it a circle afterwards.
-
-
-
-```js
-client.on('guildMemberAdd', async member => {
- const channel = member.guild.channels.find(ch => ch.name === 'member-log');
- if (!channel) return;
-
- const canvas = Canvas.createCanvas(700, 250);
- const ctx = canvas.getContext('2d');
-
- const background = await Canvas.loadImage('./wallpaper.jpg');
- ctx.drawImage(background, 0, 0, canvas.width, canvas.height);
-
- ctx.strokeStyle = '#74037b';
- ctx.strokeRect(0, 0, canvas.width, canvas.height);
-
- // Wait for Canvas to load the image
- const avatar = await Canvas.loadImage(member.user.displayAvatarURL);
- // Draw a shape onto the main canvas
- ctx.drawImage(avatar, 25, 0, 200, canvas.height);
-
- const attachment = new Discord.Attachment(canvas.toBuffer(), 'welcome-image.png');
-
- channel.send(`Welcome to the server, ${member}!`, attachment);
-});
-```
-
-
-
-
-```js
-client.on('guildMemberAdd', async member => {
- const channel = member.guild.channels.find(ch => ch.name === 'member-log');
- if (!channel) return;
-
- const canvas = Canvas.createCanvas(700, 250);
- const ctx = canvas.getContext('2d');
-
- const background = await Canvas.loadImage('./wallpaper.jpg');
- ctx.drawImage(background, 0, 0, canvas.width, canvas.height);
-
- ctx.strokeStyle = '#74037b';
- ctx.strokeRect(0, 0, canvas.width, canvas.height);
-
- // Wait for Canvas to load the image
- const avatar = await Canvas.loadImage(member.user.displayAvatarURL({ format: 'jpg' }));
- // Draw a shape onto the main canvas
- ctx.drawImage(avatar, 25, 0, 200, canvas.height);
-
- const attachment = new Discord.MessageAttachment(canvas.toBuffer(), 'welcome-image.png');
-
- channel.send(`Welcome to the server, ${member}!`, attachment);
-});
-```
-
-
-
-
-
-Works well, but the avatar image itself seems a bit stretched out. Let's remedy that.
-
-
-
-```js
-client.on('guildMemberAdd', async member => {
- const channel = member.guild.channels.find(ch => ch.name === 'member-log');
- if (!channel) return;
-
- const canvas = Canvas.createCanvas(700, 250);
- const ctx = canvas.getContext('2d');
-
- const background = await Canvas.loadImage('./wallpaper.jpg');
- ctx.drawImage(background, 0, 0, canvas.width, canvas.height);
-
- ctx.strokeStyle = '#74037b';
- ctx.strokeRect(0, 0, canvas.width, canvas.height);
-
- const avatar = await Canvas.loadImage(member.user.displayAvatarURL);
- // Move the image downwards vertically and constrain its height to 200, so it's a square
- ctx.drawImage(avatar, 25, 25, 200, 200);
-
- const attachment = new Discord.Attachment(canvas.toBuffer(), 'welcome-image.png');
-
- channel.send(`Welcome to the server, ${member}!`, attachment);
-});
-```
-
-
-
-
-```js
-client.on('guildMemberAdd', async member => {
- const channel = member.guild.channels.find(ch => ch.name === 'member-log');
- if (!channel) return;
-
- const canvas = Canvas.createCanvas(700, 250);
- const ctx = canvas.getContext('2d');
-
- const background = await Canvas.loadImage('./wallpaper.jpg');
- ctx.drawImage(background, 0, 0, canvas.width, canvas.height);
-
- ctx.strokeStyle = '#74037b';
- ctx.strokeRect(0, 0, canvas.width, canvas.height);
-
- const avatar = await Canvas.loadImage(member.user.displayAvatarURL({ format: 'jpg' }));
- // Move the image downwards vertically and constrain its height to 200, so it's a square
- ctx.drawImage(avatar, 25, 25, 200, 200);
-
- const attachment = new Discord.MessageAttachment(canvas.toBuffer(), 'welcome-image.png');
-
- channel.send(`Welcome to the server, ${member}!`, attachment);
-});
-```
-
-
-
-
-
-The purpose of this small section is to demonstrate that working with Canvas is essentially a hit-and-miss workflow where you fiddle with properties until they work just right.
-
-Since we covered how to load external images and fix dimensions, let's turn the avatar into a circle to improve the overall style of the image.
-
-
-
-```js
-client.on('guildMemberAdd', async member => {
- const channel = member.guild.channels.find(ch => ch.name === 'member-log');
- if (!channel) return;
-
- const canvas = Canvas.createCanvas(700, 250);
- const ctx = canvas.getContext('2d');
-
- const background = await Canvas.loadImage('./wallpaper.jpg');
- ctx.drawImage(background, 0, 0, canvas.width, canvas.height);
-
- ctx.strokeStyle = '#74037b';
- ctx.strokeRect(0, 0, canvas.width, canvas.height);
-
- // Pick up the pen
- ctx.beginPath();
- // Start the arc to form a circle
- ctx.arc(125, 125, 100, 0, Math.PI * 2, true);
- // Put the pen down
- ctx.closePath();
- // Clip off the region you drew on
- ctx.clip();
-
- const avatar = await Canvas.loadImage(member.user.displayAvatarURL);
- ctx.drawImage(avatar, 25, 25, 200, 200);
-
- const attachment = new Discord.Attachment(canvas.toBuffer(), 'welcome-image.png');
-
- channel.send(`Welcome to the server, ${member}!`, attachment);
-});
-```
-
-
-
-
-```js
-client.on('guildMemberAdd', async member => {
- const channel = member.guild.channels.find(ch => ch.name === 'member-log');
- if (!channel) return;
-
- const canvas = Canvas.createCanvas(700, 250);
- const ctx = canvas.getContext('2d');
-
- const background = await Canvas.loadImage('./wallpaper.jpg');
- ctx.drawImage(background, 0, 0, canvas.width, canvas.height);
-
- ctx.strokeStyle = '#74037b';
- ctx.strokeRect(0, 0, canvas.width, canvas.height);
-
- // Pick up the pen
- ctx.beginPath();
- // Start the arc to form a circle
- ctx.arc(125, 125, 100, 0, Math.PI * 2, true);
- // Put the pen down
- ctx.closePath();
- // Clip off the region you drew on
- ctx.clip();
-
- const avatar = await Canvas.loadImage(member.user.displayAvatarURL({ format: 'jpg' }));
- ctx.drawImage(avatar, 25, 25, 200, 200);
-
- const attachment = new Discord.MessageAttachment(canvas.toBuffer(), 'welcome-image.png');
-
- channel.send(`Welcome to the server, ${member}!`, attachment);
-});
-```
-
-
-
-
-
-::: tip
-You can read more about `ctx.arc()` on [w3schools](https://www.w3schools.com/tags/canvas_arc.asp) or [MDN](https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/arc).
-:::
-
-### Adding in text
-
-Now, let's quickly go over adding text to your image. This will be helpful to make the purpose of this image very clear, since currently it's just an avatar floating on a starry background that comes out of nowhere.
-
-
-
-```js
-client.on('guildMemberAdd', async member => {
- const channel = member.guild.channels.find(ch => ch.name === 'member-log');
- if (!channel) return;
-
- const canvas = Canvas.createCanvas(700, 250);
- const ctx = canvas.getContext('2d');
-
- const background = await Canvas.loadImage('./wallpaper.jpg');
- ctx.drawImage(background, 0, 0, canvas.width, canvas.height);
-
- ctx.strokeStyle = '#74037b';
- ctx.strokeRect(0, 0, canvas.width, canvas.height);
-
- // Select the font size and type from one of the natively available fonts
- ctx.font = '60px sans-serif';
- // Select the style that will be used to fill the text in
- ctx.fillStyle = '#ffffff';
- // Actually fill the text with a solid color
- ctx.fillText(member.displayName, canvas.width / 2.5, canvas.height / 1.8);
-
- ctx.beginPath();
- ctx.arc(125, 125, 100, 0, Math.PI * 2, true);
- ctx.closePath();
- ctx.clip();
-
- const avatar = await Canvas.loadImage(member.user.displayAvatarURL);
- ctx.drawImage(avatar, 25, 25, 200, 200);
-
- const attachment = new Discord.Attachment(canvas.toBuffer(), 'welcome-image.png');
-
- channel.send(`Welcome to the server, ${member}!`, attachment);
-});
-```
-
-
-
-
-```js
-client.on('guildMemberAdd', async member => {
- const channel = member.guild.channels.find(ch => ch.name === 'member-log');
- if (!channel) return;
-
- const canvas = Canvas.createCanvas(700, 250);
- const ctx = canvas.getContext('2d');
-
- const background = await Canvas.loadImage('./wallpaper.jpg');
- ctx.drawImage(background, 0, 0, canvas.width, canvas.height);
-
- ctx.strokeStyle = '#74037b';
- ctx.strokeRect(0, 0, canvas.width, canvas.height);
-
- // Select the font size and type from one of the natively available fonts
- ctx.font = '60px sans-serif';
- // Select the style that will be used to fill the text in
- ctx.fillStyle = '#ffffff';
- // Actually fill the text with a solid color
- ctx.fillText(member.displayName, canvas.width / 2.5, canvas.height / 1.8);
-
- ctx.beginPath();
- ctx.arc(125, 125, 100, 0, Math.PI * 2, true);
- ctx.closePath();
- ctx.clip();
-
- const avatar = await Canvas.loadImage(member.user.displayAvatarURL({ format: 'jpg' }));
- ctx.drawImage(avatar, 25, 25, 200, 200);
-
- const attachment = new Discord.MessageAttachment(canvas.toBuffer(), 'welcome-image.png');
-
- channel.send(`Welcome to the server, ${member}!`, attachment);
-});
-```
-
-
-
-
-
-::: tip
-If you get an error like `Fontconfig error: Cannot load default config file`, it means you do not have any fonts installed on your system. On Linux, you can run the following command to fix this: `sudo apt-get install fontconfig`. This might also need to be installed if you see boxes where the text should be. As for Windows, you will need to find a way to install fonts.
-:::
-
-You may have noticed or considered that if a member's username is too long, then the output won't be quite nice. This is because the text overflows out of the canvas, and you don't have any measures in place for that. Let's take care of this issue!
-
-
-
-```js
-// Pass the entire Canvas object because you'll need to access its width, as well its context
-const applyText = (canvas, text) => {
- const ctx = canvas.getContext('2d');
-
- // Declare a base size of the font
- let fontSize = 70;
-
- do {
- // Assign the font to the context and decrement it so it can be measured again
- ctx.font = `${fontSize -= 10}px sans-serif`;
- // Compare pixel width of the text to the canvas minus the approximate avatar size
- } while (ctx.measureText(text).width > canvas.width - 300);
-
- // Return the result to use in the actual canvas
- return ctx.font;
-};
-
-client.on('guildMemberAdd', async member => {
- const channel = member.guild.channels.find(ch => ch.name === 'member-log');
- if (!channel) return;
-
- const canvas = Canvas.createCanvas(700, 250);
- const ctx = canvas.getContext('2d');
-
- const background = await Canvas.loadImage('./wallpaper.jpg');
- ctx.drawImage(background, 0, 0, canvas.width, canvas.height);
-
- ctx.strokeStyle = '#74037b';
- ctx.strokeRect(0, 0, canvas.width, canvas.height);
-
- // Assign the decided font to the canvas
- ctx.font = applyText(canvas, member.displayName);
- ctx.fillStyle = '#ffffff';
- ctx.fillText(member.displayName, canvas.width / 2.5, canvas.height / 1.8);
-
- ctx.beginPath();
- ctx.arc(125, 125, 100, 0, Math.PI * 2, true);
- ctx.closePath();
- ctx.clip();
-
- const avatar = await Canvas.loadImage(member.user.displayAvatarURL);
- ctx.drawImage(avatar, 25, 25, 200, 200);
-
- const attachment = new Discord.Attachment(canvas.toBuffer(), 'welcome-image.png');
-
- channel.send(`Welcome to the server, ${member}!`, attachment);
-});
-```
-
-
-
-
-```js
-// Pass the entire Canvas object because you'll need to access its width, as well its context
-const applyText = (canvas, text) => {
- const ctx = canvas.getContext('2d');
-
- // Declare a base size of the font
- let fontSize = 70;
-
- do {
- // Assign the font to the context and decrement it so it can be measured again
- ctx.font = `${fontSize -= 10}px sans-serif`;
- // Compare pixel width of the text to the canvas minus the approximate avatar size
- } while (ctx.measureText(text).width > canvas.width - 300);
-
- // Return the result to use in the actual canvas
- return ctx.font;
-};
-
-client.on('guildMemberAdd', async member => {
- const channel = member.guild.channels.find(ch => ch.name === 'member-log');
- if (!channel) return;
-
- const canvas = Canvas.createCanvas(700, 250);
- const ctx = canvas.getContext('2d');
-
- const background = await Canvas.loadImage('./wallpaper.jpg');
- ctx.drawImage(background, 0, 0, canvas.width, canvas.height);
-
- ctx.strokeStyle = '#74037b';
- ctx.strokeRect(0, 0, canvas.width, canvas.height);
-
- // Assign the decided font to the canvas
- ctx.font = applyText(canvas, member.displayName);
- ctx.fillStyle = '#ffffff';
- ctx.fillText(member.displayName, canvas.width / 2.5, canvas.height / 1.8);
-
- ctx.beginPath();
- ctx.arc(125, 125, 100, 0, Math.PI * 2, true);
- ctx.closePath();
- ctx.clip();
-
- const avatar = await Canvas.loadImage(member.user.displayAvatarURL({ format: 'jpg' }));
- ctx.drawImage(avatar, 25, 25, 200, 200);
-
- const attachment = new Discord.MessageAttachment(canvas.toBuffer(), 'welcome-image.png');
-
- channel.send(`Welcome to the server, ${member}!`, attachment);
-});
-```
-
-
-
-Before adjustment:
-
-
-
-After adjustment:
-
-
-
-As a nice finishing touch, let's move the welcome text inside the image itself instead of adding it outside.
-
-
-
-```js
-client.on('guildMemberAdd', async member => {
- const channel = member.guild.channels.find(ch => ch.name === 'member-log');
- if (!channel) return;
-
- const canvas = Canvas.createCanvas(700, 250);
- const ctx = canvas.getContext('2d');
-
- const background = await Canvas.loadImage('./wallpaper.jpg');
- ctx.drawImage(background, 0, 0, canvas.width, canvas.height);
-
- ctx.strokeStyle = '#74037b';
- ctx.strokeRect(0, 0, canvas.width, canvas.height);
-
- // Slightly smaller text placed above the member's display name
- ctx.font = '28px sans-serif';
- ctx.fillStyle = '#ffffff';
- ctx.fillText('Welcome to the server,', canvas.width / 2.5, canvas.height / 3.5);
-
- // Add an exclamation point here and below
- ctx.font = applyText(canvas, `${member.displayName}!`);
- ctx.fillStyle = '#ffffff';
- ctx.fillText(`${member.displayName}!`, canvas.width / 2.5, canvas.height / 1.8);
-
- ctx.beginPath();
- ctx.arc(125, 125, 100, 0, Math.PI * 2, true);
- ctx.closePath();
- ctx.clip();
-
- const avatar = await Canvas.loadImage(member.user.displayAvatarURL);
- ctx.drawImage(avatar, 25, 25, 200, 200);
-
- const attachment = new Discord.MessageAttachment(canvas.toBuffer(), 'welcome-image.png');
-
- channel.send(`Welcome to the server, ${member}!`, attachment);
-});
-```
-
-
-
-
-```js
-client.on('guildMemberAdd', async member => {
- const channel = member.guild.channels.find(ch => ch.name === 'member-log');
- if (!channel) return;
-
- const canvas = Canvas.createCanvas(700, 250);
- const ctx = canvas.getContext('2d');
-
- const background = await Canvas.loadImage('./wallpaper.jpg');
- ctx.drawImage(background, 0, 0, canvas.width, canvas.height);
-
- ctx.strokeStyle = '#74037b';
- ctx.strokeRect(0, 0, canvas.width, canvas.height);
-
- // Slightly smaller text placed above the member's display name
- ctx.font = '28px sans-serif';
- ctx.fillStyle = '#ffffff';
- ctx.fillText('Welcome to the server,', canvas.width / 2.5, canvas.height / 3.5);
-
- // Add an exclamation point here and below
- ctx.font = applyText(canvas, `${member.displayName}!`);
- ctx.fillStyle = '#ffffff';
- ctx.fillText(`${member.displayName}!`, canvas.width / 2.5, canvas.height / 1.8);
-
- ctx.beginPath();
- ctx.arc(125, 125, 100, 0, Math.PI * 2, true);
- ctx.closePath();
- ctx.clip();
-
- const { body: buffer } = await snekfetch.get(member.user.displayAvatarURL);
- const avatar = await Canvas.loadImage(buffer);
- ctx.drawImage(avatar, 25, 25, 200, 200);
-
- const attachment = new Discord.MessageAttachment(canvas.toBuffer(), 'welcome-image.png');
-
- channel.send(`Welcome to the server, ${member}!`, attachment);
-});
-```
-
-
-
-
-
-And that's it! We have covered the basics of image manipulation, text generation, and loading from a remote source.
-
-## Resulting code
-
-
diff --git a/Ajuda/guide-master/guide/popular-topics/collectors.md b/Ajuda/guide-master/guide/popular-topics/collectors.md
deleted file mode 100644
index a10e41b..0000000
--- a/Ajuda/guide-master/guide/popular-topics/collectors.md
+++ /dev/null
@@ -1,161 +0,0 @@
-# Collectors
-
-## Message collectors
-
-Collectors are a useful way to enable your bot to obtain *additional* input after the first command was sent. An example would be initiating a quiz, where the bot will "await" a correct response from somebody.
-
-::: tip
-You can read the docs for the Collector class [here](https://discord.js.org/#/docs/main/11.5.1/class/Collector)[here](https://discord.js.org/#/docs/main/master/class/Collector).
-:::
-
-### Basic message collector
-
-For now, let's take the example that they have provided us:
-
-```js
-// `m` is a message object that will be passed through the filter function
-const filter = m => m.content.includes('discord');
-const collector = message.channel.createMessageCollector(filter, { time: 15000 });
-
-collector.on('collect', m => {
- console.log(`Collected ${m.content}`);
-});
-
-collector.on('end', collected => {
- console.log(`Collected ${collected.size} items`);
-});
-```
-
-In the first argument of `.createMessageCollector()`, it specifies that it requires a function. This function should ideally return a boolean, which would indicate whether or not the message should pass through the collector's filter. This filter function includes implicit return, which means that (in this case), it will return the value of `m.content.includes('discord')` without actually specifying `return`. This happens when you use arrow functions without braces.
-
-You can also allow more than one condition, as you would with any function. An alternative could be `m => m.content.includes('discord') && m.author.id === message.author.id`, assuming `message` is the name of what you receive in the `message` event. This function will only allow a message that was sent by the person who triggered the command *and* if the message content included "discord" in it.
-
-After a message passes through, this will trigger the `collect` event for the `collector` you've created, which will then run the provided function. In this case, it will simply log the collected message. Once the collector finishes, one way or another, it will run the `end` event. A collector can end in different ways, such as:
-
-* Time running out
-* A certain number of messages passing the filter
-* A certain number of attempts to go through the filter altogether
-
-Those options you pass as the second argument in `.createMessageCollector()`. The benefit of using this method over `.awaitMessages()` is that you can stop it manually by calling `collector.stop()`, should you have your own reason to interrupt the collecting early.
-
-### Await messages
-
-Using `.awaitMessages()` can be easier if you understand promises, and it allows you to have cleaner code overall. It is essentially identical to `.createMessageCollector()`, except promisified. The drawback of using this method, however, is that you cannot do things before the promise is resolved or rejected, either by an error or completion. However, it should do for most purposes, such as awaiting the correct response in a quiz. Instead of taking their example, let's set up a basic quiz command using the `.awaitMessages()` feature.
-
-::: tip
-You can read the docs for the `.awaitMessages()` method [here](https://discord.js.org/#/docs/main/11.5.1/class/TextChannel?scrollTo=awaitMessages)[here](https://discord.js.org/#/docs/main/master/class/TextChannel?scrollTo=awaitMessages).
-:::
-
-First, you'll need some questions and answers to choose from, so here's a basic set:
-
-```json
-[
- {
- "question": "What colour is the sky?",
- "answers": ["blue"]
- },
- {
- "question": "How many letters are there in the alphabet?",
- "answers": ["26", "twenty-six", "twenty six", "twentysix"]
- }
-]
-```
-
-The provided set allows for responder error with an array of answers allowed. Ideally, you should place this in a json file, which you can call `quiz.json` for simplicity.
-
-
-
-```js
-const quiz = require('./quiz.json');
-const item = quiz[Math.floor(Math.random() * quiz.length)];
-const filter = response => {
- return item.answers.some(answer => answer.toLowerCase() === response.content.toLowerCase());
-};
-
-message.channel.send(item.question).then(() => {
- message.channel.awaitMessages(filter, { maxMatches: 1, time: 30000, errors: ['time'] })
- .then(collected => {
- message.channel.send(`${collected.first().author} got the correct answer!`);
- })
- .catch(collected => {
- message.channel.send('Looks like nobody got the answer this time.');
- });
-});
-```
-
-
-
-
-```js
-const quiz = require('./quiz.json');
-const item = quiz[Math.floor(Math.random() * quiz.length)];
-const filter = response => {
- return item.answers.some(answer => answer.toLowerCase() === response.content.toLowerCase());
-};
-
-message.channel.send(item.question).then(() => {
- message.channel.awaitMessages(filter, { max: 1, time: 30000, errors: ['time'] })
- .then(collected => {
- message.channel.send(`${collected.first().author} got the correct answer!`);
- })
- .catch(collected => {
- message.channel.send('Looks like nobody got the answer this time.');
- });
-});
-```
-
-
-
-::: tip
-If you don't understand how `.some()` works, you can read about it in more detail [here](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/some).
-:::
-
-In this filter, you iterate through the answers to find what you want. You would like to ignore case because simple typos can happen, so you convert each answer to its lowercase form, and check if it's equal to the response in lowercase form as well. In the options section, you only want to allow one answer to pass through, hence the `maxMatches: 1``max: 1` setting.
-
-The filter looks for messages that match one of the answers in our array of possible answers in order to pass through the collector. In the options (the second parameter), it's specified that only a maximum of 1 message can go through the filter successfully before the promise will successfully resolve. In the errors section, it's specified that time will cause it to error out, which will cause the promise to reject if 1 correct answer is not received within the time limit of 1 minute. As you can see, there is no `collect` event, so you are limited in that regard.
-
-## Reaction collectors
-
-### Basic reaction collector
-
-These work quite similarly to message collectors, except that you apply them on a message rather than a channel. The following is an example taken from the documentation, with slightly better variable names for clarification. The filter will check for the 👌 emoji - in the default skin tone specifically, so be wary of that. It will also check that the person who reacted shares the same id as the author of the original message that the collector was assigned to.
-
-::: tip
-You can read the docs for the `.createReactionCollector()` method [here](https://discord.js.org/#/docs/main/11.5.1/class/Message?scrollTo=createReactionCollector)[here](https://discord.js.org/#/docs/main/master/class/Message?scrollTo=createReactionCollector).
-:::
-
-```js
-const filter = (reaction, user) => {
- return reaction.emoji.name === '👌' && user.id === message.author.id;
-};
-
-const collector = message.createReactionCollector(filter, { time: 15000 });
-
-collector.on('collect', (reaction, reactionCollector) => {
- console.log(`Collected ${reaction.emoji.name}`);
-});
-
-collector.on('end', collected => {
- console.log(`Collected ${collected.size} items`);
-});
-```
-
-### Await reactions
-
-As before, these work almost exactly the same as a reaction collector, except it is promise based. The same differences apply as with channel collectors.
-
-::: tip
-You can read the docs for the `.awaitReactions()` method [here](https://discord.js.org/#/docs/main/11.5.1/class/Message?scrollTo=awaitReactions)[here](https://discord.js.org/#/docs/main/master/class/Message?scrollTo=awaitReactions).
-:::
-
-```js
-const filter = (reaction, user) => {
- return reaction.emoji.name === '👌' && user.id === message.author.id;
-};
-
-message.awaitReactions(filter, { max: 4, time: 60000, errors: ['time'] })
- .then(collected => console.log(collected.size))
- .catch(collected => {
- console.log(`After a minute, only ${collected.size} out of 4 reacted.`);
- });
-```
diff --git a/Ajuda/guide-master/guide/popular-topics/common-questions.md b/Ajuda/guide-master/guide/popular-topics/common-questions.md
deleted file mode 100644
index 8c6bbb1..0000000
--- a/Ajuda/guide-master/guide/popular-topics/common-questions.md
+++ /dev/null
@@ -1,299 +0,0 @@
-# Common questions
-
-## Legend
-
-* `` is a placeholder for the Client object, such as `const client = new Discord.Client();`.
-* `` is a placeholder for the Message object, such as `client.on('message', message => { ... });`.
-* `` is a placeholder for the Guild object, such as `.guild` or `.guilds.get('')`.
-
-For a more detailed explanation on the notations commonly used in this guide, the docs, and the support server, see [here](/additional-info/notation.md).
-
-## Administrative
-
-### How do I ban a user?
-
-
-
-```js
-const user = .mentions.users.first();
-.ban(user);
-```
-
-### How do I kick a user?
-
-
-
-```js
-const member = .mentions.members.first();
-member.kick();
-```
-
-### How do I add a role to a guild member?
-
-
-
-
-
-```js
-const role = .roles.find(role => role.name === '');
-const member = .mentions.members.first();
-member.addRole(role);
-```
-
-
-
-
-
-
-```js
-const role = .roles.find(role => role.name === '');
-const member = .mentions.members.first();
-member.roles.add(role);
-```
-
-
-
-### How do I check if a guild member has a certain role?
-
-
-
-```js
-const member = .mentions.members.first();
-if (member.roles.some(role => role.name === '')) {
- // ...
-}
-```
-
-### How do I limit a command to a single user?
-
-
-
-```js
-if (.author.id === '') {
- // ...
-}
-```
-
-## Bot Configuration
-
-### How do I set my username?
-
-
-
-```js
-.user.setUsername('');
-```
-
-### How do I set my avatar?
-
-
-
-```js
-.user.setAvatar('');
-```
-
-### How do I set my playing status?
-
-
-
-```js
-.user.setActivity('');
-```
-
-### How do I set my status to "Watching ..." or "Listening to ..."?
-
-
-
-```js
-.user.setActivity('', { type: 'WATCHING' });
-.user.setActivity('', { type: 'LISTENING' });
-```
-
-
-
-::: tip
-If you would like to set your activity upon startup, you must place the `.user.setActivity()` method in a `ready` event listener (`.on('ready', () => {});`).
-:::
-
-::: warning
-`.user.setActivity()` will only work in v11.3 and above. You can check your version with `npm ls discord.js` and update with `npm install discord.js`. You can still use `.user.setGame()`, but it is deprecated as of v11.3, and has been removed in v12.
-:::
-
-
-
-
-::: tip
-If you would like to set your activity upon startup, you can use the `ClientOptions` object to set the appropriate `Presence` data.
-:::
-
-
-
-## Miscellaneous
-
-### How do I send a message to a certain channel?
-
-
-
-```js
-const channel = .channels.get('');
-channel.send('');
-```
-
-### How do I DM a certain user?
-
-
-
-```js
-const user = .users.get('');
-user.send('');
-```
-
-::: tip
-If you want to DM the user who sent the message, you can use `.author.send()`.
-:::
-
-### How do I tag a certain user in a message?
-
-
-
-```js
-const user = .mentions.users.first();
-.channel.send(`Hi, ${user}.`);
-.channel.send('Hi, <@user id>.');
-```
-
-::: tip
-If you want to tag the user who sent the message, you can use `.reply()`. For example: `.reply('hi.')` would result in `@User, hi.`. If you want to insert the tag elsewhere, you can store `.author` as your `user` variable and use the original example.
-:::
-
-::: tip
-Tags inside certain areas of an embed may display correctly, but will not actually ping the user. Tags inside other certain areas of an embed will display the raw string instead (e.g. `<@123456789012345678>`).
-:::
-
-### How do I prompt the user for additional input?
-
-
-
-
-
-```js
-.channel.send('Please enter more input.').then(() => {
- const filter = m => .author.id === m.author.id;
-
- .channel.awaitMessages(filter, { time: 60000, maxMatches: 1, errors: ['time'] })
- .then(messages => {
- .channel.send(`You've entered: ${messages.first().content}`);
- })
- .catch(() => {
- .channel.send('You did not enter any input!');
- });
-});
-```
-
-
-
-
-
-
-```js
-.channel.send('Please enter more input.').then(() => {
- const filter = m => .author.id === m.author.id;
-
- .channel.awaitMessages(filter, { time: 60000, max: 1, errors: ['time'] })
- .then(messages => {
- .channel.send(`You've entered: ${messages.first().content}`);
- })
- .catch(() => {
- .channel.send('You did not enter any input!');
- });
-});
-```
-
-
-
-::: tip
-If you want to learn more about this syntax or want to learn about reaction collectors as well, check out [this dedicated guide page for collectors](/popular-topics/collectors.md)!
-:::
-
-### How do I react to the message my bot sent?
-
-
-
-```js
-.channel.send('My message to react to.').then(sentMessage => {
- sentMessage.react('👍');
- sentMessage.react('');
-});
-```
-
-::: tip
-If you want to learn more about reactions, check out [this dedicated guide on reactions](/popular-topics/reactions.md)!
-:::
-
-### How do I create a restart command?
-
-```js
-process.exit();
-```
-
-::: tip
-`process.exit()` will only kill your Node process, but when using [PM2](http://pm2.keymetrics.io/), it will restart the process whenever it gets killed. You can read our guide on PM2 [here](/improving-dev-environment/pm2.md).
-:::
-
-::: warning
-Be sure to [limit this to your own ID](/popular-topics/common-questions.md#how-do-i-limit-a-command-to-a-single-user) so that other users can't restart your bot!
-:::
-
-### What is the difference between a User and a GuildMember?
-
-A lot of users get confused as to what the difference between Users and GuildMembers is. The simple answer is that a User represents a global Discord user and a GuildMember represents a Discord user on a specific server. That means only GuildMembers can have permissions, roles, and nicknames, for example, because all of these things are server-bound information that could be different on each server that user is in.
-
-### How do I find all online members?
-
-Assuming the process is to be done for the guild the message is sent in.
-
-
-
-
-
-```js
-// First we use fetchMembers to make sure all members are cached
-.guild.fetchMembers().then(fetchedGuild => {
- const totalOnline = fetchedGuild.members.filter(member => member.presence.status === 'online');
- // We now have a collection with all online member objects in the totalOnline variable
- .channel.send(`There are currently ${totalOnline.size} members online in this guild!`);
-});
-```
-
-
-
-
-
-
-```js
-// First we use guild.members.fetch to make sure all members are cached
-.guild.members.fetch().then(fetchedMembers => {
- const totalOnline = fetchedMembers.filter(member => member.presence.status === 'online');
- // We now have a collection with all online member objects in the totalOnline variable
- .channel.send(`There are currently ${totalOnline.size} members online in this guild!`);
-});
-```
-
-
-
-### How do I check which role was added/removed, and for which member?
-
-
-
-```js
-// We start by declaring a guildMemberUpdate listener
-// This code should be placed outside of any other listener callbacks to prevent listener nesting
-.on('guildMemberUpdate', (oldMember, newMember) => {
- // If the role(s) are present on the old member object but no longer on the new one (i.e role(s) were removed)
- const removedRoles = oldMember.roles.filter(role => !newMember.roles.has(role.id));
- if(removedRoles.size > 0) console.log(`The roles ${removedRoles.map(r => r.name)} were added to ${oldMember.displayName}.`);
- // If the role(s) are present on the new member object but are not on the new one (i.e role(s) were added)
- const addedRoles = newMember.roles.filter(role => !oldMember.roles.has(role.id));
- if(addedRoles.size > 0) console.log(`The roles ${addedRoles.map(r => r.name)} were removed from ${oldMember.displayName}.`);
-});
-```
diff --git a/Ajuda/guide-master/guide/popular-topics/embeds.md b/Ajuda/guide-master/guide/popular-topics/embeds.md
deleted file mode 100644
index 1e7d66b..0000000
--- a/Ajuda/guide-master/guide/popular-topics/embeds.md
+++ /dev/null
@@ -1,355 +0,0 @@
-# Embeds
-
-If you have been around on Discord for a bit chances are you have seen these special messages.
-They have a colored border, are often sent by bots and have embedded images, text fields and other fancy stuff.
-
-In the following section we will explain how you compose an embed, send it, and what you need to be aware of while doing so.
-
-## Embed preview
-
-Here is an example of what an embed may look like. We will go over their construction in the next part of this guide.
-
-
-
-
- Some description here
-
-
- Some value here
-
-
-
-
-
- Some value here
-
-
- Some value here
-
-
- Some value here
-
-
- Some footer text here
-
-
-