├── .editorconfig ├── .github └── workflows │ ├── deploy.yml │ └── test.yml ├── .gitignore ├── .nvmrc ├── LICENSE ├── README.md ├── data ├── features │ ├── additional-bot-owners-editors.json │ ├── bot-internationalisation-support.json │ ├── bot-resubmission.json │ ├── bot-reviews.json │ ├── certified-bot-vanity-urls.json │ ├── custom-bot-donate-link.json │ ├── custom-bot-github-link.json │ ├── custom-bot-invite-link.json │ ├── custom-bot-support-link.json │ ├── custom-bot-website-link.json │ ├── discord-bot-support-link.json │ ├── has-ads-on-site.json │ ├── has-categories-or-tags.json │ ├── has-certification-program.json │ ├── has-mobile-support.json │ ├── has-search.json │ ├── has-voting.json │ ├── has-widget.json │ ├── html-long-description.json │ ├── iframe-long-description.json │ ├── markdown-long-description.json │ ├── offers-paid-promotion.json │ ├── paid-access.json │ ├── requires-owner-in-server.json │ ├── server-count-api.json │ ├── site-internationalisation-support.json │ ├── vanity-urls-for-all.json │ ├── votes-sent-to-webhooks.json │ └── voting-data-exposed.json ├── legacy.json ├── libraries │ ├── botblock-blapi.json │ ├── botblock-botlist.json │ ├── botblock-botlistapi.json │ ├── botblock-discordlists-py.json │ └── botblock-javabotblockapi.json └── lists │ ├── arcane-center.xyz.json │ ├── arobotlist.xyz.json │ ├── automacord.xyz.json │ ├── bladelist.gg.json │ ├── blist.xyz.json │ ├── boatlist.ml.json │ ├── boatlist.xyz.json │ ├── boatspace.xyz.json │ ├── botlist.co.json │ ├── botlist.me.json │ ├── botlists.com.json │ ├── botrix.cc.json │ ├── bots.discordlabs.org.json │ ├── bots.discordlist.app.json │ ├── bots.distop.xyz.json │ ├── bots.idledev.org.json │ ├── bots.ondiscord.xyz.json │ ├── botsdatabase.com.json │ ├── botsparadiscord.com.json │ ├── carbonitex.net.json │ ├── cloud-botlist.xyz.json │ ├── cloudlist.xyz.json │ ├── cybralist.com.json │ ├── dankbotlist.com.json │ ├── dblista.pl.json │ ├── discord-botlist.eu.json │ ├── discord.boats.json │ ├── discord.bots.gg.json │ ├── discord.place.json │ ├── discord.rovelstars.com.json │ ├── discord.services.json │ ├── discordapps.dev.json │ ├── discordboats.club.json │ ├── discordbot.world.json │ ├── discordbotdirectory.net.json │ ├── discordbotindex.com.json │ ├── discordbotlabs.com.json │ ├── discordbotlist.com.json │ ├── discordbotlist.xyz.json │ ├── discordbots.app.json │ ├── discordbots.co.json │ ├── discordbots.co.uk.json │ ├── discordbots.fun.json │ ├── discordbots.group.json │ ├── discordbotsclub.org.json │ ├── discordextremelist.xyz.json │ ├── discordlist.gg.json │ ├── discordlist.space.json │ ├── discordlistology.com.json │ ├── discordmusicbots.com.json │ ├── discords.com.json │ ├── discordsbestbots.xyz.json │ ├── discordservices.net.json │ ├── discordz.gg.json │ ├── disforge.com.json │ ├── disq.ink.json │ ├── divinediscordbots.com.json │ ├── fateslist.xyz.json │ ├── glennbotlist.xyz.json │ ├── guardianbots.xyz.json │ ├── hydrogenbots.club.json │ ├── ie.discordbots.co.uk.json │ ├── infinitybots.gg.json │ ├── lbots.org.json │ ├── listcord.com.json │ ├── listcord.gg.json │ ├── listmybots.com.json │ ├── motiondevelopment.top.json │ ├── nooder.co.json │ ├── paradisebots.net.json │ ├── radarcord.net.json │ ├── space-bot-list.xyz.json │ ├── stellarbotlist.com.json │ ├── thereisabotforthat.com.json │ ├── top.gg.json │ ├── topcord.xyz.json │ ├── vcodes.xyz.json │ ├── vitallist.xyz.json │ ├── voidbots.net.json │ ├── wonderbotlist.com.json │ └── yabl.xyz.json ├── openapi.yml ├── package-lock.json ├── package.json ├── schema ├── feature.json ├── legacy.json ├── library.json └── list.json └── validate ├── data.test.js ├── files.test.js ├── schemas.test.js └── util.js /.editorconfig: -------------------------------------------------------------------------------- 1 | [*] 2 | indent_size = 4 3 | indent_style = space 4 | end_of_line = lf 5 | charset = utf-8 6 | trim_trailing_whitespace = true 7 | insert_final_newline = true 8 | 9 | [*.yml] 10 | indent_size = 2 11 | 12 | [LICENSE] 13 | indent_size = 0 14 | -------------------------------------------------------------------------------- /.github/workflows/deploy.yml: -------------------------------------------------------------------------------- 1 | name: Deploy 2 | 3 | on: 4 | push: 5 | branches: 6 | - master 7 | workflow_dispatch: 8 | 9 | jobs: 10 | test: 11 | name: Test 12 | runs-on: ubuntu-latest 13 | 14 | steps: 15 | - uses: actions/checkout@v4 16 | 17 | - name: Use Node.js 18 | uses: actions/setup-node@v4 19 | with: 20 | node-version-file: .nvmrc 21 | cache: npm 22 | 23 | - name: Install Dependencies 24 | run: npm ci 25 | 26 | - name: Run Tests 27 | run: npm test 28 | 29 | deploy: 30 | name: Deploy 31 | needs: test 32 | runs-on: ubuntu-latest 33 | 34 | steps: 35 | - name: Trigger Website Staging Deployment 36 | uses: actions/github-script@v7 37 | with: 38 | github-token: ${{ secrets.USER_TOKEN }} 39 | script: | 40 | await github.rest.actions.createWorkflowDispatch({ 41 | owner: 'botblock', 42 | repo: 'static-site', 43 | workflow_id: 'deployment-staging.yml', 44 | ref: 'staging', 45 | }); 46 | 47 | - name: Trigger Website Production Deployment 48 | uses: actions/github-script@v7 49 | with: 50 | github-token: ${{ secrets.USER_TOKEN }} 51 | script: | 52 | await github.rest.actions.createWorkflowDispatch({ 53 | owner: 'botblock', 54 | repo: 'static-site', 55 | workflow_id: 'deployment-production.yml', 56 | ref: 'production', 57 | }); 58 | 59 | - name: Trigger API Staging Deployment 60 | uses: actions/github-script@v7 61 | with: 62 | github-token: ${{ secrets.USER_TOKEN }} 63 | script: | 64 | await github.rest.actions.createWorkflowDispatch({ 65 | owner: 'botblock', 66 | repo: 'api-worker', 67 | workflow_id: 'deployment-staging.yml', 68 | ref: 'staging', 69 | }); 70 | 71 | - name: Trigger API Production Deployment 72 | uses: actions/github-script@v7 73 | with: 74 | github-token: ${{ secrets.USER_TOKEN }} 75 | script: | 76 | await github.rest.actions.createWorkflowDispatch({ 77 | owner: 'botblock', 78 | repo: 'api-worker', 79 | workflow_id: 'deployment-production.yml', 80 | ref: 'production', 81 | }); 82 | -------------------------------------------------------------------------------- /.github/workflows/test.yml: -------------------------------------------------------------------------------- 1 | name: Test 2 | 3 | on: 4 | push: 5 | branches-ignore: 6 | - master 7 | pull_request: 8 | workflow_dispatch: 9 | 10 | jobs: 11 | test: 12 | name: Test 13 | runs-on: ubuntu-latest 14 | 15 | steps: 16 | - uses: actions/checkout@v4 17 | 18 | - name: Use Node.js 19 | uses: actions/setup-node@v4 20 | with: 21 | node-version-file: .nvmrc 22 | cache: npm 23 | 24 | - name: Install Dependencies 25 | run: npm ci 26 | 27 | - name: Run Tests 28 | run: npm test 29 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .idea/ 2 | .vscode/ 3 | node_modules/ 4 | .DS_Store 5 | -------------------------------------------------------------------------------- /.nvmrc: -------------------------------------------------------------------------------- 1 | v16.13.0 2 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Apache License 2 | Version 2.0, January 2004 3 | http://www.apache.org/licenses/ 4 | 5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 6 | 7 | 1. Definitions. 8 | 9 | "License" shall mean the terms and conditions for use, reproduction, 10 | and distribution as defined by Sections 1 through 9 of this document. 11 | 12 | "Licensor" shall mean the copyright owner or entity authorized by 13 | the copyright owner that is granting the License. 14 | 15 | "Legal Entity" shall mean the union of the acting entity and all 16 | other entities that control, are controlled by, or are under common 17 | control with that entity. For the purposes of this definition, 18 | "control" means (i) the power, direct or indirect, to cause the 19 | direction or management of such entity, whether by contract or 20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 21 | outstanding shares, or (iii) beneficial ownership of such entity. 22 | 23 | "You" (or "Your") shall mean an individual or Legal Entity 24 | exercising permissions granted by this License. 25 | 26 | "Source" form shall mean the preferred form for making modifications, 27 | including but not limited to software source code, documentation 28 | source, and configuration files. 29 | 30 | "Object" form shall mean any form resulting from mechanical 31 | transformation or translation of a Source form, including but 32 | not limited to compiled object code, generated documentation, 33 | and conversions to other media types. 34 | 35 | "Work" shall mean the work of authorship, whether in Source or 36 | Object form, made available under the License, as indicated by a 37 | copyright notice that is included in or attached to the work 38 | (an example is provided in the Appendix below). 39 | 40 | "Derivative Works" shall mean any work, whether in Source or Object 41 | form, that is based on (or derived from) the Work and for which the 42 | editorial revisions, annotations, elaborations, or other modifications 43 | represent, as a whole, an original work of authorship. For the purposes 44 | of this License, Derivative Works shall not include works that remain 45 | separable from, or merely link (or bind by name) to the interfaces of, 46 | the Work and Derivative Works thereof. 47 | 48 | "Contribution" shall mean any work of authorship, including 49 | the original version of the Work and any modifications or additions 50 | to that Work or Derivative Works thereof, that is intentionally 51 | submitted to Licensor for inclusion in the Work by the copyright owner 52 | or by an individual or Legal Entity authorized to submit on behalf of 53 | the copyright owner. For the purposes of this definition, "submitted" 54 | means any form of electronic, verbal, or written communication sent 55 | to the Licensor or its representatives, including but not limited to 56 | communication on electronic mailing lists, source code control systems, 57 | and issue tracking systems that are managed by, or on behalf of, the 58 | Licensor for the purpose of discussing and improving the Work, but 59 | excluding communication that is conspicuously marked or otherwise 60 | designated in writing by the copyright owner as "Not a Contribution." 61 | 62 | "Contributor" shall mean Licensor and any individual or Legal Entity 63 | on behalf of whom a Contribution has been received by Licensor and 64 | subsequently incorporated within the Work. 65 | 66 | 2. Grant of Copyright License. Subject to the terms and conditions of 67 | this License, each Contributor hereby grants to You a perpetual, 68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 69 | copyright license to reproduce, prepare Derivative Works of, 70 | publicly display, publicly perform, sublicense, and distribute the 71 | Work and such Derivative Works in Source or Object form. 72 | 73 | 3. Grant of Patent License. Subject to the terms and conditions of 74 | this License, each Contributor hereby grants to You a perpetual, 75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 76 | (except as stated in this section) patent license to make, have made, 77 | use, offer to sell, sell, import, and otherwise transfer the Work, 78 | where such license applies only to those patent claims licensable 79 | by such Contributor that are necessarily infringed by their 80 | Contribution(s) alone or by combination of their Contribution(s) 81 | with the Work to which such Contribution(s) was submitted. If You 82 | institute patent litigation against any entity (including a 83 | cross-claim or counterclaim in a lawsuit) alleging that the Work 84 | or a Contribution incorporated within the Work constitutes direct 85 | or contributory patent infringement, then any patent licenses 86 | granted to You under this License for that Work shall terminate 87 | as of the date such litigation is filed. 88 | 89 | 4. Redistribution. You may reproduce and distribute copies of the 90 | Work or Derivative Works thereof in any medium, with or without 91 | modifications, and in Source or Object form, provided that You 92 | meet the following conditions: 93 | 94 | (a) You must give any other recipients of the Work or 95 | Derivative Works a copy of this License; and 96 | 97 | (b) You must cause any modified files to carry prominent notices 98 | stating that You changed the files; and 99 | 100 | (c) You must retain, in the Source form of any Derivative Works 101 | that You distribute, all copyright, patent, trademark, and 102 | attribution notices from the Source form of the Work, 103 | excluding those notices that do not pertain to any part of 104 | the Derivative Works; and 105 | 106 | (d) If the Work includes a "NOTICE" text file as part of its 107 | distribution, then any Derivative Works that You distribute must 108 | include a readable copy of the attribution notices contained 109 | within such NOTICE file, excluding those notices that do not 110 | pertain to any part of the Derivative Works, in at least one 111 | of the following places: within a NOTICE text file distributed 112 | as part of the Derivative Works; within the Source form or 113 | documentation, if provided along with the Derivative Works; or, 114 | within a display generated by the Derivative Works, if and 115 | wherever such third-party notices normally appear. The contents 116 | of the NOTICE file are for informational purposes only and 117 | do not modify the License. You may add Your own attribution 118 | notices within Derivative Works that You distribute, alongside 119 | or as an addendum to the NOTICE text from the Work, provided 120 | that such additional attribution notices cannot be construed 121 | as modifying the License. 122 | 123 | You may add Your own copyright statement to Your modifications and 124 | may provide additional or different license terms and conditions 125 | for use, reproduction, or distribution of Your modifications, or 126 | for any such Derivative Works as a whole, provided Your use, 127 | reproduction, and distribution of the Work otherwise complies with 128 | the conditions stated in this License. 129 | 130 | 5. Submission of Contributions. Unless You explicitly state otherwise, 131 | any Contribution intentionally submitted for inclusion in the Work 132 | by You to the Licensor shall be under the terms and conditions of 133 | this License, without any additional terms or conditions. 134 | Notwithstanding the above, nothing herein shall supersede or modify 135 | the terms of any separate license agreement you may have executed 136 | with Licensor regarding such Contributions. 137 | 138 | 6. Trademarks. This License does not grant permission to use the trade 139 | names, trademarks, service marks, or product names of the Licensor, 140 | except as required for reasonable and customary use in describing the 141 | origin of the Work and reproducing the content of the NOTICE file. 142 | 143 | 7. Disclaimer of Warranty. Unless required by applicable law or 144 | agreed to in writing, Licensor provides the Work (and each 145 | Contributor provides its Contributions) on an "AS IS" BASIS, 146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 147 | implied, including, without limitation, any warranties or conditions 148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 149 | PARTICULAR PURPOSE. You are solely responsible for determining the 150 | appropriateness of using or redistributing the Work and assume any 151 | risks associated with Your exercise of permissions under this License. 152 | 153 | 8. Limitation of Liability. In no event and under no legal theory, 154 | whether in tort (including negligence), contract, or otherwise, 155 | unless required by applicable law (such as deliberate and grossly 156 | negligent acts) or agreed to in writing, shall any Contributor be 157 | liable to You for damages, including any direct, indirect, special, 158 | incidental, or consequential damages of any character arising as a 159 | result of this License or out of the use or inability to use the 160 | Work (including but not limited to damages for loss of goodwill, 161 | work stoppage, computer failure or malfunction, or any and all 162 | other commercial damages or losses), even if such Contributor 163 | has been advised of the possibility of such damages. 164 | 165 | 9. Accepting Warranty or Additional Liability. While redistributing 166 | the Work or Derivative Works thereof, You may choose to offer, 167 | and charge a fee for, acceptance of support, warranty, indemnity, 168 | or other liability obligations and/or rights consistent with this 169 | License. However, in accepting such obligations, You may act only 170 | on Your own behalf and on Your sole responsibility, not on behalf 171 | of any other Contributor, and only if You agree to indemnify, 172 | defend, and hold each Contributor harmless for any liability 173 | incurred by, or claims asserted against, such Contributor by reason 174 | of your accepting any such warranty or additional liability. 175 | 176 | END OF TERMS AND CONDITIONS 177 | 178 | APPENDIX: How to apply the Apache License to your work. 179 | 180 | To apply the Apache License to your work, attach the following 181 | boilerplate notice, with the fields enclosed by brackets "[]" 182 | replaced with your own identifying information. (Don't include 183 | the brackets!) The text should be enclosed in the appropriate 184 | comment syntax for the file format. We also recommend that a 185 | file or class name and description of purpose be included on the 186 | same "printed page" as the copyright notice for easier 187 | identification within third-party archives. 188 | 189 | Copyright 2021 Matt (IPv4) Cowley 190 | 191 | Licensed under the Apache License, Version 2.0 (the "License"); 192 | you may not use this file except in compliance with the License. 193 | You may obtain a copy of the License at 194 | 195 | http://www.apache.org/licenses/LICENSE-2.0 196 | 197 | Unless required by applicable law or agreed to in writing, software 198 | distributed under the License is distributed on an "AS IS" BASIS, 199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 200 | See the License for the specific language governing permissions and 201 | limitations under the License. 202 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # data 2 | 3 | Open data for BotBlock.org, consumed for the API worker & website. 4 | 5 | ## Schemas 6 | 7 | Schemas are available for each `data` type in [`schema`](schema): 8 | 9 | - [`feature`](schema/feature.json) 10 | - [`legacy`](schema/legacy.json) 11 | - [`library`](schema/library.json) 12 | - [`list`](schema/list.json) 13 | 14 | ## OpenAPI 15 | 16 | OpenAPI documentation is available at [`openapi.yml`](openapi.yml). 17 | -------------------------------------------------------------------------------- /data/features/additional-bot-owners-editors.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "../../schema/feature.json", 3 | "name": "Additional Bot Owners/Editors", 4 | "id": "additional-bot-owners-editors", 5 | "display": 0, 6 | "type": 0, 7 | "description": "Site allows to add additional Bot Owners/Editors to the bot." 8 | } 9 | -------------------------------------------------------------------------------- /data/features/bot-internationalisation-support.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "../../schema/feature.json", 3 | "name": " Bot Internationalisation Support", 4 | "id": "bot-internationalisation-support", 5 | "display": 4, 6 | "type": 0, 7 | "description": "Site supports adding descriptions of a bot in multiple languages." 8 | } 9 | -------------------------------------------------------------------------------- /data/features/bot-resubmission.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "../../schema/feature.json", 3 | "name": "Bot Resubmission", 4 | "id": "bot-resubmission", 5 | "display": 69, 6 | "type": 0, 7 | "description": "Bot data is stored when they are denied/deleted and can be easily resubmitted by the owner." 8 | } 9 | -------------------------------------------------------------------------------- /data/features/bot-reviews.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "../../schema/feature.json", 3 | "name": "Bot Reviews", 4 | "id": "bot-reviews", 5 | "display": 45, 6 | "type": 0, 7 | "description": "Allows users to share how their bot experience is" 8 | } 9 | -------------------------------------------------------------------------------- /data/features/certified-bot-vanity-urls.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "../../schema/feature.json", 3 | "name": "Certified Bot Vanity URLs", 4 | "id": "certified-bot-vanity-urls", 5 | "display": 3, 6 | "type": 0, 7 | "description": "Site offers vanity URLs for certified bots." 8 | } 9 | -------------------------------------------------------------------------------- /data/features/custom-bot-donate-link.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "../../schema/feature.json", 3 | "name": "Custom Bot Donate Link", 4 | "id": "custom-bot-donate-link", 5 | "display": 3, 6 | "type": 0, 7 | "description": "Site has an option to add a custom donation link for the bot." 8 | } 9 | -------------------------------------------------------------------------------- /data/features/custom-bot-github-link.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "../../schema/feature.json", 3 | "name": "Custom Bot GitHub Link", 4 | "id": "custom-bot-github-link", 5 | "display": 3, 6 | "type": 0, 7 | "description": "Site has an option to add a custom GitHub link to the bot." 8 | } 9 | -------------------------------------------------------------------------------- /data/features/custom-bot-invite-link.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "../../schema/feature.json", 3 | "name": "Custom Bot Invite Link", 4 | "id": "custom-bot-invite-link", 5 | "display": 3, 6 | "type": 0, 7 | "description": "Site has an option to add a custom invite link for the bot." 8 | } 9 | -------------------------------------------------------------------------------- /data/features/custom-bot-support-link.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "../../schema/feature.json", 3 | "name": "Custom Bot Support Link", 4 | "id": "custom-bot-support-link", 5 | "display": 3, 6 | "type": 0, 7 | "description": "Site has an option to add a custom support link for the bot." 8 | } 9 | -------------------------------------------------------------------------------- /data/features/custom-bot-website-link.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "../../schema/feature.json", 3 | "name": "Custom Bot Website Link", 4 | "id": "custom-bot-website-link", 5 | "display": 3, 6 | "type": 0, 7 | "description": "Site has an option to add a custom website link for the bot." 8 | } 9 | -------------------------------------------------------------------------------- /data/features/discord-bot-support-link.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "../../schema/feature.json", 3 | "name": "Discord Bot Support Link", 4 | "id": "discord-bot-support-link", 5 | "display": 3, 6 | "type": 0, 7 | "description": "Site has an option to add a discord support link." 8 | } 9 | -------------------------------------------------------------------------------- /data/features/has-ads-on-site.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "../../schema/feature.json", 3 | "name": "Has Ads on Site", 4 | "id": "has-ads-on-site", 5 | "display": 5, 6 | "type": 1, 7 | "description": "Site displays advertisement." 8 | } 9 | -------------------------------------------------------------------------------- /data/features/has-categories-or-tags.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "../../schema/feature.json", 3 | "name": "Has Categories or Tags", 4 | "id": "has-categories-or-tags", 5 | "display": 0, 6 | "type": 0, 7 | "description": "Site offers categories or tags that can be added to a bot." 8 | } 9 | -------------------------------------------------------------------------------- /data/features/has-certification-program.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "../../schema/feature.json", 3 | "name": "Has Certification Program", 4 | "id": "has-certification-program", 5 | "display": 0, 6 | "type": 0, 7 | "description": "Site has an option to get a bot certified." 8 | } 9 | -------------------------------------------------------------------------------- /data/features/has-mobile-support.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "../../schema/feature.json", 3 | "name": "Has Mobile Support", 4 | "id": "has-mobile-support", 5 | "display": 0, 6 | "type": 0, 7 | "description": "Site is mobile friendly (Can be used on smartphones/tablets)." 8 | } 9 | -------------------------------------------------------------------------------- /data/features/has-search.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "../../schema/feature.json", 3 | "name": "Has Search", 4 | "id": "has-search", 5 | "display": 0, 6 | "type": 0, 7 | "description": "Site offers a way to search for bots on it." 8 | } 9 | -------------------------------------------------------------------------------- /data/features/has-voting.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "../../schema/feature.json", 3 | "name": "Has Voting", 4 | "id": "has-voting", 5 | "display": 2, 6 | "type": 0, 7 | "description": "Site offers a way to vote for a bot." 8 | } 9 | -------------------------------------------------------------------------------- /data/features/has-widget.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "../../schema/feature.json", 3 | "name": "Has Widget", 4 | "id": "has-widget", 5 | "display": 0, 6 | "type": 0, 7 | "description": "Site offers a widget (Image depicting specific stats of the bot)." 8 | } 9 | -------------------------------------------------------------------------------- /data/features/html-long-description.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "../../schema/feature.json", 3 | "name": "HTML Long Description", 4 | "id": "html-long-description", 5 | "display": 4, 6 | "type": 0, 7 | "description": "Site supports HTML in the bot's long description." 8 | } 9 | -------------------------------------------------------------------------------- /data/features/iframe-long-description.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "../../schema/feature.json", 3 | "name": "Iframe Long Description", 4 | "id": "iframe-long-description", 5 | "display": 4, 6 | "type": 0, 7 | "description": "Site supports iframes in the bot's long description." 8 | } 9 | -------------------------------------------------------------------------------- /data/features/markdown-long-description.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "../../schema/feature.json", 3 | "name": "Markdown Long Description", 4 | "id": "markdown-long-description", 5 | "display": 4, 6 | "type": 0, 7 | "description": "Site supports Markdown in the bot's long description." 8 | } 9 | -------------------------------------------------------------------------------- /data/features/offers-paid-promotion.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "../../schema/feature.json", 3 | "name": "Offers Paid Promotion", 4 | "id": "offers-paid-promotion", 5 | "display": 5, 6 | "type": 1, 7 | "description": "Site offers a way to promote a bot through payment (e.g. paid slots on frontpage)." 8 | } 9 | -------------------------------------------------------------------------------- /data/features/paid-access.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "../../schema/feature.json", 3 | "name": "Paid Access", 4 | "id": "paid-access", 5 | "display": 5, 6 | "type": 1, 7 | "description": "You have to pay in order to gain access to the site and its API." 8 | } 9 | -------------------------------------------------------------------------------- /data/features/requires-owner-in-server.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "../../schema/feature.json", 3 | "name": "Requires Owner in Server", 4 | "id": "requires-owner-in-server", 5 | "display": 0, 6 | "type": 1, 7 | "description": "Site requires the Bot Owner to be in its Discord Server." 8 | } 9 | -------------------------------------------------------------------------------- /data/features/server-count-api.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "../../schema/feature.json", 3 | "name": "Server Count API", 4 | "id": "server-count-api", 5 | "display": 0, 6 | "type": 0, 7 | "description": "Site offers an API to post the server count of a bot." 8 | } 9 | -------------------------------------------------------------------------------- /data/features/site-internationalisation-support.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "../../schema/feature.json", 3 | "name": " Site Internationalisation Support", 4 | "id": "site-internationalisation-support", 5 | "display": 5, 6 | "type": 0, 7 | "description": "Site supports multiple languages." 8 | } 9 | -------------------------------------------------------------------------------- /data/features/vanity-urls-for-all.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "../../schema/feature.json", 3 | "name": "Vanity URLs for all", 4 | "id": "vanity-urls-for-all", 5 | "display": 3, 6 | "type": 0, 7 | "description": "Site offers a vanity URL for bots." 8 | } 9 | -------------------------------------------------------------------------------- /data/features/votes-sent-to-webhooks.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "../../schema/feature.json", 3 | "name": "Votes sent to Webhooks", 4 | "id": "votes-sent-to-webhooks", 5 | "display": 2, 6 | "type": 1, 7 | "description": "Site sends votes through Webhooks." 8 | } 9 | -------------------------------------------------------------------------------- /data/features/voting-data-exposed.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "../../schema/feature.json", 3 | "name": "Voting Data Exposed", 4 | "id": "voting-data-exposed", 5 | "display": 2, 6 | "type": 1, 7 | "description": "Site allows others to lookup vote data of a bot (e.g. through an API endpoint)." 8 | } 9 | -------------------------------------------------------------------------------- /data/legacy.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "../schema/legacy.json", 3 | "vultrex.io": "discordbots.co", 4 | "space-bot-list.org": "space-bot-list.xyz", 5 | "mythicalbots.xyz": "bots.idledev.org", 6 | "infinitybots.xyz": "infinitybots.gg", 7 | "infinitybots.com": "infinitybots.gg", 8 | "infinitybotlist.com": "infinitybots.gg", 9 | "distop.xyz": "bots.distop.xyz", 10 | "discordlist.co": "nooder.co", 11 | "discordbots.org": "top.gg", 12 | "discordbotreviews.xyz": "nooder.co", 13 | "botsparadiscord.xyz": "botsparadiscord.com", 14 | "botsfordiscord.com": "discords.com", 15 | "botlist.space": "discordlist.space", 16 | "arcane-botcenter.xyz": "arcane-center.xyz", 17 | "bladebotlist.xyz": "bladelist.gg", 18 | "discordz.xyz": "discordz.gg", 19 | "radarbotdirectory.xyz": "radarcord.net", 20 | "bhbotlist.tech": "cybralist.com", 21 | "bhlist.co.in": "cybralist.com" 22 | } 23 | -------------------------------------------------------------------------------- /data/libraries/botblock-blapi.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "../../schema/library.json", 3 | "repo": "botblock/BLAPI", 4 | "language": "Javascript", 5 | "name": "BLAPI", 6 | "description": "blapi is a library that makes use of the [BotBlock API](/docs) to post directly to BotBlock to forward your bot server/guild count on to all lists but also uses the [lists endpoint](/docs#get-api-lists) to manually post to each bot list if you get ratelimited from the [BotBlock post count API](/docs#post-api-count).", 7 | "package_link": "https://www.npmjs.com/package/blapi", 8 | "package_link_name": "NPM", 9 | "badge_image": "https://img.shields.io/npm/v/blapi.svg?style=flat-square", 10 | "badge_url": "https://www.npmjs.com/package/blapi", 11 | "example_usage": "const Discord = require(\"discord.js\");\nconst blapi = require(\"blapi\");\nconst apiKeys = {\n \"bots.ondiscord.xyz\": \"dsag38_auth_token_fda6gs\", // Add other bot lists as needed\n \"botlist.space\": \"qos56a_auth_token_gfd8g6\"\n}\n\nlet bot = new Discord.Client({ autoReconnect: true });\nblapi.handle(bot, apiKeys, 60); // If interval is not passed (60), it will default to every 30 minutes" 12 | } 13 | -------------------------------------------------------------------------------- /data/libraries/botblock-botlist.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "../../schema/library.json", 3 | "repo": "botblock/BotList", 4 | "language": "Javascript", 5 | "name": "BotList", 6 | "description": "BotList is a package that uses the [BotBlock API lists endpoint](/docs#get-api-lists) to fetch all bot list information from BotBlock and then manually posts to each one from your bot instead of through the [BotBlock API count endpoint](/docs#post-api-count).", 7 | "package_link": "https://www.npmjs.com/package/botlist", 8 | "package_link_name": "NPM", 9 | "badge_image": "https://img.shields.io/npm/v/botlist.svg?style=flat-square", 10 | "badge_url": "https://www.npmjs.com/package/botlist", 11 | "example_usage": "const BotList = require('botlist');\nconst botID = 'xxx';\nconst client = new BotList.Client(botID, {\n tokens: {\n 'bots.ondiscord.xyz': 'dsag38_auth_token_fda6gs', // Add other bot lists as needed\n 'botlist.space': 'qos56a_auth_token_gfd8g6'\n },\n interval: 1000 * 30\n});\n\nclient.on('beforePost', () => {\n if (!bot.ready) return;\n const serverCount = bot.guilds.size;\n const shards = bot.shards.size;\n client.update(serverCount, shards);\n});\n\nclient.on('afterPost', (successful, failed) => {\n console.log('Just finished posting to all bot lists, ' + successful + ' were successful, ' + failed + ' failed to post');\n});\n\nclient.on('error', (error) => {\n console.warn('Something happened', error);\n});\n\nclient.start();" 12 | } 13 | -------------------------------------------------------------------------------- /data/libraries/botblock-botlistapi.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "../../schema/library.json", 3 | "repo": "botblock/BotListAPI", 4 | "language": "C#", 5 | "name": "BotListAPI", 6 | "description": "BotListAPI is a C# nuget package for the discord.net lib that provides an easy method to manually or automatically post your bot's server count every 10 minutes with information for each bot list through the [BotBlock API](/docs). It also supports sharded clients and .net framework or .net core.", 7 | "package_link": "https://www.nuget.org/packages/BotListAPI", 8 | "package_link_name": "NuGet", 9 | "badge_image": "https://img.shields.io/nuget/v/BotListAPI.svg?style=flat-square", 10 | "badge_url": "https://www.nuget.org/packages/BotListAPI", 11 | "example_usage": "ListClient = new ListClient(_Client, new ListConfig\n{\n BotsOnDiscord = \"dsag38_auth_token_fda6gs\", // Add any other lists as needed\n BotListSpace = \"qos56a_auth_token_gfd8g6\"\n});\n\nListClient.Start();" 12 | } 13 | -------------------------------------------------------------------------------- /data/libraries/botblock-discordlists-py.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "../../schema/library.json", 3 | "repo": "botblock/discordlists.py", 4 | "language": "Python", 5 | "name": "discordlists.py", 6 | "description": "discordlists.py is available via pip and provides an easy to use Client class to automatically and manually post your server/guild count to the [BotBlock API](/docs#post-api-count) to forward it on to all BotBlock bot lists. This library also provides a way to get information about a bot from all lists on BotBlock through the [GET bot API endpoint](/docs#get-api-lists).", 7 | "package_link": "https://pypi.org/project/discordlists.py/", 8 | "package_link_name": "PyPI", 9 | "badge_image": "https://img.shields.io/pypi/v/discordlists.py.svg?style=flat-square", 10 | "badge_url": "https://pypi.org/project/discordlists.py/", 11 | "example_usage": "from discord.ext import commands\n\nimport discordlists\n\n\nclass DiscordListsPost(commands.Cog):\n def __init__(self, bot):\n self.bot = bot\n self.api = discordlists.Client(self.bot) # Create a Client instance\n self.api.set_auth(\"bots.ondiscord.xyz\", \"dsag38_auth_token_fda6gs\") # Set authorisation token for a bot list\n self.api.set_auth(\"botlist.space\", \"qos56a_auth_token_gfd8g6\") # Set authorisation token for a bot list\n self.api.start_loop() # Posts the server count automatically every 30 minutes\n\n @commands.command()\n async def post(self, ctx: commands.Context):\n \"\"\"\n Manually posts guild count using discordlists.py (BotBlock)\n \"\"\"\n try:\n result = await self.api.post_count()\n except Exception as e:\n await ctx.send(\"Request failed: `{}`\".format(e))\n return\n\n await ctx.send(\"Successfully manually posted server count ({:,}) to {:,} lists.\"\n \"\\nFailed to post server count to {:,} lists.\".format(self.api.server_count,\n len(result[\"success\"].keys()),\n len(result[\"failure\"].keys())))\n\n\ndef setup(bot):\n bot.add_cog(DiscordListsPost(bot))" 12 | } 13 | -------------------------------------------------------------------------------- /data/libraries/botblock-javabotblockapi.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "../../schema/library.json", 3 | "repo": "botblock/JavaBotBlockAPI", 4 | "language": "Java", 5 | "name": "JavaBotBlockAPI", 6 | "description": "JavaBotBlockAPI is a Java Wrapper for the BotBlock API, which allows you to either GET or POST Bot information such as your bot's guild count. \r\nThe Original library - [BotBlock4J](https://github.com/spide-r/BotBlock4J) - that this wrapper originates from, was made by Nathan-Webb. Since then has it been recoded, improved and is now maintained by [Andre601](https://github.com/Andre601) under its new name. \r\nThe Java Wrapper covers the full API features offered by BotBlock, meaning you can GET either Bot or List information or POST Bot information to multiple Lists. \r\nIn addition does it offer a [Javacord](https://github.com/javacord/Javacord) and [JDA](https://github.com/DV8FromTheWorld/JDA) module which allows you to more easly provide the Guild count of your bot for POSTing. \r\nPlease take a look at the [Usage Examples](https://github.com/botblock/JavaBotBlockAPI#usage-examples) on the GitHub Repository for some of the methods this Wrapper offers!", 7 | "package_link": "https://ci.codemc.io/job/botblock/job/JavaBotBlockAPI/lastSuccessfulBuild/", 8 | "package_link_name": "CodeMC", 9 | "badge_image": "https://img.shields.io/nexus/maven-public/org.botblock/javabotblockapi-core?label=CodeMC&server=https%3A%2F%2Frepo.codemc.io&style=flat-square", 10 | "badge_url": "https://ci.codemc.io/job/botblock/job/JavaBotBlockAPI/lastSuccessfulBuild/", 11 | "example_usage": "// Create BotBlockAPI instance\r\nBotBlockAPI api = new BotBlockAPI.Builder()\r\n .addAuthToken(\"bots.ondiscord.xyz\", \"dsag38_auth_token_fda6gs\")\r\n .addAuthToken(Site.BOTLIST_SPACE, \"qos56a_auth_token_gfd8g6\")\r\n .build();\r\n\r\n// Create PostAction instance\r\nPostAction postAction = new PostAction(\"botId\");\r\n\r\n// Post manually\r\npostAction.postGuilds(\"botId\", guilds, api);\r\n\r\n// Post automatically\r\npostAction.enableAutoPost(\"botId\", guilds, api);\r\n\r\n// Disable automatic posting\r\npostAction.disableAutoPost(); // Disable with no delay\r\npostAction.disableAutoPost(api); // Disable with BotBlockAPI#getUpdateDelay() delay\r\npostAction.disableAutoPost(1, TimeUnit.MINUTES); // Disable with 1 Minute delay.\r\n\r\n// ------------------------------\r\n\r\n// Create an instance of GetBotAction for GETting bot info\r\nGetBotAction getBot = new GetBotAction();\r\n\r\n// Get complete Bot information.\r\ngetBot.getBotInfo(\"myBotId\");\r\n\r\n// Create an instance of GetListAction for GETting list info\r\nGetListAction getList = new GetListAction();\r\n\r\n// Get all available lists.\r\ngetList.getLists(\"randomId\");" 12 | } 13 | -------------------------------------------------------------------------------- /data/lists/arcane-center.xyz.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "../../schema/list.json", 3 | "id": "arcane-center.xyz", 4 | "added": 1578760530, 5 | "name": "Arcane Bot Center", 6 | "url": "https://arcane-center.xyz/", 7 | "icon": "https://cdn.discordapp.com/icons/561851349831122954/48ff7211df98c58c2f16b73a758a9be7.png", 8 | "language": "English", 9 | "display": 1, 10 | "defunct": 1, 11 | "discord_only": 1, 12 | "description": "Discover hundreds of Discord bots and add your own to make it popular", 13 | "api_docs": "https://arcane-center.xyz/documentation", 14 | "api_post": "https://arcane-center.xyz/api/:id/stats", 15 | "api_post_method": null, 16 | "api_field": "server_count", 17 | "api_shard_id": null, 18 | "api_shard_count": "shard_count", 19 | "api_shards": null, 20 | "api_get": null, 21 | "api_all": null, 22 | "view_bot": "https://arcane-center.xyz/bot/:id", 23 | "bot_widget": "https://arcane-center.xyz/api/widget/:id", 24 | "content": "Bot list is defunct.", 25 | "owners": "Victor#7624 (287583441585700865), Samuel-Tutorapide#1868 (137569112556699649)", 26 | "discord": "https://discord.gg/euUKDwh", 27 | "features": [ 28 | "markdown-long-description", 29 | "custom-bot-invite-link", 30 | "custom-bot-website-link", 31 | "discord-bot-support-link", 32 | "voting-data-exposed", 33 | "has-categories-or-tags", 34 | "requires-owner-in-server" 35 | ] 36 | } 37 | -------------------------------------------------------------------------------- /data/lists/arobotlist.xyz.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "../../schema/list.json", 3 | "id": "arobotlist.xyz", 4 | "added": 1604313680, 5 | "name": "AroBotList", 6 | "url": "https://arobotlist.xyz", 7 | "icon": "https://cdn.discordapp.com/attachments/738134549724397599/757311076575477760/logo.png", 8 | "language": "English & French", 9 | "display": 1, 10 | "defunct": 1, 11 | "discord_only": 1, 12 | "description": "AroBotList is a growing directory of Discord bots to improve your server - Find the perfect bot for your needs and add it to your server easily, quickly and for free.", 13 | "api_docs": null, 14 | "api_post": null, 15 | "api_post_method": null, 16 | "api_field": null, 17 | "api_shard_id": null, 18 | "api_shard_count": null, 19 | "api_shards": null, 20 | "api_get": null, 21 | "api_all": null, 22 | "view_bot": "https://arobotlist.xyz/bots/:id", 23 | "bot_widget": null, 24 | "content": "Website no longer online", 25 | "owners": "Enil#0666 (733396325411979335), Louchtope#0666 (294716504036081664)", 26 | "discord": "https://discord.gg/xDceYc6", 27 | "features": [ 28 | "bot-resubmission", 29 | "site-internationalisation-support", 30 | "html-long-description", 31 | "markdown-long-description", 32 | "certified-bot-vanity-urls", 33 | "custom-bot-invite-link", 34 | "has-voting", 35 | "has-categories-or-tags", 36 | "has-mobile-support", 37 | "has-search", 38 | "requires-owner-in-server" 39 | ] 40 | } 41 | -------------------------------------------------------------------------------- /data/lists/automacord.xyz.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "../../schema/list.json", 3 | "id": "automacord.xyz", 4 | "added": 1535444547, 5 | "name": "AutomaCord", 6 | "url": "https://automacord.xyz/", 7 | "icon": "https://cdn.discordapp.com/icons/483344253963993113/3661052b289c88dfffd5a91080d6beae.png", 8 | "language": "English", 9 | "display": 1, 10 | "defunct": 1, 11 | "discord_only": 1, 12 | "description": null, 13 | "api_docs": null, 14 | "api_post": null, 15 | "api_post_method": null, 16 | "api_field": null, 17 | "api_shard_id": null, 18 | "api_shard_count": null, 19 | "api_shards": null, 20 | "api_get": null, 21 | "api_all": null, 22 | "view_bot": "https://automacord.xyz/bot/:id", 23 | "bot_widget": null, 24 | "content": null, 25 | "owners": "Kromatic#0420 (180093157554388993)", 26 | "discord": "https://discord.gg/XQT4DEt", 27 | "features": [ 28 | "markdown-long-description", 29 | "custom-bot-invite-link", 30 | "additional-bot-owners-editors" 31 | ] 32 | } 33 | -------------------------------------------------------------------------------- /data/lists/bladelist.gg.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "../../schema/list.json", 3 | "id": "bladelist.gg", 4 | "added": 1581889191, 5 | "name": "BladeList", 6 | "url": "https://bladelist.gg/", 7 | "icon": "https://cdn.discordapp.com/icons/645281161949741064/fad8d2e250d653f180a547f728273f5a.png", 8 | "language": "English", 9 | "display": 1, 10 | "defunct": 1, 11 | "discord_only": 1, 12 | "description": "Discover a lot of new Discord bots for free and without login ! we check your bot in less than 12h* ", 13 | "api_docs": "https://docs.bladelist.gg/", 14 | "api_post": "https://api.bladelist.gg/bots/:id", 15 | "api_post_method": null, 16 | "api_field": "server_count", 17 | "api_shard_id": null, 18 | "api_shard_count": "shard_count", 19 | "api_shards": null, 20 | "api_get": "https://api.bladelist.gg/bots/:id", 21 | "api_all": null, 22 | "view_bot": "https://bladelist.gg/bots/:id", 23 | "bot_widget": "https://bladelist.gg/bots/:id/widget.png", 24 | "content": null, 25 | "owners": "Nao#0999 (440249307191312394), Bubbly#7055 (664141231366078464), HiiZun#0001 (355995885085392896)", 26 | "discord": "https://discord.gg/pQc6ZRH", 27 | "features": [ 28 | "bot-resubmission", 29 | "offers-paid-promotion", 30 | "markdown-long-description", 31 | "certified-bot-vanity-urls", 32 | "custom-bot-github-link", 33 | "custom-bot-invite-link", 34 | "custom-bot-support-link", 35 | "custom-bot-website-link", 36 | "discord-bot-support-link", 37 | "has-voting", 38 | "votes-sent-to-webhooks", 39 | "has-categories-or-tags", 40 | "has-mobile-support", 41 | "has-search", 42 | "server-count-api" 43 | ] 44 | } 45 | -------------------------------------------------------------------------------- /data/lists/blist.xyz.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "../../schema/list.json", 3 | "id": "blist.xyz", 4 | "added": 1597518281, 5 | "name": "Blist", 6 | "url": "https://blist.xyz/", 7 | "icon": "https://blist.xyz/main_site/staticfiles/main/assets/blist.png", 8 | "language": "English", 9 | "display": 1, 10 | "defunct": 1, 11 | "discord_only": 1, 12 | "description": "The best bots ever conceived: by you and for you", 13 | "api_docs": "https://blist.xyz/docs/", 14 | "api_post": "https://blist.xyz/api/v2/bot/:id/stats", 15 | "api_post_method": null, 16 | "api_field": "server_count", 17 | "api_shard_id": null, 18 | "api_shard_count": "shard_count", 19 | "api_shards": null, 20 | "api_get": "https://blist.xyz/api/v2/bot/:id", 21 | "api_all": null, 22 | "view_bot": "https://blist.xyz/bot/:id", 23 | "bot_widget": null, 24 | "content": null, 25 | "owners": "A Trash Coder#0214 (679118121943957504)", 26 | "discord": "https://blist.xyz/server/", 27 | "features": [ 28 | "bot-resubmission", 29 | "bot-reviews", 30 | "offers-paid-promotion", 31 | "bot-internationalisation-support", 32 | "html-long-description", 33 | "iframe-long-description", 34 | "markdown-long-description", 35 | "certified-bot-vanity-urls", 36 | "custom-bot-donate-link", 37 | "custom-bot-github-link", 38 | "custom-bot-invite-link", 39 | "custom-bot-support-link", 40 | "custom-bot-website-link", 41 | "discord-bot-support-link", 42 | "has-voting", 43 | "votes-sent-to-webhooks", 44 | "additional-bot-owners-editors", 45 | "has-categories-or-tags", 46 | "has-mobile-support", 47 | "has-search", 48 | "requires-owner-in-server", 49 | "server-count-api" 50 | ] 51 | } 52 | -------------------------------------------------------------------------------- /data/lists/boatlist.ml.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "../../schema/list.json", 3 | "id": "boatlist.ml", 4 | "added": 1533208489, 5 | "name": "Boat List", 6 | "url": "https://boatlist.ml/", 7 | "icon": "https://cdn.discordapp.com/icons/425727209873997845/93665eebf1ef572917ec0e4c66be88ad.png", 8 | "language": "English", 9 | "display": 1, 10 | "defunct": 1, 11 | "discord_only": 1, 12 | "description": null, 13 | "api_docs": null, 14 | "api_post": "https://boatlist.ml/api/bots/:id/stats", 15 | "api_post_method": null, 16 | "api_field": "server_count", 17 | "api_shard_id": null, 18 | "api_shard_count": null, 19 | "api_shards": null, 20 | "api_get": null, 21 | "api_all": null, 22 | "view_bot": null, 23 | "bot_widget": null, 24 | "content": "This list has shut down and has been replaced by a newer version under different management: https://botblock.org/lists/boatlist.xyz", 25 | "owners": "Kolkies#9876 (209609796704403456)", 26 | "discord": "https://discord.gg/SHEtT3x", 27 | "features": [ 28 | "custom-bot-github-link" 29 | ] 30 | } 31 | -------------------------------------------------------------------------------- /data/lists/boatlist.xyz.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "../../schema/list.json", 3 | "id": "boatlist.xyz", 4 | "added": 1535982517, 5 | "name": "Boat List", 6 | "url": "https://boatlist.xyz/", 7 | "icon": "https://cdn.discordapp.com/icons/446685480046559232/b573d1c1f4ea5fea1888865521a372ad.png", 8 | "language": "English", 9 | "display": 1, 10 | "defunct": 1, 11 | "discord_only": 1, 12 | "description": null, 13 | "api_docs": null, 14 | "api_post": null, 15 | "api_post_method": null, 16 | "api_field": null, 17 | "api_shard_id": null, 18 | "api_shard_count": null, 19 | "api_shards": null, 20 | "api_get": null, 21 | "api_all": null, 22 | "view_bot": "https://boatlist.xyz/bot/:id", 23 | "bot_widget": null, 24 | "content": null, 25 | "owners": "Andrew#6621 (408953935223717898), Ankrad#0597 (297403616468140032), Deni#0274 (324920582665928727)", 26 | "discord": "https://discord.gg/k5MRzdS", 27 | "features": [] 28 | } 29 | -------------------------------------------------------------------------------- /data/lists/boatspace.xyz.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "../../schema/list.json", 3 | "id": "boatspace.xyz", 4 | "added": 1620045793, 5 | "name": "BoatSpace", 6 | "url": "https://boatspace.xyz/", 7 | "icon": "https://boatspace.xyz/cdn/img/boat.png", 8 | "language": "English", 9 | "display": 1, 10 | "defunct": 1, 11 | "discord_only": 1, 12 | "description": "The best bot list on the internet! BoatSpace enables users to find the best bot for their Discord server fast, easily, and for free!", 13 | "api_docs": "https://docs.boatspace.xyz/", 14 | "api_post": "https://boatspace.xyz/api/bots/:id", 15 | "api_post_method": null, 16 | "api_field": "server_count", 17 | "api_shard_id": null, 18 | "api_shard_count": "shard_count", 19 | "api_shards": null, 20 | "api_get": "https://boatspace.xyz/api/bots/:id", 21 | "api_all": null, 22 | "view_bot": null, 23 | "bot_widget": "https://boatspace.xyz/api/bots/:id/widget?type=png", 24 | "content": null, 25 | "owners": "HGDev#9997 (242734840829575169)", 26 | "discord": "https://discord.gg/bVakMZY", 27 | "features": [ 28 | "has-ads-on-site", 29 | "html-long-description", 30 | "markdown-long-description", 31 | "certified-bot-vanity-urls", 32 | "custom-bot-support-link", 33 | "custom-bot-website-link", 34 | "has-voting", 35 | "has-certification-program", 36 | "has-mobile-support" 37 | ] 38 | } 39 | -------------------------------------------------------------------------------- /data/lists/botlist.co.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "../../schema/list.json", 3 | "id": "botlist.co", 4 | "added": 1532965633, 5 | "name": "BotList", 6 | "url": "https://botlist.co/platforms/discord", 7 | "icon": "https://botlist.co/images/BotList_logo.svg", 8 | "language": "English", 9 | "display": 1, 10 | "defunct": 1, 11 | "discord_only": 0, 12 | "description": null, 13 | "api_docs": null, 14 | "api_post": null, 15 | "api_post_method": null, 16 | "api_field": null, 17 | "api_shard_id": null, 18 | "api_shard_count": null, 19 | "api_shards": null, 20 | "api_get": null, 21 | "api_all": null, 22 | "view_bot": null, 23 | "bot_widget": null, 24 | "content": null, 25 | "owners": null, 26 | "discord": null, 27 | "features": [ 28 | "paid-access", 29 | "markdown-long-description", 30 | "custom-bot-invite-link", 31 | "custom-bot-website-link", 32 | "vanity-urls-for-all", 33 | "additional-bot-owners-editors", 34 | "has-categories-or-tags", 35 | "has-mobile-support" 36 | ] 37 | } 38 | -------------------------------------------------------------------------------- /data/lists/botlist.me.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "../../schema/list.json", 3 | "id": "botlist.me", 4 | "added": 1626875717, 5 | "name": "Botlist.me", 6 | "url": "https://botlist.me/", 7 | "icon": "https://botlist.me/icon.png", 8 | "language": "English", 9 | "display": 1, 10 | "defunct": 0, 11 | "discord_only": 1, 12 | "description": "Finding the best bots for your discord server is just one click away!", 13 | "api_docs": "https://docs.botlist.me/", 14 | "api_post": "https://api.botlist.me/api/v1/bots/:id/stats", 15 | "api_post_method": null, 16 | "api_field": "server_count", 17 | "api_shard_id": null, 18 | "api_shard_count": "shard_count", 19 | "api_shards": null, 20 | "api_get": "https://api.botlist.me/api/v1/bots/:id", 21 | "api_all": null, 22 | "view_bot": "https://botlist.me/bots/:id", 23 | "bot_widget": "https://api.botlist.me/api/v1/embed/:id", 24 | "content": null, 25 | "owners": "Destiny#2923 (141521475478880256)", 26 | "discord": "https://discord.gg/hdK4ya5eVv", 27 | "features": [ 28 | "html-long-description", 29 | "iframe-long-description", 30 | "markdown-long-description", 31 | "custom-bot-donate-link", 32 | "custom-bot-invite-link", 33 | "custom-bot-website-link", 34 | "custom-bot-support-link", 35 | "votes-sent-to-webhooks", 36 | "voting-data-exposed", 37 | "has-categories-or-tags", 38 | "has-mobile-support", 39 | "has-search", 40 | "has-widget", 41 | "server-count-api", 42 | "custom-bot-github-link", 43 | "discord-bot-support-link", 44 | "has-voting", 45 | "bot-reviews", 46 | "certified-bot-vanity-urls", 47 | "additional-bot-owners-editors" 48 | ] 49 | } 50 | -------------------------------------------------------------------------------- /data/lists/botlists.com.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "../../schema/list.json", 3 | "id": "botlists.com", 4 | "added": 1606421098, 5 | "name": "Astro Bot List", 6 | "url": "https://botlists.com/", 7 | "icon": "https://cdn.bot-list.xyz/7364djcas.png", 8 | "language": "English", 9 | "display": 1, 10 | "defunct": 1, 11 | "discord_only": 1, 12 | "description": "Astro bot list, just another discord bot lists where you show off your bots you made!", 13 | "api_docs": "https://botlists.com/api/docs", 14 | "api_post": "https://botlists.com/api/bot", 15 | "api_post_method": null, 16 | "api_field": "guild_count", 17 | "api_shard_id": null, 18 | "api_shard_count": "shard_count", 19 | "api_shards": null, 20 | "api_get": "https://botlists.com/api/bot", 21 | "api_all": null, 22 | "view_bot": "https://botlists.com/bot/:id", 23 | "bot_widget": "https://botlists.com/bot/:id/widget", 24 | "content": "Website is not responding.", 25 | "owners": "QGV#2101 (185957154606284800)", 26 | "discord": "https://botlists.com/discord", 27 | "features": [ 28 | "offers-paid-promotion", 29 | "bot-internationalisation-support", 30 | "html-long-description", 31 | "iframe-long-description", 32 | "markdown-long-description", 33 | "custom-bot-github-link", 34 | "custom-bot-support-link", 35 | "has-voting", 36 | "votes-sent-to-webhooks", 37 | "additional-bot-owners-editors", 38 | "has-categories-or-tags", 39 | "has-mobile-support", 40 | "has-search", 41 | "requires-owner-in-server", 42 | "server-count-api" 43 | ] 44 | } 45 | -------------------------------------------------------------------------------- /data/lists/botrix.cc.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "../../schema/list.json", 3 | "id": "botrix.cc", 4 | "added": 1610888213, 5 | "name": "Botrix", 6 | "url": "https://botrix.cc/", 7 | "icon": "https://cdn.discordapp.com/icons/721282458708082713/c45f833ea983c5b9366f33a72ee21c07.png", 8 | "language": "English", 9 | "display": 1, 10 | "defunct": 1, 11 | "discord_only": 1, 12 | "description": "Botrix is the new generation of discord listing, grow your bot or community faster than ever with our revolutionary algorithms to help even the smallest of services.", 13 | "api_docs": "https://docs.botrix.cc/", 14 | "api_post": "https://botrix.cc/api/v1/bot/:id", 15 | "api_post_method": null, 16 | "api_field": "servers", 17 | "api_shard_id": null, 18 | "api_shard_count": "shards", 19 | "api_shards": null, 20 | "api_get": "https://botrix.cc/api/v1/bot/:id", 21 | "api_all": null, 22 | "view_bot": "https://botrix.cc/bot/:id", 23 | "bot_widget": null, 24 | "content": null, 25 | "owners": "PixelSized#8008 (216852520088109056)", 26 | "discord": "https://botrix.cc/join/", 27 | "features": [ 28 | "markdown-long-description", 29 | "custom-bot-invite-link", 30 | "custom-bot-support-link", 31 | "custom-bot-website-link", 32 | "discord-bot-support-link", 33 | "has-voting", 34 | "votes-sent-to-webhooks", 35 | "voting-data-exposed", 36 | "has-categories-or-tags", 37 | "has-certification-program", 38 | "has-mobile-support", 39 | "has-search", 40 | "server-count-api" 41 | ] 42 | } 43 | -------------------------------------------------------------------------------- /data/lists/bots.discordlabs.org.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "../../schema/list.json", 3 | "id": "bots.discordlabs.org", 4 | "added": 1597353083, 5 | "name": "Discord Bot Labs", 6 | "url": "https://bots.discordlabs.org/", 7 | "icon": "https://cdn.discordapp.com/icons/608711879858192479/a_d25bd6131772dd5f7018ffb8951f115c.png", 8 | "language": "English", 9 | "display": 1, 10 | "defunct": 1, 11 | "discord_only": 1, 12 | "description": "Bump up your servers's street cred by finding some great bots here!", 13 | "api_docs": "https://docs.discordlabs.org/", 14 | "api_post": "https://bots.discordlabs.org/v2/bot/:id/stats", 15 | "api_post_method": null, 16 | "api_field": "server_count", 17 | "api_shard_id": null, 18 | "api_shard_count": "shard_count", 19 | "api_shards": null, 20 | "api_get": "https://bots.discordlabs.org/v2/bot/:id", 21 | "api_all": null, 22 | "view_bot": "https://bots.discordlabs.org/bot/:id", 23 | "bot_widget": null, 24 | "content": null, 25 | "owners": "AnishDoesDev#0909 (720034658569683086), ubuntu#3247 (651582809776979968)", 26 | "discord": "https://discord.gg/rmPNvNJ", 27 | "features": [ 28 | "html-long-description", 29 | "iframe-long-description", 30 | "markdown-long-description", 31 | "custom-bot-github-link", 32 | "custom-bot-invite-link", 33 | "custom-bot-support-link", 34 | "custom-bot-website-link", 35 | "has-voting", 36 | "votes-sent-to-webhooks", 37 | "voting-data-exposed", 38 | "additional-bot-owners-editors", 39 | "has-categories-or-tags", 40 | "has-mobile-support", 41 | "has-search", 42 | "requires-owner-in-server", 43 | "server-count-api" 44 | ] 45 | } 46 | -------------------------------------------------------------------------------- /data/lists/bots.discordlist.app.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "../../schema/list.json", 3 | "id": "bots.discordlist.app", 4 | "added": 1535443603, 5 | "name": "Discord List App", 6 | "url": "https://bots.discordlist.app/", 7 | "icon": "https://cdn.discordapp.com/icons/475571221946171393/f9da3b1ff6a2330d535deaba592299b5.png", 8 | "language": "English", 9 | "display": 1, 10 | "defunct": 1, 11 | "discord_only": 1, 12 | "description": null, 13 | "api_docs": "https://bots.discordlist.app/api", 14 | "api_post": "https://bots.discordlist.app/api/bot/:id/stats", 15 | "api_post_method": null, 16 | "api_field": "server_count", 17 | "api_shard_id": null, 18 | "api_shard_count": null, 19 | "api_shards": null, 20 | "api_get": "https://bots.discordlist.app/api/bot/:id/stats", 21 | "api_all": "https://bots.discordlist.app/api/bots", 22 | "view_bot": "https://bots.discordlist.app/bot/:id", 23 | "bot_widget": "https://bots.discordlist.app/api/bot/:id/widget", 24 | "content": "This list has been shut down by the owner.", 25 | "owners": "Auxim#0001 (66166172835385344)", 26 | "discord": "https://discord.gg/jqttNKq", 27 | "features": [ 28 | "markdown-long-description", 29 | "custom-bot-invite-link", 30 | "custom-bot-support-link", 31 | "custom-bot-website-link", 32 | "discord-bot-support-link", 33 | "voting-data-exposed", 34 | "additional-bot-owners-editors", 35 | "has-mobile-support" 36 | ] 37 | } 38 | -------------------------------------------------------------------------------- /data/lists/bots.distop.xyz.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "../../schema/list.json", 3 | "id": "bots.distop.xyz", 4 | "added": 1610888638, 5 | "name": "DisTop", 6 | "url": "https://bots.distop.xyz/", 7 | "icon": "https://cdn.discordapp.com/icons/806422828014501889/a4a93fb5716487e24358779fd8412073.png", 8 | "language": "English", 9 | "display": 1, 10 | "defunct": 1, 11 | "discord_only": 1, 12 | "description": "DisTop is the best Discord Bot List for finding the Discord bots that fit your server.", 13 | "api_docs": "https://docs.distop.xyz/", 14 | "api_post": "https://bots.distop.xyz/update/:id", 15 | "api_post_method": null, 16 | "api_field": "guild_count", 17 | "api_shard_id": null, 18 | "api_shard_count": null, 19 | "api_shards": null, 20 | "api_get": null, 21 | "api_all": null, 22 | "view_bot": "https://bots.distop.xyz/bot/:id", 23 | "bot_widget": null, 24 | "content": null, 25 | "owners": "Thunder#0666 (664242899105480715)", 26 | "discord": "https://discord.gg/nYVAG6nDm6", 27 | "features": [ 28 | "html-long-description", 29 | "markdown-long-description", 30 | "custom-bot-invite-link", 31 | "custom-bot-website-link", 32 | "has-voting", 33 | "votes-sent-to-webhooks", 34 | "has-categories-or-tags", 35 | "has-mobile-support", 36 | "has-search", 37 | "server-count-api" 38 | ] 39 | } 40 | -------------------------------------------------------------------------------- /data/lists/bots.idledev.org.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "../../schema/list.json", 3 | "id": "bots.idledev.org", 4 | "added": 1554996077, 5 | "name": "Idle Bot List", 6 | "url": "https://bots.idledev.org/", 7 | "icon": "https://cdn.discordapp.com/icons/521461252317249537/d3834340a5a6c466c1ac52d5aaf63fd0.png", 8 | "language": "English", 9 | "display": 1, 10 | "defunct": 1, 11 | "discord_only": 1, 12 | "description": null, 13 | "api_docs": null, 14 | "api_post": "https://bots.idledev.org/api/bot/:id/stats", 15 | "api_post_method": null, 16 | "api_field": "server_count", 17 | "api_shard_id": null, 18 | "api_shard_count": null, 19 | "api_shards": null, 20 | "api_get": "https://bots.idledev.org/api/bot/:id/info", 21 | "api_all": null, 22 | "view_bot": "https://bots.idledev.org/bot/:id", 23 | "bot_widget": null, 24 | "content": null, 25 | "owners": "Tea Cup#9999 (338192747754160138)", 26 | "discord": "https://discord.gg/wU7B46S", 27 | "features": [ 28 | "bot-resubmission", 29 | "bot-reviews", 30 | "html-long-description", 31 | "markdown-long-description", 32 | "has-voting", 33 | "additional-bot-owners-editors", 34 | "has-categories-or-tags", 35 | "has-search" 36 | ] 37 | } 38 | -------------------------------------------------------------------------------- /data/lists/bots.ondiscord.xyz.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "../../schema/list.json", 3 | "id": "bots.ondiscord.xyz", 4 | "added": 1532965633, 5 | "name": "Bots on Discord", 6 | "url": "https://bots.ondiscord.xyz/", 7 | "icon": "https://cdn.discordapp.com/icons/446425626988249089/c9599b1e0fdb902b81d93468ada512cf.png", 8 | "language": "English", 9 | "display": 1, 10 | "defunct": 0, 11 | "discord_only": 1, 12 | "description": "Easily find and share Discord bots", 13 | "api_docs": "https://bots.ondiscord.xyz/info/api", 14 | "api_post": "https://bots.ondiscord.xyz/bot-api/bots/:id/guilds", 15 | "api_post_method": null, 16 | "api_field": "guildCount", 17 | "api_shard_id": null, 18 | "api_shard_count": null, 19 | "api_shards": null, 20 | "api_get": null, 21 | "api_all": null, 22 | "view_bot": "https://bots.ondiscord.xyz/bots/:id", 23 | "bot_widget": "https://bots.ondiscord.xyz/bots/:id/embed", 24 | "content": null, 25 | "owners": "Brussell#0660 (95286900801146880)", 26 | "discord": "https://discord.gg/bvm6vSv", 27 | "features": [ 28 | "bot-resubmission", 29 | "markdown-long-description", 30 | "custom-bot-invite-link", 31 | "custom-bot-website-link", 32 | "discord-bot-support-link", 33 | "additional-bot-owners-editors", 34 | "has-categories-or-tags", 35 | "has-mobile-support" 36 | ] 37 | } 38 | -------------------------------------------------------------------------------- /data/lists/botsdatabase.com.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "../../schema/list.json", 3 | "id": "botsdatabase.com", 4 | "added": 1590063628, 5 | "name": "BotsDataBase", 6 | "url": "https://botsdatabase.com/", 7 | "icon": "https://cdn.discordapp.com/icons/414429834689773578/c6871fbf71d14ad3c9928195de0a7758.png", 8 | "language": "English", 9 | "display": 1, 10 | "defunct": 1, 11 | "discord_only": 1, 12 | "description": "Search hundreds of thousands of bots, make your server better with our certified bots.", 13 | "api_docs": "https://docs.botsdatabase.com/", 14 | "api_post": "https://api.botsdatabase.com/v1/bots/:id", 15 | "api_post_method": null, 16 | "api_field": "servers", 17 | "api_shard_id": null, 18 | "api_shard_count": null, 19 | "api_shards": "shards", 20 | "api_get": "https://api.botsdatabase.com/v1/bots/:id", 21 | "api_all": null, 22 | "view_bot": "https://botsdatabase.com/bot/:id", 23 | "bot_widget": null, 24 | "content": "Website is not responding", 25 | "owners": "PsyKo - Aynolish#3683 (291860794163855360), BaptisteGT#0123 (169146903462805504), mal0004#6666 (287982988438929418)", 26 | "discord": "https://discord.gg/ub9vhjx", 27 | "features": [ 28 | "site-internationalisation-support", 29 | "offers-paid-promotion", 30 | "markdown-long-description", 31 | "custom-bot-github-link", 32 | "custom-bot-invite-link", 33 | "custom-bot-website-link", 34 | "discord-bot-support-link", 35 | "has-voting", 36 | "votes-sent-to-webhooks", 37 | "has-categories-or-tags", 38 | "has-search", 39 | "requires-owner-in-server", 40 | "server-count-api" 41 | ] 42 | } 43 | -------------------------------------------------------------------------------- /data/lists/botsparadiscord.com.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "../../schema/list.json", 3 | "id": "botsparadiscord.com", 4 | "added": 1553616931, 5 | "name": "Bots Para Discord", 6 | "url": "https://botsparadiscord.com", 7 | "icon": "https://cdn.discordapp.com/icons/528352472389910529/b669d9056094282101ddadb480c00c04.png", 8 | "language": "Portuguese", 9 | "display": 1, 10 | "defunct": 1, 11 | "discord_only": 1, 12 | "description": null, 13 | "api_docs": null, 14 | "api_post": null, 15 | "api_post_method": null, 16 | "api_field": null, 17 | "api_shard_id": null, 18 | "api_shard_count": null, 19 | "api_shards": null, 20 | "api_get": null, 21 | "api_all": null, 22 | "view_bot": "https://botsparadiscord.com/bots/:id", 23 | "bot_widget": null, 24 | "content": "Website is not responding.", 25 | "owners": "Takasaki#7072 (274289097689006080)", 26 | "discord": "https://discord.gg/t5qzWQB", 27 | "features": [ 28 | "markdown-long-description", 29 | "custom-bot-invite-link", 30 | "custom-bot-website-link", 31 | "discord-bot-support-link", 32 | "voting-data-exposed", 33 | "additional-bot-owners-editors", 34 | "has-categories-or-tags", 35 | "has-mobile-support" 36 | ] 37 | } 38 | -------------------------------------------------------------------------------- /data/lists/carbonitex.net.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "../../schema/list.json", 3 | "id": "carbonitex.net", 4 | "added": 1532965633, 5 | "name": "Carbonitex", 6 | "url": "https://www.carbonitex.net/discord/bots", 7 | "icon": "https://cdn.discordapp.com/icons/112319935652298752/633a48b3446045ceed222a32622a9dbd.png", 8 | "language": "English", 9 | "display": 1, 10 | "defunct": 0, 11 | "discord_only": 1, 12 | "description": null, 13 | "api_docs": null, 14 | "api_post": null, 15 | "api_post_method": null, 16 | "api_field": null, 17 | "api_shard_id": null, 18 | "api_shard_count": null, 19 | "api_shards": null, 20 | "api_get": null, 21 | "api_all": null, 22 | "view_bot": null, 23 | "bot_widget": null, 24 | "content": null, 25 | "owners": "Carbonitex [Matt]#0001 (68396159596503040), jet#9999 (228290260239515649)", 26 | "discord": "https://discord.gg/J2evbZB", 27 | "features": [ 28 | "additional-bot-owners-editors", 29 | "has-mobile-support" 30 | ] 31 | } 32 | -------------------------------------------------------------------------------- /data/lists/cloud-botlist.xyz.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "../../schema/list.json", 3 | "id": "cloud-botlist.xyz", 4 | "added": 1577741636, 5 | "name": "Cloud Botlist", 6 | "url": "https://cloud-botlist.xyz/", 7 | "icon": "https://cdn.discordapp.com/icons/596854473167470594/2fcb2834c99643f3204f5da820934cfa.png", 8 | "language": "English", 9 | "display": 1, 10 | "defunct": 1, 11 | "discord_only": 1, 12 | "description": null, 13 | "api_docs": "https://apollos.gitbook.io/cloud-botlist/", 14 | "api_post": "https://cloud-botlist.xyz/api/bots/:id", 15 | "api_post_method": null, 16 | "api_field": "guilds", 17 | "api_shard_id": null, 18 | "api_shard_count": null, 19 | "api_shards": null, 20 | "api_get": "https://cloud-botlist.xyz/api/bots/:id", 21 | "api_all": null, 22 | "view_bot": "https://cloud-botlist.xyz/bots/:id", 23 | "bot_widget": null, 24 | "content": null, 25 | "owners": "R C N #0001 (188418994527535104)", 26 | "discord": "https://discord.gg/u3NG7pp", 27 | "features": [ 28 | "markdown-long-description", 29 | "custom-bot-github-link", 30 | "custom-bot-website-link", 31 | "discord-bot-support-link", 32 | "voting-data-exposed", 33 | "additional-bot-owners-editors" 34 | ] 35 | } 36 | -------------------------------------------------------------------------------- /data/lists/cloudlist.xyz.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "../../schema/list.json", 3 | "id": "cloudlist.xyz", 4 | "added": 1580752411, 5 | "name": "Cloud List", 6 | "url": "https://www.cloudlist.xyz/", 7 | "icon": "https://cdn.discordapp.com/icons/603194252872122389/58dd5ff6609dff550c25e83b7cd167ac.png", 8 | "language": "English", 9 | "display": 1, 10 | "defunct": 1, 11 | "discord_only": 1, 12 | "description": "Looking for that perfect Discord Bot? Start promoting your bot to discord and get more users. Cloud Bot List is an online page where discord users can post their bots for free and start gaining more users.", 13 | "api_docs": "https://www.cloudlist.xyz/apidocs", 14 | "api_post": "https://www.cloudlist.xyz/api/stats/:id", 15 | "api_post_method": null, 16 | "api_field": "count", 17 | "api_shard_id": null, 18 | "api_shard_count": null, 19 | "api_shards": null, 20 | "api_get": "https://www.cloudlist.xyz/api/bot/:id", 21 | "api_all": null, 22 | "view_bot": "https://www.cloudlist.xyz/bots/:id", 23 | "bot_widget": null, 24 | "content": null, 25 | "owners": "Bruninho#9205 (463696108766494730)", 26 | "discord": "http://discord.gg/PsPfh6m", 27 | "features": [ 28 | "markdown-long-description", 29 | "custom-bot-website-link", 30 | "voting-data-exposed", 31 | "has-categories-or-tags" 32 | ] 33 | } 34 | -------------------------------------------------------------------------------- /data/lists/cybralist.com.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "../../schema/list.json", 3 | "id": "cybralist.com", 4 | "added": 1660331331, 5 | "name": "Cybralist", 6 | "url": "https://cybralist.com/", 7 | "icon": "https://cybralist.com/logo2.png", 8 | "language": "English", 9 | "display": 1, 10 | "defunct": 0, 11 | "discord_only": 1, 12 | "description": "Spice up your Discord experience with our diverse range of Discord bots", 13 | "api_docs": "https://docs.cybralist.com/", 14 | "api_post": "https://api.cybralist.com/post/stats", 15 | "api_post_method": null, 16 | "api_field": "server_count", 17 | "api_shard_id": null, 18 | "api_shard_count": "shard_count", 19 | "api_shards": null, 20 | "api_get": "https://api.cybralist.com/bots/:id", 21 | "api_all": null, 22 | "view_bot": "https://cybralist.com/bots/:id", 23 | "bot_widget": "https://api.cybralist.com/bots/:id/embed", 24 | "content": null, 25 | "owners": "cybrancee#0000 (327075863957078026)", 26 | "discord": "https://discord.gg/cybrancee", 27 | "features": [ 28 | "additional-bot-owners-editors", 29 | "bot-resubmission", 30 | "bot-reviews", 31 | "certified-bot-vanity-urls", 32 | "custom-bot-github-link", 33 | "custom-bot-invite-link", 34 | "custom-bot-support-link", 35 | "custom-bot-website-link", 36 | "discord-bot-support-link", 37 | "has-ads-on-site", 38 | "has-categories-or-tags", 39 | "has-certification-program", 40 | "has-search", 41 | "has-voting", 42 | "has-widget", 43 | "html-long-description", 44 | "iframe-long-description", 45 | "offers-paid-promotion", 46 | "requires-owner-in-server", 47 | "server-count-api" 48 | ] 49 | } 50 | -------------------------------------------------------------------------------- /data/lists/dankbotlist.com.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "../../schema/list.json", 3 | "id": "dankbotlist.com", 4 | "added": 1535201716, 5 | "name": "Dank Bot List", 6 | "url": "https://dankbotlist.com/", 7 | "icon": "https://cdn.discordapp.com/icons/402400730922876928/ba5c7c4a49918e012363430a9b2e26e3.png", 8 | "language": "English", 9 | "display": 1, 10 | "defunct": 1, 11 | "discord_only": 1, 12 | "description": null, 13 | "api_docs": null, 14 | "api_post": null, 15 | "api_post_method": null, 16 | "api_field": null, 17 | "api_shard_id": null, 18 | "api_shard_count": null, 19 | "api_shards": null, 20 | "api_get": null, 21 | "api_all": null, 22 | "view_bot": null, 23 | "bot_widget": null, 24 | "content": null, 25 | "owners": "Cory#7650 (303391020622544909)", 26 | "discord": "https://discord.gg/3EE9gpK", 27 | "features": [ 28 | "has-mobile-support" 29 | ] 30 | } 31 | -------------------------------------------------------------------------------- /data/lists/dblista.pl.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "../../schema/list.json", 3 | "id": "dblista.pl", 4 | "added": 1578761330, 5 | "name": "DBLista", 6 | "url": "https://dblista.pl/", 7 | "icon": "https://dblista.pl/favicon/apple-touch-icon.png", 8 | "language": "Polish", 9 | "display": 1, 10 | "defunct": 1, 11 | "discord_only": 1, 12 | "description": "Polish discord bots and servers list", 13 | "api_docs": "https://docs.dblista.pl/", 14 | "api_post": null, 15 | "api_post_method": null, 16 | "api_field": null, 17 | "api_shard_id": null, 18 | "api_shard_count": null, 19 | "api_shards": null, 20 | "api_get": "https://api.dblista.pl/v1/bots/:id", 21 | "api_all": null, 22 | "view_bot": "https://dblista.pl/bot/:id", 23 | "bot_widget": null, 24 | "content": null, 25 | "owners": " Mespi#6377 (291578492418785291), DJ377656#2115 (544624507147780106), $Jakub$#0893 (268047533698318337)", 26 | "discord": "https://discord.gg/22t94nN", 27 | "features": [ 28 | "offers-paid-promotion", 29 | "markdown-long-description", 30 | "custom-bot-github-link", 31 | "custom-bot-invite-link", 32 | "custom-bot-website-link", 33 | "discord-bot-support-link", 34 | "has-categories-or-tags", 35 | "has-mobile-support" 36 | ] 37 | } 38 | -------------------------------------------------------------------------------- /data/lists/discord-botlist.eu.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "../../schema/list.json", 3 | "id": "discord-botlist.eu", 4 | "added": 1604313880, 5 | "name": "Discord Bot List", 6 | "url": "https://discord-botlist.eu/", 7 | "icon": "https://discord-botlist.eu/pics/logo.jpg", 8 | "language": "English", 9 | "display": 1, 10 | "defunct": 0, 11 | "discord_only": 1, 12 | "description": "discord-botlist.eu offers a wide variety of bots for your personal needs. Find your bot today!", 13 | "api_docs": "https://docs.discord-botlist.eu", 14 | "api_post": null, 15 | "api_post_method": null, 16 | "api_field": null, 17 | "api_shard_id": null, 18 | "api_shard_count": null, 19 | "api_shards": null, 20 | "api_get": null, 21 | "api_all": null, 22 | "view_bot": "https://discord-botlist.eu/bots/:id", 23 | "bot_widget": null, 24 | "content": null, 25 | "owners": "LPTP1#1234 (478473771678826496), Bendix#2395 (462340067864870923), Flamex#0001 (681424352599736327)", 26 | "discord": "https://discord.gg/tCJ3N6m", 27 | "features": [ 28 | "has-ads-on-site", 29 | "html-long-description", 30 | "markdown-long-description", 31 | "certified-bot-vanity-urls", 32 | "custom-bot-support-link", 33 | "custom-bot-website-link", 34 | "has-voting", 35 | "has-categories-or-tags", 36 | "has-search", 37 | "bot-resubmission", 38 | "additional-bot-owners-editors", 39 | "server-count-api", 40 | "votes-sent-to-webhooks" 41 | ] 42 | } 43 | -------------------------------------------------------------------------------- /data/lists/discord.boats.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "../../schema/list.json", 3 | "id": "discord.boats", 4 | "added": 1537287754, 5 | "name": "Discord Boats", 6 | "url": "https://discord.boats/", 7 | "icon": "https://cdn.discordapp.com/icons/439866052684283905/a_50718fbcb8030a76b775540db66bd0b8.png", 8 | "language": "English", 9 | "display": 1, 10 | "defunct": 1, 11 | "discord_only": 1, 12 | "description": "A growing directory of Discord bots to enhance your server - Find the perfect bot for your needs and add it to your server easily, quickly and for free.", 13 | "api_docs": "https://docs.discord.boats/", 14 | "api_post": "https://discord.boats/api/bot/:id", 15 | "api_post_method": null, 16 | "api_field": "server_count", 17 | "api_shard_id": null, 18 | "api_shard_count": null, 19 | "api_shards": null, 20 | "api_get": "https://discord.boats/api/bot/:id", 21 | "api_all": null, 22 | "view_bot": "https://discord.boats/bot/:id", 23 | "bot_widget": "https://discord.boats/api/widget/:id", 24 | "content": null, 25 | "owners": "Roee#0001 (231733082804322304)", 26 | "discord": "https://discord.gg/tfQqub6", 27 | "features": [ 28 | "bot-reviews", 29 | "site-internationalisation-support", 30 | "has-ads-on-site", 31 | "offers-paid-promotion", 32 | "html-long-description", 33 | "iframe-long-description", 34 | "markdown-long-description", 35 | "certified-bot-vanity-urls", 36 | "custom-bot-donate-link", 37 | "custom-bot-github-link", 38 | "custom-bot-invite-link", 39 | "custom-bot-support-link", 40 | "custom-bot-website-link", 41 | "discord-bot-support-link", 42 | "has-voting", 43 | "votes-sent-to-webhooks", 44 | "voting-data-exposed", 45 | "additional-bot-owners-editors", 46 | "has-categories-or-tags", 47 | "has-mobile-support", 48 | "has-search", 49 | "requires-owner-in-server", 50 | "server-count-api" 51 | ] 52 | } 53 | -------------------------------------------------------------------------------- /data/lists/discord.bots.gg.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "../../schema/list.json", 3 | "id": "discord.bots.gg", 4 | "added": 1532965633, 5 | "name": "Discord Bots", 6 | "url": "https://discord.bots.gg/", 7 | "icon": "https://cdn.discordapp.com/icons/110373943822540800/a_280f68348c167703bec255e18184f7b0.png", 8 | "language": "English", 9 | "display": 1, 10 | "defunct": 0, 11 | "discord_only": 1, 12 | "description": null, 13 | "api_docs": "https://discord.bots.gg/docs", 14 | "api_post": "https://discord.bots.gg/api/v1/bots/:id/stats", 15 | "api_post_method": null, 16 | "api_field": "guildCount", 17 | "api_shard_id": "shardId", 18 | "api_shard_count": "shardCount", 19 | "api_shards": null, 20 | "api_get": "https://discord.bots.gg/api/v1/bots/:id", 21 | "api_all": "https://discord.bots.gg/api/v1/bots?limit=100&sort=guildcount&order=desc", 22 | "view_bot": "https://discord.bots.gg/bots/:id", 23 | "bot_widget": null, 24 | "content": null, 25 | "owners": "meew0#9811 (66237334693085184)", 26 | "discord": "https://discord.gg/0cDvIgU2voWn4BaD", 27 | "features": [ 28 | "bot-resubmission", 29 | "site-internationalisation-support", 30 | "html-long-description", 31 | "markdown-long-description", 32 | "custom-bot-github-link", 33 | "custom-bot-invite-link", 34 | "custom-bot-website-link", 35 | "discord-bot-support-link", 36 | "additional-bot-owners-editors", 37 | "has-mobile-support", 38 | "has-search", 39 | "requires-owner-in-server", 40 | "server-count-api" 41 | ] 42 | } 43 | -------------------------------------------------------------------------------- /data/lists/discord.place.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "../../schema/list.json", 3 | "id": "discord.place", 4 | "added": 1719610647, 5 | "name": "discord.place", 6 | "url": "https://discord.place/bots", 7 | "icon": "https://discord.place/templates/square_logo.png", 8 | "language": "English", 9 | "display": 1, 10 | "defunct": 0, 11 | "discord_only": 1, 12 | "description": "Explore most popular bots and find the perfect one for your Discord server! Make your server more fun and interactive with the best bots available.", 13 | "api_docs": "https://docs.discord.place", 14 | "api_post": null, 15 | "api_post_method": null, 16 | "api_field": null, 17 | "api_shard_id": null, 18 | "api_shard_count": null, 19 | "api_shards": null, 20 | "api_get": null, 21 | "api_all": null, 22 | "view_bot": "https://discord.place/bots/:id", 23 | "bot_widget": null, 24 | "content": null, 25 | "owners": "@skyhancloud#0000 (957840712404193290)", 26 | "discord": "https://invite.discord.place", 27 | "features": [ 28 | "additional-bot-owners-editors", 29 | "bot-resubmission", 30 | "bot-reviews", 31 | "custom-bot-github-link", 32 | "custom-bot-invite-link", 33 | "discord-bot-support-link", 34 | "has-categories-or-tags", 35 | "has-mobile-support", 36 | "has-search", 37 | "has-voting", 38 | "markdown-long-description", 39 | "offers-paid-promotion", 40 | "requires-owner-in-server", 41 | "votes-sent-to-webhooks", 42 | "voting-data-exposed", 43 | "iframe-long-description" 44 | ] 45 | } 46 | -------------------------------------------------------------------------------- /data/lists/discord.rovelstars.com.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "../../schema/list.json", 3 | "id": "discord.rovelstars.com", 4 | "added": 1639455345, 5 | "name": "Rovel Discord List", 6 | "url": "https://discord.rovelstars.com", 7 | "icon": "https://discord.rovelstars.com/assets/img/bot/logo.svg", 8 | "language": "English", 9 | "display": 0, 10 | "defunct": 0, 11 | "discord_only": 1, 12 | "description": "Imagine a place - where you get to find everything about discord! Ranging from bots, to users, servers, templates, banners, stickers and emojis!", 13 | "api_docs": null, 14 | "api_post": "https://discord.rovelstars.com/api/bots/:id/servers", 15 | "api_post_method": null, 16 | "api_field": "count", 17 | "api_shard_id": null, 18 | "api_shard_count": null, 19 | "api_shards": null, 20 | "api_get": "https://discord.rovelstars.com/api/v1/bots/:id", 21 | "api_all": "https://discord.rovelstars.com/api/v1/bots", 22 | "view_bot": "https://discord.rovelstars.com/bots/:id", 23 | "bot_widget": null, 24 | "content": null, 25 | "owners": "Ren Hiyama#1800 (889439979686739998)", 26 | "discord": "https://dscrdly.com/server", 27 | "features": [ 28 | "site-internationalisation-support", 29 | "iframe-long-description", 30 | "custom-bot-github-link", 31 | "discord-bot-support-link", 32 | "has-voting", 33 | "voting-data-exposed", 34 | "has-mobile-support", 35 | "server-count-api", 36 | "html-long-description", 37 | "markdown-long-description", 38 | "html-long-description", 39 | "markdown-long-description", 40 | "custom-bot-donate-link", 41 | "custom-bot-invite-link", 42 | "custom-bot-website-link", 43 | "vanity-urls-for-all", 44 | "votes-sent-to-webhooks", 45 | "additional-bot-owners-editors", 46 | "has-search", 47 | "requires-owner-in-server" 48 | ] 49 | } 50 | -------------------------------------------------------------------------------- /data/lists/discord.services.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "../../schema/list.json", 3 | "id": "discord.services", 4 | "added": 1532965633, 5 | "name": "Discord Services", 6 | "url": "https://discord.services/", 7 | "icon": "https://cdn.discordapp.com/icons/294505571317710849/a17f3c3ac54d09c04ab6c4f2f5dc9c12.png", 8 | "language": "English", 9 | "display": 1, 10 | "defunct": 1, 11 | "discord_only": 1, 12 | "description": null, 13 | "api_docs": "https://discord.services/api/", 14 | "api_post": "https://discord.services/api/bots/:id", 15 | "api_post_method": null, 16 | "api_field": "server_count", 17 | "api_shard_id": null, 18 | "api_shard_count": null, 19 | "api_shards": null, 20 | "api_get": "https://discord.services/api/bots/:id", 21 | "api_all": "https://discord.services/api/bots", 22 | "view_bot": null, 23 | "bot_widget": null, 24 | "content": null, 25 | "owners": "Jazzibell#0069 (209219778206760961)", 26 | "discord": "https://discord.gg/hc6Wane", 27 | "features": [ 28 | "custom-bot-invite-link" 29 | ] 30 | } 31 | -------------------------------------------------------------------------------- /data/lists/discordapps.dev.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "../../schema/list.json", 3 | "id": "discordapps.dev", 4 | "added": 1535627503, 5 | "name": "Discord Apps Marketplace", 6 | "url": "https://discordapps.dev/", 7 | "icon": "https://cdn.discordapp.com/icons/330777295952543744/29bdc1cebfd41de2db5e615ffb86bece.png", 8 | "language": "English", 9 | "display": 1, 10 | "defunct": 1, 11 | "discord_only": 1, 12 | "description": null, 13 | "api_docs": "https://discordapps.dev/en-GB/posts/docs/api-v2/", 14 | "api_post": "https://api.discordapps.dev/api/v2/bots/:id", 15 | "api_post_method": null, 16 | "api_field": "bot.count", 17 | "api_shard_id": null, 18 | "api_shard_count": null, 19 | "api_shards": null, 20 | "api_get": "https://api.discordapps.dev/api/v2/bots/:id", 21 | "api_all": "https://api.discordapps.dev/api/v2/bots", 22 | "view_bot": "https://discordapps.dev/bots/:id", 23 | "bot_widget": null, 24 | "content": null, 25 | "owners": "7coil#4341 (190519304972664832)", 26 | "discord": "https://discord.gg/8uC6aKZ", 27 | "features": [ 28 | "bot-internationalisation-support", 29 | "markdown-long-description", 30 | "custom-bot-github-link", 31 | "custom-bot-invite-link", 32 | "custom-bot-support-link", 33 | "custom-bot-website-link", 34 | "discord-bot-support-link", 35 | "additional-bot-owners-editors", 36 | "has-categories-or-tags", 37 | "has-mobile-support" 38 | ] 39 | } 40 | -------------------------------------------------------------------------------- /data/lists/discordboats.club.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "../../schema/list.json", 3 | "id": "discordboats.club", 4 | "added": 1533208489, 5 | "name": "Discord Boats", 6 | "url": "https://discordboats.club/", 7 | "icon": "https://cdn.discordapp.com/icons/421630709585805312/15fa554458a690010d7575fbd02839a7.png", 8 | "language": "English", 9 | "display": 1, 10 | "defunct": 1, 11 | "discord_only": 1, 12 | "description": null, 13 | "api_docs": null, 14 | "api_post": "https://discordboats.club/api/public/bot/stats", 15 | "api_post_method": null, 16 | "api_field": "server_count", 17 | "api_shard_id": null, 18 | "api_shard_count": null, 19 | "api_shards": null, 20 | "api_get": null, 21 | "api_all": null, 22 | "view_bot": "https://discordboats.club/bot/:id", 23 | "bot_widget": "https://discordboats.club/bot/:id/widget.png", 24 | "content": "After inactivity and a long period of no development, the list was sold to MrSheldon and merged into discord.boats.", 25 | "owners": "Anthony#3912 (233823931830632449)", 26 | "discord": "https://discord.gg/qRarbNz", 27 | "features": [ 28 | "markdown-long-description", 29 | "custom-bot-github-link", 30 | "custom-bot-invite-link", 31 | "custom-bot-website-link", 32 | "vanity-urls-for-all", 33 | "voting-data-exposed", 34 | "has-mobile-support" 35 | ] 36 | } 37 | -------------------------------------------------------------------------------- /data/lists/discordbot.world.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "../../schema/list.json", 3 | "id": "discordbot.world", 4 | "added": 1532965633, 5 | "name": "Discord Bot World", 6 | "url": "https://discordbot.world/", 7 | "icon": "https://cdn.discordapp.com/icons/396440418507816960/aed0c9184d1e3abf28be02599b2c0f41.png", 8 | "language": "English", 9 | "display": 0, 10 | "defunct": 1, 11 | "discord_only": 1, 12 | "description": null, 13 | "api_docs": "https://discordbot.world/docs", 14 | "api_post": "https://discordbot.world/api/bot/:id/stats", 15 | "api_post_method": null, 16 | "api_field": "guild_count", 17 | "api_shard_id": null, 18 | "api_shard_count": null, 19 | "api_shards": "shards", 20 | "api_get": "https://discordbot.world/api/bot/:id", 21 | "api_all": "https://discordbot.world/api/bots", 22 | "view_bot": "https://discordbot.world/bot/:id", 23 | "bot_widget": null, 24 | "content": "The site does not seem to be approving bots anymore, the owner claims he will 'work on the site' when he has time. This has been an on-going issue for over a year and is technically defunct.", 25 | "owners": "Dustin#1999 (156114103033790464)", 26 | "discord": "https://discord.gg/eneuuys", 27 | "features": [ 28 | "custom-bot-github-link", 29 | "custom-bot-invite-link", 30 | "custom-bot-support-link", 31 | "custom-bot-website-link", 32 | "discord-bot-support-link", 33 | "voting-data-exposed", 34 | "additional-bot-owners-editors", 35 | "has-mobile-support" 36 | ] 37 | } 38 | -------------------------------------------------------------------------------- /data/lists/discordbotdirectory.net.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "../../schema/list.json", 3 | "id": "discordbotdirectory.net", 4 | "added": 1602022529, 5 | "name": "Discord Bot Directory", 6 | "url": "https://discordbotdirectory.net/", 7 | "icon": "https://i.imgur.com/0tVmXGH.jpg", 8 | "language": "English", 9 | "display": 1, 10 | "defunct": 1, 11 | "discord_only": 1, 12 | "description": "Advertise your very own Discord bot to users worldwide!", 13 | "api_docs": null, 14 | "api_post": null, 15 | "api_post_method": null, 16 | "api_field": null, 17 | "api_shard_id": null, 18 | "api_shard_count": null, 19 | "api_shards": null, 20 | "api_get": "https://discordbotdirectory.net/bots/:id", 21 | "api_all": null, 22 | "view_bot": null, 23 | "bot_widget": "https://discordbotdirectory.net/api/embed/:id", 24 | "content": null, 25 | "owners": "TheRealPikachuYT#0146 (604661101577371648), Shoot.Dot#0992 (746939269750456320), BLUE#6670 (675469094991953940)", 26 | "discord": "https://discord.gg/xTWtZxN", 27 | "features": [ 28 | "html-long-description", 29 | "markdown-long-description", 30 | "has-search", 31 | "requires-owner-in-server", 32 | "server-count-api" 33 | ] 34 | } 35 | -------------------------------------------------------------------------------- /data/lists/discordbotindex.com.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "../../schema/list.json", 3 | "id": "discordbotindex.com", 4 | "added": 1539030775, 5 | "name": "Discord Bot Index", 6 | "url": "https://discordbotindex.com/", 7 | "icon": "https://cdn.discordapp.com/icons/482922868410417163/bcb70a74c152d82021a9421d55bc3ec3.png", 8 | "language": "English", 9 | "display": 1, 10 | "defunct": 1, 11 | "discord_only": 1, 12 | "description": null, 13 | "api_docs": "https://discordbotindex.com/documentation", 14 | "api_post": "https://discordbotindex.com/apiv1/bot/:id", 15 | "api_post_method": null, 16 | "api_field": "server_count", 17 | "api_shard_id": null, 18 | "api_shard_count": null, 19 | "api_shards": null, 20 | "api_get": "https://discordbotindex.com/apiv1/bot/:id", 21 | "api_all": null, 22 | "view_bot": "https://discordbotindex.com/bot/:id", 23 | "bot_widget": null, 24 | "content": "This list has shut down and been merged into discord.boats", 25 | "owners": "LiquidBlast, SamuraiStacks#5873 (439373663905513473), Kirb#0001 (303943082108518400), ohlookitsderpy#3939 (145557815287611393), 🎀 QuantumCat 🎀#2107 (130769947583447040)", 26 | "discord": "https://discord.gg/9jkAUF3", 27 | "features": [ 28 | "custom-bot-github-link", 29 | "custom-bot-support-link", 30 | "custom-bot-website-link", 31 | "discord-bot-support-link", 32 | "voting-data-exposed", 33 | "has-mobile-support" 34 | ] 35 | } 36 | -------------------------------------------------------------------------------- /data/lists/discordbotlabs.com.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "../../schema/list.json", 3 | "id": "discordbotlabs.com", 4 | "added": 1541603836, 5 | "name": "Discord Bot Labs", 6 | "url": "https://discordbotlabs.com/", 7 | "icon": "https://cdn.discordapp.com/icons/481702435644112906/57d7a0a85a4191e6741ebae4f9d122ab.png", 8 | "language": "English", 9 | "display": 1, 10 | "defunct": 1, 11 | "discord_only": 1, 12 | "description": null, 13 | "api_docs": "https://discordbotlabs.com/api/docs", 14 | "api_post": null, 15 | "api_post_method": null, 16 | "api_field": null, 17 | "api_shard_id": null, 18 | "api_shard_count": null, 19 | "api_shards": null, 20 | "api_get": "https://discordbotlabs.com/api/bots/:id", 21 | "api_all": null, 22 | "view_bot": "https://discordbotlabs.com/bots/:id", 23 | "bot_widget": null, 24 | "content": "This list has been shutdown by the owner.", 25 | "owners": "ThatTonybo#0001 (296044953576931328)", 26 | "discord": "https://discord.gg/jkvVxtx", 27 | "features": [ 28 | "markdown-long-description", 29 | "custom-bot-invite-link", 30 | "custom-bot-support-link", 31 | "discord-bot-support-link", 32 | "has-categories-or-tags", 33 | "has-mobile-support" 34 | ] 35 | } 36 | -------------------------------------------------------------------------------- /data/lists/discordbotlist.com.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "../../schema/list.json", 3 | "id": "discordbotlist.com", 4 | "added": 1535198737, 5 | "name": "Discord Bot List", 6 | "url": "https://discordbotlist.com/", 7 | "icon": "https://cdn.discordapp.com/icons/450100127256936458/63b9faf406e3bcc497335c653f151816.png", 8 | "language": "English", 9 | "display": 1, 10 | "defunct": 0, 11 | "discord_only": 1, 12 | "description": null, 13 | "api_docs": "https://docs.discordbotlist.com", 14 | "api_post": "https://discordbotlist.com/api/v1/bots/:id/stats", 15 | "api_post_method": null, 16 | "api_field": "guilds", 17 | "api_shard_id": "shard_id", 18 | "api_shard_count": null, 19 | "api_shards": null, 20 | "api_get": "https://discordbotlist.com/api/v1/bots/:id", 21 | "api_all": "https://discordbotlist.com/api/v1/bots/search?full=true", 22 | "view_bot": "https://discordbotlist.com/bots/:id", 23 | "bot_widget": "https://discordbotlist.com/bots/:id/widget", 24 | "content": null, 25 | "owners": "Fen#0003 (80821761460928512), luke#0123 (149505704569339904)", 26 | "discord": "https://discord.gg/cc7Y4jX", 27 | "features": [ 28 | "has-ads-on-site", 29 | "markdown-long-description", 30 | "custom-bot-invite-link", 31 | "custom-bot-support-link", 32 | "custom-bot-website-link", 33 | "discord-bot-support-link", 34 | "vanity-urls-for-all", 35 | "has-voting", 36 | "votes-sent-to-webhooks", 37 | "voting-data-exposed", 38 | "has-categories-or-tags", 39 | "has-mobile-support", 40 | "has-search", 41 | "server-count-api" 42 | ] 43 | } 44 | -------------------------------------------------------------------------------- /data/lists/discordbotlist.xyz.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "../../schema/list.json", 3 | "id": "discordbotlist.xyz", 4 | "added": 1535900109, 5 | "name": "Discord Bot List", 6 | "url": "https://discordbotlist.xyz/", 7 | "icon": "https://cdn.discordapp.com/icons/477792727577395210/56f3ce1fab0a93db5d8366a442206f94.png", 8 | "language": "English", 9 | "display": 1, 10 | "defunct": 1, 11 | "discord_only": 1, 12 | "description": null, 13 | "api_docs": "https://discordbotlist.xyz/api/docs", 14 | "api_post": "https://discordbotlist.xyz/api/stats/:id", 15 | "api_post_method": null, 16 | "api_field": "count", 17 | "api_shard_id": null, 18 | "api_shard_count": null, 19 | "api_shards": null, 20 | "api_get": "https://discordbotlist.xyz/api/bot?id=:id", 21 | "api_all": null, 22 | "view_bot": "https://discordbotlist.xyz/bots/:id/", 23 | "bot_widget": "https://discordbotlist.xyz/api/embed/:id", 24 | "content": "The owner of this bot list has been banned from Discord for mass advertising through their bot and the bot list server has been deleted", 25 | "owners": "Ankrad#0597 (297403616468140032)", 26 | "discord": "https://discord.gg/PA9EYba", 27 | "features": [ 28 | "markdown-long-description", 29 | "custom-bot-invite-link", 30 | "has-mobile-support" 31 | ] 32 | } 33 | -------------------------------------------------------------------------------- /data/lists/discordbots.app.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "../../schema/list.json", 3 | "id": "discordbots.app", 4 | "added": 1604962085, 5 | "name": "Discord Bots App", 6 | "url": "https://discordbots.app/", 7 | "icon": "https://discordbots.app/logo.png", 8 | "language": "English", 9 | "display": 1, 10 | "defunct": 0, 11 | "discord_only": 1, 12 | "description": "Browse through thousands of Discord Bots from your phone! Download now on the Google Play Store and Apple App Store.", 13 | "api_docs": null, 14 | "api_post": null, 15 | "api_post_method": null, 16 | "api_field": null, 17 | "api_shard_id": null, 18 | "api_shard_count": null, 19 | "api_shards": null, 20 | "api_get": null, 21 | "api_all": null, 22 | "view_bot": " https://discordbots.app/bot/:id", 23 | "bot_widget": null, 24 | "content": null, 25 | "owners": "Tetracyl#0001 (275831434772742144)", 26 | "discord": "https://discord.gg/Hznh8f5", 27 | "features": [ 28 | "has-ads-on-site", 29 | "custom-bot-invite-link", 30 | "custom-bot-website-link", 31 | "discord-bot-support-link", 32 | "has-categories-or-tags", 33 | "has-search" 34 | ] 35 | } 36 | -------------------------------------------------------------------------------- /data/lists/discordbots.co.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "../../schema/list.json", 3 | "id": "discordbots.co", 4 | "added": 1592468403, 5 | "name": "Discord Bots", 6 | "url": "https://discordbots.co", 7 | "icon": "https://discordbots.co/favicon.png", 8 | "language": "English", 9 | "display": 1, 10 | "defunct": 0, 11 | "discord_only": 1, 12 | "description": "A new well-developed bot list from Vultrex Development. Here you can advertise your bot for free! ", 13 | "api_docs": "https://discordbots.co/api", 14 | "api_post": "https://api.discordbots.co/v1/public/bot/:id/stats", 15 | "api_post_method": null, 16 | "api_field": "serverCount", 17 | "api_shard_id": null, 18 | "api_shard_count": "shardCount", 19 | "api_shards": null, 20 | "api_get": "https://api.discordbots.co/v1/public/bot/:id", 21 | "api_all": null, 22 | "view_bot": "https://discordbots.co/bot/:id", 23 | "bot_widget": null, 24 | "content": null, 25 | "owners": "Missy#0001 (157206689836171264)", 26 | "discord": "https://discord.gg/WeftAFp", 27 | "features": [ 28 | "bot-resubmission", 29 | "bot-reviews", 30 | "html-long-description", 31 | "markdown-long-description", 32 | "custom-bot-donate-link", 33 | "custom-bot-github-link", 34 | "custom-bot-invite-link", 35 | "custom-bot-website-link", 36 | "discord-bot-support-link", 37 | "vanity-urls-for-all", 38 | "has-voting", 39 | "votes-sent-to-webhooks", 40 | "voting-data-exposed", 41 | "additional-bot-owners-editors", 42 | "has-categories-or-tags", 43 | "has-mobile-support", 44 | "has-search", 45 | "has-widget", 46 | "server-count-api" 47 | ] 48 | } 49 | -------------------------------------------------------------------------------- /data/lists/discordbots.co.uk.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "../../schema/list.json", 3 | "id": "discordbots.co.uk", 4 | "added": 1532965633, 5 | "name": "Discord Fork", 6 | "url": "https://discordbots.co.uk/", 7 | "icon": "https://discordbots.co.uk/assets/images/logo/logo256.png", 8 | "language": "English", 9 | "display": 1, 10 | "defunct": 1, 11 | "discord_only": 1, 12 | "description": null, 13 | "api_docs": "https://discordbots.co.uk/docs/api-reference", 14 | "api_post": null, 15 | "api_post_method": null, 16 | "api_field": null, 17 | "api_shard_id": null, 18 | "api_shard_count": null, 19 | "api_shards": null, 20 | "api_get": "https://discordbots.co.uk/api/bots/:id.json", 21 | "api_all": null, 22 | "view_bot": "https://discordbots.co.uk/bots/:id", 23 | "bot_widget": "https://discordbots.co.uk/api/bots/:id.svg", 24 | "content": null, 25 | "owners": "7coil#3175 (190519304972664832), AlexFlipnote#0001 (86477779717066752)", 26 | "discord": "https://discord.gg/8uC6aKZ", 27 | "features": [ 28 | "markdown-long-description", 29 | "custom-bot-github-link", 30 | "custom-bot-invite-link", 31 | "custom-bot-support-link", 32 | "discord-bot-support-link", 33 | "vanity-urls-for-all" 34 | ] 35 | } 36 | -------------------------------------------------------------------------------- /data/lists/discordbots.fun.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "../../schema/list.json", 3 | "id": "discordbots.fun", 4 | "added": 1558087180, 5 | "name": "discordbots.fun", 6 | "url": "https://discordbots.fun/", 7 | "icon": "https://discordbots.fun/img/logo_botblock.png", 8 | "language": "English", 9 | "display": 1, 10 | "defunct": 1, 11 | "discord_only": 1, 12 | "description": null, 13 | "api_docs": "https://docs.discordbots.fun/", 14 | "api_post": "http://discordbots.fun/api/bots/:id", 15 | "api_post_method": null, 16 | "api_field": "serverCount", 17 | "api_shard_id": null, 18 | "api_shard_count": null, 19 | "api_shards": null, 20 | "api_get": null, 21 | "api_all": null, 22 | "view_bot": "https://discordbots.fun/bots/:id", 23 | "bot_widget": null, 24 | "content": null, 25 | "owners": "ThatTonybo#0001 (296044953576931328)", 26 | "discord": "https://discord.gg/GC6A8Jt", 27 | "features": [ 28 | "markdown-long-description", 29 | "custom-bot-invite-link", 30 | "custom-bot-support-link", 31 | "custom-bot-website-link", 32 | "discord-bot-support-link", 33 | "additional-bot-owners-editors", 34 | "has-mobile-support" 35 | ] 36 | } 37 | -------------------------------------------------------------------------------- /data/lists/discordbots.group.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "../../schema/list.json", 3 | "id": "discordbots.group", 4 | "added": 1532965633, 5 | "name": "Discord Bots Group", 6 | "url": "https://discordbots.group/", 7 | "icon": "https://cdn.discordapp.com/icons/447469952044105728/b725a3f9bf422b18480d3a9f829be06a.png", 8 | "language": "English", 9 | "display": 1, 10 | "defunct": 1, 11 | "discord_only": 1, 12 | "description": null, 13 | "api_docs": "https://docs.discordbots.group/", 14 | "api_post": "https://api.discordbots.group/v1/bot/:id", 15 | "api_post_method": null, 16 | "api_field": "server_count", 17 | "api_shard_id": null, 18 | "api_shard_count": null, 19 | "api_shards": "shards", 20 | "api_get": "https://api.discordbots.group/v1/bot/:id", 21 | "api_all": null, 22 | "view_bot": "https://discordbots.group/bot/:id", 23 | "bot_widget": null, 24 | "content": null, 25 | "owners": "DetectiveHuman#1234 (449653897695461376)", 26 | "discord": "https://discord.gg/9jJtKRc", 27 | "features": [ 28 | "markdown-long-description", 29 | "custom-bot-github-link", 30 | "custom-bot-invite-link", 31 | "custom-bot-support-link", 32 | "custom-bot-website-link", 33 | "discord-bot-support-link", 34 | "voting-data-exposed", 35 | "additional-bot-owners-editors", 36 | "has-categories-or-tags", 37 | "has-mobile-support" 38 | ] 39 | } 40 | -------------------------------------------------------------------------------- /data/lists/discordbotsclub.org.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "../../schema/list.json", 3 | "id": "discordbotsclub.org", 4 | "added": 1547410924, 5 | "name": "Discord Bots Club", 6 | "url": "https://discordbotsclub.org/", 7 | "icon": "https://cdn.discordapp.com/icons/524681874732220418/c67ea64bcbd7a6882e3882c3b950f333.png", 8 | "language": "English", 9 | "display": 1, 10 | "defunct": 1, 11 | "discord_only": 1, 12 | "description": null, 13 | "api_docs": null, 14 | "api_post": null, 15 | "api_post_method": null, 16 | "api_field": null, 17 | "api_shard_id": null, 18 | "api_shard_count": null, 19 | "api_shards": null, 20 | "api_get": null, 21 | "api_all": null, 22 | "view_bot": null, 23 | "bot_widget": null, 24 | "content": null, 25 | "owners": "UnknownSloth#6791 (221524691079266314)", 26 | "discord": "https://discord.gg/qFaYdCp", 27 | "features": [ 28 | "custom-bot-github-link", 29 | "custom-bot-website-link", 30 | "discord-bot-support-link" 31 | ] 32 | } 33 | -------------------------------------------------------------------------------- /data/lists/discordextremelist.xyz.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "../../schema/list.json", 3 | "id": "discordextremelist.xyz", 4 | "added": 1542972675, 5 | "name": "Discord Extreme List", 6 | "url": "https://discordextremelist.xyz/", 7 | "icon": "https://cdn.discordapp.com/icons/568567800910839811/a_ac9635250e1e351364f1bf3d67c3920b.png", 8 | "language": "English", 9 | "display": 1, 10 | "defunct": 0, 11 | "discord_only": 1, 12 | "description": "Discord's unbiased list, giving small bots and small servers a big chance!", 13 | "api_docs": "https://discordextremelist.xyz/docs#api-routes", 14 | "api_post": "https://api.discordextremelist.xyz/v2/bot/:id/stats", 15 | "api_post_method": null, 16 | "api_field": "guildCount", 17 | "api_shard_id": null, 18 | "api_shard_count": "shardCount", 19 | "api_shards": null, 20 | "api_get": "https://api.discordextremelist.xyz/v2/bot/:id", 21 | "api_all": null, 22 | "view_bot": "https://discordextremelist.xyz/bots/:id", 23 | "bot_widget": null, 24 | "content": null, 25 | "owners": "advaith#0000 (190916650143318016), carolinaisslaying#0000 (1100295355800748073), winterfoxxo#0000 (302604426781261824)", 26 | "discord": "https://discord.gg/WeCer3J", 27 | "features": [ 28 | "bot-resubmission", 29 | "site-internationalisation-support", 30 | "html-long-description", 31 | "iframe-long-description", 32 | "markdown-long-description", 33 | "custom-bot-donate-link", 34 | "custom-bot-github-link", 35 | "custom-bot-invite-link", 36 | "custom-bot-support-link", 37 | "custom-bot-website-link", 38 | "discord-bot-support-link", 39 | "vanity-urls-for-all", 40 | "has-voting", 41 | "additional-bot-owners-editors", 42 | "has-categories-or-tags", 43 | "has-mobile-support", 44 | "has-search", 45 | "server-count-api" 46 | ] 47 | } 48 | -------------------------------------------------------------------------------- /data/lists/discordlist.gg.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "../../schema/list.json", 3 | "id": "discordlist.gg", 4 | "added": 1657761713, 5 | "name": "dlist.gg", 6 | "url": "https://discordlist.gg/", 7 | "icon": "https://cdn.discordapp.com/icons/724571620676599838/37192e8b0c8981cbfd8b172a9693cc19.png", 8 | "language": "English", 9 | "display": 1, 10 | "defunct": 0, 11 | "discord_only": 1, 12 | "description": "Your place to find Discord Bots & Servers", 13 | "api_docs": "https://api.discordlist.gg/developers", 14 | "api_post": "https://api.discordlist.gg/v0/bots/:id/guilds", 15 | "api_post_method": null, 16 | "api_field": "count", 17 | "api_shard_id": null, 18 | "api_shard_count": null, 19 | "api_shards": null, 20 | "api_get": null, 21 | "api_all": null, 22 | "view_bot": "https://discordlist.gg/bot/:id", 23 | "bot_widget": null, 24 | "content": null, 25 | "owners": "audn#1580 (123057713482694658)", 26 | "discord": "https://discord.gg/XbuJ6VH", 27 | "features": [ 28 | "additional-bot-owners-editors", 29 | "custom-bot-github-link", 30 | "custom-bot-website-link", 31 | "discord-bot-support-link", 32 | "has-categories-or-tags", 33 | "has-mobile-support", 34 | "has-search", 35 | "has-voting", 36 | "html-long-description", 37 | "markdown-long-description", 38 | "server-count-api", 39 | "custom-bot-support-link", 40 | "votes-sent-to-webhooks" 41 | ] 42 | } 43 | -------------------------------------------------------------------------------- /data/lists/discordlist.space.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "../../schema/list.json", 3 | "id": "discordlist.space", 4 | "added": 1532965633, 5 | "name": "discordlist.space", 6 | "url": "https://discordlist.space/", 7 | "icon": "https://cdn.discordapp.com/icons/387812458661937152/70ec291cf1dcaa33f8c50d5b3333a521.png", 8 | "language": "English", 9 | "display": 1, 10 | "defunct": 1, 11 | "discord_only": 1, 12 | "description": "Popular and feature-rich Discord bots", 13 | "api_docs": "https://docs.discordlist.space/", 14 | "api_post": "https://api.discordlist.space/v2/bots/:id", 15 | "api_post_method": null, 16 | "api_field": "serverCount", 17 | "api_shard_id": null, 18 | "api_shard_count": null, 19 | "api_shards": null, 20 | "api_get": "https://api.discordlist.space/v2/bots/:id", 21 | "api_all": "https://api.discordlist.space/v2/bots", 22 | "view_bot": "https://discordlist.space/bot/:id", 23 | "bot_widget": "https://api.discordlist.space/v2/bots/:id/widget", 24 | "content": null, 25 | "owners": "PassTheMayo#8620 (507329700402561045)", 26 | "discord": "https://discord.gg/gGNpFc3", 27 | "features": [ 28 | "bot-reviews", 29 | "offers-paid-promotion", 30 | "markdown-long-description", 31 | "custom-bot-invite-link", 32 | "custom-bot-website-link", 33 | "discord-bot-support-link", 34 | "has-voting", 35 | "votes-sent-to-webhooks", 36 | "voting-data-exposed", 37 | "additional-bot-owners-editors", 38 | "has-categories-or-tags", 39 | "has-mobile-support", 40 | "has-search", 41 | "has-widget", 42 | "server-count-api" 43 | ] 44 | } 45 | -------------------------------------------------------------------------------- /data/lists/discordlistology.com.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "../../schema/list.json", 3 | "id": "discordlistology.com", 4 | "added": 1592468886, 5 | "name": "Discordlistology", 6 | "url": "https://discordlistology.com/", 7 | "icon": "https://cdn.discordapp.com/icons/658262945234681856/e0a8d8ff2b3d27c0c76893a1ba40d571.png", 8 | "language": "English", 9 | "display": 1, 10 | "defunct": 1, 11 | "discord_only": 1, 12 | "description": "Start listing your Discord bots & servers for free!", 13 | "api_docs": "https://discordlistology.com/developer/documentation", 14 | "api_post": "https://discordlistology.com/api/v1/bots/:id/stats", 15 | "api_post_method": null, 16 | "api_field": "servers", 17 | "api_shard_id": null, 18 | "api_shard_count": "shards", 19 | "api_shards": null, 20 | "api_get": "https://discordlistology.com/api/v1/bots/:id/stats", 21 | "api_all": null, 22 | "view_bot": "https://discordlistology.com/bots/:id", 23 | "bot_widget": null, 24 | "content": null, 25 | "owners": "felixisaac.dev#5466 (237490126714961920), PeteZionDev#5677 (660416568236441640)", 26 | "discord": "https://discord.gg/5aVF6V5", 27 | "features": [ 28 | "bot-resubmission", 29 | "bot-reviews", 30 | "offers-paid-promotion", 31 | "html-long-description", 32 | "iframe-long-description", 33 | "markdown-long-description", 34 | "custom-bot-github-link", 35 | "custom-bot-invite-link", 36 | "custom-bot-support-link", 37 | "custom-bot-website-link", 38 | "discord-bot-support-link", 39 | "has-voting", 40 | "voting-data-exposed", 41 | "has-categories-or-tags", 42 | "has-mobile-support", 43 | "has-search", 44 | "server-count-api" 45 | ] 46 | } 47 | -------------------------------------------------------------------------------- /data/lists/discordmusicbots.com.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "../../schema/list.json", 3 | "id": "discordmusicbots.com", 4 | "added": 1533208489, 5 | "name": "Discord Music Bots", 6 | "url": "https://www.discordmusicbots.com/", 7 | "icon": "https://www.discordmusicbots.com/logo.png", 8 | "language": "English", 9 | "display": 1, 10 | "defunct": 1, 11 | "discord_only": 1, 12 | "description": null, 13 | "api_docs": null, 14 | "api_post": null, 15 | "api_post_method": null, 16 | "api_field": null, 17 | "api_shard_id": null, 18 | "api_shard_count": null, 19 | "api_shards": null, 20 | "api_get": null, 21 | "api_all": null, 22 | "view_bot": null, 23 | "bot_widget": null, 24 | "content": "This list appears to be offline and no longer active.", 25 | "owners": "spong#3338 (87164639695110144)", 26 | "discord": null, 27 | "features": [ 28 | "custom-bot-invite-link", 29 | "custom-bot-support-link", 30 | "custom-bot-website-link", 31 | "discord-bot-support-link", 32 | "has-categories-or-tags", 33 | "has-mobile-support" 34 | ] 35 | } 36 | -------------------------------------------------------------------------------- /data/lists/discords.com.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "../../schema/list.json", 3 | "id": "discords.com", 4 | "added": 1532965633, 5 | "name": "Bots for Discord", 6 | "url": "https://discords.com/bots/", 7 | "icon": "https://cdn.discordapp.com/icons/374071874222686211/2fec188b91ebe43605065ee66a4df815.png", 8 | "language": "English", 9 | "display": 1, 10 | "defunct": 0, 11 | "discord_only": 1, 12 | "description": null, 13 | "api_docs": "https://docs.botsfordiscord.com", 14 | "api_post": "https://botsfordiscord.com/api/bot/:id", 15 | "api_post_method": null, 16 | "api_field": "server_count", 17 | "api_shard_id": null, 18 | "api_shard_count": null, 19 | "api_shards": null, 20 | "api_get": "https://botsfordiscord.com/api/bot/:id", 21 | "api_all": null, 22 | "view_bot": "https://botsfordiscord.com/bots/:id", 23 | "bot_widget": "https://botsfordiscord.com/api/bot/:id/widget", 24 | "content": null, 25 | "owners": "Henry#1234 (165939947457478656)", 26 | "discord": "https://discord.gg/j5SRg4d", 27 | "features": [ 28 | "bot-resubmission", 29 | "html-long-description", 30 | "markdown-long-description", 31 | "custom-bot-github-link", 32 | "custom-bot-invite-link", 33 | "custom-bot-support-link", 34 | "custom-bot-website-link", 35 | "discord-bot-support-link", 36 | "has-voting", 37 | "votes-sent-to-webhooks", 38 | "voting-data-exposed", 39 | "additional-bot-owners-editors", 40 | "has-categories-or-tags", 41 | "has-mobile-support", 42 | "has-search", 43 | "server-count-api" 44 | ] 45 | } 46 | -------------------------------------------------------------------------------- /data/lists/discordsbestbots.xyz.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "../../schema/list.json", 3 | "id": "discordsbestbots.xyz", 4 | "added": 1535199589, 5 | "name": "Discord's Best Bots", 6 | "url": "https://discordsbestbots.xyz/", 7 | "icon": "https://cdn.discordapp.com/icons/446682534135201793/1f2560bd620a03b4f8f0759d5b5ae62a.png", 8 | "language": "English", 9 | "display": 1, 10 | "defunct": 1, 11 | "discord_only": 1, 12 | "description": "Merged into Discord Extreme List", 13 | "api_docs": "https://docs.discordsbestbots.xyz/", 14 | "api_post": "https://discordsbestbots.xyz/api/bots/:id/stats", 15 | "api_post_method": null, 16 | "api_field": "guilds", 17 | "api_shard_id": null, 18 | "api_shard_count": "shards", 19 | "api_shards": null, 20 | "api_get": "https://discordsbestbots.xyz/api/bots/:id", 21 | "api_all": "https://discordsbestbots.xyz/api/bots", 22 | "view_bot": "https://discordsbestbots.xyz/bots/:id", 23 | "bot_widget": null, 24 | "content": "Merged into Discord Extreme List.", 25 | "owners": "Ice#4710 (302604426781261824), advaith#9121 (190916650143318016), Cairo#1123 (208105877838888960)", 26 | "discord": "https://discord.gg/tgcpDXn", 27 | "features": [ 28 | "markdown-long-description", 29 | "custom-bot-github-link", 30 | "custom-bot-invite-link", 31 | "custom-bot-support-link", 32 | "custom-bot-website-link", 33 | "discord-bot-support-link", 34 | "additional-bot-owners-editors", 35 | "has-categories-or-tags", 36 | "has-mobile-support" 37 | ] 38 | } 39 | -------------------------------------------------------------------------------- /data/lists/discordservices.net.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "../../schema/list.json", 3 | "id": "discordservices.net", 4 | "added": 1620045981, 5 | "name": "Discord Services", 6 | "url": "https://discordservices.net/", 7 | "icon": "https://discordservices.net/icon.png", 8 | "language": "English", 9 | "display": 1, 10 | "defunct": 0, 11 | "discord_only": 1, 12 | "description": "A brand new botlist that aims to deliver the best experience for its users and bot developers with unique features and tools.", 13 | "api_docs": "https://discordservices.net/docs/api", 14 | "api_post": "https://api.discordservices.net/bot/:id/stats", 15 | "api_post_method": null, 16 | "api_field": "servers", 17 | "api_shard_id": null, 18 | "api_shard_count": "shards", 19 | "api_shards": null, 20 | "api_get": null, 21 | "api_all": null, 22 | "view_bot": "https://discordservices.net/bot/:id", 23 | "bot_widget": null, 24 | "content": null, 25 | "owners": "Builderb#0001 (190590364871032834)", 26 | "discord": "https://discord.gg/2JVesec7kM", 27 | "features": [ 28 | "bot-resubmission", 29 | "markdown-long-description", 30 | "custom-bot-donate-link", 31 | "custom-bot-github-link", 32 | "custom-bot-invite-link", 33 | "custom-bot-support-link", 34 | "custom-bot-website-link", 35 | "discord-bot-support-link", 36 | "vanity-urls-for-all", 37 | "has-voting", 38 | "votes-sent-to-webhooks", 39 | "additional-bot-owners-editors", 40 | "has-categories-or-tags", 41 | "has-certification-program", 42 | "has-search", 43 | "has-widget", 44 | "server-count-api" 45 | ] 46 | } 47 | -------------------------------------------------------------------------------- /data/lists/discordz.gg.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "../../schema/list.json", 3 | "id": "discordz.gg", 4 | "added": 1639382829, 5 | "name": "Discordz", 6 | "url": "https://discordz.gg/", 7 | "icon": "https://cdn.discordz.gg/img/logo.png", 8 | "language": "English", 9 | "display": 1, 10 | "defunct": 1, 11 | "discord_only": 1, 12 | "description": "Spice up your discord experience with our range of bots and servers!", 13 | "api_docs": "https://docs.discordz.gg", 14 | "api_post": "https://api.discordz.gg/bot/stats/:id", 15 | "api_post_method": null, 16 | "api_field": "server_count", 17 | "api_shard_id": null, 18 | "api_shard_count": "shard_count", 19 | "api_shards": null, 20 | "api_get": "https://api.discordz.gg/bot/:id", 21 | "api_all": null, 22 | "view_bot": "https://discordz.gg/bot/:id", 23 | "bot_widget": "https://discordz.gg/bot/:id/widget", 24 | "content": null, 25 | "owners": "WhiteClue#6701 (761230002922455091)", 26 | "discord": "https://discord.gg/XmMU6PXN9t", 27 | "features": [ 28 | "bot-reviews", 29 | "html-long-description", 30 | "iframe-long-description", 31 | "markdown-long-description", 32 | "custom-bot-donate-link", 33 | "custom-bot-github-link", 34 | "custom-bot-invite-link", 35 | "custom-bot-website-link", 36 | "discord-bot-support-link", 37 | "has-voting", 38 | "votes-sent-to-webhooks", 39 | "voting-data-exposed", 40 | "additional-bot-owners-editors", 41 | "has-categories-or-tags", 42 | "has-certification-program", 43 | "has-mobile-support", 44 | "has-search", 45 | "has-widget", 46 | "requires-owner-in-server", 47 | "server-count-api" 48 | ] 49 | } 50 | -------------------------------------------------------------------------------- /data/lists/disforge.com.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "../../schema/list.json", 3 | "id": "disforge.com", 4 | "added": 1601751697, 5 | "name": "Disforge", 6 | "url": "https://disforge.com/bots", 7 | "icon": "https://i.imgur.com/KvRWNYj.png", 8 | "language": "English", 9 | "display": 1, 10 | "defunct": 0, 11 | "discord_only": 1, 12 | "description": "Explore thousands of Discord servers & Bots on Disforge.", 13 | "api_docs": "https://disforge.com/developer", 14 | "api_post": "https://disforge.com/api/botstats/:id", 15 | "api_post_method": null, 16 | "api_field": "servers", 17 | "api_shard_id": null, 18 | "api_shard_count": null, 19 | "api_shards": null, 20 | "api_get": null, 21 | "api_all": null, 22 | "view_bot": null, 23 | "bot_widget": null, 24 | "content": null, 25 | "owners": "Kohai#0001 (116218776495587329)", 26 | "discord": "https://discord.gg/emojis", 27 | "features": [ 28 | "custom-bot-support-link", 29 | "vanity-urls-for-all", 30 | "has-categories-or-tags", 31 | "has-mobile-support", 32 | "has-search", 33 | "server-count-api" 34 | ] 35 | } 36 | -------------------------------------------------------------------------------- /data/lists/disq.ink.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "../../schema/list.json", 3 | "id": "disq.ink", 4 | "added": 1748397653785, 5 | "name": "DisQ", 6 | "url": "https://disq.ink/", 7 | "icon": "https://disq.ink/images/logo.webp", 8 | "language": "English", 9 | "display": 1, 10 | "defunct": 0, 11 | "discord_only": 1, 12 | "description": "Customize your Discord experience with dynamic apps, bots, games & communities!", 13 | "api_docs": "https://docs.disq.ink/", 14 | "api_post": "https://api.disq.ink/v1/bots/:id", 15 | "api_post_method": null, 16 | "api_field": "serverCount", 17 | "api_shard_id": null, 18 | "api_shard_count": null, 19 | "api_shards": "shards", 20 | "api_get": "https://api.disq.ink/v1/bots/:id", 21 | "api_all": null, 22 | "view_bot": "https://disq.ink/bot/:id", 23 | "bot_widget": null, 24 | "content": null, 25 | "owners": "Danker#0000 (804827945997959209)", 26 | "discord": "https://discord.gg/sNyC5kNaVN", 27 | "features": [ 28 | "additional-bot-owners-editors", 29 | "bot-reviews", 30 | "certified-bot-vanity-urls", 31 | "custom-bot-github-link", 32 | "custom-bot-invite-link", 33 | "custom-bot-website-link", 34 | "discord-bot-support-link", 35 | "has-categories-or-tags", 36 | "has-mobile-support", 37 | "has-search", 38 | "has-voting", 39 | "html-long-description", 40 | "markdown-long-description", 41 | "server-count-api", 42 | "site-internationalisation-support", 43 | "votes-sent-to-webhooks", 44 | "voting-data-exposed" 45 | ] 46 | } 47 | -------------------------------------------------------------------------------- /data/lists/divinediscordbots.com.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "../../schema/list.json", 3 | "id": "divinediscordbots.com", 4 | "added": 1535359770, 5 | "name": "Divine Discord Bot List", 6 | "url": "https://divinediscordbots.com/", 7 | "icon": "https://cdn.discordapp.com/icons/454933217666007052/356f5af1a139c8d6dd9348254ac8854a.png", 8 | "language": "English", 9 | "display": 1, 10 | "defunct": 1, 11 | "discord_only": 1, 12 | "description": null, 13 | "api_docs": "https://divinediscordbots.com/api", 14 | "api_post": "https://divinediscordbots.com/bot/:id/stats", 15 | "api_post_method": null, 16 | "api_field": "server_count", 17 | "api_shard_id": null, 18 | "api_shard_count": "shards", 19 | "api_shards": null, 20 | "api_get": "https://divinediscordbots.com/bot/:id/stats", 21 | "api_all": null, 22 | "view_bot": "https://divinediscordbots.com/bot/:id", 23 | "bot_widget": "https://divinediscordbots.com/api/widget/:id.svg", 24 | "content": null, 25 | "owners": "Sworder#0001 (240508683455299584), Samuel || TutoRapide#1868 (137569112556699649)", 26 | "discord": "https://discord.gg/8b2YahE", 27 | "features": [ 28 | "markdown-long-description", 29 | "custom-bot-invite-link", 30 | "vanity-urls-for-all", 31 | "voting-data-exposed", 32 | "additional-bot-owners-editors", 33 | "has-mobile-support" 34 | ] 35 | } 36 | -------------------------------------------------------------------------------- /data/lists/fateslist.xyz.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "../../schema/list.json", 3 | "id": "fateslist.xyz", 4 | "added": 1613320331, 5 | "name": "Fates List", 6 | "url": "https://fateslist.xyz/", 7 | "icon": "https://api.fateslist.xyz/static/botlisticon.webp", 8 | "language": "English", 9 | "display": 1, 10 | "defunct": 1, 11 | "discord_only": 1, 12 | "description": "Find the best bots for your servers.", 13 | "api_docs": "https://docs.fateslist.xyz", 14 | "api_post": "https://api.fateslist.xyz/api/v2/bots/:id/stats", 15 | "api_post_method": null, 16 | "api_field": "guild_count", 17 | "api_shard_id": null, 18 | "api_shard_count": "shard_count", 19 | "api_shards": "shards", 20 | "api_get": "https://api.fateslist.xyz/api/v2/bots/:id", 21 | "api_all": null, 22 | "view_bot": "https://fateslist.xyz/bot/:id", 23 | "bot_widget": "https://api.fateslist.xyz/api/v2/bots/:id/widget", 24 | "content": null, 25 | "owners": "Rootspring#6701 (563808552288780322), skylarr#6666 (790722073248661525), Builderb#0001 (190590364871032834)", 26 | "discord": "https://discord.gg/69Thz4teWm", 27 | "features": [ 28 | "bot-resubmission", 29 | "bot-reviews", 30 | "html-long-description", 31 | "markdown-long-description", 32 | "custom-bot-github-link", 33 | "custom-bot-invite-link", 34 | "custom-bot-website-link", 35 | "discord-bot-support-link", 36 | "vanity-urls-for-all", 37 | "has-voting", 38 | "votes-sent-to-webhooks", 39 | "voting-data-exposed", 40 | "additional-bot-owners-editors", 41 | "has-categories-or-tags", 42 | "has-certification-program", 43 | "has-mobile-support", 44 | "has-search", 45 | "has-widget", 46 | "server-count-api" 47 | ] 48 | } 49 | -------------------------------------------------------------------------------- /data/lists/glennbotlist.xyz.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "../../schema/list.json", 3 | "id": "glennbotlist.xyz", 4 | "added": 1577741047, 5 | "name": "Glenn Bot List", 6 | "url": "https://glennbotlist.xyz", 7 | "icon": "https://cdn.discordapp.com/icons/623600255987875870/a_fdb1896f4a9e2b1d1ab74b6e1eadad7b.png", 8 | "language": "English", 9 | "display": 1, 10 | "defunct": 1, 11 | "discord_only": 1, 12 | "description": null, 13 | "api_docs": "https://docs.glennbotlist.xyz/", 14 | "api_post": "https://glennbotlist.xyz/api/bot/:id/stats", 15 | "api_post_method": null, 16 | "api_field": "serverCount", 17 | "api_shard_id": null, 18 | "api_shard_count": "shardCount", 19 | "api_shards": null, 20 | "api_get": null, 21 | "api_all": null, 22 | "view_bot": "https://glennbotlist.xyz/bot/:id", 23 | "bot_widget": null, 24 | "content": null, 25 | "owners": "Jack Glenn#0806 (259649217255964672), DieselJS#1689 (414713250832449536)", 26 | "discord": "https://discord.gg/QeaNNRW", 27 | "features": [ 28 | "custom-bot-github-link", 29 | "custom-bot-website-link", 30 | "additional-bot-owners-editors", 31 | "has-categories-or-tags" 32 | ] 33 | } 34 | -------------------------------------------------------------------------------- /data/lists/guardianbots.xyz.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "../../schema/list.json", 3 | "id": "guardianbots.xyz", 4 | "added": 1696799561, 5 | "name": "Guardian Bot List", 6 | "url": "https://guardianbots.xyz/", 7 | "icon": "https://cdn.guardianbots.xyz/uploads/logo.png", 8 | "language": "English", 9 | "display": 1, 10 | "defunct": 1, 11 | "discord_only": 1, 12 | "description": "Discover hundreds of Discord bots and add your own to make it popular", 13 | "api_docs": null, 14 | "api_post": null, 15 | "api_post_method": null, 16 | "api_field": null, 17 | "api_shard_id": null, 18 | "api_shard_count": null, 19 | "api_shards": null, 20 | "api_get": null, 21 | "api_all": null, 22 | "view_bot": "https://guardianbots.xyz/bots/:id", 23 | "bot_widget": null, 24 | "content": null, 25 | "owners": "@whatisyourname.#0000 (878850717706756116)", 26 | "discord": null, 27 | "features": [ 28 | "bot-internationalisation-support", 29 | "bot-reviews", 30 | "custom-bot-invite-link", 31 | "custom-bot-support-link", 32 | "custom-bot-website-link", 33 | "discord-bot-support-link", 34 | "has-categories-or-tags", 35 | "has-certification-program", 36 | "has-mobile-support", 37 | "has-search", 38 | "has-voting", 39 | "has-widget", 40 | "html-long-description", 41 | "iframe-long-description", 42 | "markdown-long-description", 43 | "offers-paid-promotion", 44 | "requires-owner-in-server", 45 | "server-count-api", 46 | "vanity-urls-for-all", 47 | "votes-sent-to-webhooks", 48 | "voting-data-exposed" 49 | ] 50 | } 51 | -------------------------------------------------------------------------------- /data/lists/hydrogenbots.club.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "../../schema/list.json", 3 | "id": "hydrogenbots.club", 4 | "added": 1601750616, 5 | "name": "Hydrogen Bots Club", 6 | "url": "https://hydrogenbots.club/", 7 | "icon": "https://hydrogenbots.club/assets/logo.png", 8 | "language": "English", 9 | "display": 0, 10 | "defunct": 1, 11 | "discord_only": 1, 12 | "description": "A modern bot list designed for your bot(s) to grow.", 13 | "api_docs": "https://api.hydrogenbots.club/", 14 | "api_post": "https://hydrogenbots.club/api/v1/servercount", 15 | "api_post_method": null, 16 | "api_field": "guild", 17 | "api_shard_id": null, 18 | "api_shard_count": "shard", 19 | "api_shards": null, 20 | "api_get": "https://hydrogenbots.club/api/v1/bots/:id", 21 | "api_all": null, 22 | "view_bot": " https://hydrogenbots.club/bot/:id", 23 | "bot_widget": null, 24 | "content": "URL seems to redirect to some weird shopping website.", 25 | "owners": "Airbus A350-1000#1112 (539195184357965833)", 26 | "discord": "https://hydrogenbots.club/discord", 27 | "features": [ 28 | "html-long-description", 29 | "iframe-long-description", 30 | "markdown-long-description", 31 | "custom-bot-invite-link", 32 | "custom-bot-website-link", 33 | "discord-bot-support-link", 34 | "has-voting", 35 | "votes-sent-to-webhooks", 36 | "voting-data-exposed", 37 | "has-categories-or-tags", 38 | "has-mobile-support", 39 | "has-search", 40 | "requires-owner-in-server", 41 | "server-count-api" 42 | ] 43 | } 44 | -------------------------------------------------------------------------------- /data/lists/ie.discordbots.co.uk.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "../../schema/list.json", 3 | "id": "ie.discordbots.co.uk", 4 | "added": 1544548984, 5 | "name": "Discord Fork for Internet Explorer 6", 6 | "url": "http://ie.discordbots.co.uk/", 7 | "icon": "https://cdn.discordapp.com/icons/330777295952543744/29bdc1cebfd41de2db5e615ffb86bece.png", 8 | "language": "English", 9 | "display": 1, 10 | "defunct": 1, 11 | "discord_only": 1, 12 | "description": null, 13 | "api_docs": null, 14 | "api_post": null, 15 | "api_post_method": null, 16 | "api_field": null, 17 | "api_shard_id": null, 18 | "api_shard_count": null, 19 | "api_shards": null, 20 | "api_get": null, 21 | "api_all": null, 22 | "view_bot": null, 23 | "bot_widget": null, 24 | "content": null, 25 | "owners": "7coil#3175 (190519304972664832)", 26 | "discord": "https://discord.gg/8uC6aKZ", 27 | "features": [ 28 | "custom-bot-github-link", 29 | "custom-bot-invite-link", 30 | "has-mobile-support" 31 | ] 32 | } 33 | -------------------------------------------------------------------------------- /data/lists/infinitybots.gg.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "../../schema/list.json", 3 | "id": "infinitybots.gg", 4 | "added": 1604525067, 5 | "name": "Infinity List", 6 | "url": "https://infinitybots.gg/", 7 | "icon": "https://cdn.infinitybots.gg/core/full_logo.webp", 8 | "language": "English", 9 | "display": 1, 10 | "defunct": 0, 11 | "discord_only": 1, 12 | "description": "Begin your Discord journey with our extensive directory.", 13 | "api_docs": "https://spider.infinitybots.gg/docs", 14 | "api_post": "https://spider.infinitybots.gg/bots/stats", 15 | "api_post_method": null, 16 | "api_field": "servers", 17 | "api_shard_id": null, 18 | "api_shard_count": "shards", 19 | "api_shards": null, 20 | "api_get": "https://spider.infinitybots.gg/bots/:id", 21 | "api_all": "https://spider.infinitybots.gg/bots/all", 22 | "view_bot": "https://infinitybots.gg/bots/:id", 23 | "bot_widget": "https://widgets.infinitybots.gg/bots/:id", 24 | "content": null, 25 | "owners": "Toxic Dev#5936 (510065483693817867)", 26 | "discord": "https://discord.gg/infinity-bots-758641373074423808", 27 | "features": [ 28 | "bot-resubmission", 29 | "bot-reviews", 30 | "offers-paid-promotion", 31 | "html-long-description", 32 | "iframe-long-description", 33 | "markdown-long-description", 34 | "certified-bot-vanity-urls", 35 | "custom-bot-donate-link", 36 | "custom-bot-github-link", 37 | "custom-bot-invite-link", 38 | "custom-bot-support-link", 39 | "custom-bot-website-link", 40 | "discord-bot-support-link", 41 | "has-voting", 42 | "votes-sent-to-webhooks", 43 | "voting-data-exposed", 44 | "additional-bot-owners-editors", 45 | "has-categories-or-tags", 46 | "has-certification-program", 47 | "has-mobile-support", 48 | "has-search", 49 | "has-widget", 50 | "server-count-api" 51 | ] 52 | } 53 | -------------------------------------------------------------------------------- /data/lists/lbots.org.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "../../schema/list.json", 3 | "id": "lbots.org", 4 | "added": 1549227235, 5 | "name": "LBots", 6 | "url": "https://lbots.org/", 7 | "icon": "https://lbots.org/static/img/logo.png", 8 | "language": "English", 9 | "display": 1, 10 | "defunct": 1, 11 | "discord_only": 1, 12 | "description": "A bot listing website that loves NSFW", 13 | "api_docs": "https://lbots.org/api/docs", 14 | "api_post": "https://lbots.org/api/v1/bots/:id/stats", 15 | "api_post_method": null, 16 | "api_field": "guild_count", 17 | "api_shard_id": "shard_id", 18 | "api_shard_count": "shard_count", 19 | "api_shards": null, 20 | "api_get": null, 21 | "api_all": null, 22 | "view_bot": "https://lbots.org/bots/:id", 23 | "bot_widget": null, 24 | "content": "Submitting bots does not work but viewing bots does work.", 25 | "owners": "Neko#0013 (367330084337745920)", 26 | "discord": "https://discord.gg/EKv9k6p", 27 | "features": [ 28 | "offers-paid-promotion", 29 | "custom-bot-github-link", 30 | "custom-bot-support-link", 31 | "custom-bot-website-link", 32 | "discord-bot-support-link", 33 | "has-categories-or-tags", 34 | "has-mobile-support" 35 | ] 36 | } 37 | -------------------------------------------------------------------------------- /data/lists/listcord.com.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "../../schema/list.json", 3 | "id": "listcord.com", 4 | "added": 1532965633, 5 | "name": "Listcord", 6 | "url": "https://listcord.com/", 7 | "icon": "https://cdn.discordapp.com/icons/692858882153775164/2a6fac8a8090bc3b9e4f490ba978bf93.png", 8 | "language": "English", 9 | "display": 0, 10 | "defunct": 1, 11 | "discord_only": 1, 12 | "description": null, 13 | "api_docs": null, 14 | "api_post": null, 15 | "api_post_method": null, 16 | "api_field": null, 17 | "api_shard_id": null, 18 | "api_shard_count": null, 19 | "api_shards": null, 20 | "api_get": null, 21 | "api_all": null, 22 | "view_bot": null, 23 | "bot_widget": null, 24 | "content": "Owner: \"This project is currently paused due to changes in my personal life and to prioritize other projects of mine. Please understand this decision, and know that I will eventually get back to this.\", site redirects to Discord sercer", 25 | "owners": "chewy#0001 (219592873228763147)", 26 | "discord": "https://discord.gg/f3dwWxf", 27 | "features": [ 28 | "custom-bot-invite-link", 29 | "custom-bot-website-link", 30 | "discord-bot-support-link", 31 | "voting-data-exposed", 32 | "additional-bot-owners-editors" 33 | ] 34 | } 35 | -------------------------------------------------------------------------------- /data/lists/listcord.gg.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "../../schema/list.json", 3 | "id": "listcord.gg", 4 | "added": 1627220584, 5 | "name": "Listcord", 6 | "url": "https://listcord.gg/", 7 | "icon": "https://cdn.discordapp.com/icons/802571102832033822/f9bbb04b8d02b0bad459687171d8ab28.png", 8 | "language": "English", 9 | "display": 1, 10 | "defunct": 1, 11 | "discord_only": 1, 12 | "description": "Listcord is a brand new botlist where you can add and find great bots!", 13 | "api_docs": "https://listcord.gg/docs", 14 | "api_post": "https://listcord.gg/api/bot/:id/stats", 15 | "api_post_method": null, 16 | "api_field": "server_count", 17 | "api_shard_id": null, 18 | "api_shard_count": null, 19 | "api_shards": null, 20 | "api_get": "https://listcord.gg/api/bot/:id", 21 | "api_all": null, 22 | "view_bot": "https://listcord.gg/bot/:id", 23 | "bot_widget": null, 24 | "content": null, 25 | "owners": "Josiah#0016 (272797713483956236)", 26 | "discord": "https://discord.gg/CSVNnUTJ3N", 27 | "features": [ 28 | "bot-resubmission", 29 | "markdown-long-description", 30 | "custom-bot-website-link", 31 | "discord-bot-support-link", 32 | "additional-bot-owners-editors", 33 | "has-categories-or-tags", 34 | "has-certification-program", 35 | "has-search", 36 | "server-count-api" 37 | ] 38 | } 39 | -------------------------------------------------------------------------------- /data/lists/listmybots.com.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "../../schema/list.json", 3 | "id": "listmybots.com", 4 | "added": 1581886764, 5 | "name": "ListMyBots", 6 | "url": "https://listmybots.com/", 7 | "icon": "https://cdn.discordapp.com/attachments/581452385596080128/581945277435478026/listmybots2.png", 8 | "language": "English", 9 | "display": 0, 10 | "defunct": 1, 11 | "discord_only": 1, 12 | "description": "The bot list that accepts in 24 hours", 13 | "api_docs": null, 14 | "api_post": null, 15 | "api_post_method": null, 16 | "api_field": null, 17 | "api_shard_id": null, 18 | "api_shard_count": null, 19 | "api_shards": null, 20 | "api_get": null, 21 | "api_all": null, 22 | "view_bot": "https://listmybots.com/bot/:id", 23 | "bot_widget": null, 24 | "content": "This list is a known clone of Bots for Discord. Owner(s) have been made aware and are working to rectify this.", 25 | "owners": "DamonOnYT#5465 (200511039622742016), AxeI#2130 (208990011163541504), The Devil In I#1762 (274679936067829760)", 26 | "discord": "https://discord.gg/8mBnFhh", 27 | "features": [ 28 | "markdown-long-description", 29 | "custom-bot-github-link", 30 | "custom-bot-invite-link", 31 | "custom-bot-support-link", 32 | "custom-bot-website-link", 33 | "has-mobile-support" 34 | ] 35 | } 36 | -------------------------------------------------------------------------------- /data/lists/motiondevelopment.top.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "../../schema/list.json", 3 | "id": "motiondevelopment.top", 4 | "added": 1626876619, 5 | "name": "Motion Botlist", 6 | "url": "https://www.motiondevelopment.top/", 7 | "icon": "https://cdn.discordapp.com/icons/681203273776103527/4ad127573b9fa378375b809379baa981.png", 8 | "language": "English", 9 | "display": 1, 10 | "defunct": 1, 11 | "discord_only": 1, 12 | "description": "This is a botlist for you to find the perfect bots for your discord community!", 13 | "api_docs": "https://www.motiondevelopment.top/docs/api/intro", 14 | "api_post": "https://www.motiondevelopment.top/api/bots/:id/stats", 15 | "api_post_method": null, 16 | "api_field": "guilds", 17 | "api_shard_id": null, 18 | "api_shard_count": null, 19 | "api_shards": null, 20 | "api_get": "https://www.motiondevelopment.top/api/bots/:id", 21 | "api_all": null, 22 | "view_bot": "https://www.motiondevelopment.top/bots/:id", 23 | "bot_widget": null, 24 | "content": null, 25 | "owners": "TechnicPepijn#0995 (570020287735660547)", 26 | "discord": "https://discord.gg/6vuGsPM", 27 | "features": [ 28 | "bot-reviews", 29 | "has-ads-on-site", 30 | "html-long-description", 31 | "markdown-long-description", 32 | "certified-bot-vanity-urls", 33 | "custom-bot-invite-link", 34 | "custom-bot-website-link", 35 | "has-voting", 36 | "votes-sent-to-webhooks", 37 | "additional-bot-owners-editors", 38 | "has-categories-or-tags", 39 | "has-certification-program", 40 | "has-mobile-support", 41 | "requires-owner-in-server", 42 | "server-count-api" 43 | ] 44 | } 45 | -------------------------------------------------------------------------------- /data/lists/nooder.co.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "../../schema/list.json", 3 | "id": "nooder.co", 4 | "added": 1575135448, 5 | "name": "Nooder Bot List", 6 | "url": "https://nooder.co", 7 | "icon": "https://cdn.discordapp.com/icons/694596007861944350/1e256ff622d05610cd509a68c3e5575e.png", 8 | "language": "English", 9 | "display": 0, 10 | "defunct": 1, 11 | "discord_only": 1, 12 | "description": null, 13 | "api_docs": "https://nooder.co/api/docs", 14 | "api_post": "https://nooder.co/api/bot/:id/stats", 15 | "api_post_method": null, 16 | "api_field": "server_count", 17 | "api_shard_id": null, 18 | "api_shard_count": null, 19 | "api_shards": null, 20 | "api_get": "https://nooder.co/api/bot/:id", 21 | "api_all": null, 22 | "view_bot": "https://nooder.co/bot/:id", 23 | "bot_widget": "https://nooder.co/api/widget/:id.png", 24 | "content": "Owner is rewriting.", 25 | "owners": "Tazhys#2665 (622890595614195722), Alex.#3525 (284937696156057601)", 26 | "discord": "https://discord.gg/XVXx9Mz", 27 | "features": [ 28 | "markdown-long-description", 29 | "custom-bot-invite-link", 30 | "custom-bot-support-link", 31 | "custom-bot-website-link", 32 | "discord-bot-support-link", 33 | "voting-data-exposed", 34 | "has-categories-or-tags" 35 | ] 36 | } 37 | -------------------------------------------------------------------------------- /data/lists/paradisebots.net.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "../../schema/list.json", 3 | "id": "paradisebots.net", 4 | "added": 1612530937, 5 | "name": "Paradise Bot List", 6 | "url": "https://paradisebots.net/", 7 | "icon": "https://paradisebots.net/images/ParadiseBotsLogo.png", 8 | "language": "English", 9 | "display": 1, 10 | "defunct": 1, 11 | "discord_only": 1, 12 | "description": "The Discord Bot List that strives to provide all Discord Bots & Bot Devs With a little bit of Advertising Freedom!!", 13 | "api_docs": "https://docs.paradisebots.net/", 14 | "api_post": "https://paradisebots.net/api/v1/bot/:id", 15 | "api_post_method": null, 16 | "api_field": "server_count", 17 | "api_shard_id": null, 18 | "api_shard_count": "shard_count", 19 | "api_shards": null, 20 | "api_get": "https://paradisebots.net/api/v1/bots/:id", 21 | "api_all": null, 22 | "view_bot": "https://paradisebots.net/bots/:id", 23 | "bot_widget": "https://paradisebots.net/bots/:id/widget", 24 | "content": null, 25 | "owners": "Connor200024#0001 (324646179134636043)", 26 | "discord": "https://discord.gg/KfbF8mbcVs", 27 | "features": [ 28 | "html-long-description", 29 | "markdown-long-description", 30 | "certified-bot-vanity-urls", 31 | "custom-bot-support-link", 32 | "has-voting", 33 | "has-categories-or-tags", 34 | "has-certification-program", 35 | "has-mobile-support", 36 | "has-search", 37 | "requires-owner-in-server", 38 | "server-count-api" 39 | ] 40 | } 41 | -------------------------------------------------------------------------------- /data/lists/radarcord.net.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "../../schema/list.json", 3 | "id": "radarcord.net", 4 | "added": 1626876034, 5 | "name": "Radarcord", 6 | "url": "https://radarcord.net/", 7 | "icon": "https://radarcord.net/static/logo.png", 8 | "language": "English", 9 | "display": 1, 10 | "defunct": 0, 11 | "discord_only": 1, 12 | "description": "Get the perfect bot for your server with our directory of discord bots", 13 | "api_docs": "https://docs.radarcord.net", 14 | "api_post": "https://radarcord.net/api/bot/:id/stats", 15 | "api_post_method": null, 16 | "api_field": "guilds", 17 | "api_shard_id": null, 18 | "api_shard_count": "shards", 19 | "api_shards": null, 20 | "api_get": "https://radarcord.net/api/bot/:id", 21 | "api_all": null, 22 | "view_bot": "https://radarcord.net/bot/:id", 23 | "bot_widget": null, 24 | "content": null, 25 | "owners": "Scorprian#2161 (381710555096023061)", 26 | "discord": "https://discord.gg/P7G7A5ARvj", 27 | "features": [ 28 | "markdown-long-description", 29 | "custom-bot-invite-link", 30 | "custom-bot-support-link", 31 | "vanity-urls-for-all", 32 | "has-voting", 33 | "votes-sent-to-webhooks", 34 | "additional-bot-owners-editors", 35 | "has-categories-or-tags", 36 | "has-mobile-support", 37 | "has-search", 38 | "has-widget", 39 | "requires-owner-in-server", 40 | "server-count-api", 41 | "bot-reviews" 42 | ] 43 | } 44 | -------------------------------------------------------------------------------- /data/lists/space-bot-list.xyz.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "../../schema/list.json", 3 | "id": "space-bot-list.xyz", 4 | "added": 1581887063, 5 | "name": "Space Bots List", 6 | "url": "https://space-bot-list.xyz/", 7 | "icon": "https://cdn.discordapp.com/attachments/595675239480950807/717039409916280863/SBL_new.png", 8 | "language": "English", 9 | "display": 1, 10 | "defunct": 1, 11 | "discord_only": 1, 12 | "description": "Space Bots List is botlist that you can find most of good bots, and learn from here how to make bot, with helpful staff", 13 | "api_docs": "https://spacebots.gitbook.io/tutorial-en/api/stats", 14 | "api_post": "https://space-bot-list.xyz/api/bots/:id", 15 | "api_post_method": null, 16 | "api_field": "guilds", 17 | "api_shard_id": null, 18 | "api_shard_count": null, 19 | "api_shards": null, 20 | "api_get": "https://space-bot-list.xyz/api/bots/:id", 21 | "api_all": null, 22 | "view_bot": "https://space-bot-list.xyz/bots/:id", 23 | "bot_widget": null, 24 | "content": null, 25 | "owners": "MR.Nak#9011 (471973265594908673), Derpy#6666 (388320576407863297)", 26 | "discord": "https://discord.gg/jkwDfC7", 27 | "features": [ 28 | "markdown-long-description", 29 | "custom-bot-github-link", 30 | "custom-bot-support-link", 31 | "custom-bot-website-link", 32 | "voting-data-exposed", 33 | "additional-bot-owners-editors", 34 | "has-mobile-support", 35 | "requires-owner-in-server" 36 | ] 37 | } 38 | -------------------------------------------------------------------------------- /data/lists/stellarbotlist.com.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "../../schema/list.json", 3 | "id": "stellarbotlist.com", 4 | "added": 1626877312, 5 | "name": "Stellar Bot List", 6 | "url": "https://stellarbotlist.com/", 7 | "icon": "https://stellarbotlist.com/img/logo.png", 8 | "language": "English", 9 | "display": 1, 10 | "defunct": 0, 11 | "discord_only": 1, 12 | "description": "Stellar Bot List is a Discord Bots referencer allowing you to find the bot of your dreams or increase its visibility", 13 | "api_docs": null, 14 | "api_post": null, 15 | "api_post_method": null, 16 | "api_field": null, 17 | "api_shard_id": null, 18 | "api_shard_count": null, 19 | "api_shards": null, 20 | "api_get": "https://stellarbotlist.com/api/bots/:id", 21 | "api_all": null, 22 | "view_bot": "https://stellarbotlist.com/bot/:id", 23 | "bot_widget": null, 24 | "content": null, 25 | "owners": "MéliodasDev#9214 (290467364372480000)", 26 | "discord": "https://discord.gg/hAYNuDRMwy", 27 | "features": [ 28 | "html-long-description", 29 | "iframe-long-description", 30 | "custom-bot-github-link", 31 | "custom-bot-support-link", 32 | "custom-bot-website-link", 33 | "has-voting", 34 | "additional-bot-owners-editors", 35 | "has-categories-or-tags", 36 | "has-certification-program", 37 | "has-mobile-support", 38 | "requires-owner-in-server" 39 | ] 40 | } 41 | -------------------------------------------------------------------------------- /data/lists/thereisabotforthat.com.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "../../schema/list.json", 3 | "id": "thereisabotforthat.com", 4 | "added": 1532965633, 5 | "name": "There is a bot for that", 6 | "url": "https://thereisabotforthat.com/", 7 | "icon": "https://pbs.twimg.com/app_img/834705925562851330/CjvLy-YN?format=png&name=73x73", 8 | "language": "English", 9 | "display": 1, 10 | "defunct": 1, 11 | "discord_only": 0, 12 | "description": null, 13 | "api_docs": null, 14 | "api_post": null, 15 | "api_post_method": null, 16 | "api_field": null, 17 | "api_shard_id": null, 18 | "api_shard_count": null, 19 | "api_shards": null, 20 | "api_get": null, 21 | "api_all": null, 22 | "view_bot": null, 23 | "bot_widget": null, 24 | "content": null, 25 | "owners": null, 26 | "discord": null, 27 | "features": [ 28 | "custom-bot-website-link", 29 | "vanity-urls-for-all", 30 | "has-categories-or-tags", 31 | "has-mobile-support" 32 | ] 33 | } 34 | -------------------------------------------------------------------------------- /data/lists/top.gg.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "../../schema/list.json", 3 | "id": "top.gg", 4 | "added": 1532965633, 5 | "name": "Discord Bot List", 6 | "url": "https://top.gg/", 7 | "icon": "https://cdn.discordapp.com/icons/264445053596991498/a_8c65db889e7834620df19245d04dda5c.png", 8 | "language": "English", 9 | "display": 1, 10 | "defunct": 0, 11 | "discord_only": 1, 12 | "description": null, 13 | "api_docs": "https://top.gg/api/docs", 14 | "api_post": "https://top.gg/api/bots/:id/stats", 15 | "api_post_method": null, 16 | "api_field": "server_count", 17 | "api_shard_id": "shard_id", 18 | "api_shard_count": "shard_count", 19 | "api_shards": "shards", 20 | "api_get": "https://top.gg/api/bots/:id", 21 | "api_all": null, 22 | "view_bot": "https://top.gg/bot/:id", 23 | "bot_widget": "https://top.gg/api/widget/:id.svg", 24 | "content": "Update: As this project is now being run by a new team and hosted from a new server, we are testing enabling server count posting again.\r\n\r\nThis list has been removed from the BotBlock API due to their continued attempts to block BotBlock as a service and their recent change to require authentication on all endpoints.", 25 | "owners": "Veld#0001 (121919449996460033)", 26 | "discord": "https://discord.gg/EYHTgJX", 27 | "features": [ 28 | "bot-reviews", 29 | "has-ads-on-site", 30 | "offers-paid-promotion", 31 | "html-long-description", 32 | "iframe-long-description", 33 | "markdown-long-description", 34 | "custom-bot-github-link", 35 | "custom-bot-invite-link", 36 | "custom-bot-website-link", 37 | "discord-bot-support-link", 38 | "has-voting", 39 | "votes-sent-to-webhooks", 40 | "voting-data-exposed", 41 | "additional-bot-owners-editors", 42 | "has-categories-or-tags", 43 | "has-mobile-support", 44 | "has-search", 45 | "requires-owner-in-server", 46 | "server-count-api" 47 | ] 48 | } 49 | -------------------------------------------------------------------------------- /data/lists/topcord.xyz.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "../../schema/list.json", 3 | "id": "topcord.xyz", 4 | "added": 1597352795, 5 | "name": "TopCord", 6 | "url": "https://topcord.xyz/", 7 | "icon": "https://topcord.xyz/logo.png", 8 | "language": "English", 9 | "display": 1, 10 | "defunct": 1, 11 | "discord_only": 0, 12 | "description": "TopCord is the best Discord Bot List for finding the Discord bots that suit your server.", 13 | "api_docs": "https://docs.topcord.xyz/#/", 14 | "api_post": "https://api.topcord.xyz/bot/:id/stats", 15 | "api_post_method": null, 16 | "api_field": "guilds", 17 | "api_shard_id": null, 18 | "api_shard_count": "shards", 19 | "api_shards": null, 20 | "api_get": "https://api.topcord.xyz/bot/:id", 21 | "api_all": "https://api.topcord.xyz/bots", 22 | "view_bot": "https://topcord.xyz/bot/:id", 23 | "bot_widget": "https://topcord.xyz/widget/bot/:id", 24 | "content": null, 25 | "owners": "ElectricReality#2009 (319680837320704003)", 26 | "discord": "https://discord.gg/zira", 27 | "features": [ 28 | "bot-resubmission", 29 | "has-ads-on-site", 30 | "html-long-description", 31 | "iframe-long-description", 32 | "markdown-long-description", 33 | "certified-bot-vanity-urls", 34 | "custom-bot-support-link", 35 | "custom-bot-website-link", 36 | "discord-bot-support-link", 37 | "has-voting", 38 | "votes-sent-to-webhooks", 39 | "voting-data-exposed", 40 | "has-categories-or-tags", 41 | "has-mobile-support", 42 | "has-search", 43 | "has-widget", 44 | "requires-owner-in-server", 45 | "server-count-api" 46 | ] 47 | } 48 | -------------------------------------------------------------------------------- /data/lists/vcodes.xyz.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "../../schema/list.json", 3 | "id": "vcodes.xyz", 4 | "added": 1626876913, 5 | "name": "vCodes", 6 | "url": "https://vcodes.xyz", 7 | "icon": "https://vcodes.xyz/img/logo.png", 8 | "language": "English", 9 | "display": 1, 10 | "defunct": 0, 11 | "discord_only": 1, 12 | "description": "Don't you want to expand and improve your Discord bot? Here vCodes are here for you!", 13 | "api_docs": "https://docs.vcodes.xyz/", 14 | "api_post": "https://vcodes.xyz/api/bots/stats", 15 | "api_post_method": null, 16 | "api_field": "serverCount", 17 | "api_shard_id": null, 18 | "api_shard_count": "shardCount", 19 | "api_shards": null, 20 | "api_get": "https://vcodes.xyz/api/bots/:id", 21 | "api_all": null, 22 | "view_bot": "https://vcodes.xyz/bot/:id", 23 | "bot_widget": null, 24 | "content": null, 25 | "owners": "Claudette#0241 (714451348212678658)", 26 | "discord": "https://discord.gg/z7dBzygse4", 27 | "features": [ 28 | "html-long-description", 29 | "iframe-long-description", 30 | "custom-bot-github-link", 31 | "custom-bot-support-link", 32 | "custom-bot-website-link", 33 | "discord-bot-support-link", 34 | "has-voting", 35 | "voting-data-exposed", 36 | "additional-bot-owners-editors", 37 | "has-categories-or-tags", 38 | "has-mobile-support", 39 | "has-search", 40 | "server-count-api" 41 | ] 42 | } 43 | -------------------------------------------------------------------------------- /data/lists/vitallist.xyz.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "../../schema/list.json", 3 | "id": "vitallist.xyz", 4 | "added": 1668474333, 5 | "name": "VitalList", 6 | "url": "https://vitallist.xyz/", 7 | "icon": "https://vitallist.xyz/img/icon.webp", 8 | "language": "English", 9 | "display": 1, 10 | "defunct": 1, 11 | "discord_only": 1, 12 | "description": "A place where you can find Discord bots, Vital List.|", 13 | "api_docs": "https://vitallist.xyz/docs/", 14 | "api_post": "https://vitallist.xyz/api/bots/:id", 15 | "api_post_method": null, 16 | "api_field": "server_count", 17 | "api_shard_id": null, 18 | "api_shard_count": "shard_count", 19 | "api_shards": null, 20 | "api_get": "https://vitallist.xyz/api/bots/:id", 21 | "api_all": null, 22 | "view_bot": "https://vitallist.xyz/bots/:id", 23 | "bot_widget": "https://vitallist.xyz/bots/:id/widget", 24 | "content": null, 25 | "owners": "BrydenIsNotSmart#0001 (529815278456930314), Kyasa#9048 (700609775838298113)", 26 | "discord": "https://vitallist.xyz/discord", 27 | "features": [ 28 | "bot-resubmission", 29 | "bot-reviews", 30 | "html-long-description", 31 | "iframe-long-description", 32 | "markdown-long-description", 33 | "custom-bot-donate-link", 34 | "custom-bot-github-link", 35 | "custom-bot-invite-link", 36 | "custom-bot-support-link", 37 | "custom-bot-website-link", 38 | "has-voting", 39 | "votes-sent-to-webhooks", 40 | "has-categories-or-tags", 41 | "has-mobile-support", 42 | "server-count-api" 43 | ] 44 | } 45 | -------------------------------------------------------------------------------- /data/lists/voidbots.net.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "../../schema/list.json", 3 | "id": "voidbots.net", 4 | "added": 1602022304, 5 | "name": "Void Bots", 6 | "url": "https://voidbots.net/", 7 | "icon": "https://voidbots.net/assets/img/logo.png", 8 | "language": "English", 9 | "display": 1, 10 | "defunct": 0, 11 | "discord_only": 1, 12 | "description": "Advertise your Discord bot for free!", 13 | "api_docs": "https://docs.voidbots.net/", 14 | "api_post": "https://api.voidbots.net/bot/stats/:id", 15 | "api_post_method": null, 16 | "api_field": "server_count", 17 | "api_shard_id": null, 18 | "api_shard_count": "shard_count", 19 | "api_shards": null, 20 | "api_get": "https://api.voidbots.net/bot/info/:id", 21 | "api_all": null, 22 | "view_bot": "https://voidbots.net/bot/:id", 23 | "bot_widget": "https://voidbots.net/api/embed/:id", 24 | "content": null, 25 | "owners": "DanPlayz#1486 (209796601357533184), AshMW#2724 (229285505693515776)", 26 | "discord": "https://voidbots.net/join", 27 | "features": [ 28 | "bot-reviews", 29 | "html-long-description", 30 | "iframe-long-description", 31 | "markdown-long-description", 32 | "certified-bot-vanity-urls", 33 | "custom-bot-donate-link", 34 | "custom-bot-github-link", 35 | "custom-bot-invite-link", 36 | "custom-bot-support-link", 37 | "custom-bot-website-link", 38 | "discord-bot-support-link", 39 | "has-voting", 40 | "votes-sent-to-webhooks", 41 | "voting-data-exposed", 42 | "additional-bot-owners-editors", 43 | "has-categories-or-tags", 44 | "has-certification-program", 45 | "has-mobile-support", 46 | "has-search", 47 | "has-widget", 48 | "requires-owner-in-server", 49 | "server-count-api" 50 | ] 51 | } 52 | -------------------------------------------------------------------------------- /data/lists/wonderbotlist.com.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "../../schema/list.json", 3 | "id": "wonderbotlist.com", 4 | "added": 1533208489, 5 | "name": "Wonder Bot List", 6 | "url": "https://wonderbotlist.com", 7 | "icon": "https://cdn.discordapp.com/icons/501017909389295616/b612c45b809314e5e362dd8fa87bb3ac.png", 8 | "language": "English", 9 | "display": 1, 10 | "defunct": 1, 11 | "discord_only": 1, 12 | "description": null, 13 | "api_docs": "https://api.wonderbotlist.com/en/", 14 | "api_post": "https://api.wonderbotlist.com/v1/bot/:id", 15 | "api_post_method": null, 16 | "api_field": "serveurs", 17 | "api_shard_id": null, 18 | "api_shard_count": "shards", 19 | "api_shards": null, 20 | "api_get": "https://api.wonderbotlist.com/v1/bot/:id", 21 | "api_all": null, 22 | "view_bot": "https://wonderbotlist.com/en/bot/:id", 23 | "bot_widget": null, 24 | "content": null, 25 | "owners": "Ten-No-Kami-Sama#7777 (193090359700619264), `${DoctaEnkoda++}`#2311 (160868823887511552), NaelleOwska#1786 (359767845762236436)", 26 | "discord": "https://discord.gg/yaS9krd", 27 | "features": [ 28 | "has-mobile-support" 29 | ] 30 | } 31 | -------------------------------------------------------------------------------- /data/lists/yabl.xyz.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "../../schema/list.json", 3 | "id": "yabl.xyz", 4 | "added": 1564607076, 5 | "name": "Yet Another Bot List", 6 | "url": "https://yabl.xyz/", 7 | "icon": "https://i.imgur.com/OFiMern.png", 8 | "language": "English", 9 | "display": 1, 10 | "defunct": 0, 11 | "discord_only": 1, 12 | "description": null, 13 | "api_docs": "https://yabl.xyz/api", 14 | "api_post": "https://yabl.xyz/api/bot/:id/stats", 15 | "api_post_method": null, 16 | "api_field": "guildCount", 17 | "api_shard_id": null, 18 | "api_shard_count": null, 19 | "api_shards": null, 20 | "api_get": "https://yabl.xyz/api/bot/:id", 21 | "api_all": "https://yabl.xyz/api/bots/all", 22 | "view_bot": "https://yabl.xyz/bot/:id", 23 | "bot_widget": null, 24 | "content": null, 25 | "owners": "! craftxbox#4738 (153353572711530496), ry00001#3487 (190544080164487168)", 26 | "discord": "https://discord.gg/vXeUnzZ", 27 | "features": [ 28 | "markdown-long-description", 29 | "custom-bot-github-link", 30 | "custom-bot-support-link", 31 | "custom-bot-website-link", 32 | "discord-bot-support-link" 33 | ] 34 | } 35 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "data", 3 | "private": true, 4 | "version": "1.0.0", 5 | "description": "Open data for BotBlock.org, consumed for the API worker & website.", 6 | "main": "", 7 | "scripts": { 8 | "test": "jest" 9 | }, 10 | "repository": { 11 | "type": "git", 12 | "url": "git+https://github.com/botblock/data.git" 13 | }, 14 | "keywords": [], 15 | "author": "Matt (IPv4) Cowley", 16 | "license": "Apache-2.0", 17 | "bugs": { 18 | "url": "https://github.com/botblock/data/issues" 19 | }, 20 | "homepage": "https://github.com/botblock/data#readme", 21 | "devDependencies": { 22 | "@apidevtools/swagger-parser": "^10.0.3", 23 | "ajv": "^8.8.2", 24 | "editorconfig-checker": "^4.0.2", 25 | "jest": "^27.4.5" 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /schema/feature.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-07/schema", 3 | "type": "object", 4 | "title": "Feature", 5 | "description": "A list feature.", 6 | "required": [ 7 | "name", 8 | "id", 9 | "display", 10 | "type", 11 | "description" 12 | ], 13 | "properties": { 14 | "name": { 15 | "$id": "#/properties/name", 16 | "type": "string", 17 | "title": "Feature name", 18 | "description": "The displayed name of the feature." 19 | }, 20 | "id": { 21 | "$id": "#/properties/id", 22 | "type": "string", 23 | "title": "Feature Id", 24 | "description": "The sluggified name of the feature. Matches the file name." 25 | }, 26 | "display": { 27 | "$id": "#/properties/display", 28 | "type": "integer", 29 | "title": "Display order", 30 | "description": "A value used to rank features. Sorted in descending order." 31 | }, 32 | "type": { 33 | "$id": "#/properties/type", 34 | "type": "integer", 35 | "title": "Feature type", 36 | "description": "The type the feature is, with 0 = positive, 1 = neutral, 2 = negative.", 37 | "enum": [ 38 | 0, 39 | 1, 40 | 2 41 | ] 42 | }, 43 | "description": { 44 | "$id": "#/properties/description", 45 | "type": "string", 46 | "title": "Feature description", 47 | "description": "The displayed description of the feature." 48 | } 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /schema/legacy.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-07/schema", 3 | "type": "object", 4 | "title": "Legacy Ids", 5 | "description": "A map of legacy list Ids to valid list Ids.", 6 | "additionalProperties": { 7 | "type": "string" 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /schema/library.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-07/schema", 3 | "type": "object", 4 | "title": "Library", 5 | "description": "An API library.", 6 | "required": [ 7 | "repo", 8 | "language", 9 | "name", 10 | "description", 11 | "package_link", 12 | "package_link_name" 13 | ], 14 | "properties": { 15 | "repo": { 16 | "$id": "#/properties/repo", 17 | "type": "string", 18 | "title": "Library repository", 19 | "description": "Short name for the library repository." 20 | }, 21 | "language": { 22 | "$id": "#/properties/language", 23 | "type": "string", 24 | "title": "Library language", 25 | "description": "The programming language of the library." 26 | }, 27 | "name": { 28 | "$id": "#/properties/name", 29 | "type": "string", 30 | "title": "Library name", 31 | "description": "Full name of the API library." 32 | }, 33 | "description": { 34 | "$id": "#/properties/description", 35 | "type": "string", 36 | "title": "Library description", 37 | "description": "The displayed description of the library." 38 | }, 39 | "package_link": { 40 | "$id": "#/properties/package_link", 41 | "type": "string", 42 | "title": "Library description", 43 | "description": "The displayed description of the library." 44 | }, 45 | "badge_image": { 46 | "$id": "#/properties/badge_image", 47 | "type": "string", 48 | "title": "Badge image URL", 49 | "description": "A link to a badge image for the library (e.g. the npm badge)." 50 | }, 51 | "badge_url": { 52 | "$id": "#/properties/badge_url", 53 | "type": "string", 54 | "title": "Badge URL", 55 | "description": "A link to go when the badge image is clicked on the website." 56 | }, 57 | "example_usage": { 58 | "$id": "#/properties/example_usage", 59 | "type": "string", 60 | "title": "Example library usage", 61 | "description": "Exemplar code for using the library." 62 | } 63 | } 64 | } 65 | -------------------------------------------------------------------------------- /schema/list.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-07/schema", 3 | "type": "object", 4 | "title": "List", 5 | "description": "A bot list.", 6 | "required": [ 7 | "id", 8 | "added", 9 | "name", 10 | "url", 11 | "icon", 12 | "language", 13 | "display", 14 | "defunct", 15 | "discord_only", 16 | "description", 17 | "api_docs", 18 | "api_post", 19 | "api_post_method", 20 | "api_field", 21 | "api_shard_id", 22 | "api_shard_count", 23 | "api_shards", 24 | "api_get", 25 | "api_all", 26 | "view_bot", 27 | "bot_widget", 28 | "content", 29 | "owners", 30 | "discord", 31 | "features" 32 | ], 33 | "properties": { 34 | "id": { 35 | "$id": "#/properties/id", 36 | "type": "string", 37 | "title": "List Id", 38 | "description": "The domain of the bot list. Matches the file name." 39 | }, 40 | "added": { 41 | "$id": "#/properties/added", 42 | "type": "integer", 43 | "title": "List added timestamp", 44 | "description": "Unix timestamp for when the list was added to BotBlock." 45 | }, 46 | "name": { 47 | "$id": "#/properties/name", 48 | "type": "string", 49 | "title": "List name", 50 | "description": "The displayed name of the list." 51 | }, 52 | "url": { 53 | "$id": "#/properties/url", 54 | "type": "string", 55 | "title": "List URL", 56 | "description": "The main URL to access the bot list." 57 | }, 58 | "icon": { 59 | "$id": "#/properties/icon", 60 | "type": "string", 61 | "title": "List icon", 62 | "description": "A URL for an icon for the list." 63 | }, 64 | "language": { 65 | "$id": "#/properties/language", 66 | "type": "string", 67 | "title": "List language(s)", 68 | "description": "The languages the list has support for." 69 | }, 70 | "display": { 71 | "$id": "#/properties/display", 72 | "type": "integer", 73 | "title": "List display status", 74 | "description": "A flag for if the list is displayed on BotBlock, with 0 = hidden, 1 = displayed.", 75 | "enum": [ 76 | 0, 77 | 1 78 | ] 79 | }, 80 | "defunct": { 81 | "$id": "#/properties/defunct", 82 | "type": "integer", 83 | "title": "List defunct status", 84 | "description": "A flag for if the list is known to be defunct, with 0 = active, 1 = defunct.", 85 | "enum": [ 86 | 0, 87 | 1 88 | ] 89 | }, 90 | "discord_only": { 91 | "$id": "#/properties/discord_only", 92 | "type": "integer", 93 | "title": "List Discord-only status", 94 | "description": "A flag for if the list holds Discord bots only, with 0 = includes non-Discord, 1 = Discord-only.", 95 | "enum": [ 96 | 0, 97 | 1 98 | ] 99 | }, 100 | "description": { 101 | "$id": "#/properties/description", 102 | "type": [ 103 | "string", 104 | "null" 105 | ], 106 | "title": "List description", 107 | "description": "The displayed description of the list." 108 | }, 109 | "api_docs": { 110 | "$id": "#/properties/api_docs", 111 | "type": [ 112 | "string", 113 | "null" 114 | ], 115 | "title": "List API docs URL", 116 | "description": "The URL to the API docs for the list, if known." 117 | }, 118 | "api_post": { 119 | "$id": "#/properties/api_post", 120 | "type": [ 121 | "string", 122 | "null" 123 | ], 124 | "title": "List API guild count submission endpoint", 125 | "description": "The endpoint URL for submitting a bot's guild count to the list, if known, with `:id` as placeholder for bot Id." 126 | }, 127 | "api_post_method": { 128 | "$id": "#/properties/api_post_method", 129 | "type": [ 130 | "string", 131 | "null" 132 | ], 133 | "title": "List API guild count HTTP method", 134 | "description": "The HTTP method to use for submitting a bot's guild count to the list via `api_post`. Defaults to `POST` if null." 135 | }, 136 | "api_field": { 137 | "$id": "#/properties/api_field", 138 | "type": [ 139 | "string", 140 | "null" 141 | ], 142 | "title": "List API count field name", 143 | "description": "The field name for guild count when posting a bot's guild count to the list, if known." 144 | }, 145 | "api_shard_id": { 146 | "$id": "#/properties/api_shard_id", 147 | "type": [ 148 | "string", 149 | "null" 150 | ], 151 | "title": "List API shard Id field name", 152 | "description": "The field name for shard Id when posting a bot's guild count to the list, if known." 153 | }, 154 | "api_shard_count": { 155 | "$id": "#/properties/api_shard_count", 156 | "type": [ 157 | "string", 158 | "null" 159 | ], 160 | "title": "List API shard count field name", 161 | "description": "The field name for shard count when posting a bot's guild count to the list, if known." 162 | }, 163 | "api_shards": { 164 | "$id": "#/properties/api_shards", 165 | "type": [ 166 | "string", 167 | "null" 168 | ], 169 | "title": "List API shards field name", 170 | "description": "The field name for shards when posting a bot's guild count to the list, if known." 171 | }, 172 | "api_get": { 173 | "$id": "#/properties/api_get", 174 | "type": [ 175 | "string", 176 | "null" 177 | ], 178 | "title": "List API bot GET endpoint", 179 | "description": "The endpoint URL for getting a bot from the list, if known, with `:id` as placeholder for bot Id." 180 | }, 181 | "api_all": { 182 | "$id": "#/properties/api_all", 183 | "type": [ 184 | "string", 185 | "null" 186 | ], 187 | "title": "List API all bots GET endpoint", 188 | "description": "The endpoint URL for getting all bots from the list, if known." 189 | }, 190 | "view_bot": { 191 | "$id": "#/properties/view_bot", 192 | "type": [ 193 | "string", 194 | "null" 195 | ], 196 | "title": "List view bot URL", 197 | "description": "The URL to the view a bot on the list, if known, with `:id` as placeholder for bot Id." 198 | }, 199 | "bot_widget": { 200 | "$id": "#/properties/bot_widget", 201 | "type": [ 202 | "string", 203 | "null" 204 | ], 205 | "title": "List bot widget URL", 206 | "description": "The URL to get a bot widget from the list, if known, with `:id` as placeholder for bot Id." 207 | }, 208 | "content": { 209 | "$id": "#/properties/content", 210 | "type": [ 211 | "string", 212 | "null" 213 | ], 214 | "title": "List notice content", 215 | "description": "The displayed notice content for the list, if any." 216 | }, 217 | "owners": { 218 | "$id": "#/properties/owners", 219 | "type": [ 220 | "string", 221 | "null" 222 | ], 223 | "pattern": "^(.{2,32}#\\d{4} \\(\\d{16,}\\))(, (.{2,32}#\\d{4} \\(\\d{16,}\\)))*$", 224 | "title": "List owners", 225 | "description": "Names of the list owners, if known." 226 | }, 227 | "discord": { 228 | "$id": "#/properties/discord", 229 | "type": [ 230 | "string", 231 | "null" 232 | ], 233 | "title": "List Discord invite URL", 234 | "description": "The URL invite for the list's Discord server, if known." 235 | }, 236 | "features": { 237 | "$id": "#/properties/features", 238 | "type": "array", 239 | "title": "List features.", 240 | "description": "A list of feature Ids the bot list has. Ids must be valid feature Ids.", 241 | "items": { 242 | "type": "string", 243 | "title": "Feature Id", 244 | "description": "The Id of an existing feature." 245 | } 246 | } 247 | } 248 | } 249 | -------------------------------------------------------------------------------- /validate/data.test.js: -------------------------------------------------------------------------------- 1 | const { join } = require('path'); 2 | const { loadInvalidJsonFiles, loadJson, validateJsonFiles, loadValidJsonFiles } = require('./util'); 3 | 4 | const expectSchemas = (singular, plural) => 5 | async () => { 6 | const schema = `../../schema/${singular}.json`; 7 | const files = await loadValidJsonFiles(join(__dirname, '..', 'data', plural)); 8 | const unprovided = files.filter(({ data }) => data['$schema'] !== schema); 9 | 10 | expect(unprovided).toEqual([]); 11 | }; 12 | 13 | describe('legacy data', () => { 14 | test('is a valid json file', async () => { 15 | // Get invalid json files 16 | const failures = await loadInvalidJsonFiles(join(__dirname, '..', 'data')) 17 | .then(invalid => invalid.filter(({ file }) => file === 'legacy.json')); 18 | 19 | // Expect no errors 20 | expect(failures).toEqual([]); 21 | }); 22 | 23 | test('is valid against schema', async () => { 24 | // Get the file and schema 25 | const files = await loadValidJsonFiles(join(__dirname, '..', 'data')) 26 | .then(valid => valid.filter(({ file }) => file === 'legacy.json')); 27 | const schema = await loadJson(join(__dirname, '..', 'schema', 'legacy.json')); 28 | 29 | // Get failures 30 | const failures = validateJsonFiles(files, schema).filter(({ valid }) => !valid); 31 | 32 | // Expect no errors 33 | expect(failures).toEqual([]); 34 | }); 35 | 36 | test('contains valid list ids', async () => { 37 | // Get the file 38 | const files = await loadValidJsonFiles(join(__dirname, '..', 'data')) 39 | .then(valid => valid.filter(({ file }) => file === 'legacy.json')); 40 | 41 | // If invalid, don't test 42 | if (!files.length) return; 43 | 44 | // Get all valid lists 45 | const listsFiles = await loadValidJsonFiles(join(__dirname, '..', 'data', 'lists')); 46 | const lists = listsFiles.map(({ data }) => data.id); 47 | 48 | // Get non-existent lists 49 | const missing = Object.values(files[0].data).filter( 50 | id => !lists.includes(id) && id !== '../schema/legacy.json' 51 | ); 52 | 53 | // Expect no missing lists 54 | expect(missing).toEqual([]); 55 | }); 56 | 57 | // special-case 58 | test('contains $schema', async () => { 59 | const files = await loadValidJsonFiles(join(__dirname, '..', 'data')) 60 | .then(valid => valid.filter(({ file }) => file === 'legacy.json')); 61 | 62 | const unprovided = files.filter(({ data }) => data['$schema'] !== '../schema/legacy.json'); 63 | 64 | expect(unprovided).toEqual([]); 65 | }); 66 | }); 67 | 68 | describe('features data', () => { 69 | test('are valid json files', async () => { 70 | // Get invalid json files 71 | const failures = await loadInvalidJsonFiles(join(__dirname, '..', 'data', 'features')); 72 | 73 | // Expect no errors 74 | expect(failures).toEqual([]); 75 | }); 76 | 77 | test('are valid against schema', async () => { 78 | // Get the files and schema 79 | const files = await loadValidJsonFiles(join(__dirname, '..', 'data', 'features')); 80 | const schema = await loadJson(join(__dirname, '..', 'schema', 'feature.json')); 81 | 82 | // Get failures 83 | const failures = validateJsonFiles(files, schema).filter(({ valid }) => !valid); 84 | 85 | // Expect no errors 86 | expect(failures).toEqual([]); 87 | }); 88 | 89 | test('have file names that match ids', async () => { 90 | // Get the files 91 | const files = await loadValidJsonFiles(join(__dirname, '..', 'data', 'features')); 92 | 93 | // Get mis-matches 94 | const mismatches = files.filter(({ file, data }) => file !== `${data.id}.json`); 95 | 96 | // Expect no mis-matches 97 | expect(mismatches).toEqual([]); 98 | }); 99 | 100 | test('contains $schema', expectSchemas('feature', 'features')); 101 | }); 102 | 103 | describe('libraries data', () => { 104 | test('are valid json files', async () => { 105 | // Get invalid json files 106 | const failures = await loadInvalidJsonFiles(join(__dirname, '..', 'data', 'libraries')); 107 | 108 | // Expect no errors 109 | expect(failures).toEqual([]); 110 | }); 111 | 112 | test('are valid against schema', async () => { 113 | // Get the files and schema 114 | const files = await loadValidJsonFiles(join(__dirname, '..', 'data', 'libraries')); 115 | const schema = await loadJson(join(__dirname, '..', 'schema', 'library.json')); 116 | 117 | // Get failures 118 | const failures = validateJsonFiles(files, schema).filter(({ valid }) => !valid); 119 | 120 | // Expect no errors 121 | expect(failures).toEqual([]); 122 | }); 123 | 124 | test('have file names that match sluggified repos', async () => { 125 | // Get the files 126 | const files = await loadValidJsonFiles(join(__dirname, '..', 'data', 'libraries')); 127 | 128 | // Get mis-matches 129 | const sluggify = name => name.toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-+|-+$/g, ''); 130 | const mismatches = files.filter(({ file, data }) => file !== `${sluggify(data.repo)}.json`); 131 | 132 | // Expect no mis-matches 133 | expect(mismatches).toEqual([]); 134 | }); 135 | 136 | test('contains $schema', expectSchemas('library', 'libraries')); 137 | }); 138 | 139 | describe('lists data', () => { 140 | test('are valid json files', async () => { 141 | // Get invalid json files 142 | const failures = await loadInvalidJsonFiles(join(__dirname, '..', 'data', 'lists')); 143 | 144 | // Expect no errors 145 | expect(failures).toEqual([]); 146 | }); 147 | 148 | test('are valid against schema', async () => { 149 | // Get the files and schema 150 | const files = await loadValidJsonFiles(join(__dirname, '..', 'data', 'lists')); 151 | const schema = await loadJson(join(__dirname, '..', 'schema', 'list.json')); 152 | 153 | // Get failures 154 | const failures = validateJsonFiles(files, schema).filter(({ valid }) => !valid); 155 | 156 | // Expect no errors 157 | expect(failures).toEqual([]); 158 | }); 159 | 160 | test('have file names that match ids', async () => { 161 | // Get the files 162 | const files = await loadValidJsonFiles(join(__dirname, '..', 'data', 'lists')); 163 | 164 | // Get mis-matches 165 | const mismatches = files.filter(({ file, data }) => file !== `${data.id}.json`); 166 | 167 | // Expect no mis-matches 168 | expect(mismatches).toEqual([]); 169 | }); 170 | 171 | test('contain valid features', async () => { 172 | // Get the files 173 | const files = await loadValidJsonFiles(join(__dirname, '..', 'data', 'lists')); 174 | 175 | // Get all valid features 176 | const featuresFiles = await loadValidJsonFiles(join(__dirname, '..', 'data', 'features')); 177 | const features = featuresFiles.map(({ data }) => data.id); 178 | 179 | // Get lists that have invalid features 180 | const failures = files.filter(({ data }) => data.features.some(id => !features.includes(id))); 181 | 182 | // Expect no errors 183 | expect(failures).toEqual([]); 184 | }); 185 | 186 | test('contains $schema', expectSchemas('list', 'lists')); 187 | }); 188 | -------------------------------------------------------------------------------- /validate/files.test.js: -------------------------------------------------------------------------------- 1 | const { join } = require('path'); 2 | const { exec } = require('child_process'); 3 | const { getDirectories, getFiles } = require('./util'); 4 | 5 | describe('repository', () => { 6 | test('contains data, schema and validate directories', async () => { 7 | // Get directories 8 | const directories = await getDirectories(join(__dirname, '..')); 9 | 10 | // Filter out known things to ignore 11 | const filtered = directories.filter(dir => ![ 12 | '.git', 13 | '.idea', 14 | '.vscode', 15 | 'node_modules', 16 | ].includes(dir)); 17 | 18 | // Check only expected directories are present 19 | expect(filtered.sort()).toEqual([ 20 | '.github', 21 | 'data', 22 | 'schema', 23 | 'validate', 24 | ].sort()); 25 | }); 26 | 27 | test('contains root metadata files', async () => { 28 | // Get files 29 | const files = await getFiles(join(__dirname, '..')); 30 | 31 | // Check only expected files are present 32 | expect(files.sort()).toEqual([ 33 | '.editorconfig', 34 | '.gitignore', 35 | '.nvmrc', 36 | 'LICENSE', 37 | 'openapi.yml', 38 | 'package.json', 39 | 'package-lock.json', 40 | 'README.md', 41 | ].sort()); 42 | }); 43 | 44 | test('complies with editorconfig', async () => { 45 | // Run editorconfig 46 | const editorconfig = await new Promise(resolve => exec( 47 | './node_modules/.bin/editorconfig-checker', 48 | { cwd: join(__dirname, '..') }, 49 | (error, stdout, stderr) => resolve({ error, stdout, stderr }), 50 | )); 51 | 52 | // Log output if errored 53 | if (editorconfig.error) { 54 | console.log(editorconfig.stdout); 55 | console.error(editorconfig.stderr); 56 | } 57 | 58 | // Expect no errors 59 | expect(editorconfig.error).toBeNull(); 60 | }); 61 | }); 62 | 63 | describe('.github directory', () => { 64 | test('contains workflows directory', async () => { 65 | // Get directories 66 | const directories = await getDirectories(join(__dirname, '..', '.github')); 67 | 68 | // Check only expected directories are present 69 | expect(directories.sort()).toEqual([ 70 | 'workflows', 71 | ].sort()); 72 | }); 73 | 74 | test('contains no files', async () => { 75 | // Get files 76 | const files = await getFiles(join(__dirname, '..', '.github')); 77 | expect(files).toEqual([]); 78 | }); 79 | 80 | describe('workflows subdirectory', () => { 81 | test('contains no directories', async () => { 82 | // Get directories 83 | const directories = await getDirectories(join(__dirname, '..', '.github', 'workflows')); 84 | expect(directories).toEqual([]); 85 | }); 86 | 87 | test('contains ci workflow file', async () => { 88 | // Get files 89 | const files = await getFiles(join(__dirname, '..', '.github', 'workflows')); 90 | 91 | // Check only expected files are present 92 | expect(files.sort()).toEqual([ 93 | 'deploy.yml', 94 | 'test.yml', 95 | ].sort()); 96 | }); 97 | }); 98 | }); 99 | 100 | describe('data directory', () => { 101 | test('contains features, libraries and lists directories', async () => { 102 | // Get directories 103 | const directories = await getDirectories(join(__dirname, '..', 'data')); 104 | 105 | // Check only expected directories are present 106 | expect(directories.sort()).toEqual([ 107 | 'features', 108 | 'libraries', 109 | 'lists', 110 | ].sort()); 111 | }); 112 | 113 | test('contains single legacy map file', async () => { 114 | // Get files 115 | const files = await getFiles(join(__dirname, '..', 'data')); 116 | 117 | // Check only expected files are present 118 | expect(files.sort()).toEqual([ 119 | 'legacy.json', 120 | ].sort()); 121 | }); 122 | 123 | describe('features subdirectory', () => { 124 | test('contains no directories', async () => { 125 | // Get directories 126 | const directories = await getDirectories(join(__dirname, '..', 'data', 'features')); 127 | expect(directories).toEqual([]); 128 | }); 129 | 130 | test('contains only json files', async () => { 131 | // Get files 132 | const files = await getFiles(join(__dirname, '..', 'data', 'features')); 133 | 134 | // Check all files are json 135 | const jsonFiles = files.filter(file => file.endsWith('.json')); 136 | expect(files.length).toEqual(jsonFiles.length); 137 | }); 138 | }); 139 | 140 | describe('libraries subdirectory', () => { 141 | test('contains no directories', async () => { 142 | // Get directories 143 | const directories = await getDirectories(join(__dirname, '..', 'data', 'libraries')); 144 | expect(directories).toEqual([]); 145 | }); 146 | 147 | test('contains only json files', async () => { 148 | // Get files 149 | const files = await getFiles(join(__dirname, '..', 'data', 'libraries')); 150 | 151 | // Check all files are json 152 | const jsonFiles = files.filter(file => file.endsWith('.json')); 153 | expect(files.length).toEqual(jsonFiles.length); 154 | }); 155 | }); 156 | 157 | describe('lists subdirectory', () => { 158 | test('contains no directories', async () => { 159 | // Get directories 160 | const directories = await getDirectories(join(__dirname, '..', 'data', 'lists')); 161 | expect(directories).toEqual([]); 162 | }); 163 | 164 | test('contains only json files', async () => { 165 | // Get files 166 | const files = await getFiles(join(__dirname, '..', 'data', 'lists')); 167 | 168 | // Check all files are json 169 | const jsonFiles = files.filter(file => file.endsWith('.json')); 170 | expect(files.length).toEqual(jsonFiles.length); 171 | }); 172 | }); 173 | }); 174 | 175 | describe('schema directory', () => { 176 | test('contains no directories', async () => { 177 | // Get directories 178 | const directories = await getDirectories(join(__dirname, '..', 'schema')); 179 | expect(directories).toEqual([]); 180 | }); 181 | 182 | test('contains required json schema files', async () => { 183 | // Get files 184 | const files = await getFiles(join(__dirname, '..', 'schema')); 185 | 186 | // Check only expected files are present 187 | expect(files.sort()).toEqual([ 188 | 'feature.json', 189 | 'legacy.json', 190 | 'library.json', 191 | 'list.json', 192 | ].sort()); 193 | }); 194 | }); 195 | 196 | describe('validate directory', () => { 197 | test('contains no directories', async () => { 198 | // Get directories 199 | const directories = await getDirectories(join(__dirname, '..', 'validate')); 200 | expect(directories).toEqual([]); 201 | }); 202 | 203 | test('contains required test files', async () => { 204 | // Get files 205 | const files = await getFiles(join(__dirname, '..', 'validate')); 206 | 207 | // Check only expected files are present 208 | expect(files.sort()).toEqual([ 209 | 'data.test.js', 210 | 'files.test.js', 211 | 'schemas.test.js', 212 | 'util.js', 213 | ].sort()); 214 | }); 215 | }); 216 | -------------------------------------------------------------------------------- /validate/schemas.test.js: -------------------------------------------------------------------------------- 1 | const { join } = require('path'); 2 | const Ajv = require('ajv'); 3 | const SwaggerParser = require('@apidevtools/swagger-parser'); 4 | const { loadInvalidJsonFiles, loadValidJsonFiles } = require('./util'); 5 | 6 | describe('openapi schema', () => { 7 | test('is a valid openapi schema', async () => { 8 | // Load and parse the schema 9 | const errors = await SwaggerParser.validate(join(__dirname, '..', 'openapi.yml')).then(() => null, err => err); 10 | 11 | // Expect no errors 12 | expect(errors).toBeNull(); 13 | }); 14 | }); 15 | 16 | describe('json schemas', () => { 17 | test('are valid json files', async () => { 18 | // Get invalid json files 19 | const failures = await loadInvalidJsonFiles(join(__dirname, '..', 'schema')); 20 | 21 | // Expect no errors 22 | expect(failures).toEqual([]); 23 | }); 24 | 25 | test('are valid json schemas', async () => { 26 | // Get valid json files 27 | const valid = await loadValidJsonFiles(join(__dirname, '..', 'schema')); 28 | 29 | // Validate schemas 30 | const ajv = new Ajv(); 31 | const failures = valid.map(({ file, data }) => { 32 | try { 33 | const valid = ajv.validateSchema(data); 34 | const errors = ajv.errors; 35 | return { file, valid, errors }; 36 | } catch (err) { 37 | return { file, valid: false, errors: err.message }; 38 | } 39 | }).filter(({ valid }) => !valid); 40 | 41 | // Expect no errors 42 | expect(failures).toEqual([]); 43 | }); 44 | }); 45 | -------------------------------------------------------------------------------- /validate/util.js: -------------------------------------------------------------------------------- 1 | const { promises: { readdir, readFile } } = require('fs'); 2 | const { join } = require('path'); 3 | const Ajv = require('ajv'); 4 | 5 | module.exports.getDirectories = source => readdir(source, { withFileTypes: true }) 6 | .then(data => data.filter(dirent => dirent.isDirectory()).map(dirent => dirent.name)); 7 | 8 | const getFiles = module.exports.getFiles = source => readdir(source, { withFileTypes: true }) 9 | .then(data => data.filter(dirent => dirent.isFile()).map(dirent => dirent.name)); 10 | 11 | const loadJson = module.exports.loadJson = path => readFile(path, 'utf8').then(raw => JSON.parse(raw)); 12 | 13 | const loadJsonFiles = source => getFiles(source) 14 | .then(files => Promise.all(files 15 | .filter(file => file.endsWith('.json')) 16 | .map(file => loadJson(join(source, file)) 17 | .then(data => ({ file, data }), error => ({ file, error }))))); 18 | 19 | module.exports.loadInvalidJsonFiles = source => loadJsonFiles(source) 20 | .then(results => results.filter(({ error }) => !!error)); 21 | 22 | module.exports.loadValidJsonFiles = source => loadJsonFiles(source) 23 | .then(results => results.filter(({ error }) => !error)); 24 | 25 | module.exports.validateJsonFiles = (files, schema) => { 26 | // Create the validator 27 | const ajv = new Ajv(); 28 | const validate = ajv.compile(schema); 29 | 30 | // Validate 31 | return files.map(({ file, data }) => { 32 | try { 33 | const valid = validate(data); 34 | const errors = validate.errors; 35 | return { file, valid, errors }; 36 | } catch (err) { 37 | return { file, valid: false, errors: err.message }; 38 | } 39 | }); 40 | }; 41 | --------------------------------------------------------------------------------