Загрузка...

Funpay Bot Engine is a modern asynchronous framework for creating Funpay bots.

Thread in Python created by RealQvvonk Feb 2, 2026. (bumped Mar 26, 2026) 659 views

  1. RealQvvonk
    [IMG]

    Если вы пытались как-либо автоматизировать Funpay, то знаете, что адекватной обёртки для него нет.
    Единственное подобие - FunPayAPI - непонятная поделка без возможности расширения, более того, заброшенная.

    Funpay Bot Engine - это современный полноценный асинхронный фреймворк, который позволит вам легко создавать ботов для Funpay.

    Под капотом используется:
    • pydantic для удобной сериализации, десериализации, а так же валидации данных;
    • eventry для создания событийной системы с роутерами, фильтрами, миддлварями и хэндлерами;
    • funpayparsers - дабы отделить логику парсинга. Funpay parsers в свою очередь используют под капотом selectolax, который является одним из самых быстрых, если не самым быстрым html парсером на данный момент (ну, точнее, оберткой над lexbor)

    Синтаксиз привязки хэндлеров к событиям сделан похожим на Aiogram / FastAPI / любой другой событийно-ориентированный фреймворк.
    Так, чтобы создать простейшего бота, вам нужен лишь небольшой сниппет:
    Python
    import asyncio
    from funpaybotengine import Bot, Dispatcher
    from funpaybotengine.types import Message


    bot: Bot = Bot(golden_key='12345678901234567890123456789012') # Создаем экземляр бота
    dp: Dispatcher = Dispatcher() # Создаем диспетчер - корневой роутер


    # Регистрируем хэндлер на событие о новом сообщении
    # Хэндлер сработает тольько в том случае, если текст сообщения == 'привет'
    @dp.on_new_message(lambda message: message.text.lower() == 'привет')
    async def echo(message: Message) -> None:
    await message.reply('Пока')


    async def main() -> None:
    # Запускаем цикл получения новых событий.
    await bot.listen_events(dp)


    if __name__ == '__main__':
    asyncio.run(main())

    Одной из особенностей FunPayBotEngine (а точне Eventry) - при отрабатывании первого подходящего хэндлера, процесс поиска подходящий хэндлеров не останавливается. FunPayBotEngine выполнит все подходящие к событию хэндлеру.
    Python
    # Регистрируем хэндлер на событие о новом сообщении
    # Хэндлер отработает на абсолютно любое сообщение.
    @dp.on_new_message()
    async def print_message(message: Message) -> None:
    print(f'Пришло новое сообщение от {message.sender_username}: ')
    print(message.text or message.image_url)


    # Регистрируем хэндлер на событие о новом сообщении
    # Хэндлер сработает тольько в том случае, если текст сообщения == 'привет'
    @dp.on_new_message(lambda message: message.text.lower() == 'привет')
    async def echo(message: Message) -> None:
    await message.reply('Пока')
    В случае выше, если мы получим сообщение "привет" - отработают оба хэндлера.
    У вас есть возможность отменитьь выполнение последующих хэндлеров достаточно ли вызвать
    ⁡event.stop_propagation()
    , однако на практике это ни разу не пригождалось, т.к. чаще всего, автоматизируя Funpay, нам необходимо навешивать все больше и больше хэндлеров на одни и те же события, а не наоборот.


    FunPayBotEngine может много чего еще:
    • Хорошо реализованый сборщик событий: все события получаются из сообщений, после чего события о новых заказах / отзвых и т.д. дополняются объектами самих заказов / отзывами и т.д. (и нет, обмануть Funpay Bot Egnine, отпарвив фейковое сообщение, не получится). Такой способ позволяет не упустить ни одного события (в том же Funpay API если заказ старый или сообщение - первое в новом чате - события вы не получите).
    • Реализовано более 30 самых частоиспользуемых методов: от обычного получения страниц, до действий типа отправки сообщений / управления отзывами / заказами и т.д.
    • Все типы данных представлены в виде pydantic моделей: никаких словрей и прочей ерунды.
    • Естетсвенно, роутеры, фильтры, хэндлеры, миддлвари разных типов и т.д. Кстати говоря, для всех этих сущностей нет фиксированных сигнатур. Вы можете указывать в хэндлеры любый параметры, которые захотите, главное, чтобы они присутствовали в
      ⁡workflow_data
      ⁡ и контектсе события. Таким образом вы можете написать хэндлер, который вообще не принимает никакие аргументов, если оно вам надо.

    P.S. На данный момент фреймворк все еще разрабатывается, потому, увы, документации :pignope:(но со временем появится, чего уж там).
    Однако пользоваться им уже можно, просто смотря в исходники, а не в документацию. Исходники простые для понимания, т.к. вся логика парсинга и т.п. вынесены в отдельный пакет, в FunPayBotEngine - только сами методы, классы и т.д.

    Если у вас есть какие-то предложения / баг репорты и т.д., добро пожаловать на github. А еще лучше пул реквест оформите :interesting:.
    Ну и любые вопросы можно в телеге задать: клик. Мы тут неболььшой (пока) компанием сидим,
    :em: пинаем.
     
  2. AS7RID
    AS7RID Feb 2, 2026 Первоклассный пушистик 17,648 Jun 11, 2019
    Ну импорт своих же либ это имхо какой-то насерчик, сейчас обычно импортируют только фундаментальные/большие либы, реимплементация которых в коде это супер заеб. Даешь самобытность aka self contained либы (бтв даже сейчас в req насрано меньше, чем в том же кардинале :wut:)
     
    1. RealQvvonk Topic starter
      avatarAS7RID, ну мб в будущем уберу что eventry, что funpayparsers из зависимостей, а в репо закину их как субмодули. Просто уж вышло так, что энжин начал делаться уже после обеих либ.
      Feb 2, 2026 Edited
  3. kekch127
    kekch127 Feb 3, 2026 1,273 Oct 5, 2020
    Проект без спору интересный, однако давно уже существуют всяко разные реализации готовых ботов, которые имеют все под капотом.

    имхо, как по мне, стоило бы скоуп взять на другие площадки, условный плеерок(я уже сам задумывался над реализацией). Спросу будет больше, тк на Фанпей щас устанавливают ебучий кардинал или вертекс с готовыми кфг и не заморачиваются. Фанпей, все таки стал уже менее актуален

    но все таки, судя по описанию, проделана большая работа, за это респект
     
    1. RealQvvonk Topic starter
      avatarkekch127, по поводу плеерка тоже задумывался и, вероятно, тоже сделаю, просто выделив общие части из этого фреймворка.

      По поводу кардинала и вертекса - это один и тот же бот :ne_ponyal:, который ужаснейше написан, как и плагины для него (хотя плагины и их разработчиков винить за это нельзя - какая платформа, такие и расширения). И вот ситуацию с кардиналом я тоже планирую исправить, если можно так сказать, к концу недели
    2. kekch127
  4. kabachok345
    интересно был заказ по разработке бота по фанпею, тогда не нашел как раз норм аналогов, если норм работает то имба возможно буду пользоваться
     
    1. RealQvvonk Topic starter
      avatarkabachok345, пока никто не жаловался. Но и пользовались чисто узким кругом. На самом деле есть ощутимый шанс багов, просто потому что тестилась на поле боя она мало.
      Но через неделю я уже выпускаю бота, там пойдут какие-то люди и какой-то фидбек => фиксы + через пару недель собираюсь все это дело покрывать тестами.

      Ну и соответственно, если начнешь пользоваться и будут какие-то баги / недостающие методы - пиши либо в github issues, либо прямо в телегу, стараюсь быстро чинить / добавлять методы по надобности.
  5. АвтоВАЗ
    Фреймворк интересный, давно искал чисто библиотеку, но реализация в кардинале мне крайне не нравилась. Вопрос такой: funpayhub сейчас актуален? И если да, то на какой стадии он сейчас?
     
    1. RealQvvonk Topic starter
      avatarАвтоВАЗ, в сб-вс будет первая бета. Сейчас в основном клипаю менюшки, заменяю старый код на более новый.

      А так, самый сложный функционал, типа загрузки плагинов, системы меню и модификаций меню, форматтеров и тд уже готово.

      Ну и если хочется посмотреть - в тг чате я постоянно че то тесчу, так что там можно поглазеть на менюшки и т.д.
      Feb 3, 2026 Edited
  6. K1p1k
    K1p1k Feb 3, 2026 46 Jul 1, 2022
    Топ, осталось только магические фильтры
     
Loading...