fpapijs
v1.1.0
Published
Полнофункциональный Node.js модуль для работы с FunPay API - полный порт Python библиотеки FunPayAPI
Downloads
1,082
Maintainers
Readme
FPAPIjs
Полнофункциональный Node.js модуль для работы с FunPay API - полный порт Python библиотеки FunPayAPI.
Описание
FPAPIjs - это полнофункциональный Node.js модуль для работы с FunPay. Модуль позволяет:
- ✅ Работать с аккаунтом FunPay
- ✅ Управлять чатами и сообщениями
- ✅ Обрабатывать заказы
- ✅ Управлять лотами (создание, редактирование, удаление)
- ✅ Получать события в реальном времени через Runner
- ✅ Работать с отзывами
- ✅ Выполнять финансовые операции (вывод средств, возвраты)
- ✅ И многое другое
Модуль автоматически обрабатывает сетевые ошибки, ошибки 429 (Too Many Requests) и поддерживает бесконечные попытки повторного подключения при потере соединения с FunPay.
Содержание
- Установка
- Быстрый старт
- Основные классы
- Account - Основной класс
- Типы данных
- Утилиты (Utils)
- Перечисления (Enums)
- Исключения (Exceptions)
- Обработка ошибок
- Примеры использования
- Методы Category и SubCategory
- Дополнительные методы Account
- Полный список всех методов и свойств
- Структура проекта
Установка
Локальная установка (для разработки)
npm iУстановка из npm (после публикации)
npm i fpapijsЗависимости
axios- для HTTP запросовcheerio- для парсинга HTMLform-data- для работы с формамиsocks-proxy-agent- для поддержки SOCKS4 и SOCKS5 проксиhttps-proxy-agent- для поддержки HTTPS проксиhttp-proxy-agent- для поддержки HTTP прокси
Быстрый старт
const { Account, enums } = require('fpapijs'); // или require('./index') для локальной разработки
const { Currency } = enums;
// Создание аккаунта (без прокси для локального использования)
const account = new Account('your_golden_key', 'your_user_agent');
// Создание аккаунта с прокси (рекомендуется для серверов)
// const account = new Account(
// 'your_golden_key',
// null, // userAgent по умолчанию
// 10, // timeout
// 'socks5://username:[email protected]:1080' // прокси (опционально)
// );
// Инициализация
await account.get();
console.log(`Аккаунт: ${account.username} (ID: ${account.id})`);
console.log(`Баланс: ${account.total_balance} ${Currency.toString(account.currency)}`);<|tool▁call▁begin|> read_lints
Основные классы
Модуль экспортирует следующие классы и объекты:
const {
Account, // Основной класс для работы с API
Runner, // Класс для получения событий в реальном времени
events, // Классы событий
exceptions, // Классы исключений
utils, // Утилиты
enums, // Перечисления (EventTypes, MessageTypes, Currency и т.д.)
types // Типы данных (Chat, Order, Lot и т.д.)
} = require('./index');Account - Основной класс
Инициализация и настройка
Конструктор
const account = new Account(
goldenKey, // string - токен (golden_key) аккаунта (обязательно)
userAgent, // string|null - user-agent браузера (опционально)
requestsTimeout, // number - тайм-аут запросов в секундах (по умолчанию: 10)
proxy, // string|object|null - прокси для запросов (опционально)
locale // string|null - локаль ("ru", "en", "uk") (опционально)
);Параметр proxy (опциональный):
Прокси можно указать в двух форматах. Поддерживаются типы: HTTP, HTTPS, SOCKS4, SOCKS5.
Строковый формат (URL):
"http://user:pass@host:port"- HTTP прокси"https://user:pass@host:port"- HTTPS прокси"socks4://user:pass@host:port"- SOCKS4 прокси"socks5://user:pass@host:port"- SOCKS5 прокси- Без аутентификации:
"http://host:port","socks5://host:port"и т.д.
Объектный формат:
{ type: 'http' | 'https' | 'socks4' | 'socks5', // тип прокси (обязательно) host: string, // хост прокси (обязательно) port: number, // порт прокси (обязательно) auth: { // аутентификация (опционально) username: string, password: string } }
Примеры использования прокси:
// HTTP прокси (строковый формат)
const account = new Account(
'your-golden-key-here',
null,
10,
'http://username:[email protected]:8080',
'ru'
);
// HTTPS прокси (строковый формат)
const account = new Account(
'your-golden-key-here',
null,
10,
'https://proxy.example.com:8080',
'ru'
);
// SOCKS5 прокси (строковый формат)
const account = new Account(
'your-golden-key-here',
null,
10,
'socks5://username:[email protected]:1080',
'ru'
);
// SOCKS4 прокси (строковый формат)
const account = new Account(
'your-golden-key-here',
null,
10,
'socks4://proxy.example.com:1080',
'ru'
);
// Объектный формат
const account = new Account(
'your-golden-key-here',
null,
10,
{
type: 'socks5',
host: 'proxy.example.com',
port: 1080,
auth: {
username: 'myuser',
password: 'mypass'
}
},
'ru'
);
// Без прокси (для локального использования)
const account = new Account(
'your-golden-key-here',
null,
10,
null, // без прокси
'ru'
);Важно: Использование прокси особенно важно при работе на серверах, так как IP-адрес сервера может быть заблокирован на FunPay. Через прокси весь трафик к FunPay будет идти через указанный прокси-сервер.
Геттеры и сеттеры
// Локаль
account.locale = 'ru'; // Установить локаль
const locale = account.locale; // Получить текущую локаль
// Проверка инициализации
const isInitiated = account.is_initiated; // boolean
// Символы бота
const botChar = account.bot_character; // string
const oldBotChar = account.old_bot_character; // string
// Категории и подкатегории
const categories = account.categories; // Array<Category>
const subcategories = account.subcategories; // Array<SubCategory>Работа с аккаунтом
get(updatePhpsessid = true)
Получает/обновляет данные об аккаунте. Необходимо вызывать каждые 40-60 минут для обновления phpsessid.
await account.get();
console.log(`Имя: ${account.username}`);
console.log(`ID: ${account.id}`);
console.log(`Баланс: ${account.total_balance}`);
console.log(`Валюта: ${Currency.toString(account.currency)}`);
console.log(`Активные продажи: ${account.active_sales}`);
console.log(`Активные покупки: ${account.active_purchases}`);logout()
Выходит с аккаунта FunPay.
await account.logout();Работа с категориями и подкатегориями
getCategory(categoryId)
Получает категорию по ID.
const category = account.getCategory(754);
console.log(`Категория: ${category.name}`);getSubcategory(subcategoryType, subcategoryId)
Получает подкатегорию по типу и ID.
const subcategory = account.getSubcategory(SubCategoryTypes.COMMON, 3486);
console.log(`Подкатегория: ${subcategory.name}`);getSortedCategories()
Возвращает отсортированные категории.
const sortedCategories = account.getSortedCategories();getSortedSubcategories()
Возвращает отсортированные подкатегории.
const sortedSubcategories = account.getSortedSubcategories();Работа с чатами
requestChats()
Запрашивает список чатов с сервера.
const chats = await account.requestChats();
console.log(`Найдено чатов: ${chats.length}`);
chats.forEach(chat => {
console.log(`- ${chat.name} (ID: ${chat.id})`);
});getChats(update = false)
Получает сохраненные чаты. Если update = true, сначала запрашивает с сервера.
const chats = await account.getChats(true);addChats(chats)
Добавляет чаты в кэш.
const chats = await account.requestChats();
account.addChats(chats);getChatByName(name)
Получает чат по имени.
const chat = await account.getChatByName('ExampleUser');
if (chat) {
console.log(`Чат найден: ${chat.id}`);
}getChatById(chatId)
Получает чат по ID.
const chat = await account.getChatById(123456789);getChat(chatId, withHistory = true, locale = null)
Получает полную информацию о чате.
const chat = await account.getChat(123456789, true);
console.log(`Чат: ${chat.name}`);
console.log(`Сообщений в истории: ${chat.messages.length}`);getChatHistory(chatId, lastMessageId, interlocutorUsername, fromId)
Получает историю сообщений чата.
const messages = await account.getChatHistory(123456789, 99999999999999999999999);
messages.forEach(msg => {
console.log(`${msg.author}: ${msg.text}`);
});getChatsHistories(chatsData)
Получает истории для нескольких чатов.
const chats = await account.getChats();
const histories = await account.getChatsHistories(chats);Account.chatIdPrivate(chatId) (статический метод)
Проверяет, является ли ID чата приватным.
const isPrivate = Account.chatIdPrivate(123456789); // true
const isPrivate2 = Account.chatIdPrivate('users-123-456'); // trueРабота с сообщениями
sendMessage(chatId, text, chatName, interlocutorId, imageId, addToIgnoreList, updateLastSavedMessage, leaveAsUnread)
Отправляет текстовое сообщение в чат.
const message = await account.sendMessage(
123456789, // chatId
'Привет! Это тестовое сообщение', // text
'ExampleUser', // chatName (опционально)
null, // interlocutorId (опционально)
null, // imageId (опционально)
true, // addToIgnoreList
false, // updateLastSavedMessage
false // leaveAsUnread
);
console.log(`Сообщение отправлено: ID ${message.id}`);uploadImage(image, type = "chat")
Загружает изображение на сервер FunPay.
const fs = require('fs');
const imageBuffer = fs.readFileSync('image.png');
const imageId = await account.uploadImage(imageBuffer, 'chat');
console.log(`Изображение загружено: ID ${imageId}`);sendImage(chatId, image, chatName, interlocutorId, addToIgnoreList, updateLastSavedMessage, leaveAsUnread)
Отправляет изображение в чат.
const fs = require('fs');
const imageBuffer = fs.readFileSync('image.png');
const message = await account.sendImage(123456789, imageBuffer);
console.log(`Изображение отправлено: ID ${message.id}`);Работа с заказами
getSales(startFrom, includePaid, includeClosed, includeRefunded, excludeIds, orderId, buyer, state, game, section, server, side, locale, subcategories, ...moreFilters)
Получает список продаж (заказов, где вы продавец).
const [nextOrderId, orders, locale, subcategories] = await account.getSales(
null, // startFrom - ID заказа для начала списка
true, // includePaid - включать оплаченные
true, // includeClosed - включать закрытые
true, // includeRefunded - включать возвращенные
[], // excludeIds - исключить заказы с этими ID
null, // orderId - получить конкретный заказ
null, // buyer - фильтр по покупателю
null, // state - фильтр по статусу
null, // game - фильтр по игре
null, // section - фильтр по секции
null, // server - фильтр по серверу
null, // side - фильтр по стороне
'ru', // locale
null // subcategories
);
console.log(`Найдено заказов: ${orders.length}`);
orders.forEach(order => {
console.log(`- ${order.id}: ${order.description}, ${order.price} ${Currency.toString(order.currency)}`);
});getOrder(orderId, locale = null)
Получает полную информацию о заказе.
const order = await account.getOrder('ABC12345', 'ru');
console.log(`Заказ: ${order.id}`);
console.log(`Статус: ${order.status}`);
console.log(`Сумма: ${order.price} ${Currency.toString(order.currency)}`);
console.log(`Покупатель: ${order.buyer.username} (ID: ${order.buyer.id})`);
console.log(`Продавец: ${order.seller.username} (ID: ${order.seller.id})`);
if (order.review) {
console.log(`Отзыв: ${order.review.stars} звезд`);
}getOrderShortcut(orderId)
Получает краткую информацию о заказе (только для продаж).
const orderShortcut = await account.getOrderShortcut('ABC12345');
console.log(`Заказ: ${orderShortcut.id}`);getSells(...) (устаревший метод)
Устаревший метод. Используйте getSales().
Работа с лотами
getSubcategoryPublicLots(subcategoryType, subcategoryId, locale = null)
Получает публичные лоты подкатегории.
const lots = await account.getSubcategoryPublicLots(
SubCategoryTypes.COMMON,
3486,
'ru'
);
console.log(`Найдено лотов: ${lots.length}`);
lots.forEach(lot => {
console.log(`- ${lot.description} (ID: ${lot.id})`);
console.log(` Цена: ${lot.price} ${Currency.toString(lot.currency)}`);
});getMySubcategoryLots(subcategoryId, locale = null)
Получает ваши лоты в подкатегории (как продавец).
const myLots = await account.getMySubcategoryLots(3486, 'ru');
console.log(`Моих лотов: ${myLots.length}`);
myLots.forEach(lot => {
console.log(`- ${lot.description} (ID: ${lot.id})`);
console.log(` Цена: ${lot.price} ${Currency.toString(lot.currency)}`);
console.log(` Активен: ${lot.active}`);
console.log(` Автовыдача: ${lot.auto}`);
});getMyLotCategories(userId = null, locale = null)
Получает все категории, где у пользователя есть лоты. Оптимизированный метод - получает список категорий напрямую со страницы профиля пользователя (users/{userId}/), без проверки всех подкатегорий на FunPay.
const categories = await account.getMyLotCategories();
console.log(`Категорий с лотами: ${categories.length}`);
categories.forEach(catData => {
console.log(`Категория: ${catData.category.name}`);
catData.subcategories.forEach(subcat => {
console.log(` Подкатегория: ${subcat.name}`);
});
});Примечание: Метод парсит страницу профиля пользователя, находит блок div.mb20 со списком категорий, извлекает ссылки на категории (например, /lots/1086/) и получает все лоты из каждой категории через страницу редактирования (/lots/{id}/trade). Это значительно быстрее, чем проверка всех подкатегорий на FunPay.
getAllMyLots(userId = null, locale = null)
Получает все ваши лоты из всех категорий (включая неактивные). Оптимизированный метод - получает лоты напрямую со страницы профиля пользователя.
const allMyLots = await account.getAllMyLots();
console.log(`Всего моих лотов: ${allMyLots.length}`);
allMyLots.forEach(lot => {
console.log(`- ${lot.description} (ID: ${lot.id})`);
console.log(` Активен: ${lot.active ? 'Да' : 'Нет'}`);
console.log(` Цена: ${lot.price} ${lot.currency || 'RUB'}`);
});Примечание: Метод получает все лоты (активные и неактивные) из всех категорий пользователя. Неактивные лоты определяются по наличию класса warning в элементе лота на странице редактирования.
getLotPage(lotId, locale = null)
Получает полную информацию о странице лота.
const lotPage = await account.getLotPage(12345678, 'ru');
console.log(`Лот: ${lotPage.description}`);
console.log(`Продавец: ${lotPage.seller.username} (ID: ${lotPage.seller.id})`);
console.log(`Изображений: ${lotPage.images.length}`);getLotFields(lotId)
Получает поля лота для редактирования.
const lotFields = await account.getLotFields(12345678);
console.log(`Название RU: ${lotFields.title_ru}`);
console.log(`Название EN: ${lotFields.title_en}`);
console.log(`Цена: ${lotFields.price}`);
console.log(`Количество: ${lotFields.amount}`);
console.log(`Активен: ${lotFields.active}`);
console.log(`Автовыдача: ${lotFields.auto_delivery}`);getPageData(url, locale = null)
Универсальный метод для получения всех данных со страницы (классы, data-атрибуты, формы, ссылки, изображения, meta-теги).
const pageData = await account.getPageData('lots/offer?id=12345678', 'ru');
// Структура возвращаемых данных:
console.log(pageData.html); // HTML код страницы
console.log(pageData.url); // URL страницы
console.log(pageData.elementsByClass); // Объект {className: [элементы]}
console.log(pageData.dataAttributes); // Объект {dataAttr: [элементы]}
console.log(pageData.forms); // Массив форм
console.log(pageData.links); // Массив ссылок
console.log(pageData.images); // Массив изображений
console.log(pageData.metaTags); // Массив meta-тегов
// Примеры использования:
// Получить все элементы с классом "offer-title"
const offerTitles = pageData.elementsByClass['offer-title'] || [];
// Получить все элементы с data-атрибутом "offer-id"
const offerIds = pageData.dataAttributes['data-offer-id'] || [];
// Получить все формы на странице
pageData.forms.forEach(form => {
console.log(`Форма: ${form.action}, метод: ${form.method}`);
});
// Получить все ссылки
pageData.links.forEach(link => {
console.log(`Ссылка: ${link.href}, текст: ${link.text}`);
});calc(subcategoryType, subcategoryId = null, gameId = null, price = 1000)
Вычисляет стоимость лота с учетом комиссий.
const calcResult = await account.calc(
SubCategoryTypes.COMMON,
3486,
null,
1000
);
console.log(`Методов оплаты: ${calcResult.methods.length}`);
calcResult.methods.forEach(method => {
console.log(`${method.name}: ${method.price} ${Currency.toString(method.currency)}`);
});Работа с пользователями
getUser(userId, locale = null)
Получает профиль пользователя.
const userProfile = await account.getUser(1234567, 'ru');
console.log(`Пользователь: ${userProfile.username}`);
console.log(`Онлайн: ${userProfile.online}`);
console.log(`Забанен: ${userProfile.banned}`);
console.log(`Рейтинг: ${userProfile.rating}`); // число от 0 до 5 (например, 3.4) или null
console.log(`Отзывов: ${userProfile.reviews_count}`); // число (например, 7) или null
console.log(`Лотов: ${userProfile.getLots().length}`);getAccountRating(userId = null, locale = null)
Получает рейтинг аккаунта (продавца). Если userId не указан, используется ID текущего аккаунта.
// Получить рейтинг текущего аккаунта
const rating = await account.getAccountRating();
console.log(`Рейтинг: ${rating.rating}`); // число от 0 до 5 (например, 3.4)
console.log(`Отзывов: ${rating.reviews_count}`); // число (например, 7)
// Получить рейтинг другого пользователя
const otherRating = await account.getAccountRating(1234567);
console.log(`Рейтинг пользователя: ${otherRating.rating}`); // числоgetBuyerViewing(buyerId)
Получает информацию о том, какой лот просматривает покупатель (например, при получении заказа).
// Получить информацию о просмотре покупателя
const buyerViewing = await account.getBuyerViewing(1234567);
if (buyerViewing) {
console.log(`Покупатель просматривает: ${buyerViewing.text}`);
console.log(`Ссылка: ${buyerViewing.link}`);
console.log(`ID покупателя: ${buyerViewing.buyer_id}`);
} else {
console.log('Информация о просмотре недоступна');
}Работа с отзывами
sendReview(orderId, text, rating = 5)
Отправляет/редактирует отзыв на заказ.
await account.sendReview('ABC12345', 'Отличный продавец!', 5);deleteReview(orderId)
Удаляет отзыв на заказ.
await account.deleteReview('ABC12345');Финансовые операции
getBalance(lotId)
Получает информацию о балансе пользователя (используется ID любого лота).
const balance = await account.getBalance(12345678);
console.log(`RUB: ${balance.available_rub}/${balance.total_rub}`);
console.log(`USD: ${balance.available_usd}/${balance.total_usd}`);
console.log(`EUR: ${balance.available_eur}/${balance.total_eur}`);refund(orderId)
Возвращает средства по заказу.
await account.refund('ABC12345');withdraw(currency, wallet, amount, address)
Выводит средства с аккаунта.
await account.withdraw(
Currency.RUB, // currency
Wallet.QIWI, // wallet
1000, // amount
'+79991234567' // address
);getExchangeRate(currency)
Получает курс обмена текущей валюты аккаунта на переданную.
const [rate, newCurrency] = await account.getExchangeRate(Currency.USD);
console.log(`Курс обмена: ${rate}`);Управление лотами
getChipFields(subcategoryId)
Получает поля чипа (валютного лота) для редактирования.
const chipFields = await account.getChipFields(1);
console.log(`Game ID: ${chipFields.game_id}`);
console.log(`Min sum: ${chipFields.min_sum}`);saveLot(lotFields)
Сохраняет/создает лот.
const { LotFields } = require('./index').types;
const { Currency, SubCategoryTypes } = require('./index').enums;
// Получаем подкатегорию
const subcategory = account.getSubcategory(SubCategoryTypes.COMMON, 3486);
// Создаем новый лот (lot_id = 0)
const newLot = new LotFields(
0, // 0 означает новый лот
{
"node_id": String(subcategory.id),
"csrf_token": account.csrf_token,
"fields[summary][ru]": "Название лота",
"fields[summary][en]": "Lot title",
"fields[desc][ru]": "Описание лота",
"fields[desc][en]": "Lot description",
"price": "1000",
"amount": "1",
"active": "on",
"auto_delivery": "on",
"deactivate_after_sale": "",
"fields[images]": "",
"secrets": ""
},
subcategory,
Currency.RUB
);
// Обновляем поля
newLot.renewFields();
// Сохраняем лот
await account.saveLot(newLot);
console.log(`Лот создан: ID ${newLot.lot_id}`);saveChip(chipFields)
Сохраняет/создает чип (валютный лот).
const { ChipFields } = require('./index').types;
// Получаем поля чипа
const chipFields = await account.getChipFields(1);
// Редактируем поля
chipFields.price = 1000;
chipFields.amount = 10;
chipFields.min_sum = 100;
// Обновляем поля перед сохранением
chipFields.renewFields();
// Сохраняем чип
await account.saveChip(chipFields);deleteLot(lotId)
Удаляет лот.
await account.deleteLot(12345678);updateLotPrice(lotId, newPrice)
Изменяет цену лота (упрощенный метод, не требует получения всех полей лота).
// Изменить цену лота на 1500
await account.updateLotPrice(12345678, 1500);getRaiseModal(categoryId)
Получает модальную форму для поднятия лотов.
const modal = await account.getRaiseModal(754);raiseLots(categoryId, subcategories = null, exclude = null)
Поднимает лоты категории.
await account.raiseLots(754, null, null);Runner - Получение событий в реальном времени
Класс Runner позволяет получать события в реальном времени (новые сообщения, новые заказы и т.д.).
Важно: В версии 1.0.3 улучшена логика обработки новых сообщений. Runner теперь более точно определяет новые сообщения, используя node_msg_id из событий, что исключает обработку старых сообщений из других чатов.
Создание Runner
const { Runner } = require('./index');
const runner = new Runner(account);Методы Runner
getUpdates()
Запрашивает обновления с сервера.
const updates = await runner.getUpdates();
console.log(`Объектов в обновлении: ${updates.objects.length}`);parseUpdates(updates)
Парсит обновления и возвращает массив событий.
const updates = await runner.getUpdates();
const events = await runner.parseUpdates(updates);
events.forEach(event => {
console.log(`Событие типа ${event.type}`);
});getBuyerViewing(buyerId)
Получает информацию о том, какой лот просматривает покупатель (из кэша Runner).
// Получить информацию о просмотре покупателя из Runner
const buyerViewing = runner.getBuyerViewing(1234567);
if (buyerViewing) {
console.log(`Покупатель просматривает: ${buyerViewing.text}`);
console.log(`Ссылка: ${buyerViewing.link}`);
} else {
console.log('Информация о просмотре недоступна');
}Примечание: Runner автоматически обновляет информацию о просмотре покупателей при получении событий типа buyer_viewing из FunPay.
listen(requestsDelay = 6.0, ignoreExceptions = false)
Генератор событий в реальном времени. Возвращает асинхронный генератор.
Особенности:
- Автоматически обрабатывает сетевые ошибки с бесконечными попытками переподключения
- Точное определение новых сообщений по
node_msg_id - Автоматическая обработка ошибок 429 (Too Many Requests)
const { EventTypes } = require('./index').enums;
for await (const event of runner.listen(6.0)) {
switch (event.type) {
case EventTypes.NEW_MESSAGE:
console.log('Новое сообщение:', event.message.text);
console.log('Автор:', event.message.author);
console.log('Чат ID:', event.message.chat_id);
// Важно: event.message содержит только новое сообщение, не старое
break;
case EventTypes.NEW_ORDER:
console.log('Новый заказ:', event.order.id);
console.log('Описание:', event.order.description);
break;
case EventTypes.ORDER_STATUS_CHANGED:
console.log('Статус заказа изменен:', event.order.id);
console.log('Новый статус:', event.order.status);
break;
case EventTypes.CHATS_LIST_CHANGED:
console.log('Список чатов изменился');
break;
case EventTypes.LAST_CHAT_MESSAGE_CHANGED:
console.log('Последнее сообщение чата изменилось:', event.chat.name);
// Это событие срабатывает при изменении последнего сообщения в чате
// Новое сообщение будет в событии NEW_MESSAGE, если оно действительно новое
break;
}
}Примечание: Событие NEW_MESSAGE генерируется только для действительно новых сообщений. Runner использует node_msg_id из событий для точного определения новых сообщений и исключения обработки старых сообщений из других чатов.
Типы событий
const { EventTypes } = require('./index').enums;
EventTypes.INITIAL_CHAT // 0 - Начальный чат
EventTypes.CHATS_LIST_CHANGED // 1 - Список чатов изменился
EventTypes.LAST_CHAT_MESSAGE_CHANGED // 2 - Последнее сообщение чата изменилось
EventTypes.NEW_MESSAGE // 3 - Новое сообщение
EventTypes.INITIAL_ORDER // 4 - Начальный заказ
EventTypes.ORDERS_LIST_CHANGED // 5 - Список заказов изменился
EventTypes.NEW_ORDER // 6 - Новый заказ
EventTypes.ORDER_STATUS_CHANGED // 7 - Статус заказа изменилсяУтилиты (Utils)
Модуль предоставляет вспомогательные функции:
const { utils } = require('./index');
// randomTag() - генерирует случайный тег
const tag = utils.randomTag();
console.log(`Тег: ${tag}`);
// parseWaitTime(response) - парсит время ожидания из ответа
const waitTime = utils.parseWaitTime("Подождите 5 минут");
console.log(`Время ожидания: ${waitTime} секунд`);
// parseCurrency(symbol) - парсит символ валюты в enum Currency
const currency = utils.parseCurrency("₽");
console.log(`Валюта: ${currency}`); // Currency.RUB
// RegularExpressions - регулярные выражения для парсинга сообщений
const regex = new utils.RegularExpressions();
const orderIdMatch = "Заказ #ABC12345".match(regex.ORDER_ID);
if (orderIdMatch) {
console.log(`Найден ID заказа: ${orderIdMatch[0]}`);
}Типы данных
Модуль предоставляет множество типов данных для работы с FunPay:
Category
Класс категории.
const category = account.getCategory(754);
console.log(category.id); // ID категории
console.log(category.name); // Название категории
console.log(category.position); // Позиция категории
console.log(category.getSubcategories()); // Получить все подкатегории
console.log(category.getSubcategory(SubCategoryTypes.COMMON, 3486)); // Получить подкатегорию
console.log(category.getSortedSubcategories()); // Получить отсортированные подкатегорииSubCategory
Класс подкатегории.
const subcategory = account.getSubcategory(SubCategoryTypes.COMMON, 3486);
console.log(subcategory.id); // ID подкатегории
console.log(subcategory.name); // Название подкатегории
console.log(subcategory.type); // Тип подкатегории (COMMON или CURRENCY)
console.log(subcategory.category); // Категория, к которой относится
console.log(subcategory.position); // Позиция подкатегории
console.log(subcategory.fullname); // Полное название
console.log(subcategory.public_link); // Публичная ссылка
console.log(subcategory.private_link); // Приватная ссылка (для редактирования)Chat
const chat = await account.getChat(123456789);
console.log(chat.id); // ID чата
console.log(chat.name); // Имя чата
console.log(chat.link); // Ссылка на чат
console.log(chat.text); // Текст чата
console.log(chat.messages); // Массив сообщений (Message[])
console.log(chat.html); // HTML код страницы чатаMessage
const messages = await account.getChatHistory(123456789);
messages.forEach(msg => {
console.log(msg.id); // ID сообщения
console.log(msg.text); // Текст сообщения
console.log(msg.author); // Автор
console.log(msg.chat_id); // ID чата
console.log(msg.type); // Тип сообщения (MessageTypes)
console.log(msg.date); // Дата (timestamp)
console.log(msg.html); // HTML код сообщения
});Order
const order = await account.getOrder('ABC12345');
console.log(order.id); // ID заказа
console.log(order.description); // Описание
console.log(order.price); // Цена
console.log(order.currency); // Валюта (Currency enum)
console.log(order.status); // Статус (OrderStatuses enum)
console.log(order.buyer); // Покупатель (UserProfile)
console.log(order.seller); // Продавец (UserProfile)
console.log(order.review); // Отзыв (Review)
console.log(order.subcategory); // Подкатегория (SubCategory)
console.log(order.html); // HTML код страницы заказаLotPage
const lotPage = await account.getLotPage(12345678);
console.log(lotPage.lot_id); // ID лота
console.log(lotPage.short_description); // Краткое описание
console.log(lotPage.detailed_description); // Подробное описание
console.log(lotPage.seller_id); // ID продавца
console.log(lotPage.seller_username); // Имя продавца
console.log(lotPage.images); // Массив URL изображений
console.log(lotPage.subcategory); // Подкатегория (SubCategory)LotFields
const lotFields = await account.getLotFields(12345678);
console.log(lotFields.lot_id); // ID лота (0 для нового)
console.log(lotFields.title_ru); // Название RU
console.log(lotFields.title_en); // Название EN
console.log(lotFields.description_ru); // Описание RU
console.log(lotFields.description_en); // Описание EN
console.log(lotFields.payment_msg_ru); // Сообщение об оплате RU
console.log(lotFields.payment_msg_en); // Сообщение об оплате EN
console.log(lotFields.price); // Цена
console.log(lotFields.amount); // Количество
console.log(lotFields.active); // Активен
console.log(lotFields.auto_delivery); // Автовыдача
console.log(lotFields.deactivate_after_sale); // Деактивировать после продажи
console.log(lotFields.images); // Массив ID изображений
console.log(lotFields.secrets); // Массив секретов
console.log(lotFields.subcategory); // Подкатегория
console.log(lotFields.currency); // Валюта
console.log(lotFields.csrf_token); // CSRF токен
console.log(lotFields.public_link); // Публичная ссылка
console.log(lotFields.private_link); // Приватная ссылка
console.log(lotFields.calc_result); // Результат расчета (CalcResult)
// Методы LotFields
lotFields.editFields({ "price": "1500" }); // Редактировать поля
lotFields.setFields({ ... }); // Установить все поля
lotFields.renewFields(); // Обновить поля перед сохранением
console.log(lotFields.fields); // Получить все поляUserProfile
const user = await account.getUser(1234567);
console.log(user.id); // ID пользователя
console.log(user.username); // Имя пользователя
console.log(user.online); // Онлайн
console.log(user.banned); // Забанен
console.log(user.rating); // Рейтинг продавца (number: 0-5, например 3.4, или null)
console.log(user.reviews_count); // Количество отзывов (number, например 7, или null)
console.log(user.getLots()); // Получить все лоты
console.log(user.getLot(lotId)); // Получить лот по IDBalance
const balance = await account.getBalance(12345678);
console.log(balance.total_rub); // Общий баланс RUB
console.log(balance.available_rub); // Доступный баланс RUB
console.log(balance.total_usd); // Общий баланс USD
console.log(balance.available_usd); // Доступный баланс USD
console.log(balance.total_eur); // Общий баланс EUR
console.log(balance.available_eur); // Доступный баланс EURPaymentMethod
Метод оплаты из результата расчета.
const calcResult = await account.calc(SubCategoryTypes.COMMON, 3486, null, 1000);
const method = calcResult.methods[0];
console.log(method.name); // Название метода
console.log(method.price); // Цена
console.log(method.currency); // Валюта
console.log(method.position); // ПозицияChatShortcut
Краткая информация о чате.
const chats = await account.requestChats();
const chat = chats[0];
console.log(chat.id); // ID чата
console.log(chat.name); // Имя чата
console.log(chat.last_message); // Последнее сообщение
console.log(chat.unread); // Количество непрочитанныхOrderShortcut
Краткая информация о заказе.
const [nextOrderId, orders] = await account.getSales();
const order = orders[0];
console.log(order.id); // ID заказа
console.log(order.description); // Описание
console.log(order.price); // Цена
console.log(order.currency); // Валюта
console.log(order.status); // СтатусLotShortcut
Краткая информация о лоте.
const lots = await account.getSubcategoryPublicLots(SubCategoryTypes.COMMON, 3486);
const lot = lots[0];
console.log(lot.id); // ID лота
console.log(lot.description); // Описание
console.log(lot.price); // Цена
console.log(lot.currency); // Валюта
console.log(lot.subcategory); // ПодкатегорияMyLotShortcut
Краткая информация о вашем лоте (как продавца).
const myLots = await account.getMySubcategoryLots(3486);
const lot = myLots[0];
console.log(lot.id); // ID лота
console.log(lot.description); // Описание
console.log(lot.price); // Цена
console.log(lot.currency); // Валюта
console.log(lot.active); // Активен
console.log(lot.auto); // Автовыдача
console.log(lot.amount); // КоличествоSellerShortcut
Краткая информация о продавце.
const lotPage = await account.getLotPage(12345678);
const seller = lotPage.seller;
console.log(seller.id); // ID продавца
console.log(seller.username); // Имя продавцаBuyerViewing
Информация о просмотре лота покупателем (используется в Runner).
// Используется внутри Runner для отслеживания просмотров
// Доступ через Account._parseBuyerViewing(jsonResponse)ChipOffer
Предложение чипа (валютного лота).
const chipFields = await account.getChipFields(1);
console.log(chipFields.offers); // Массив ChipOffer
chipFields.offers.forEach(offer => {
console.log(offer.amount); // Количество
console.log(offer.price); // Цена
});ChipFields
Поля чипа (валютного лота) для редактирования.
const chipFields = await account.getChipFields(1);
console.log(chipFields.subcategory_id); // ID подкатегории
console.log(chipFields.game_id); // ID игры
console.log(chipFields.min_sum); // Минимальная сумма
console.log(chipFields.price); // Цена
console.log(chipFields.amount); // Количество
console.log(chipFields.offers); // Массив предложений (ChipOffer)
console.log(chipFields.csrf_token); // CSRF токен
// Методы ChipFields
chipFields.editFields({ "price": "1500" }); // Редактировать поля
chipFields.setFields({ ... }); // Установить все поля
chipFields.renewFields(); // Обновить поля перед сохранением
console.log(chipFields.fields); // Получить все поляУтилиты (Utils)
Модуль предоставляет вспомогательные функции:
const { utils } = require('./index');
// randomTag() - генерирует случайный тег (10 символов)
const tag = utils.randomTag();
console.log(`Тег: ${tag}`);
// parseWaitTime(response) - парсит время ожидания из ответа
const waitTime = utils.parseWaitTime("Подождите 5 минут");
console.log(`Время ожидания: ${waitTime} секунд`);
// parseCurrency(symbol) - парсит символ валюты в enum Currency
const currency = utils.parseCurrency("₽");
console.log(`Валюта: ${currency}`); // Currency.RUB
// RegularExpressions - регулярные выражения для парсинга сообщений
const regex = new utils.RegularExpressions();
const orderIdMatch = "Заказ #ABC12345".match(regex.ORDER_ID);
if (orderIdMatch) {
console.log(`Найден ID заказа: ${orderIdMatch[0]}`);
}
// Доступные регулярные выражения:
// regex.ORDER_PURCHASED - заказ оплачен
// regex.ORDER_CONFIRMED - заказ подтвержден
// regex.NEW_FEEDBACK - новый отзыв
// regex.FEEDBACK_CHANGED - отзыв изменен
// regex.FEEDBACK_DELETED - отзыв удален
// regex.NEW_FEEDBACK_ANSWER - новый ответ на отзыв
// regex.FEEDBACK_ANSWER_CHANGED - ответ на отзыв изменен
// regex.FEEDBACK_ANSWER_DELETED - ответ на отзыв удален
// regex.ORDER_REOPENED - заказ открыт повторно
// regex.REFUND - возврат средств
// regex.REFUND_BY_ADMIN - возврат средств администратором
// regex.PARTIAL_REFUND - частичный возврат
// regex.ORDER_CONFIRMED_BY_ADMIN - заказ подтвержден администратором
// regex.ORDER_ID - ID заказа
// regex.DISCORD - сообщение о Discord
// regex.DEAR_VENDORS - сообщение "Уважаемые продавцы"
// regex.PRODUCTS_AMOUNT - количество товаров
// regex.PRODUCTS_AMOUNT_ORDER - количество товаров в заказе
// regex.EXCHANGE_RATE - курс обменаПеречисления (Enums)
EventTypes
Типы событий для Runner.
const { EventTypes } = require('./index').enums;
EventTypes.INITIAL_CHAT // 0
EventTypes.CHATS_LIST_CHANGED // 1
EventTypes.LAST_CHAT_MESSAGE_CHANGED // 2
EventTypes.NEW_MESSAGE // 3
EventTypes.INITIAL_ORDER // 4
EventTypes.ORDERS_LIST_CHANGED // 5
EventTypes.NEW_ORDER // 6
EventTypes.ORDER_STATUS_CHANGED // 7MessageTypes
Типы сообщений.
const { MessageTypes } = require('./index').enums;
MessageTypes.NON_SYSTEM // 0
MessageTypes.ORDER_PURCHASED // 1
MessageTypes.ORDER_CONFIRMED // 2
MessageTypes.NEW_FEEDBACK // 3
MessageTypes.FEEDBACK_CHANGED // 4
MessageTypes.FEEDBACK_DELETED // 5
MessageTypes.NEW_FEEDBACK_ANSWER // 6
MessageTypes.FEEDBACK_ANSWER_CHANGED // 7
MessageTypes.FEEDBACK_ANSWER_DELETED // 8
MessageTypes.ORDER_REOPENED // 9
MessageTypes.REFUND // 10
MessageTypes.PARTIAL_REFUND // 11
MessageTypes.ORDER_CONFIRMED_BY_ADMIN // 12
MessageTypes.DISCORD // 13
MessageTypes.DEAR_VENDORS // 14
MessageTypes.REFUND_BY_ADMIN // 15OrderStatuses
Статусы заказов.
const { OrderStatuses } = require('./index').enums;
OrderStatuses.PAID // 0 - Оплачен
OrderStatuses.CLOSED // 1 - Закрыт
OrderStatuses.REFUNDED // 2 - ВозвращенSubCategoryTypes
Типы подкатегорий.
const { SubCategoryTypes } = require('./index').enums;
SubCategoryTypes.COMMON // 0 - Обычные лоты
SubCategoryTypes.CURRENCY // 1 - Валютные лоты (чипы)Currency
Валюты.
const { Currency } = require('./index').enums;
Currency.USD // 0
Currency.RUB // 1
Currency.EUR // 2
Currency.UNKNOWN // 3
// Методы
Currency.toString(Currency.RUB); // "₽"
Currency.getCode(Currency.RUB); // "rub"Wallet
Типы кошельков для вывода средств.
const { Wallet } = require('./index').enums;
Wallet.QIWI // 0
Wallet.BINANCE // 1
Wallet.TRC // 2
Wallet.CARD_RUB // 3
Wallet.CARD_USD // 4
Wallet.CARD_EUR // 5
Wallet.WEBMONEY // 6
Wallet.YOUMONEY // 7Исключения (Exceptions)
Модуль предоставляет различные классы исключений:
const { exceptions } = require('./index');
// AccountNotInitiatedError - аккаунт не инициализирован
// UnauthorizedError - не авторизован
// RequestFailedError - ошибка запроса
// LotSavingError - ошибка сохранения лота
// MessageNotDeliveredError - сообщение не доставлено
// ImageUploadError - ошибка загрузки изображения
// WithdrawError - ошибка вывода средств
// RefundError - ошибка возврата средств
// RaiseError - ошибка поднятия лотов
// FeedbackEditingError - ошибка редактирования отзыва
// LotParsingError - ошибка парсинга лотаОбработка ошибок
Обработка сетевых ошибок
Модуль автоматически обрабатывает сетевые ошибки (таймауты, разрывы соединения) с бесконечными попытками повторного подключения. При потере соединения с FunPay модуль будет автоматически пытаться восстановить соединение.
try {
await account.get();
} catch (error) {
if (error instanceof exceptions.UnauthorizedError) {
console.log('Ошибка авторизации. Проверьте golden_key.');
} else if (error instanceof exceptions.RequestFailedError) {
console.log(`Ошибка запроса: ${error.message}`);
} else {
console.log(`Неизвестная ошибка: ${error.message}`);
}
}Обработка ошибок 429 (Too Many Requests)
Модуль автоматически обрабатывает ошибки 429 с экспоненциальной задержкой.
Примеры использования
Полный пример работы с API
См. файл example.js для полного примера использования всех возможностей API.
Пример бота для автоматической обработки заказов
const { Account, Runner, enums } = require('./index');
const { EventTypes } = enums;
const account = new Account('your_golden_key', 'your_user_agent');
await account.get();
const runner = new Runner(account);
for await (const event of runner.listen(6.0)) {
if (event.type === EventTypes.NEW_ORDER) {
const order = event.order;
console.log(`Новый заказ: ${order.id}`);
// Получаем полную информацию о заказе
const fullOrder = await account.getOrder(order.id);
// Отправляем сообщение покупателю
await account.sendMessage(
fullOrder.buyer.id,
`Спасибо за заказ! Ваш заказ #${order.id} принят в обработку.`
);
}
if (event.type === EventTypes.NEW_MESSAGE) {
const message = event.message;
console.log(`Новое сообщение от ${message.author}: ${message.text}`);
// Автоответ на сообщения
if (message.text.toLowerCase().includes('привет')) {
await account.sendMessage(
message.chat_id,
'Привет! Чем могу помочь?'
);
}
}
}Пример управления лотами
const { Account, types, enums } = require('./index');
const { Currency, SubCategoryTypes } = enums;
const account = new Account('your_golden_key', 'your_user_agent');
await account.get();
// Получаем подкатегорию
const subcategory = account.getSubcategory(SubCategoryTypes.COMMON, 3486);
// Создаем новый лот
const newLot = new types.LotFields(
0,
{
"node_id": String(subcategory.id),
"csrf_token": account.csrf_token,
"fields[summary][ru]": "Новый лот",
"fields[summary][en]": "New lot",
"fields[desc][ru]": "Описание лота",
"fields[desc][en]": "Lot description",
"price": "1000",
"amount": "1",
"active": "on",
"auto_delivery": "on",
"fields[images]": "",
"secrets": ""
},
subcategory,
Currency.RUB
);
newLot.renewFields();
await account.saveLot(newLot);
// Получаем все мои лоты
const myLots = await account.getAllMyLots();
console.log(`Всего моих лотов: ${myLots.length}`);
// Обновляем лот
const lotFields = await account.getLotFields(newLot.lot_id);
lotFields.price = 1500;
lotFields.renewFields();
await account.saveLot(lotFields);Структура проекта
FPAPIjs/
├── lib/
│ ├── account.js # Основной класс Account
│ ├── types.js # Типы данных (Chat, Order, Lot и т.д.)
│ ├── common/
│ │ ├── enums.js # Перечисления (EventTypes, Currency и т.д.)
│ │ ├── exceptions.js # Исключения
│ │ ├── utils.js # Утилиты
│ │ └── index.js # Экспорт общих модулей
│ └── updater/
│ ├── events.js # События для Runner
│ └── runner.js # Runner класс
├── index.js # Главный файл модуля
├── example.js # Примеры использования
├── package.json # Конфигурация npm
└── README.md # ДокументацияМетоды Category и SubCategory
Category - методы
const category = account.getCategory(754);
// Получить все подкатегории
const subcategories = category.getSubcategories();
// Получить подкатегорию по типу и ID
const subcategory = category.getSubcategory(SubCategoryTypes.COMMON, 3486);
// Получить отсортированные подкатегории
const sorted = category.getSortedSubcategories();SubCategory - свойства
const subcategory = account.getSubcategory(SubCategoryTypes.COMMON, 3486);
// Все свойства доступны только для чтения
console.log(subcategory.id); // ID подкатегории
console.log(subcategory.name); // Название
console.log(subcategory.type); // Тип (COMMON или CURRENCY)
console.log(subcategory.category); // Категория
console.log(subcategory.position); // Позиция
console.log(subcategory.fullname); // Полное название
console.log(subcategory.public_link); // Публичная ссылка
console.log(subcategory.private_link); // Приватная ссылкаДополнительные методы Account
addChats(chats)
Добавляет чаты в кэш аккаунта.
const chats = await account.requestChats();
account.addChats(chats);getChatByName(name)
Получает чат по имени пользователя.
const chat = await account.getChatByName('ExampleUser');getChatById(chatId)
Получает чат по ID.
const chat = await account.getChatById(123456789);getSells(...) (устаревший)
Устаревший метод. Используйте getSales().
saveOffer(offerFields)
Внутренний метод для сохранения лота или чипа. Используйте saveLot() или saveChip().
Статические методы Account
Account.chatIdPrivate(chatId)
Проверяет, является ли ID чата приватным.
const isPrivate = Account.chatIdPrivate(123456789); // true
const isPrivate2 = Account.chatIdPrivate('users-123-456'); // true
const isPrivate3 = Account.chatIdPrivate('invalid'); // falseAccount._parseBuyerViewing(jsonResponse)
Парсит информацию о просмотре лота покупателем (внутренний метод).
Особенности
- Полная функциональность: Модуль полностью повторяет функциональность Python версии FunPayAPI
- Автоматическая обработка ошибок: Автоматическая обработка сетевых ошибок с бесконечными попытками повторного подключения
- Обработка 429 ошибок: Автоматическая обработка ошибок "Too Many Requests" с экспоненциальной задержкой
- Поддержка локалей: Поддержка русской, английской и украинской локалей
- Типизация: Полная типизация всех данных
- События в реальном времени: Поддержка получения событий в реальном времени через Runner с улучшенной логикой определения новых сообщений
- Универсальный парсинг страниц: Метод
getPageData()позволяет получить все данные со страницы (классы, data-атрибуты, формы, ссылки, изображения, meta-теги) - Рейтинг аккаунта: Поддержка получения рейтинга продавца и количества отзывов
- Оптимизированное получение лотов: Методы
getMyLotCategories()иgetAllMyLots()получают лоты напрямую со страницы профиля пользователя, парся блокdiv.mb20со списком категорий и получая все лоты (активные и неактивные) через страницу редактирования, без проверки всех подкатегорий на FunPay - Поддержка различных типов прокси: Модуль поддерживает HTTP, HTTPS, SOCKS4 и SOCKS5 прокси.
Последние изменения
v1.1.0
✨ Добавлено
- ✅ Поддержка различных типов прокси: HTTP, HTTPS, SOCKS4, SOCKS5
- ✅ Два формата конфигурации прокси: строковый URL и объектный формат
- ✅ Автоматическое создание прокси-агентов для каждого типа прокси
- ✅ Все запросы к FunPay теперь могут проходить через прокси-сервер
Важно: Использование прокси особенно важно при работе на серверах, так как IP-адрес сервера может быть заблокирован на FunPay. Прокси позволяет обойти блокировки и использовать любой доступный прокси-сервер. Подробности использования см. в разделе Конструктор.
v1.0.9
🐛 Исправлено
- ✅ Улучшена обработка сетевых ошибок для работы на серверах
- ✅ Добавлен User-Agent по умолчанию (если не указан явно)
- ✅ Добавлены дополнительные HTTP-заголовки для совместимости с FunPay
- ✅ Расширена обработка различных типов сетевых ошибок (EAI_AGAIN, EPROTO, ESOCKETTIMEDOUT, SSL/TLS ошибки)
- ✅ Улучшено логирование ошибок с выводом кода ошибки и деталей
🔧 Улучшено
- ✅ Модуль теперь корректно работает на Linux серверах
- ✅ Более детальное логирование сетевых ошибок для диагностики проблем
- ✅ Автоматическая установка стандартных HTTP-заголовков браузера
Важно: Если вы испытывали проблемы с подключением на серверах (особенно Linux), обновите до версии 1.0.9+. Модуль теперь автоматически устанавливает User-Agent и необходимые HTTP-заголовки, что должно решить большинство проблем с подключением.
v1.0.7
🚀 Оптимизировано
- ✅ Методы
getMyLotCategories()иgetAllMyLots()теперь работают значительно быстрее - ✅ Получение лотов напрямую со страницы профиля пользователя (
users/{userId}/) - ✅ Парсинг блока
div.mb20со списком категорий с лотами - ✅ Получение всех лотов (активных и неактивных) через страницу редактирования (
/lots/{id}/trade) - ✅ Определение активности лота по наличию класса
warning - ✅ Убрана необходимость проверки всех подкатегорий на FunPay (3742+ подкатегорий)
Важно: Теперь методы getMyLotCategories() и getAllMyLots() работают намного быстрее и эффективнее, так как они получают лоты напрямую со страницы профиля пользователя, без необходимости проверять все подкатегории на FunPay. Методы также возвращают неактивные лоты, которые определяются по классу warning на странице редактирования.
v1.0.6
✨ Добавлено
- ✅ Метод
updateLotPrice(lotId, newPrice)для быстрого изменения цены лота - ✅ Метод
getBuyerViewing(buyerId)для получения информации о просмотре покупателя - ✅ Метод
runner.getBuyerViewing(buyerId)для получения информации о просмотре из Runner - ✅ Автоматическая обработка событий
buyer_viewingв Runner
v1.0.3
✨ Добавлено
- ✅ Метод
getAccountRating()для получения рейтинга аккаунта (продавца) - ✅ Поля
ratingиreviews_countв классеUserProfile - ✅ Автоматический парсинг рейтинга в методе
getUser()
🐛 Исправлено
- ✅ Улучшена логика обработки новых сообщений в Runner
- ✅ Исправлена проблема с обработкой старых сообщений из других чатов
- ✅ Более точное определение новых сообщений с использованием
node_msg_idиз событий - ✅ Runner теперь корректно фильтрует сообщения и обрабатывает только действительно новые сообщения
Важно для пользователей Runner: Если вы использовали Runner для обработки сообщений, обновите до версии 1.0.3+ для исправления проблемы с обработкой старых сообщений. Теперь Runner использует node_msg_id из событий для точного определения новых сообщений, что исключает обработку старых сообщений из других чатов.
Требования
- Node.js >= 14.0.0
- npm или yarn
Полный список всех методов и свойств
Account - все методы
Инициализация:
constructor(goldenKey, userAgent, requestsTimeout, proxy, locale)get(updatePhpsessid)- инициализация/обновление аккаунтаlogout()- выход из аккаунта
Геттеры/Сеттеры:
locale(getter/setter)is_initiated(getter)bot_character(getter)old_bot_character(getter)categories(getter)subcategories(getter)
Категории:
getCategory(categoryId)getSubcategory(subcategoryType, subcategoryId)getSortedCategories()getSortedSubcategories()
Чаты:
requestChats()getChats(update)addChats(chats)getChatByName(name)getChatById(chatId)getChat(chatId, withHistory, locale)getChatHistory(chatId, lastMessageId, interlocutorUsername, fromId)getChatsHistories(chatsData)
Сообщения:
sendMessage(chatId, text, chatName, interlocutorId, imageId, addToIgnoreList, updateLastSavedMessage, leaveAsUnread)sendImage(chatId, image, chatName, interlocutorId, addToIgnoreList, updateLastSavedMessage, leaveAsUnread)uploadImage(image, type)
Заказы:
getSales(...)getOrder(orderId, locale)getOrderShortcut(orderId)getSells(...)(устаревший)
Лоты:
getSubcategoryPublicLots(subcategoryType, subcategoryId, locale)getMySubcategoryLots(subcategoryId, locale)getMyLotCategories(userId, locale)getAllMyLots(userId, locale)getLotPage(lotId, locale)getLotFields(lotId)getPageData(url, locale)calc(subcategoryType, subcategoryId, gameId, price)
Пользователи:
getUser(userId, locale)getAccountRating(userId, locale)getBuyerViewing(buyerId)
Отзывы:
sendReview(orderId, text, rating)deleteReview(orderId)
Финансы:
getBalance(lotId)refund(orderId)withdraw(currency, wallet, amount, address)getExchangeRate(currency)
Управление лотами:
getChipFields(subcategoryId)saveLot(lotFields)saveChip(chipFields)saveOffer(offerFields)(внутренний)deleteLot(lotId)updateLotPrice(lotId, newPrice)getRaiseModal(categoryId)raiseLots(categoryId, subcategories, exclude)
Статические методы:
Account.chatIdPrivate(chatId)Account._parseBuyerViewing(jsonResponse)(внутренний)
Runner - все методы
constructor(account, disableMessageRequests, disabledOrderRequests)getUpdates()- запросить обновленияparseUpdates(updates)- парсить обновленияlisten(requestsDelay, ignoreExceptions)- генератор событийgetBuyerViewing(buyerId)- получить информацию о просмотре покупателяupdateLastMessage(chatId, messageId, messageText)- обновить сохраненный ID последнего сообщенияmarkAsByBot(chatId, messageId)- пометить сообщение как отправленное ботом
Все типы данных
BaseOrderInfoChatShortcutBuyerViewingChatMessageOrderShortcutOrderCategorySubCategoryLotFieldsChipOfferChipFieldsLotPageSellerShortcutLotShortcutMyLotShortcutUserProfileReviewBalancePaymentMethodCalcResult
Все перечисления (Enums)
EventTypes- типы событий (8 типов)MessageTypes- типы сообщений (16 типов)OrderStatuses- статусы заказов (3 статуса)SubCategoryTypes- типы подкатегорий (2 типа)Currency- валюты (4 валюты)Wallet- типы кошельков (8 типов)
Все исключения (Exceptions)
AccountNotInitiatedErrorRequestFailedErrorUnauthorizedErrorWithdrawErrorRaiseErrorImageUploadErrorMessageNotDeliveredErrorFeedbackEditingErrorLotParsingErrorLotSavingErrorRefundError
Все утилиты (Utils)
randomTag()- генерация случайного тегаparseWaitTime(response)- парсинг времени ожиданияparseCurrency(symbol)- парсинг символа валютыRegularExpressions- класс с регулярными выражениями (17 паттернов)
Лицензия
ISC
Поддержка
При возникновении проблем или вопросов создайте issue в репозитории проекта.
Благодарности
Этот модуль является полным портом Python библиотеки FunPayAPI.
