Skip to content

Latest commit

 

History

History
executable file
·
973 lines (873 loc) · 40.8 KB

common.md

File metadata and controls

executable file
·
973 lines (873 loc) · 40.8 KB

Общий API

Пользователь

Данные пользователя

запрос

{
    id: <int|null>, // Идентификатор пользователя
    name: <string|null> // Имя пользователя
}

ответ

{
    id: <int>, // Идентификатор пользователя
    name: <string>, // Имя пользователя
    block: <bool> // Статус блокировки, false по умолчанию
}

Может быть передан любой из параметров запроса.
Вернёт ошибку если пользователь с таким идентификатором или именем не найден.

Данные списка пользователей

запрос

{
    ids: <array> [ // Массив пользователей
        <int>, // Идентификатор пользователя
        ...
    ]
}

ответ

[
    <obj>, // Объект из ответа /api/user
    ...
]

/api/user
Вернёт данные для всех существующих пользователей. Порядок в ответе может не совпадать с порядком идентификаторов в запросе.

Данные текущего пользователя

запрос

{}

ответ, если токена авторизации нет или он неверный

{
    guest: true,
    settings: <obj>, // Настройки пользователя по умолчанию, объект из ответа /api/user/settings
    roles: <obj> // Роли пользователя, значения по умолчанию, см. ниже
}

ответ, если токен авторизации верен

{
    guest: false,
    id: <int>, // Идентификатор пользователя
    name: <string>, // Имя пользователя
    block: <bool>, // Статус блокировки, false по умолчанию
    settings: <obj>, // Настройки пользователя, объект из ответа /api/user/settings
    roles: <obj> { // Роли пользователя
        support: <bool>, // Сапорт, false по умолчанию
        canUseSupport: <bool>, // Возможность задавать вопрос саппортам и присоединяться к чат каналам вопросов, true по умолчанию
        moderator: <bool>, // Модератор, false по умолчанию
        citizen: <int>, // Сила голоса гражданской модерации, 2 по умолчанию
        twitch: <bool>, // Привязка твитч аккаунта, false по умолчанию
        blocker: <bool>, // Возможность блокировать аккаунт пользователя, false по умолчанию
        masterstreamer: <bool>, // Мастерстример, false по умолчанию
        smiler: <bool>, // Возможность редактировать смайлы, false по умолчанию
        roleAdmin: <bool>, // Возможность редактировать роли других пользователей, false по умолчанию
        schedule: <bool>, // Возможность изменять своё расписание, false по умолчанию
        seasoner: <bool> // Возможность управлять сезонами соревнования, false по умолчанию
    }
}

Полные данные пользователя

запрос

{
    id: <int|null>, // Идентификатор пользователя
    name: <string|null> // Имя пользователя
}

ответ

{
    id: <int>, // Идентификатор пользователя
    name: <string>, // Имя пользователя
    block: <bool>, // Статус блокировки, false по умолчанию
    roles: <string>, // Роли пользователя, объект из ответа /api/user/current
    settings: <string> // Настройки пользователя, объект из ответа /api/user/settings
}

/api/user/current, /api/user/settings
Может быть передан любой из параметров запроса.
Вернёт ошибку если пользователь не имеет роли roleAdmin, запрашиваемый пользователь с таким идентификатором или именем не найден.

Логин

запрос

{
    name: <string>, // Имя пользлователя
    password: <string>, // Пароль пользователя
    recaptchaResponse: <string> // Строка ответа Рекапчи
}

ответ

{
    token: <string>, // Строка с токеном
    current: <obj> // Данные пользователя, объект из ответа /api/user/current
}

Работает только на funstream.tv из-за использования Рекапчи.
При успешном логине высталяется http-only кука, необходимая для прелоада funstream.tv.
Вернёт ошибку если пользователь с таким именем и паролем не найден или капча не верна.

Логаут

запрос

{}

ответ

[]

Уничтожает куку, установленную при логине.
Вернёт ошибку если передан неверный токен.

Получить или установить настройки текущего пользователя

запрос и ответ идентичны

{
    stream: <obj> {
        autostart: <bool>, // Автостарт плеера стрима, true по умолчанию,
        player: <string>, // Предпочитаемый плеер, по умолчанию пусто, приоретный плеер twitch.tv
        skipmain: <bool> // Пропускать главную страницу при прямом открытии ссылки funstream.tv, false по умолчанию
    },
    chat: <obj> {
        smiles: <bool>, // Показывать смайлы, true по умолчанию"
        images: <bool>, // Показывать миниатюру картинок в чате, false по умолчанию
        fontsize: <int>, // Размер шрифта чата, 12 по умолчанию
        namecolor: <int>, // Номер цвета ника, 0 по умолчанию
        mychannels: <array of strings>, // Список идентификаторов закрепленных каналов пользователя, пустой массив по умолчанию
        theme: <string>, // Тема формления чата, 'sc2tv' по умолчанию
        disablenamecolor: <bool>, // Отключить цветные ники, false по умолчанию
        thirdparty: <bool>, // Показывать сообщения Твича и Гудгейма, true по умолчанию
        favoritesmiles: <array of strings>, // Список кодов избранных смайлов, пустой массив по умолчанию
        thirdpartydontmask: <bool>, // Не затемнять сообщения с других сервисов, false по умолчанию
        imagesgif: <bool>, // Отображать анимированные картинки, true по умолчанию
        submode: <string>, // Сабмод режим чата своего стрима, [none | level], none по умолчанию
        totalignore: <bool> // Режим полного игнора, false по умолчанию
    }
}

В параметрах запроса могут отсутствовать любые поля или все сразу. Все переданные в параметрах запроса настройки будут сохранены для текущего пользователя.
Вернёт ошибку если токена авторизации нет, он неверен, или указаны ошибочные настройки.

Запрос на сброс пароля

запрос

{
    email: <string> // Почта аккаунта к которому необходимо сбросить пароль
}

ответ

[]

Если был указан верный почтовый адрес, то отправляет на него письмо с новым паролем и ссылкой по которой пароль будет установлен.

Установка пароля

запрос

{
    code: <string> // Код по которому соответствующему аккаунту будет установлен новый пароль(присланный на почту)
}

ответ

{
    // Данные логина, ответ /api/user/login
}

/api/user/login
Вернёт ошибку если был передан неверный или использованный код, или не найден пользователь по коду.

Список пользователей с ролью

запрос

{
    role: <string> // Название роли
}

ответ

[
    <obj> // Данные пользователя, объект из ответа /api/user
    ...
]

/api/user
Вернёт ошибку если пользователь не имеет роли roleAdmin.

Изменить роль пользователя

запрос

{
    userId: <int>, // Идентификатор пользователя
    role: <string>, // Название роли
    value: <bool|int> // Новое значение роли
}

ответ

[]

Вернёт ошибку если пользователь не имеет роли roleAdmin, передан неверный идентификатор пользователя или значение роли не bool|int.

Категория

Категория контента

запрос

{
    content: <string>, // Тип контента, [stream, support]
    id: <int|null>, // Идентификатор категории
    slug: <string|null>, // Короткое имя категории
    options: <object|null> {
        subCategories: <bool|null>, // Включая 1 уровень подкатегорий, false, по умолчанию
        contentAmount: <bool|null> // Включая количество контента, false по умолчанию
    }
}

ответ

{
    id: <int>, // Идентификатор категории
    slug: <string>, // Короткое имя категории
    name: <string>, // Полное имя категории
    subCategories: <array|null>, // Подкатегории, массив объектов с полями id, slug, name и contentAmount(если выставленна соответствующая опция)
    contentAmount: <int|null> // Количество контента
}

Корневая категория для любого контента ищется по slug: 'top'.
Вернёт ошибку если категория с таким id или slug не найдена.

Стрим

Данные стрима

запрос

{
    id: <int|null>, // Идентификатор стрима
    owner: <string|null>, // Имя стримера
    options: <obj|null> {
        players: <bool|null> // Вернуть плееры стрима, false по умолчанию
    }
}

ответ

{
    id: <int>, // Идентификатор стрима
    owner: <obj>, // Данные стримера, объект из ответа /api/user
    name: <string>, // Заголовок стрима
    description: <string>, // Описание стрима
    category: <obj>, // Категория стрима, объект из ответа /api/category
    image: <string>, // Относительная ссылка на картинку заставки
    thumbnail: <string>, // Относительная ссылка на картинку превью
    adult: <bool>, // Флаг 18+
    start_at: <int>, // Время начала стрима, unixtime, 0 по умолчанию
    rating: <int>, // Текущий рейтинг стрима
    players: <array|null> [ // Активные(онлайн) плееры стрима
        {
            name: <string>, // Сервис плеера
            channel: <string>, // Имя канала плеера
            code: <string> // HTML код плеера с учётом настроек пользователя
        },
        ...
    ]
}

Вернёт ошибку если стрима с данным id или именем стримера не существует.

Ссылка на видео превью стрима

запрос

{
    id: <int> // Идентификатор стрима
}

ответ

{
    url: <string> // Ссылка на видео превью
}

Вернёт ссылку на видео превью если у стрима есть Twitch или GoodGame плеер.

Чат

Данные каналов

запрос

{
    channels: <array> [ // Список каналов
        <string>, // Идентификатор канала
        ...
    ]
}

ответ

[
    {
        id: <string>, // Идентификатор канала
        name: <string>, // Имя канала
        user: <obj|null> // Владелец канала, объект из ответа /api/user
    },
    ...
]

Вернёт ошибку если хотя бы один из переданных идентификаторов неверен или список каналов пуст.

Список приват каналов

запрос

{}

ответ

[
    <string>, // Идентификатор канала
    ...
]

Возвращает последние 30 приват каналов пользователя. Сортировка по последнему сообщению. На данный момент не фильтрует приваты с заигноренными пользователями, необходимо делать это вручную.
Вернёт ошибку если пользователь не залогинен или передан неверный токен.

Фильтр

Список элементов контента

запрос

{
    content: <string>, // Тип контента, [stream]
    type: <string>, // Тип фильтра, [all, my]
    category: <obj> { // Категория, любой из параметров
        id: <int|null>, // Идентификатор категории
        slug: <string|null> // Короткое имя категории, top для верхней
    }
}

ответ

{
    category: <obj> {
        parent: <obj|null>, // Родительская категория относительно переданной, объект из ответа /api/category
        current: <obj>, // Данные переданной категории, объект из ответа /api/category с contentAmount=true, subCategories=true с добавленным полем 'weight' для каждой категории
    },
    content: <array> [
        <obj>, // Данные соотвествующего элемента контента, см ниже
        ...
    ]
}

Вернёт список стримов, отсортированных по текущему рейтингу. Поле weight <int> у категорий(текущей и дочерних) это суммарный теукщий рейтинг стримов в этой категории. Сортировка дочерних категорий по этому параметру.
Если тип my то вернёт список онлайн стримов из избранного пользрвателя
Вернёт ошибку если переданы неверные данные каегории, контент или тип.
Вернёт ошибку если передан тип my и пользователь не залогинен или передан неверный токен.

Топ N элементов контента

запрос

{
    content: <string>, // Тип контента, [stream]
    category: <obj> { // Категория, любой из параметров
        id: <int|null>, // Идентификатор категории
        slug: <string|null> // Короткое имя категории, top для верхней
    },
    amount: <int> // Количество элементов в ответе
}

ответ

{
    content: <array> [
        <obj> // Данные соотвествующего элемента контента, см ниже
        ...,
    ]
}

Вернёт top-{amount} стримов, отсортированных по рейтингу.
Вернёт ошибку если переданы неверные данные категории или контент.

Поля элемента контента

В ответе запросов фильтра у элемента контента есть обязательные поля(присутствуют всегда)

{
    id: <int>, // Идентификатор элемента контента
    owner: <obj>, // Владелец, объект из ответа /api/user
    name: <string>, // Название
    adult: <bool>, // Флаг 18+
    rating: <int> // Рейтинг
}

/api/user

И необязательные, зависят от типа контента

{
    // stream
    description: <string>, // Описание
    image: <string>, // Ссылка на картинку стрима
    thumbnail: <string>, // Ссылка на превью стрима
    start_at: <int>, // Время начала стрима, unixtime


    // room
}

Подписки

Подписаться

запрос

{
    content: <string>, // Тип контента, [stream]
    id: <int> // Идентификатор элемента контента
}

ответ

[]

Вернёт ошибку если передан неверный тип контента, элемент контента не существует, пользователь не залогинен или передан неверный токен.

Количество активных подписок

запрос

{
    content: <string> // Тип контента, [stream]
}

ответ

{
    amount: <int> // Количество активных подписок
}

Вернёт количество активных(онлайн) элементов в подписках у пользователя.
Вернёт ошибку если передан наверный тип контента, пользователь не залогинен или передан неверный токен.

Проверить подписку

запрос

{
    content: <string>, // Тип контента, [stream]
    id: <int> // Идентификатор элемента контента
}

ответ

{
    result: <bool> // true в случае наличия подписки
}

Вернёт ошибку если передан неверный тип контента, элемент контента не существует, пользователь не залогинен или передан неверный токен.

Список подписок

запрос

{
    content: <string> // Тип контента, [stream]
}

ответ

[
    <obj>, // Данные элемента контента, объект из ответа /api/stream
    ...
]

В данный момент работает неверно.
Вернёт ошибку если передан наверный тип контента, пользователь не залогинен или передан неверный токен.

Отписаться

запрос

{
    content: <string>, // Тип контента, [stream]
    id: <int> // Идентификатор элемента контента
}

ответ

[]

Вернёт ошибку если передан неверный тип контента, элемент контента не существует, пользователь не залогинен или передан неверный токен.

Список подписчиков пользователя

запрос

{
    content: <string> // Тип контента, [stream]
}

ответ

[
    <obj>, // Данные юзера, объект из ответа /api/user
    ...
]

Вернёт список подписчиков на текущего юзера, если он является стримером(имеет запись о стриме в бд).
Вернёт ошибку если передан наверный тип контента, пользователь не залогинен или передан неверный токен.

Игноры

Добавить в список игнорируемых

запрос

{
    content: <string>, // Тип контента, [stream, chat]
    item: <int> // Идентификатор элемента контента
}

ответ

[]

Вернёт ошибку если передан неверный тип контента, элемент контента не существует, пользователь не залогинен или передан неверный токен.

Проверить на игнор

запрос

{
    content: <string>, // Тип контента, [stream, chat]
    item: <int> // Идентификатор элемента контента
}

ответ

{
    ignored: <bool> // true если в игноре
}

Вернёт ошибку если передан неверный тип контента, элемент контента не существует, пользователь не залогинен или передан неверный токен.

Список игнорируемого

запрос

{
    content: <string>, // Тип контента, [stream, chat]
}

ответ

[
    {
        content: <string>, // Тип контента, [stream, chat]
        item: <int> // Идентификатор элемента контента
    },
    ...
]

Вернёт ошибку если передан наверный тип контента, пользователь не залогинен или передан неверный токен.

Удалить из списка игнорируемого

запрос

{
    content: <string>, // Тип контента, [stream, chat]
    item: <int> // Идентификатор элемента контента
}

ответ

[]

Вернёт ошибку если передан неверный тип контента, элемент контента не существует, пользователь не залогинен или передан неверный токен.

Мастерстримеры

Список иконок и смайлов мастерстримеров

запрос

{}

ответ

[
    <obj> { // Данные мастерстримера
        userId: <int>, // Идентификатор пользователя
        icon: <string|null>, // Полная ссылка на иконку, если она есть
        smiles: <array> [ // Список смайлов
            <obj>, // Данные смайла, объект из ответа /api/smile
            ...,
        ]
    ],
    ...
]

/api/smile
Список мастерстримеров, у которых одобрен хотя бы один смайл.

Список выбранных пользователями иконок

запрос

{}

ответ

[
    <obj> { // Данные выбранной пользователем иконки
        userId: <int>, // Идентификатор пользователя
        streamerId: <int>, // Идентификатор стримера, если это иконка мастерстримера, иначе 0
        icon: <string>, // Полная ссылка на выбранную иконку
    ],
    ...
]

Список пользователей, выбравших конкретную иконку, с данными этой иконки. Если streamerId 0, то у пользователя выбрана кастомная иконка не связанная с мастерстримерами. Если пользователь не выбирал конкретную иконку, то независимо от наличия доступных ему иконок, его нет в этом списке.

Расписание

Список расписания

запрос

{}

ответ

[
    <obj> { // Данные записи в расписании
        description: <string>, // Описание
        time: <int>, // Время начала, unixtime
        user: <int> // Данные стримера, объект из ответа /api/user
    ],
    ...
]

/api/user

Расписание пользователя

запрос

{}

ответ

[
    // Тот же формат ответа что в запросе /api/schedule/get
]

/api/schedule/get
Вернёт ошибку если текущий пользователь не имеет роли schedule.

Изменить расписание пользователя

запрос

{
    schedule: [ // Новое расписание
        <obj> { // Данные записи в расписании
            description: <string>, // Описание
            time: <int> // Время начала, unixtime
        },
        ...
    ]
}

ответ

{}

Вернёт ошибку если текущий пользователь не имеет роли schedule.

Майлстоуны

Список майлстоунов

запрос

{
    streamerId: <int> // Идентификатор стримера
}

ответ

{
    startPoint: <int>, // Время отсчёта собираемого доната, unixtime
    donatedAmount: <float>, // Собранный донат с указанного времени
    milestones: [ // Список майлстоунов
        <obj> { // Данные майлстоуна
            active: <bool>, // Флаг активного майлстоуна, false если собрано/выполнено
            amount: <float>, // Необходимая сумма с времени отсчёта
            description: <string>, // Описание майлстоуна
            url: <string> // Ссылка на запись выполненнного майлстоуна
        },
        ...
    ]
}

Вернёт ошибку если стример не выставил время отсчёта.

Майлстоуны пользователя

запрос

{}

ответ

{
    startPoint: <int>, // Время отсчёта собираемого доната, unixtime
    milestones: [ // Список майлстоунов
        // Массив milestones из ответа /api/milestone/get
    ]
}

/api/milestone/get
Майлстоуны текущего пользователя.

Изменить майлстоуны пользователя

запрос

{
    startPoint: <int>, // Время отсчёта собираемого доната, unixtime
    milestones: [ // Список майлстоунов
        // Массив milestones из ответа /api/milestone/get
    ]
}

ответ

[]

/api/milestone/get
Вернёт ошибку если не указано любое из полей майлстоунов.

Сезоны соревнования

Данные текущего сезона

запрос

{}

ответ

{
    start: <int>, // Время начала сезона, unixtime
    end: <int>, // Время завершения сезона, для активного 0, unixtime
    active: <bool> // Статус сезона
}

Вернёт ошибку если сейчас нет активного сезона(:wtf:)

Старт сезона

запрос

{}

ответ

[]

Вернёт ошибку если есть активный сезон.

Завершение сезона

запрос

{}

ответ

[]

Вернёт ошибку если нет активного сезона.

Топ сезона

запрос

{}

ответ

[
    <obj> { // Участник соревнования
        user: <obj>, // Данные стримера, объект из ответа /api/user
        amount: <float>, // Собранная за сезон сумма
        nodeId: <int> // nodeId sc2tv для ссылки на стрим /node/<nodeId>
    },
    ...
]

/api/user
Список участников отсортирован по собранной сумме по уменьшению.
Вернёт ошибку если нет активного сезона.

Дополнительные вызовы

Пакетный запрос

запрос

{
    command: <array> [ // Массив запросов
        <array> [ // Запрос
            <string>, // Урл запроса, например /api/user
            <obj> // Параметры запроса
        ],
        ...
    ]
}

ответ

[
    <array> [ // Результат соответствующего запроса
        <string>, // Урл запроса, например /api/user
        <obj>, // Параметры запроса
        <obj|array>, // Ответ на запрос
        <bool> // Статус запроса, true на успешное выполнение
    ],
    ...
]

Позволяет получить результаты нескольких запросов за один.
Для каждого запроса возвращает массив с его данными, статусом выполнения и результатом. Индекс ответа соответствует индексу в массиве запросов.
Если запрос дал ошибку, то в ответе на этот запрос будет объект ошибки и статус false.