Runner (Механизм отслеживания событий)

Runner — это фоновый бесконечный цикл ядра, который опрашивает FunPay и генерирует события для плагинов.


Как устроен опрос FunPay:

  1. Чат и сообщения (Long-polling):
    • Делает непрерывные запросы к эндпоинту /runner/ FunPay.
    • При получении новых сообщений парсит их и триггерит NewMessageEvent.
  2. Заказы и продажи (HTML Polling):
    • С периодичностью в N секунд парсит страницу /orders/trade.
    • Хранит в памяти снимок (снапшот) последних заказов.
    • Если видит новый заказ -> кидает NewOrderEvent.
    • Если статус изменился (оплачен -> закрыт/возврат) -> кидает OrderStatusChangedEvent.

Важные нюансы для разработчиков плагинов:

  • Порядок событий НЕ гарантирован:
    Сообщение в чат от системы (“Покупатель оплатил заказ #XXXXXX) может прийти на 0.5–1с быстрее, чем runner распарсит таблицу заказов. Плагин должен уметь обрабатывать оба сценария.
  • Не блокируйте Event-поток:
    Все функции-хэндлеры (BIND_TO_*) вызываются синхронно в цикле обработки. Если вы сделаете внутри хэндлера time.sleep(10) или тяжелый синхронный запрос к внешнему API, вы заморозите весь Runner Cardinal! Тяжелые задачи всегда выносите в threading.Thread или ThreadPoolExecutor.
  • Авто-поднятие лотов:
    Runner также отвечает за таймер авто-подъема лотов и триггерит BIND_TO_POST_LOTS_RAISE.