fpx API Documentation
Асинхронный Python-фреймворк для автоматизации FunPay.
Роутер / Обработчики событий
Router.include_router
Router.message_commands
Метод для регистрации команд автоматизации сообщений.
Args:
target_dict (dict): Словарь вида {'command': answer_new_def, '!start': another_func}
Router.on_chip_category
Декоратор отслеживает снижение цен на чипсах(коротких лотов под валюты).
Returns:
CategoryLastLot: Объект, содержащий:
- price (float): Цена лота
- offer_id (str): Айди лота
Router.on_confirmed_orders
Декоратор, который отслеживает только событие подтверждёния заказа.
Returns:
Order: Объект, содержащий:
- order_id (str): Уникальный ID заказа
- order_time (str): Время оплаты заказа
- client_name (str): Имя клиента
- price (str): Цена товара
- status (str): Статус заказа
- name (str): Название товара
- anwer (method): При указании текста в аргументах, отвечает на сообщение
Router.on_error
Router.on_flood
Router.on_lot_category
Декоратор отслеживает снижение цен на лоты.
Returns:
CategoryLastLot: Объект, содержащий:
- price (float): Цена лота
- offer_id (str): Айди лота
Router.on_message
Декоратор отслеживает новые сообщения.
Args:
- text (str | None): Текст на который начинается сообщение, по которому фильтруется отображение новых сообщений.
- mapping (dict | None): Словарь 'ключ': 'значение' для упрощённых ответов, вводи 'Привет' и 'Привет, работаю' и теперь скрипт будет всегда отвечать за тебя Привет, работаю когда тебе пишут привет. Вводи сколько угодно маппинга
Returns:
Message: Объект, содержащий:
- sender (str): Имя отправителя
- chat_id (str): Айди чата (node id)
- last_msg (str): Сообщение, которое было отправлено в этом чате
- is_system (bool): Системное ли сообщение
- anwer (method): При указании текста в аргументах, отвечает на сообщение
Router.on_new_order
Декоратор, который отслеживает только новые заказы.
Returns:
Order: Объект, содержащий:
- order_id (str): Уникальный ID заказа
- order_time (str): Время оплаты заказа
- client_name (str): Имя клиента
- price (str): Цена товара
- status (str): Статус заказа
- name (str): Название товара
- anwer (method): При указании текста в аргументах, отвечает на сообщение
Router.on_new_review
Декоратор отслеживает новые отзывы.
Args:
- stars (int | None): Количество звёзд, на которое хендлер будет реагировать (не обязательно передавать).
Returns:
CurReview: Объект, содержащий:
- text (str): Текст отзыва
- stars (int): Кол-во звёзд, оставленных под отзывом
- author (str): Автор отзыва
- item_name (str): Заказ, под которым оставлен отзыв
Router.on_orders
Декоратор отслеживает все события заказов.
Не рекомендуется использовать вместе с on_cofirmed_orders, on_new_order, on_refunded_orders во избежание дублирования событий.
Returns:
Order: Объект, содержащий:
- order_id (str): Уникальный ID заказа
- description (str): Описание лота
- order_time (str): Время оплаты заказа
- client_name (str): Имя клиента
- price (str): Цена товара
- status (str): Статус заказа
- name (str): Название товара
- anwer (method): При указании текста в аргументах, отвечает на сообщение
Router.on_refunded_orders
Декоратор отслеживает события возврата заказов.
Returns:
Order: Объект, содержащий:
- order_id (str): Уникальный ID заказа
- order_time (str): Время оплаты заказа
- client_name (str): Имя клиента
- price (str): Цена товара
- status (str): Статус заказа
- name (str): Название товара
- anwer (method): При указании текста в аргументах, отвечает на сообщение
Router.on_startup
Router.order_targets
Метод для регистрации команд автоматизации новых заказов.
Args:
target_dict (dict): Словарь вида {'target': answer_new_def, 'моя пометка в описании': another_func}
Раннер
ChatRunner._compare_chat_cache
Сравнивает старый кеш сообщений с новым, если находит отличия, выносит сообщение в список, после чего возвращает полный список
ChatRunner._update_chat_cache
FpxCriticalRunnerError
FpxRunnerError
OrderRunner._compare_order_cache
OrderRunner._update_order_cache
ReviewRunner._compare_review_cache
ReviewRunner._update_review_cache
Runner._cache_runner
Runner._warm_up
Runner.idle
Runner.start_polling
Запускает поиск новых событий.
Args:
timer (str): Задержка в секундах, раз в которую будет происходить обновление кеша (рекомендуемо 3-5 сек).
is_background (bool): По дефолту True(в фоне). Определяет, будет ли функция запущена в фоне или нет (если не в фоне, блокирует остальные процессы).
watch_lots (list): Можно не передавать. Список категорий лотов, которые будет проверять скрипт.
watch_chips (list): Можно не передавать. Список категорий чипсов(коротких лотов под валюты), которые будет проверять скрипт.
Менеджеры аккаунта
Account
AccountData
AddonsManager.get_game_id
Получает game_id.
Args:
category_id (str | int): ID подкатегории.
Returns:
str | int: ID игры.
Raises:
FpxGetGameIDError: Ошибка запроса ID игры
CategoryManager.get_chip_category_last_lot
Находит самый дешевый лот краткий в категории по каждому из фильтров.
Args:
lot_category_id (int | str): ID категории лота
Returns:
List[CategoryLastLot]: Объект, содержащий в себе:
- category_id (str): ID категории
- filtration (str): Название фильтра
- price (float): Цена лота
- offer_id (str): ID лота
- owner_username (str): Юзернейм владельца лота
Raises:
FpxGetLastCategoryLotError: Ошибка запроса последней категории
CategoryManager.get_lot_category_last_lot
Находит самый дешевый лот в категории по каждому из фильтров.
Args:
lot_category_id (int | str): ID категории лота
Returns:
List[CategoryLastLot]: Объект, содержащий в себе:
- category_id (str): ID категории
- filtration (str): Название фильтра
- price (float): Цена лота
- offer_id (str): ID лота
- owner_username (str): Юзернейм владельца лота
Raises:
FpxGetLastCategoryLotError: Ошибка запроса последней категории
ChatManager.get_chat_data
Получает данные чата.
Args:
chat_id (int | str): Айди чата
Returns:
ChatData: Объект с тех. данными чата:
- node_name (str): Полный ID переписки, нужный для отправки сообщения (users-8778502-19903068)
- csrf_token (str): Нужен для post запросов, сохраняется в кеш self.account._csrf_token
- user_id (str): твой ID
- Message: Объект, содержащий последнее сообщение в чате:
- chat_id (str): ID чата
- is_system (bool): Системное ли сообщение
- sender (str): Отправитель сообщения
- text (str): Текст сообщения
Raises:
FpxGetChatDataError: Ошибка запроса данных чата
ChatManager.get_chats
Собирает все чаты на аккаунте.
Returns:
list[Chat]: Список объектов чатов. Каждый содержит:
- id (str): ID чата (node_id).
- username (str): Имя клиента.
- last_msg (str): Последнее сообщение в чате.
- date (str): Дата последнего сообщения.
- link (str): Полная ссылка на чат.
- is_unread (bool): Прочитано или нет (True, если не прочитано).
Raises:
FpxGetChatsError: Ошибка получения чатов FunPay
ChatManager.send_message
Отправляет сообщение.
Args:
chat_id (str): ID чата
text (str): Текст сообщения
Returns:
bool: True, если сообщение отправлено
Raises:
FpxMessageNotDelivered: Если не удалось отправить сообщение.
FpxAccountError
FpxGetLotEditorInfoError
FunPayEditor.change_lot_price
Изменяет цену лота.
Args:
lot_id (str | int): Айди лота
new_price (str): Новая цена лота
Returns:
bool: True - цена изменилась.
Raises:
FpxLotEditingError: Цена не изменилась
FpxRequestError: Плохое соединение с интернетом/сервер не ответил
FunPayEditor.toggle_off_lot
Выключает лот.
Args:
lot_id (str | int): Айди лота
Returns:
bool: True - лот выключен
Raises:
FpxRequestError: Сервер не ответил
FunPayEditor.toggle_on_lot
Включает лот.
Args:
lot_id (str | int): Айди лота
Returns:
bool: True - лот включен
Raises:
FpxRequestError: Сервер не ответил
LotManager._get_lot_editor_details
Не для обычного использования! (функция для изменения лота)
Получает данные для изменения лота с https://funpay.com/lots/offerEdit?offer={lot_id}.
Args:
lot_id (str | int): Айди лота
Returns:
LotEditor: Возвращает объект с:
- csrf_token (str): нужен для любого post запроса.
- form_created_at (str): время создания формы изменения лота.
- offer_id (str): Айди оффера(лота).
- node_id (str): Айди нода.
- location (str): Обычно пустой.
- deleted (str): Обычно пустой.
- fields (dict): Словарь с филдами, нет фиксированного кол-ва филдов, просто отправляйте все.
Raises:
FpxGetLotEditorInfoError: ошибка поулучения данных редактора
LotManager.get_lot_info
Собирает данные лота.
Args:
lot_id (str | int): ID лота.
Returns:
CurrentLotInfo: Объект с этими данными:
- short_desc (str): Краткое описание.
- description (str): Полное описание.
- price (float): Цена лота.
Raises:
FpxGetLotInfoError: Ошибка запроса данных лота
LotManager.raise_lots
OrderManager.get_order_details
Функция запрашивает детали заказа из /orders/{order_id}/.
Args:
order_id (str | int): ID заказа
Returns:
Order: Объект с данными:
- order_id (str): ID заказа
- status (str): Статус заказа.
- review (dict): Словарь с данными отзыва, который оставили к заказу.
- description (str): Строка с подробным описанием заказа
- chat_id (str): ID чата
Raises:
FpxGetOrderInfoError: Ошибка запроса данных заказа
OrderManager.refund_order
Делает возврат заказа.
Args:
order_id (str | int): Айди заказа
Returns:
bool: True если возврат прошёл успешно.
Raises:
FpxRefundError: Не удалось сделать возврат.
ProfileManager.get_balance
Собирает баланс аккаунта.
Returns:
Balance: Объект с валютами:
- rub (float): Баланс в рублях
- usd (float): Баланс в долларах
- eur (float): Баланс в евро
Raises:
FpxGetProfileError: Ошибка сбора баланса
ProfileManager.get_my_sells
Запрашивает страницу продаж юзера.
Args:
limit (int): Лимит заказов, которые нужно вернуть(если 0, то вернёт все заказы).
Returns:
list: Список объектов, каждый содержит в себе:
- order_id (str): ID заказа.
- order_time (str): Время создания заказа.
- client_name (str): Имя клиента.
- price (float): Сумма заказа.
- amount (int): Кол-во штук заказа (1 по дефолту).
- topup_nickname (str): Данные, на которые отправлять пополнение. (ник, ссылка игрока и тд.)
- status (str): Статус заказа.
- name (str): Название заказа.
- category (str): Категория заказа.
Raises:
FpxGetUserSellsError: Ошибка запроса продаж
ProfileManager.get_user_data
Запрашивает данные юзера, сохраняет их в кеш.
Returns:
UserData: Объект с данными юзера:
- user_id (str): ID юзера.
- csrf_token (str): Нужен для любого post запроса на funpay.
Raises:
FpxGetUserDataError: ошибка запроса данных юзера
ProfileManager.profile
Запрашивает профиль юзера.
Args:
user_id (str | int): Можно не передавать, если None, сама узнает айди владельца сессии и запросит данные о нём. Айди юзера.
Returns:
Profile: Объект, с данными:
- category_ids (list): ID категорий, в которых у юзера выставлены лоты.
- lots (list): Список словарей с лотами юзера юзера {lot['name']: lot['id']}.
- reviews (list): Список объектов отзыва CurReview с данными:
- text (str): Текст отзыва.
- stars (int): Кол-во звёзд в отзыве (1-5).
- author (str): Автор отзыва.
- item_name (str): Название заказа, под которым оставлен отзыв.
Raises:
FpxGetProfileError: Ошибка запроса профиля
ReviewManager.get_review
Забирает отзыв от заказа.
Args:
order_id (str | int): Айди заказа.
Returns:
Review: Объект с данными отзыва:
- text (str): Текст отзыва.
- stars (int): Количество звёзд в отзыве.
- answer (str): Ваш ответ на отзыв, может быть пустой строкой.
ReviewManager.review_answer
Отвечает на отзыв, оставленный покупателем.
Args:
order_id (str | int): ID заказа, на отзыв которого хотите ответить,
text (str): Текст, которым вы хотите ответить на отзыв.
Returns:
bool: True при успехе
Raises:
FpxAnswerReviewError: При ошибке (ответ не совпадает заданному/сервер не вернул ничего).
Модели данных
Chat
id: Chat id (node)
username: Client nickname
last_msg: Last message in chat
date: last message date
link: full chat link (https://funpay.com/chat/?node=id)
is_unread: Readed or not