Скрипт имеет API для работы с внешними скриптами и приложениями.

Для регистрации API необходимо добавить в Ваш скрипт следующий код:

function getDollchanAPI() {
  return new Promise((resolve, reject) => {
    const dw = document.defaultView;
    const onmessage = ({ data, ports }) => {
      if(ports && ports.length === 1 && data === 'de-answer-api-message') {
        clearTimeout(to);
        dw.removeEventListener('message', onmessage);
        resolve(ports[0]);
      }
    };
    dw.addEventListener('message', onmessage);
    dw.postMessage('de-request-api-message', '*');
    const to = setTimeout(() => {
      dw.removeEventListener('message', onmessage);
      reject();
    }, 5e3);
  });
}

function runAPI() {
  getDollchanAPI().then(port => {
    port.onmessage = ({ data }) => {
      const result = data.data;
      switch(data.name) {
      case 'registerapi':
        for(let key in result) {
          console.log(`API ${ key } ${
            result[key] ? 'зарегистрирован' : 'недоступен' }.`);
        }
        break;
      case 'newpost':
        console.log('Новые посты: ', result);
        break;
      /* case '...': */
      }
    };
    port.postMessage({ name: 'registerapi', data: ['newpost'] });
    /* port.postMessage({ name: 'registerapi', data: ['...'] }); */
  }).catch(() => console.log('Dollchan API не обнаружен!'));
}

setTimeout(runAPI, 0);

Событие onmessage в функции runAPI будет возвращать объект data со следующими полями:

Если у вас стоит куклоскрипт, то при запуске вы увидите в консоли список поддерживаемых API. Например,

API newpost зарегистрирован.

Если у вас стоит куклоскрипт старой версии, либо он отключен, то в консоли вы увидите:

Dollchan API не обнаружен!

Вы можете ознакомиться с работой API, скачав и установив тестовый скрипт: DollchanAPI_Test.user.js

Список API

1. newpost — новые посты

Событие с этим именем позволит вашему приложению отслеживать появление новых постов, которые добавляет на страницу куклоскрипт. API возвратит поле data с массивом номеров новых постов. Пример:

  const result = data.data;
  switch(data.name) {
  case 'newpost':
    console.log('Новые посты: ', result);
    /* ваш код */
    break;

При появлении новых постов в консоли будет выводиться сообщение вида:

Новые посты:  Array [ 18649619, 18649619 ]

Вместо console.log добавьте Ваш код, который будет обрабатывать массив data.data.

2. expandmedia — раскрытие картинок/webm

Это событие отслеживает момент разворачивания jpg/png/gif/webm/mp4 по центру или в посте. API возвратит поле data с атрибутом src картинки/видео. Пример:

  const result = data.data;
  switch(data.name) {
  case 'expandmedia':
    const src = data.data;
    const ext = src.split('.').pop();
    console.log(ext + ' открыт:', src);
    /* ваш код */
    break;

При раскрытии картинок/webm’ок в консоли будет выводиться сообщение вида:

jpg открыт: /b/src/146459420/14869184607150.jpg
png открыт: /b/src/146574543/14869060587720.png
webm открыт: /b/src/146584803/14869150047100.webm

Ваш код может обрабатывать только определенный контент, анализируя расширение файла, например:

  if(ext === 'webm') {
    const webmEl = document.querySelector(`video[src="${ src }"]`);
    /* обработка webm-файла */
  }

3. submitform — попытка отправить пост или создать тред

Это событие отслеживает результат отправки поста или попытки создания треда. API возвратит поле data с объектом, содержащим результат отправки. Объект может содержать поля:

Пример:

  const result = data.data;
  switch(data.name) {
  case 'submitform':
    console.log(result);
    /* ваш код */
    break;

Возможные варианты результатов:

Object { success: true, num: 22098360 }
Object { success: true, num: null }
Object { success: false, error: "Ошибка: Капча невалидна." }
Object { success: false, error: "Ошибка: Пустое поле сообщения." }