├── .gitignore ├── README.md ├── config.json ├── index.js └── package.json /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | fonts/ 3 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # CaptchaBot | discord.js v12 2 | Базовый капча-бот для защиты от ботов на discord.js v12. 3 | 4 | Всем привет, и сегодня я вам покажу как создать своего капча бота. Он будет защищать ваш сервер от спамеров. Стоит приметить, что данный бот всего-лишь пример, и 100% защиту он не гарантирует. Но вы можете как-нибудь усложнить капчу или сделать что-то в этом роде я всего-лишь покажу вам пример. 5 | 6 | ### Установка 7 | Чтобы данный бот работал, вам потребуется установить [Node.js v12.18.2](https://nodejs.org) или выше. После установки, воспользуйтесь командой `git clone` и скопируйте данный репозиторий к себе. Затем пропишите `npm install` дабы установить все пакеты. 8 | 9 | ### Запуск 10 | Перед тем как запустить бота, создайте в проекте папку `fonts` и закиньте в нее шрифт который вы найдете [здесь](https://discord.gg/aRUGhEg). После же запустите бота командой `node .`. Если все пойдет успешно, то в консоль выведется сообщение о запуске бота. 11 | 12 | ### Конфигурация 13 | В файл `config.json` не забудьте вставить токен бота и айди роли которую он будет выдавать при успешном прохождении капчи. Если вам нужно чтобы бот забирал определенную роль, то вставьте рядом с `member.roles.add(config.role)` строчку `member.roles.remove('айди роли')`. 14 | 15 | Если у вас возникнут вопросы либо что-то будет не получатся, заходите [сюда](https://discord.gg/aRUGhEg) и мы вас обязательно поможем. Так же, попрошу вас поставить звездочку на этот репо, ведь я старался :D 16 | -------------------------------------------------------------------------------- /config.json: -------------------------------------------------------------------------------- 1 | { 2 | "token": "Сюда вставьте токен вашего бота.", 3 | "role": "Сюда вставьте айди роли которую бот будет выдавать при успешном проходждении капчи." 4 | } 5 | -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | const Discord = require("discord.js") 2 | const config = require("./config.json") 3 | const Canvas = require("canvas") 4 | 5 | const client = new Discord.Client({ 6 | disableMentions: "everyone" 7 | }) 8 | client.login(config.token) 9 | 10 | client.on("ready", () => { 11 | console.log(`Бот был успешно запущен!`) 12 | client.user.setActivity("github.com/TheFerryn", { type: "WATCHING" }) 13 | }) 14 | client.on("guildMemberAdd", async (member) => { 15 | Canvas.registerFont(`fonts/BadScript-Regular.ttf`, { family: "BadScript" }) 16 | let captcha = Math.random().toString(36).slice(2, 8) 17 | let canvas = Canvas.createCanvas(170, 50) 18 | let ctx = canvas.getContext("2d") 19 | 20 | ctx.fillStyle = "#FFFFFF" 21 | ctx.fillRect(0, 0, canvas.width, canvas.height) 22 | ctx.fillStyle = "#000001" 23 | ctx.font = "35px BadScript" 24 | ctx.fillText(captcha, canvas.width / 5.5, canvas.height / 1.5) 25 | 26 | let msg = await member.send( 27 | "Добро пожаловать на сервер! Чтобы получить доступ ко всем каналам, пройдите пожалуйста капчу. У вас есть 1 минута.", 28 | new Discord.MessageAttachment(canvas.toBuffer(), "captcha.jpg") 29 | ); 30 | try { 31 | let filter = (m) => { 32 | if (m.author.bot) return; 33 | if (m.author.id === member.id && m.content === captcha) return true; 34 | else { 35 | m.channel.send( 36 | "Вы не прошли капчу. Попробуйте пожалуйста снова." 37 | ); 38 | return false; 39 | } 40 | }; 41 | let res = await msg.channel.awaitMessages(filter, { 42 | max: 1, 43 | time: 60000, 44 | errors: ["time"], 45 | }); 46 | if (res) { 47 | msg.channel.send(`Капча была успешно пройдена! Удачи на сервере ${member.guild.name}!`); 48 | member.roles.add(config.role); 49 | } 50 | } catch (err) { 51 | msg.channel.send( 52 | "Вы не успели пройти капчу и были кикнуты с сервера." 53 | ); 54 | await member.kick(); 55 | } 56 | }) 57 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "discord-js", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "author": "TheFerryn", 10 | "license": "ISC", 11 | "dependencies": { 12 | "canvas": "^2.6.1", 13 | "discord.js": "^12.2.0" 14 | } 15 | } 16 | --------------------------------------------------------------------------------