Материал из Скретч Вики
![]() |
Эта статья или раздел может иметь содержание, не соответствующее стандартам Скретч Вики. Пожалуйста, улучшите её в соответствии с правилами и рекомендациями по редактированию. |
![]() |
Этот раздел или статья не предназначена для новичка! Она содержит сложную информацию. |
На Scratch можно делать ботов с помощью различных языков программирования. Это руководство поможет Вам запрограммировать своего бота с помощью JavaScript и фреймворком Node.js. Если Вы не знаете JavaScript, вот некоторые ресурсы, которые Вам могут помочь в его изучении:
![]() |
Внимание! Пожалуйста, не используйте ботов, чтобы нарушать правила сообщества и/или условия использования Scratch (например, спам-рассылка или масс-репорт)! Вас могут забанить не только по аккаунту, но и по IP-адресу. |
Подготовка
Установка Node.js
Для начала Вам нужно установить Node.js на свой компьютер.
Если у Вас Windows 8.1 и позднее: зайдите на страницу загрузки Node.js и установите версию LTS, т. к. в последней могут быть баги.
Если у Вас Windows 7 или 8: установите Node.js v13.14.0 (64-бит) или Node.js v13.14.0 (32-бит), в зависимости от разрядности Вашей системы. Это последняя версия, которая поддерживает Windows 7/8.
При установке не забудьте отнять галочку у «Automatically install the necessary tools.» Это установит Python и Visual Studio Build Tools для C/C++, и это нам пока что не надо.
Настройка проекта
После установки Node.js, Вы теперь готовы к созданию проекта для бота! Создайте папку в любом удобном Вам месте и откройте командную строку оттуда. Это можно сделать, написав «cmd» (без кавычек) в адресной строке проводника.
Затем напишите:
npm init -y
Это автоматически настроит проект. Если у Вас что-то пошло не так, то напишите:
npm init
Вас спросят некоторые вопросы для настройки проекта.
Установка scratch3-api
scratch3-api — модуль для Node.js, с помощью которого можно удобно использовать API Scratch'а. На данный момент к сожалению обновление до TypeScript его поломало, но есть версия без этого обновления — new-scratch3-api.
Чтобы установить данный модуль, в командной строке в Вашем проекте напишите:
npm i new-scratch3-api
Теперь давайте приступим к программированию нашего бота! Вот самая основа:
const Scratch = require('new-scratch3-api'); // Импортирует scratch3-api в наш скрипт. async function main() { let session = await Scratch.UserSession.create('ЭпичныйНикАккаунтаЗдесь', 'ЭпичныйПарольЗдесь123'); // Создаёт «пользовательскую сессию» — в других словах, входит в аккаунт и сохраняет данные аккаунта в переменную session. // Сделать что-то... } main()
Этот скрипт просто входит в аккаунт.
Запустить скрипт
Для запуска скрипта напишите в командной строке это:
node имяСкрипта
Например, если у Вас файл с скриптом называется script.js, то Вам надо написать:
node script.js
Можно также:
node script
Уроки
Для официальной документации зайдите на GH репозиторию scratch3-api (англ.): https://github.com/ErrorGamer2000/scratch3-api
Как отправить комментарий
С помощью этой функции можно отправить комментарий:
await session.comment(options)
options — объект с ключами:
- project, user или studio в зависимости от куда Вы хотите отправить комментарий. user должен быть никнеймом, а project и studio — id.
- parent — необязателен. «Родитель» комментария, то есть id комментария, на который отвечают.
- replyto — необязателен. Никнейм того, на которого отвечаешь. Можно не писать, но уведомления в сообщениях не будет.
- content — текст комментария.
Пример объекта:
{ user: 'aPPDATA_PRODAKSHNS', content: 'Привет из scratch3-api!' }
Пример использования:
await session.comment({ project: 517816449, content: 'Крутой проект!' });
Как получить список своих проектов
В этом поможет эта функция:
await session.projects.getUserProjects(count);
Она возвращает count последних проектов. Пример использования:
let projects = await session.projects.getUserProjects(42);
Как получить статус серверов Scratch
await Scratch.Rest.getHealth();
Эта функция возвращает «здоровье» серверов Scratch. Пример использования:
const status = await Scratch.Rest.getHealth();
Как получить комментарии у профиля
Получить комментарии в удобном формате по типу JSON нельзя. API Scratch'а даёт доступ к комментариям только через site-api, который даёт HTML код комментариев, но он считается устаревшим начиная с 2015 г.[1], однако до сих пор работающий и доступный. Его URL:
https://scratch.mit.edu/site-api/
Чтобы получить комментарии у профиля, нужно сделать GET запрос сюда:
https://scratch.mit.edu/site-api/comments/user/ник/
Вот пример, как пропарсить HTML, получить информацию о комментарии и добавить его в массив:
// npm i @sapphire/fetch node-html-parser const { fetch, FetchResultTypes } = require('@sapphire/fetch'); const username = 'griffpatch'; // Замените на ник профиля, у которого Вы хотите получить комменты var HTMLParser = require('node-html-parser'); //Импортируем HTML парсер для удобного взаимодействия с HTML (async () => { const resp = await fetch(`https://scratch.mit.edu/site-api/comments/user/${username}/`, FetchResultTypes.Text); var body = HTMLParser.parse(resp); let comments = []; body.querySelectorAll('.comment').forEach(element => { // Для каждого элемента комментария comments = comments.concat({ //Добавляем новый элемент в массиве author: element.getElementById('comment-user').getAttribute('data-comment-user'), //Получаем элемент с ником создателя и получаем атрибут с ником content: element.querySelector('div.content').text.trim(), // Получаем элемент с текстом («контентом») комментария и получаем его текст date: new Date(Date.parse(element.querySelector('.time').getAttribute('title'))) //Довольно запутанно, но это получает элемент с датой и получает аргумент title, где находится дата в формате ISO 8601 и парсит его в объект Date }) }); console.log(comments) })()
Этот же код заработает и с проектами/студиями, нужно просто поменять URL на:
https://scratch.mit.edu/site-api/comments/gallery/id/ (для студий) https://scratch.mit.edu/site-api/comments/project/id/ (для проектов)
Как получить ремиксы у проекта?
В данном модуле к сожалению нет такой функции, но надо сделать HTTP GET запрос на данный URL:
https://scratch.mit.edu/projects/id/remixtree/bare/
Замените «id» на id проекта. Вот код для создания HTTP запроса:
- с помощью @sapphire/fetch:
const resp = await fetch('https://scratch.mit.edu/projects/104/remixtree/bare/', FetchResultTypes.JSON);
- с помощью phin:
const resp = await p({ url: 'https://scratch.mit.edu/projects/104/remixtree/bare/', parse: 'json' })
Примеры
Комментировать кол-во сообщений у griffpatch на своём профиле
В scratch3-api нету функции просмотра кол-во сообщений, поэтому придётся делать HTTP запрос на API Scratch.
const Scratch = require('new-scratch3-api'); const { fetch, FetchResultTypes } = require('@sapphire/fetch'); //Модуль для HTTP запросов (npm i @sapphire/fetch) async function main() { let session = await Scratch.UserSession.create('ЭпичныйНикАккаунтаЗдесь', 'ЭпичныйПарольЗдесь123'); const resp = await fetch('https://api.scratch.mit.edu/users/griffpatch/messages/count', FetchResultTypes.JSON); // Посылает запрос на API Scratch для получения кол-во сообщений и парсит его JSON await session.comment({ user: 'ЭпичныйНикАккаунтаЗдесь', content: `Количество сообщений у @griffpatch — ${resp.count}` }) } main()
Получить информацию о пользователе
const Scratch = require('new-scratch3-api'); async function main() { let user = Scratch.Rest.Users.get("aPPDATA_PRODAKSHNS"); console.log(`Информация о aPPDATA_PRODAKSHNS: ${user}`); } // Здесь нет сессии, т. к. она необязательна для Rest API. main()
Задать облачной переменной значение 5
![]() |
Внимание! Не используйте это для порчи облачных данных проектов, которые не Ваши! Вас забанят. |
const Scratch = require('new-scratch3-api'); async function main() { let session = await Scratch.UserSession.create('ЭпичныйНикАккаунтаЗдесь', 'ЭпичныйПарольЗдесь123'); let cloud = await session.cloudSession(idПроектаЗдесь); // Создаёт «облачную сессию» — подключается к проекту. cloud.set('☁ var', 5); // Задаёт облачной переменной «var» значение 5. Название переменной нужно писать с эмодзи облака } main()