funpaybotengine 0.5.4__tar.gz → 0.6.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (120) hide show
  1. {funpaybotengine-0.5.4 → funpaybotengine-0.6.0}/PKG-INFO +1 -1
  2. funpaybotengine-0.6.0/examples/temp.py +34 -0
  3. {funpaybotengine-0.5.4 → funpaybotengine-0.6.0}/funpaybotengine/client/bot.py +11 -1
  4. {funpaybotengine-0.5.4 → funpaybotengine-0.6.0}/funpaybotengine/client/session/aiohttp_session.py +4 -0
  5. {funpaybotengine-0.5.4 → funpaybotengine-0.6.0}/funpaybotengine/methods/raise_offers.py +7 -18
  6. {funpaybotengine-0.5.4 → funpaybotengine-0.6.0}/funpaybotengine/methods/save_offer_fields.py +1 -2
  7. {funpaybotengine-0.5.4 → funpaybotengine-0.6.0}/funpaybotengine/types/common.py +12 -0
  8. {funpaybotengine-0.5.4 → funpaybotengine-0.6.0}/pyproject.toml +1 -1
  9. funpaybotengine-0.5.4/temp.py +0 -20
  10. {funpaybotengine-0.5.4 → funpaybotengine-0.6.0}/.github/CODEOWNERS +0 -0
  11. {funpaybotengine-0.5.4 → funpaybotengine-0.6.0}/.gitignore +0 -0
  12. {funpaybotengine-0.5.4 → funpaybotengine-0.6.0}/.pre-commit-config.yaml +0 -0
  13. {funpaybotengine-0.5.4 → funpaybotengine-0.6.0}/LICENSE +0 -0
  14. {funpaybotengine-0.5.4 → funpaybotengine-0.6.0}/Makefile +0 -0
  15. {funpaybotengine-0.5.4 → funpaybotengine-0.6.0}/README.md +0 -0
  16. {funpaybotengine-0.5.4 → funpaybotengine-0.6.0}/examples/basic.py +0 -0
  17. {funpaybotengine-0.5.4 → funpaybotengine-0.6.0}/examples/with_redis_storage.py +0 -0
  18. {funpaybotengine-0.5.4 → funpaybotengine-0.6.0}/funpaybotengine/__init__.py +0 -0
  19. {funpaybotengine-0.5.4 → funpaybotengine-0.6.0}/funpaybotengine/base.py +0 -0
  20. {funpaybotengine-0.5.4 → funpaybotengine-0.6.0}/funpaybotengine/client/__init__.py +0 -0
  21. {funpaybotengine-0.5.4 → funpaybotengine-0.6.0}/funpaybotengine/client/default_hooks.py +0 -0
  22. {funpaybotengine-0.5.4 → funpaybotengine-0.6.0}/funpaybotengine/client/session/__init__.py +0 -0
  23. {funpaybotengine-0.5.4 → funpaybotengine-0.6.0}/funpaybotengine/client/session/base.py +0 -0
  24. {funpaybotengine-0.5.4 → funpaybotengine-0.6.0}/funpaybotengine/client/session/http_methods.py +0 -0
  25. {funpaybotengine-0.5.4 → funpaybotengine-0.6.0}/funpaybotengine/dispatching/__init__.py +0 -0
  26. {funpaybotengine-0.5.4 → funpaybotengine-0.6.0}/funpaybotengine/dispatching/events/__init__.py +0 -0
  27. {funpaybotengine-0.5.4 → funpaybotengine-0.6.0}/funpaybotengine/dispatching/events/base.py +0 -0
  28. {funpaybotengine-0.5.4 → funpaybotengine-0.6.0}/funpaybotengine/dispatching/events/builtin_events.py +0 -0
  29. {funpaybotengine-0.5.4 → funpaybotengine-0.6.0}/funpaybotengine/dispatching/filters/__init__.py +0 -0
  30. {funpaybotengine-0.5.4 → funpaybotengine-0.6.0}/funpaybotengine/dispatching/filters/base.py +0 -0
  31. {funpaybotengine-0.5.4 → funpaybotengine-0.6.0}/funpaybotengine/dispatching/filters/message_filters.py +0 -0
  32. {funpaybotengine-0.5.4 → funpaybotengine-0.6.0}/funpaybotengine/dispatching/filters/order_filters.py +0 -0
  33. {funpaybotengine-0.5.4 → funpaybotengine-0.6.0}/funpaybotengine/dispatching/handlers/__init__.py +0 -0
  34. {funpaybotengine-0.5.4 → funpaybotengine-0.6.0}/funpaybotengine/dispatching/handlers/handler_manager.py +0 -0
  35. {funpaybotengine-0.5.4 → funpaybotengine-0.6.0}/funpaybotengine/dispatching/routers/__init__.py +0 -0
  36. {funpaybotengine-0.5.4 → funpaybotengine-0.6.0}/funpaybotengine/dispatching/routers/base.py +0 -0
  37. {funpaybotengine-0.5.4 → funpaybotengine-0.6.0}/funpaybotengine/dispatching/routers/dispatcher.py +0 -0
  38. {funpaybotengine-0.5.4 → funpaybotengine-0.6.0}/funpaybotengine/exceptions/__init__.py +0 -0
  39. {funpaybotengine-0.5.4 → funpaybotengine-0.6.0}/funpaybotengine/exceptions/action_exceptions.py +0 -0
  40. {funpaybotengine-0.5.4 → funpaybotengine-0.6.0}/funpaybotengine/exceptions/base.py +0 -0
  41. {funpaybotengine-0.5.4 → funpaybotengine-0.6.0}/funpaybotengine/exceptions/bot_exceptions.py +0 -0
  42. {funpaybotengine-0.5.4 → funpaybotengine-0.6.0}/funpaybotengine/exceptions/message_check_errors.py +0 -0
  43. {funpaybotengine-0.5.4 → funpaybotengine-0.6.0}/funpaybotengine/exceptions/method_exceptions.py +0 -0
  44. {funpaybotengine-0.5.4 → funpaybotengine-0.6.0}/funpaybotengine/exceptions/runner_exceptions.py +0 -0
  45. {funpaybotengine-0.5.4 → funpaybotengine-0.6.0}/funpaybotengine/exceptions/session_exceptions.py +0 -0
  46. {funpaybotengine-0.5.4 → funpaybotengine-0.6.0}/funpaybotengine/loggers.py +0 -0
  47. {funpaybotengine-0.5.4 → funpaybotengine-0.6.0}/funpaybotengine/methods/__init__.py +0 -0
  48. {funpaybotengine-0.5.4 → funpaybotengine-0.6.0}/funpaybotengine/methods/base.py +0 -0
  49. {funpaybotengine-0.5.4 → funpaybotengine-0.6.0}/funpaybotengine/methods/calc_chips.py +0 -0
  50. {funpaybotengine-0.5.4 → funpaybotengine-0.6.0}/funpaybotengine/methods/calc_lots.py +0 -0
  51. {funpaybotengine-0.5.4 → funpaybotengine-0.6.0}/funpaybotengine/methods/check_banned.py +0 -0
  52. {funpaybotengine-0.5.4 → funpaybotengine-0.6.0}/funpaybotengine/methods/delete_review.py +0 -0
  53. {funpaybotengine-0.5.4 → funpaybotengine-0.6.0}/funpaybotengine/methods/get_2fa_status.py +0 -0
  54. {funpaybotengine-0.5.4 → funpaybotengine-0.6.0}/funpaybotengine/methods/get_chat_history.py +0 -0
  55. {funpaybotengine-0.5.4 → funpaybotengine-0.6.0}/funpaybotengine/methods/get_chat_page.py +0 -0
  56. {funpaybotengine-0.5.4 → funpaybotengine-0.6.0}/funpaybotengine/methods/get_main_page.py +0 -0
  57. {funpaybotengine-0.5.4 → funpaybotengine-0.6.0}/funpaybotengine/methods/get_my_chips_page.py +0 -0
  58. {funpaybotengine-0.5.4 → funpaybotengine-0.6.0}/funpaybotengine/methods/get_my_offers_page.py +0 -0
  59. {funpaybotengine-0.5.4 → funpaybotengine-0.6.0}/funpaybotengine/methods/get_offer_fields.py +0 -0
  60. {funpaybotengine-0.5.4 → funpaybotengine-0.6.0}/funpaybotengine/methods/get_offer_page.py +0 -0
  61. {funpaybotengine-0.5.4 → funpaybotengine-0.6.0}/funpaybotengine/methods/get_order_page.py +0 -0
  62. {funpaybotengine-0.5.4 → funpaybotengine-0.6.0}/funpaybotengine/methods/get_profile_page.py +0 -0
  63. {funpaybotengine-0.5.4 → funpaybotengine-0.6.0}/funpaybotengine/methods/get_purchases.py +0 -0
  64. {funpaybotengine-0.5.4 → funpaybotengine-0.6.0}/funpaybotengine/methods/get_reviews.py +0 -0
  65. {funpaybotengine-0.5.4 → funpaybotengine-0.6.0}/funpaybotengine/methods/get_sales.py +0 -0
  66. {funpaybotengine-0.5.4 → funpaybotengine-0.6.0}/funpaybotengine/methods/get_settings_page.py +0 -0
  67. {funpaybotengine-0.5.4 → funpaybotengine-0.6.0}/funpaybotengine/methods/get_sras_info_page.py +0 -0
  68. {funpaybotengine-0.5.4 → funpaybotengine-0.6.0}/funpaybotengine/methods/get_subcategory_page.py +0 -0
  69. {funpaybotengine-0.5.4 → funpaybotengine-0.6.0}/funpaybotengine/methods/get_telegram_connect_url.py +0 -0
  70. {funpaybotengine-0.5.4 → funpaybotengine-0.6.0}/funpaybotengine/methods/get_transactions.py +0 -0
  71. {funpaybotengine-0.5.4 → funpaybotengine-0.6.0}/funpaybotengine/methods/get_transactions_page.py +0 -0
  72. {funpaybotengine-0.5.4 → funpaybotengine-0.6.0}/funpaybotengine/methods/logout.py +0 -0
  73. {funpaybotengine-0.5.4 → funpaybotengine-0.6.0}/funpaybotengine/methods/mute_chat.py +0 -0
  74. {funpaybotengine-0.5.4 → funpaybotengine-0.6.0}/funpaybotengine/methods/refund.py +0 -0
  75. {funpaybotengine-0.5.4 → funpaybotengine-0.6.0}/funpaybotengine/methods/review.py +0 -0
  76. {funpaybotengine-0.5.4 → funpaybotengine-0.6.0}/funpaybotengine/methods/runner_request.py +0 -0
  77. {funpaybotengine-0.5.4 → funpaybotengine-0.6.0}/funpaybotengine/methods/set_offers_hidden.py +0 -0
  78. {funpaybotengine-0.5.4 → funpaybotengine-0.6.0}/funpaybotengine/methods/update_notice_channel.py +0 -0
  79. {funpaybotengine-0.5.4 → funpaybotengine-0.6.0}/funpaybotengine/methods/upload_avatar.py +0 -0
  80. {funpaybotengine-0.5.4 → funpaybotengine-0.6.0}/funpaybotengine/methods/upload_image.py +0 -0
  81. {funpaybotengine-0.5.4 → funpaybotengine-0.6.0}/funpaybotengine/py.typed +0 -0
  82. {funpaybotengine-0.5.4 → funpaybotengine-0.6.0}/funpaybotengine/runner/__init__.py +0 -0
  83. {funpaybotengine-0.5.4 → funpaybotengine-0.6.0}/funpaybotengine/runner/config.py +0 -0
  84. {funpaybotengine-0.5.4 → funpaybotengine-0.6.0}/funpaybotengine/runner/event_collector.py +0 -0
  85. {funpaybotengine-0.5.4 → funpaybotengine-0.6.0}/funpaybotengine/runner/runner.py +0 -0
  86. {funpaybotengine-0.5.4 → funpaybotengine-0.6.0}/funpaybotengine/storage/__init__.py +0 -0
  87. {funpaybotengine-0.5.4 → funpaybotengine-0.6.0}/funpaybotengine/storage/base.py +0 -0
  88. {funpaybotengine-0.5.4 → funpaybotengine-0.6.0}/funpaybotengine/storage/inmemory.py +0 -0
  89. {funpaybotengine-0.5.4 → funpaybotengine-0.6.0}/funpaybotengine/storage/redis.py +0 -0
  90. {funpaybotengine-0.5.4 → funpaybotengine-0.6.0}/funpaybotengine/types/__init__.py +0 -0
  91. {funpaybotengine-0.5.4 → funpaybotengine-0.6.0}/funpaybotengine/types/base.py +0 -0
  92. {funpaybotengine-0.5.4 → funpaybotengine-0.6.0}/funpaybotengine/types/calc.py +0 -0
  93. {funpaybotengine-0.5.4 → funpaybotengine-0.6.0}/funpaybotengine/types/categories.py +0 -0
  94. {funpaybotengine-0.5.4 → funpaybotengine-0.6.0}/funpaybotengine/types/chat.py +0 -0
  95. {funpaybotengine-0.5.4 → funpaybotengine-0.6.0}/funpaybotengine/types/common_page_elements.py +0 -0
  96. {funpaybotengine-0.5.4 → funpaybotengine-0.6.0}/funpaybotengine/types/enums.py +0 -0
  97. {funpaybotengine-0.5.4 → funpaybotengine-0.6.0}/funpaybotengine/types/finances.py +0 -0
  98. {funpaybotengine-0.5.4 → funpaybotengine-0.6.0}/funpaybotengine/types/messages.py +0 -0
  99. {funpaybotengine-0.5.4 → funpaybotengine-0.6.0}/funpaybotengine/types/offers.py +0 -0
  100. {funpaybotengine-0.5.4 → funpaybotengine-0.6.0}/funpaybotengine/types/orders.py +0 -0
  101. {funpaybotengine-0.5.4 → funpaybotengine-0.6.0}/funpaybotengine/types/pages/__init__.py +0 -0
  102. {funpaybotengine-0.5.4 → funpaybotengine-0.6.0}/funpaybotengine/types/pages/base.py +0 -0
  103. {funpaybotengine-0.5.4 → funpaybotengine-0.6.0}/funpaybotengine/types/pages/chat_page.py +0 -0
  104. {funpaybotengine-0.5.4 → funpaybotengine-0.6.0}/funpaybotengine/types/pages/main_page.py +0 -0
  105. {funpaybotengine-0.5.4 → funpaybotengine-0.6.0}/funpaybotengine/types/pages/my_chips_page.py +0 -0
  106. {funpaybotengine-0.5.4 → funpaybotengine-0.6.0}/funpaybotengine/types/pages/my_offers_page.py +0 -0
  107. {funpaybotengine-0.5.4 → funpaybotengine-0.6.0}/funpaybotengine/types/pages/offer_page.py +0 -0
  108. {funpaybotengine-0.5.4 → funpaybotengine-0.6.0}/funpaybotengine/types/pages/order_page.py +0 -0
  109. {funpaybotengine-0.5.4 → funpaybotengine-0.6.0}/funpaybotengine/types/pages/profile_page.py +0 -0
  110. {funpaybotengine-0.5.4 → funpaybotengine-0.6.0}/funpaybotengine/types/pages/settings_page.py +0 -0
  111. {funpaybotengine-0.5.4 → funpaybotengine-0.6.0}/funpaybotengine/types/pages/sras_info_page.py +0 -0
  112. {funpaybotengine-0.5.4 → funpaybotengine-0.6.0}/funpaybotengine/types/pages/subcategory_page.py +0 -0
  113. {funpaybotengine-0.5.4 → funpaybotengine-0.6.0}/funpaybotengine/types/pages/transactions_page.py +0 -0
  114. {funpaybotengine-0.5.4 → funpaybotengine-0.6.0}/funpaybotengine/types/requests/__init__.py +0 -0
  115. {funpaybotengine-0.5.4 → funpaybotengine-0.6.0}/funpaybotengine/types/requests/runner.py +0 -0
  116. {funpaybotengine-0.5.4 → funpaybotengine-0.6.0}/funpaybotengine/types/reviews.py +0 -0
  117. {funpaybotengine-0.5.4 → funpaybotengine-0.6.0}/funpaybotengine/types/settings.py +0 -0
  118. {funpaybotengine-0.5.4 → funpaybotengine-0.6.0}/funpaybotengine/types/sras.py +0 -0
  119. {funpaybotengine-0.5.4 → funpaybotengine-0.6.0}/funpaybotengine/types/updates.py +0 -0
  120. {funpaybotengine-0.5.4 → funpaybotengine-0.6.0}/funpaybotengine/utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: funpaybotengine
3
- Version: 0.5.4
3
+ Version: 0.6.0
4
4
  Summary: Framework for creating FunPay bots.
5
5
  Project-URL: Telegram, https://t.me/funpay_hub
6
6
  Project-URL: Issues, https://github.com/funpayhub/funpaybotengine/issues
@@ -0,0 +1,34 @@
1
+ from __future__ import annotations
2
+
3
+ import asyncio
4
+
5
+ from funpaybotengine import Bot, Dispatcher
6
+ from funpaybotengine.types import Message
7
+
8
+
9
+ bot: Bot = Bot(golden_key='12345678901234567890123456789012') # Создаем экземляр бота
10
+ dp: Dispatcher = Dispatcher() # Создаем диспетчер - корневой роутер
11
+
12
+
13
+ # Регистрируем хэндлер на событие о новом сообщении
14
+ # Хэндлер отработает на абсолютно любое сообщение.
15
+ @dp.on_new_message()
16
+ async def print_message(message: Message) -> None:
17
+ print(f'Пришло новое сообщение от {message.sender_username}: ')
18
+ print(message.text or message.image_url)
19
+
20
+
21
+ # Регистрируем хэндлер на событие о новом сообщении
22
+ # Хэндлер сработает тольько в том случае, если текст сообщения == 'привет'
23
+ @dp.on_new_message(lambda message: message.text.lower() == 'привет')
24
+ async def echo(message: Message) -> None:
25
+ await message.reply('Пока')
26
+
27
+
28
+ async def main() -> None:
29
+ # Запускаем цикл получения новых событий.
30
+ await bot.listen_events(dp)
31
+
32
+
33
+ if __name__ == '__main__':
34
+ asyncio.run(main())
@@ -27,6 +27,7 @@ from funpaybotengine.types import (
27
27
  PrivateChatPreview,
28
28
  TransactionPreviewsBatch,
29
29
  CurrentlyViewingOfferInfo,
30
+ RaiseOffersResponse
30
31
  )
31
32
  from funpaybotengine.utils import (
32
33
  random_runner_tag,
@@ -143,6 +144,7 @@ class Bot:
143
144
  update_categories: bool = True,
144
145
  ) -> None:
145
146
  self._golden_key = golden_key
147
+ self._golden_seal: str | None = None
146
148
  self._csrf_token: str | None = None
147
149
  self._phpsessid: str | None = phpsessid
148
150
  self._logout_token: str | None = None
@@ -203,6 +205,10 @@ class Bot:
203
205
  """
204
206
  return self._golden_key
205
207
 
208
+ @property
209
+ def golden_seal(self) -> str | None:
210
+ return self._golden_seal
211
+
206
212
  @property
207
213
  def csrf_token(self) -> str:
208
214
  """
@@ -304,7 +310,7 @@ class Bot:
304
310
  async def mute_chat(self, chat_id: int, mute: bool) -> bool:
305
311
  return (await MuteChat(chat_id=chat_id, mute=mute).execute(self)).response_obj
306
312
 
307
- async def raise_offers(self, category_id: int, *subcategory_ids: int) -> bool:
313
+ async def raise_offers(self, category_id: int, *subcategory_ids: int) -> RaiseOffersResponse:
308
314
  if not subcategory_ids:
309
315
  category = await self.storage.get_category(category_id)
310
316
  if category is None:
@@ -901,6 +907,9 @@ class Bot:
901
907
  self._phpsessid = result.cookies['PHPSESSID']
902
908
  self._session_updated_at = int(time.time())
903
909
 
910
+ if 'golden_seal' in result.cookies and not skip_update:
911
+ self._golden_seal = result.cookies['golden_seal']
912
+
904
913
  return result
905
914
 
906
915
  async def update(self, change_locale: Language | None = None) -> Self:
@@ -918,6 +927,7 @@ class Bot:
918
927
 
919
928
  self._csrf_token = page_obj.app_data.csrf_token
920
929
  self._phpsessid = result.cookies.get('PHPSESSID')
930
+ self._golden_seal = result.cookies.get('golden_seal')
921
931
  self._logout_token = page_obj.header.logout_token
922
932
 
923
933
  if not self._locale or change_locale is not None:
@@ -89,6 +89,10 @@ class AioHttpSession(BaseSession):
89
89
  if bot.phpsessid and not skip_session_cookies:
90
90
  session.cookie_jar.update_cookies({'PHPSESSID': bot.phpsessid})
91
91
 
92
+ with suppress(BotNotInitializedError):
93
+ if bot.golden_seal and not skip_session_cookies:
94
+ session.cookie_jar.update_cookies({'golden_seal': bot.golden_seal})
95
+
92
96
  async def make_request(
93
97
  self,
94
98
  method: FunPayMethod[MethodReturnType],
@@ -4,25 +4,26 @@ from __future__ import annotations
4
4
  __all__ = ('RaiseOffers',)
5
5
 
6
6
  import json
7
- from typing import TYPE_CHECKING
7
+ from typing import TYPE_CHECKING, Any
8
8
  from collections.abc import Sequence
9
9
 
10
10
  from pydantic import Field
11
- from typing_extensions import Literal, Annotated
11
+ from typing_extensions import Annotated
12
12
 
13
- from funpaybotengine.exceptions import RaiseOffersError
14
13
  from funpaybotengine.types.enums import Language
15
14
  from funpaybotengine.methods.base import FunPayMethod
16
15
  from funpaybotengine.client.session.http_methods import HTTPMethod
16
+ from funpaybotengine.types.common import RaiseOffersResponse
17
17
 
18
18
 
19
19
  if TYPE_CHECKING:
20
20
  from funpaybotengine.client.session.base import RawResponse
21
21
 
22
22
 
23
- class RaiseOffers(FunPayMethod[Literal[True]]):
23
+ class RaiseOffers(FunPayMethod[RaiseOffersResponse]):
24
24
  category_id: int
25
25
  subcategory_ids: Annotated[Sequence[int], Field(min_length=1)]
26
+ __model_to_build__ = RaiseOffersResponse
26
27
 
27
28
  def __init__(
28
29
  self,
@@ -44,18 +45,6 @@ class RaiseOffers(FunPayMethod[Literal[True]]):
44
45
  subcategory_ids=subcategory_ids,
45
46
  )
46
47
 
47
- async def parse_result(self, response: RawResponse[bool]) -> Literal[True]:
48
+ async def parse_result(self, response: RawResponse[bool]) -> dict[str, Any]:
48
49
  data = json.loads(response.raw_response)
49
- error, url, msg = data.get('error'), data.get('url'), data.get('msg')
50
-
51
- if url or error:
52
- raise RaiseOffersError(response.raw_response, self.category_id, url or msg)
53
-
54
- return True
55
-
56
- async def transform_result(
57
- self,
58
- parsing_result: Literal[True],
59
- response: RawResponse[bool],
60
- ) -> Literal[True]:
61
- return True
50
+ return {'raw_source': response.raw_response} | data
@@ -35,6 +35,7 @@ class SaveOfferFields(FunPayMethod[bool], BaseModel):
35
35
  url=url,
36
36
  method=HTTPMethod.POST,
37
37
  data=offer_fields.fields_dict,
38
+ headers={'X-Requested-With': 'XMLHttpRequest'},
38
39
  parser_cls=OfferFieldsParser,
39
40
  locale=locale,
40
41
  offer_fields=offer_fields,
@@ -66,5 +67,3 @@ class SaveOfferFields(FunPayMethod[bool], BaseModel):
66
67
  fields_dict = {}
67
68
 
68
69
  raise InvalidOfferFieldsError(error_msg, fields_dict)
69
-
70
-
@@ -13,6 +13,7 @@ __all__ = (
13
13
  'PaymentOption',
14
14
  )
15
15
 
16
+ from datetime import datetime
16
17
 
17
18
  from pydantic import BaseModel
18
19
 
@@ -157,6 +158,17 @@ class RaiseOffersResponse(FunPayObject, BaseModel):
157
158
  msg: str
158
159
  """Status message."""
159
160
 
161
+ wait: int
162
+ """How long to wait until next raise is available (in seconds)."""
163
+
164
+ unlock_at: str
165
+ """String representation of the time when the next raise is available."""
166
+
167
+ @property
168
+ def unlock_at_datetime(self) -> datetime:
169
+ """Datetime object of the time when the next raise is available."""
170
+ return datetime.fromisoformat(self.unlock_at)
171
+
160
172
 
161
173
  class PaymentOption(FunPayObject):
162
174
  """Represents an offer payment option (typically from offer page)."""
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "funpaybotengine"
3
- version = "0.5.4"
3
+ version = "0.6.0"
4
4
  description = "Framework for creating FunPay bots."
5
5
  requires-python = ">=3.10"
6
6
  readme = "README.md"
@@ -1,20 +0,0 @@
1
- from funpaybotengine import Bot
2
-
3
- bot = Bot(golden_key='ldc86q3vuwdx30wi7koqsr9scpsejash', proxy='socks5://user148429:dgej93@45.39.104.142:19392')
4
-
5
-
6
- async def main():
7
- result = await bot.get_my_offers_page(2418)
8
- print(result.subcategory_id)
9
- print(result.category_id)
10
- for i in result.offers.values():
11
- print(i.id)
12
- print(i.title)
13
- print(i.price)
14
- print(i.auto_delivery)
15
- print(i.seller)
16
-
17
-
18
- if __name__ == '__main__':
19
- import asyncio
20
- asyncio.run(main())
File without changes