funpaybotengine 0.5.2__tar.gz → 0.5.4__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.
- {funpaybotengine-0.5.2 → funpaybotengine-0.5.4}/PKG-INFO +2 -2
- {funpaybotengine-0.5.2 → funpaybotengine-0.5.4}/funpaybotengine/client/bot.py +8 -0
- {funpaybotengine-0.5.2 → funpaybotengine-0.5.4}/funpaybotengine/dispatching/filters/order_filters.py +2 -1
- {funpaybotengine-0.5.2 → funpaybotengine-0.5.4}/funpaybotengine/exceptions/action_exceptions.py +20 -2
- funpaybotengine-0.5.4/funpaybotengine/exceptions/method_exceptions.py +20 -0
- {funpaybotengine-0.5.2 → funpaybotengine-0.5.4}/funpaybotengine/methods/__init__.py +1 -0
- {funpaybotengine-0.5.2 → funpaybotengine-0.5.4}/funpaybotengine/methods/get_sales.py +1 -0
- funpaybotengine-0.5.4/funpaybotengine/methods/get_sras_info_page.py +29 -0
- {funpaybotengine-0.5.2 → funpaybotengine-0.5.4}/funpaybotengine/methods/raise_offers.py +2 -24
- {funpaybotengine-0.5.2 → funpaybotengine-0.5.4}/funpaybotengine/methods/save_offer_fields.py +29 -4
- {funpaybotengine-0.5.2 → funpaybotengine-0.5.4}/funpaybotengine/types/__init__.py +1 -0
- {funpaybotengine-0.5.2 → funpaybotengine-0.5.4}/funpaybotengine/types/base.py +0 -1
- {funpaybotengine-0.5.2 → funpaybotengine-0.5.4}/funpaybotengine/types/orders.py +2 -2
- {funpaybotengine-0.5.2 → funpaybotengine-0.5.4}/funpaybotengine/types/pages/__init__.py +1 -0
- funpaybotengine-0.5.4/funpaybotengine/types/pages/sras_info_page.py +16 -0
- funpaybotengine-0.5.4/funpaybotengine/types/sras.py +21 -0
- {funpaybotengine-0.5.2 → funpaybotengine-0.5.4}/pyproject.toml +2 -2
- funpaybotengine-0.5.4/temp.py +20 -0
- funpaybotengine-0.5.2/examples/temp.py +0 -34
- funpaybotengine-0.5.2/temp.json +0 -0
- funpaybotengine-0.5.2/temp.py +0 -19
- {funpaybotengine-0.5.2 → funpaybotengine-0.5.4}/.github/CODEOWNERS +0 -0
- {funpaybotengine-0.5.2 → funpaybotengine-0.5.4}/.gitignore +0 -0
- {funpaybotengine-0.5.2 → funpaybotengine-0.5.4}/.pre-commit-config.yaml +0 -0
- {funpaybotengine-0.5.2 → funpaybotengine-0.5.4}/LICENSE +0 -0
- {funpaybotengine-0.5.2 → funpaybotengine-0.5.4}/Makefile +0 -0
- {funpaybotengine-0.5.2 → funpaybotengine-0.5.4}/README.md +0 -0
- {funpaybotengine-0.5.2 → funpaybotengine-0.5.4}/examples/basic.py +0 -0
- {funpaybotengine-0.5.2 → funpaybotengine-0.5.4}/examples/with_redis_storage.py +0 -0
- {funpaybotengine-0.5.2 → funpaybotengine-0.5.4}/funpaybotengine/__init__.py +0 -0
- {funpaybotengine-0.5.2 → funpaybotengine-0.5.4}/funpaybotengine/base.py +0 -0
- {funpaybotengine-0.5.2 → funpaybotengine-0.5.4}/funpaybotengine/client/__init__.py +0 -0
- {funpaybotengine-0.5.2 → funpaybotengine-0.5.4}/funpaybotengine/client/default_hooks.py +0 -0
- {funpaybotengine-0.5.2 → funpaybotengine-0.5.4}/funpaybotengine/client/session/__init__.py +0 -0
- {funpaybotengine-0.5.2 → funpaybotengine-0.5.4}/funpaybotengine/client/session/aiohttp_session.py +0 -0
- {funpaybotengine-0.5.2 → funpaybotengine-0.5.4}/funpaybotengine/client/session/base.py +0 -0
- {funpaybotengine-0.5.2 → funpaybotengine-0.5.4}/funpaybotengine/client/session/http_methods.py +0 -0
- {funpaybotengine-0.5.2 → funpaybotengine-0.5.4}/funpaybotengine/dispatching/__init__.py +0 -0
- {funpaybotengine-0.5.2 → funpaybotengine-0.5.4}/funpaybotengine/dispatching/events/__init__.py +0 -0
- {funpaybotengine-0.5.2 → funpaybotengine-0.5.4}/funpaybotengine/dispatching/events/base.py +0 -0
- {funpaybotengine-0.5.2 → funpaybotengine-0.5.4}/funpaybotengine/dispatching/events/builtin_events.py +0 -0
- {funpaybotengine-0.5.2 → funpaybotengine-0.5.4}/funpaybotengine/dispatching/filters/__init__.py +0 -0
- {funpaybotengine-0.5.2 → funpaybotengine-0.5.4}/funpaybotengine/dispatching/filters/base.py +0 -0
- {funpaybotengine-0.5.2 → funpaybotengine-0.5.4}/funpaybotengine/dispatching/filters/message_filters.py +0 -0
- {funpaybotengine-0.5.2 → funpaybotengine-0.5.4}/funpaybotengine/dispatching/handlers/__init__.py +0 -0
- {funpaybotengine-0.5.2 → funpaybotengine-0.5.4}/funpaybotengine/dispatching/handlers/handler_manager.py +0 -0
- {funpaybotengine-0.5.2 → funpaybotengine-0.5.4}/funpaybotengine/dispatching/routers/__init__.py +0 -0
- {funpaybotengine-0.5.2 → funpaybotengine-0.5.4}/funpaybotengine/dispatching/routers/base.py +0 -0
- {funpaybotengine-0.5.2 → funpaybotengine-0.5.4}/funpaybotengine/dispatching/routers/dispatcher.py +0 -0
- {funpaybotengine-0.5.2 → funpaybotengine-0.5.4}/funpaybotengine/exceptions/__init__.py +0 -0
- {funpaybotengine-0.5.2 → funpaybotengine-0.5.4}/funpaybotengine/exceptions/base.py +0 -0
- {funpaybotengine-0.5.2 → funpaybotengine-0.5.4}/funpaybotengine/exceptions/bot_exceptions.py +0 -0
- {funpaybotengine-0.5.2 → funpaybotengine-0.5.4}/funpaybotengine/exceptions/message_check_errors.py +0 -0
- {funpaybotengine-0.5.2 → funpaybotengine-0.5.4}/funpaybotengine/exceptions/runner_exceptions.py +0 -0
- {funpaybotengine-0.5.2 → funpaybotengine-0.5.4}/funpaybotengine/exceptions/session_exceptions.py +0 -0
- {funpaybotengine-0.5.2 → funpaybotengine-0.5.4}/funpaybotengine/loggers.py +0 -0
- {funpaybotengine-0.5.2 → funpaybotengine-0.5.4}/funpaybotengine/methods/base.py +0 -0
- {funpaybotengine-0.5.2 → funpaybotengine-0.5.4}/funpaybotengine/methods/calc_chips.py +0 -0
- {funpaybotengine-0.5.2 → funpaybotengine-0.5.4}/funpaybotengine/methods/calc_lots.py +0 -0
- {funpaybotengine-0.5.2 → funpaybotengine-0.5.4}/funpaybotengine/methods/check_banned.py +0 -0
- {funpaybotengine-0.5.2 → funpaybotengine-0.5.4}/funpaybotengine/methods/delete_review.py +0 -0
- {funpaybotengine-0.5.2 → funpaybotengine-0.5.4}/funpaybotengine/methods/get_2fa_status.py +0 -0
- {funpaybotengine-0.5.2 → funpaybotengine-0.5.4}/funpaybotengine/methods/get_chat_history.py +0 -0
- {funpaybotengine-0.5.2 → funpaybotengine-0.5.4}/funpaybotengine/methods/get_chat_page.py +0 -0
- {funpaybotengine-0.5.2 → funpaybotengine-0.5.4}/funpaybotengine/methods/get_main_page.py +0 -0
- {funpaybotengine-0.5.2 → funpaybotengine-0.5.4}/funpaybotengine/methods/get_my_chips_page.py +0 -0
- {funpaybotengine-0.5.2 → funpaybotengine-0.5.4}/funpaybotengine/methods/get_my_offers_page.py +0 -0
- {funpaybotengine-0.5.2 → funpaybotengine-0.5.4}/funpaybotengine/methods/get_offer_fields.py +0 -0
- {funpaybotengine-0.5.2 → funpaybotengine-0.5.4}/funpaybotengine/methods/get_offer_page.py +0 -0
- {funpaybotengine-0.5.2 → funpaybotengine-0.5.4}/funpaybotengine/methods/get_order_page.py +0 -0
- {funpaybotengine-0.5.2 → funpaybotengine-0.5.4}/funpaybotengine/methods/get_profile_page.py +0 -0
- {funpaybotengine-0.5.2 → funpaybotengine-0.5.4}/funpaybotengine/methods/get_purchases.py +0 -0
- {funpaybotengine-0.5.2 → funpaybotengine-0.5.4}/funpaybotengine/methods/get_reviews.py +0 -0
- {funpaybotengine-0.5.2 → funpaybotengine-0.5.4}/funpaybotengine/methods/get_settings_page.py +0 -0
- {funpaybotengine-0.5.2 → funpaybotengine-0.5.4}/funpaybotengine/methods/get_subcategory_page.py +0 -0
- {funpaybotengine-0.5.2 → funpaybotengine-0.5.4}/funpaybotengine/methods/get_telegram_connect_url.py +0 -0
- {funpaybotengine-0.5.2 → funpaybotengine-0.5.4}/funpaybotengine/methods/get_transactions.py +0 -0
- {funpaybotengine-0.5.2 → funpaybotengine-0.5.4}/funpaybotengine/methods/get_transactions_page.py +0 -0
- {funpaybotengine-0.5.2 → funpaybotengine-0.5.4}/funpaybotengine/methods/logout.py +0 -0
- {funpaybotengine-0.5.2 → funpaybotengine-0.5.4}/funpaybotengine/methods/mute_chat.py +0 -0
- {funpaybotengine-0.5.2 → funpaybotengine-0.5.4}/funpaybotengine/methods/refund.py +0 -0
- {funpaybotengine-0.5.2 → funpaybotengine-0.5.4}/funpaybotengine/methods/review.py +0 -0
- {funpaybotengine-0.5.2 → funpaybotengine-0.5.4}/funpaybotengine/methods/runner_request.py +0 -0
- {funpaybotengine-0.5.2 → funpaybotengine-0.5.4}/funpaybotengine/methods/set_offers_hidden.py +0 -0
- {funpaybotengine-0.5.2 → funpaybotengine-0.5.4}/funpaybotengine/methods/update_notice_channel.py +0 -0
- {funpaybotengine-0.5.2 → funpaybotengine-0.5.4}/funpaybotengine/methods/upload_avatar.py +0 -0
- {funpaybotengine-0.5.2 → funpaybotengine-0.5.4}/funpaybotengine/methods/upload_image.py +0 -0
- {funpaybotengine-0.5.2 → funpaybotengine-0.5.4}/funpaybotengine/py.typed +0 -0
- {funpaybotengine-0.5.2 → funpaybotengine-0.5.4}/funpaybotengine/runner/__init__.py +0 -0
- {funpaybotengine-0.5.2 → funpaybotengine-0.5.4}/funpaybotengine/runner/config.py +0 -0
- {funpaybotengine-0.5.2 → funpaybotengine-0.5.4}/funpaybotengine/runner/event_collector.py +0 -0
- {funpaybotengine-0.5.2 → funpaybotengine-0.5.4}/funpaybotengine/runner/runner.py +0 -0
- {funpaybotengine-0.5.2 → funpaybotengine-0.5.4}/funpaybotengine/storage/__init__.py +0 -0
- {funpaybotengine-0.5.2 → funpaybotengine-0.5.4}/funpaybotengine/storage/base.py +0 -0
- {funpaybotengine-0.5.2 → funpaybotengine-0.5.4}/funpaybotengine/storage/inmemory.py +0 -0
- {funpaybotengine-0.5.2 → funpaybotengine-0.5.4}/funpaybotengine/storage/redis.py +0 -0
- {funpaybotengine-0.5.2 → funpaybotengine-0.5.4}/funpaybotengine/types/calc.py +0 -0
- {funpaybotengine-0.5.2 → funpaybotengine-0.5.4}/funpaybotengine/types/categories.py +0 -0
- {funpaybotengine-0.5.2 → funpaybotengine-0.5.4}/funpaybotengine/types/chat.py +0 -0
- {funpaybotengine-0.5.2 → funpaybotengine-0.5.4}/funpaybotengine/types/common.py +0 -0
- {funpaybotengine-0.5.2 → funpaybotengine-0.5.4}/funpaybotengine/types/common_page_elements.py +0 -0
- {funpaybotengine-0.5.2 → funpaybotengine-0.5.4}/funpaybotengine/types/enums.py +0 -0
- {funpaybotengine-0.5.2 → funpaybotengine-0.5.4}/funpaybotengine/types/finances.py +0 -0
- {funpaybotengine-0.5.2 → funpaybotengine-0.5.4}/funpaybotengine/types/messages.py +0 -0
- {funpaybotengine-0.5.2 → funpaybotengine-0.5.4}/funpaybotengine/types/offers.py +0 -0
- {funpaybotengine-0.5.2 → funpaybotengine-0.5.4}/funpaybotengine/types/pages/base.py +0 -0
- {funpaybotengine-0.5.2 → funpaybotengine-0.5.4}/funpaybotengine/types/pages/chat_page.py +0 -0
- {funpaybotengine-0.5.2 → funpaybotengine-0.5.4}/funpaybotengine/types/pages/main_page.py +0 -0
- {funpaybotengine-0.5.2 → funpaybotengine-0.5.4}/funpaybotengine/types/pages/my_chips_page.py +0 -0
- {funpaybotengine-0.5.2 → funpaybotengine-0.5.4}/funpaybotengine/types/pages/my_offers_page.py +0 -0
- {funpaybotengine-0.5.2 → funpaybotengine-0.5.4}/funpaybotengine/types/pages/offer_page.py +0 -0
- {funpaybotengine-0.5.2 → funpaybotengine-0.5.4}/funpaybotengine/types/pages/order_page.py +0 -0
- {funpaybotengine-0.5.2 → funpaybotengine-0.5.4}/funpaybotengine/types/pages/profile_page.py +0 -0
- {funpaybotengine-0.5.2 → funpaybotengine-0.5.4}/funpaybotengine/types/pages/settings_page.py +0 -0
- {funpaybotengine-0.5.2 → funpaybotengine-0.5.4}/funpaybotengine/types/pages/subcategory_page.py +0 -0
- {funpaybotengine-0.5.2 → funpaybotengine-0.5.4}/funpaybotengine/types/pages/transactions_page.py +0 -0
- {funpaybotengine-0.5.2 → funpaybotengine-0.5.4}/funpaybotengine/types/requests/__init__.py +0 -0
- {funpaybotengine-0.5.2 → funpaybotengine-0.5.4}/funpaybotengine/types/requests/runner.py +0 -0
- {funpaybotengine-0.5.2 → funpaybotengine-0.5.4}/funpaybotengine/types/reviews.py +0 -0
- {funpaybotengine-0.5.2 → funpaybotengine-0.5.4}/funpaybotengine/types/settings.py +0 -0
- {funpaybotengine-0.5.2 → funpaybotengine-0.5.4}/funpaybotengine/types/updates.py +0 -0
- {funpaybotengine-0.5.2 → funpaybotengine-0.5.4}/funpaybotengine/utils.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: funpaybotengine
|
|
3
|
-
Version: 0.5.
|
|
3
|
+
Version: 0.5.4
|
|
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
|
|
@@ -21,7 +21,7 @@ Requires-Python: >=3.10
|
|
|
21
21
|
Requires-Dist: aiohttp-socks>=0.11.0
|
|
22
22
|
Requires-Dist: aiohttp<3.14,>=3.13.3
|
|
23
23
|
Requires-Dist: eventry<1.0.0,>=0.3.6
|
|
24
|
-
Requires-Dist: funpayparsers<0.
|
|
24
|
+
Requires-Dist: funpayparsers<0.8.0,>=0.7.0
|
|
25
25
|
Requires-Dist: pydantic<2.13,>=2.12
|
|
26
26
|
Provides-Extra: dev
|
|
27
27
|
Requires-Dist: mypy>=1.10.1; extra == 'dev'
|
|
@@ -61,6 +61,7 @@ from funpaybotengine.methods import (
|
|
|
61
61
|
GetProfilePage,
|
|
62
62
|
GetSettingPage,
|
|
63
63
|
GetMyOffersPage,
|
|
64
|
+
GetSrasInfoPage,
|
|
64
65
|
GetTransactions,
|
|
65
66
|
SaveOfferFields,
|
|
66
67
|
SetOffersHidden,
|
|
@@ -86,6 +87,7 @@ from funpaybotengine.types.pages import (
|
|
|
86
87
|
ProfilePage,
|
|
87
88
|
MyOffersPage,
|
|
88
89
|
SettingsPage,
|
|
90
|
+
SrasInfoPage,
|
|
89
91
|
SubcategoryPage,
|
|
90
92
|
TransactionsPage,
|
|
91
93
|
)
|
|
@@ -837,6 +839,12 @@ class Bot:
|
|
|
837
839
|
async def get_order_page(self, order_id: str) -> OrderPage:
|
|
838
840
|
return (await GetOrderPage(order_id=order_id).execute(self)).response_obj
|
|
839
841
|
|
|
842
|
+
async def get_sras_info_page(self) -> SrasInfoPage:
|
|
843
|
+
"""
|
|
844
|
+
Retrieves the SRAS info page with seller rating restrictions per subcategory.
|
|
845
|
+
"""
|
|
846
|
+
return (await GetSrasInfoPage().execute(self)).response_obj
|
|
847
|
+
|
|
840
848
|
async def get_settings_page(self) -> SettingsPage:
|
|
841
849
|
return (await GetSettingPage().execute(self)).response_obj
|
|
842
850
|
|
{funpaybotengine-0.5.2 → funpaybotengine-0.5.4}/funpaybotengine/dispatching/filters/order_filters.py
RENAMED
|
@@ -7,13 +7,14 @@ __all__ = ('FinalOrderStatusFilter',)
|
|
|
7
7
|
from typing import TYPE_CHECKING, Any
|
|
8
8
|
|
|
9
9
|
from funpaybotengine.types.enums import MessageType, OrderStatus
|
|
10
|
+
from funpaybotengine.dispatching.events.builtin_events import NewMessageEvent
|
|
10
11
|
|
|
11
12
|
from .base import Filter
|
|
12
13
|
|
|
13
14
|
|
|
14
15
|
if TYPE_CHECKING:
|
|
15
16
|
from funpaybotengine.dispatching.events.base import Event
|
|
16
|
-
from funpaybotengine.dispatching.events.builtin_events import OrderEvent
|
|
17
|
+
from funpaybotengine.dispatching.events.builtin_events import OrderEvent
|
|
17
18
|
|
|
18
19
|
|
|
19
20
|
_message_type_to_order_status_mapping = {
|
{funpaybotengine-0.5.2 → funpaybotengine-0.5.4}/funpaybotengine/exceptions/action_exceptions.py
RENAMED
|
@@ -2,6 +2,8 @@ from __future__ import annotations
|
|
|
2
2
|
|
|
3
3
|
|
|
4
4
|
__all__ = ['RefundError', 'RaiseOffersError']
|
|
5
|
+
import re
|
|
6
|
+
|
|
5
7
|
from .base import FunPayBotEngineError
|
|
6
8
|
|
|
7
9
|
|
|
@@ -21,10 +23,26 @@ class RaiseOffersError(FunPayBotEngineError):
|
|
|
21
23
|
response: str,
|
|
22
24
|
category_id: int,
|
|
23
25
|
message: str | None,
|
|
24
|
-
wait_time: int | None,
|
|
25
26
|
) -> None:
|
|
26
27
|
super().__init__()
|
|
27
28
|
self.raw_response = response
|
|
28
29
|
self.category_id = category_id
|
|
29
30
|
self.message = message
|
|
30
|
-
|
|
31
|
+
|
|
32
|
+
@staticmethod
|
|
33
|
+
def parse_wait_time(response: str) -> int:
|
|
34
|
+
x = re.search(r'(\d+)\s+', response)
|
|
35
|
+
time = int(x.group(1)) if x else 0
|
|
36
|
+
|
|
37
|
+
if 'секунд' in response or 'second' in response:
|
|
38
|
+
return time or 2
|
|
39
|
+
if 'минут' in response or 'хвилин' in response or 'minute' in response:
|
|
40
|
+
return (time or 1) * 60
|
|
41
|
+
if 'час' in response or 'годин' in response or 'hour' in response:
|
|
42
|
+
return (time or 1) * 3600
|
|
43
|
+
|
|
44
|
+
return 10
|
|
45
|
+
|
|
46
|
+
@property
|
|
47
|
+
def wait_time(self) -> int:
|
|
48
|
+
return self.parse_wait_time(self.message or '')
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
__all__ = [
|
|
2
|
+
'MethodError',
|
|
3
|
+
'InvalidOfferFieldsError'
|
|
4
|
+
]
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
from .base import FunPayBotEngineError
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class MethodError(FunPayBotEngineError):
|
|
11
|
+
...
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class InvalidOfferFieldsError(MethodError):
|
|
15
|
+
def __init__(self, message: str, fields: dict[str, str] | None = None):
|
|
16
|
+
self.message = message
|
|
17
|
+
self.fields = fields
|
|
18
|
+
|
|
19
|
+
def __str__(self):
|
|
20
|
+
return self.message
|
|
@@ -28,6 +28,7 @@ from .get_my_chips_page import *
|
|
|
28
28
|
from .get_settings_page import *
|
|
29
29
|
from .save_offer_fields import *
|
|
30
30
|
from .set_offers_hidden import *
|
|
31
|
+
from .get_sras_info_page import *
|
|
31
32
|
from .get_my_offers_page import *
|
|
32
33
|
from .get_subcategory_page import *
|
|
33
34
|
from .get_transactions_page import *
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
__all__ = ('GetSrasInfoPage',)
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
from funpayparsers.parsers.page_parsers import SrasInfoPageParser
|
|
8
|
+
|
|
9
|
+
from funpaybotengine.types.pages import SrasInfoPage
|
|
10
|
+
from funpaybotengine.methods.base import FunPayMethod
|
|
11
|
+
from funpaybotengine.client.session.http_methods import HTTPMethod
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class GetSrasInfoPage(FunPayMethod[SrasInfoPage]):
|
|
15
|
+
"""
|
|
16
|
+
Get SRAS info page (``https://funpay.com/sras/info``).
|
|
17
|
+
|
|
18
|
+
Returns seller rating restrictions per subcategory.
|
|
19
|
+
Returns ``funpaybotengine.types.pages.SrasInfoPage``.
|
|
20
|
+
"""
|
|
21
|
+
|
|
22
|
+
__model_to_build__ = SrasInfoPage
|
|
23
|
+
|
|
24
|
+
def __init__(self) -> None:
|
|
25
|
+
super().__init__(
|
|
26
|
+
url='sras/info',
|
|
27
|
+
method=HTTPMethod.GET,
|
|
28
|
+
parser_cls=SrasInfoPageParser,
|
|
29
|
+
)
|
|
@@ -3,7 +3,6 @@ from __future__ import annotations
|
|
|
3
3
|
|
|
4
4
|
__all__ = ('RaiseOffers',)
|
|
5
5
|
|
|
6
|
-
import re
|
|
7
6
|
import json
|
|
8
7
|
from typing import TYPE_CHECKING
|
|
9
8
|
from collections.abc import Sequence
|
|
@@ -21,19 +20,6 @@ if TYPE_CHECKING:
|
|
|
21
20
|
from funpaybotengine.client.session.base import RawResponse
|
|
22
21
|
|
|
23
22
|
|
|
24
|
-
def parse_wait_time(response: str) -> int:
|
|
25
|
-
x = re.search(r'(\d+)', response)
|
|
26
|
-
time = int(x.group()) if x else 0
|
|
27
|
-
|
|
28
|
-
if 'секунд' in response or 'second' in response:
|
|
29
|
-
return time or 2
|
|
30
|
-
if 'минут' in response or 'хвилин' in response or 'minute' in response:
|
|
31
|
-
return (time - 1 if time else 1) * 60
|
|
32
|
-
if 'час' in response or 'годин' in response or 'hour' in response:
|
|
33
|
-
return int((time - 0.5 if time else 1) * 3600)
|
|
34
|
-
return 10
|
|
35
|
-
|
|
36
|
-
|
|
37
23
|
class RaiseOffers(FunPayMethod[Literal[True]]):
|
|
38
24
|
category_id: int
|
|
39
25
|
subcategory_ids: Annotated[Sequence[int], Field(min_length=1)]
|
|
@@ -62,17 +48,9 @@ class RaiseOffers(FunPayMethod[Literal[True]]):
|
|
|
62
48
|
data = json.loads(response.raw_response)
|
|
63
49
|
error, url, msg = data.get('error'), data.get('url'), data.get('msg')
|
|
64
50
|
|
|
65
|
-
if url:
|
|
66
|
-
raise RaiseOffersError(response.raw_response, self.category_id, url
|
|
51
|
+
if url or error:
|
|
52
|
+
raise RaiseOffersError(response.raw_response, self.category_id, url or msg)
|
|
67
53
|
|
|
68
|
-
if error:
|
|
69
|
-
if msg:
|
|
70
|
-
if any(_ in msg for _ in ('Подождите ', 'Please wait ', 'Зачекайте ')):
|
|
71
|
-
wait = parse_wait_time(msg)
|
|
72
|
-
else:
|
|
73
|
-
wait = None
|
|
74
|
-
raise RaiseOffersError(response.raw_response, self.category_id, msg, wait)
|
|
75
|
-
raise RaiseOffersError(response.raw_response, self.category_id, msg, None)
|
|
76
54
|
return True
|
|
77
55
|
|
|
78
56
|
async def transform_result(
|
{funpaybotengine-0.5.2 → funpaybotengine-0.5.4}/funpaybotengine/methods/save_offer_fields.py
RENAMED
|
@@ -9,9 +9,11 @@ from pydantic import BaseModel
|
|
|
9
9
|
from funpayparsers.types import Language
|
|
10
10
|
from funpayparsers.parsers import OfferFieldsParser
|
|
11
11
|
|
|
12
|
+
from funpaybotengine.exceptions.method_exceptions import InvalidOfferFieldsError
|
|
12
13
|
from funpaybotengine.methods.base import FunPayMethod
|
|
13
14
|
from funpaybotengine.types.offers import OfferFields
|
|
14
15
|
from funpaybotengine.client.session import HTTPMethod, RawResponse
|
|
16
|
+
import json
|
|
15
17
|
|
|
16
18
|
|
|
17
19
|
class SaveOfferFields(FunPayMethod[bool], BaseModel):
|
|
@@ -38,8 +40,31 @@ class SaveOfferFields(FunPayMethod[bool], BaseModel):
|
|
|
38
40
|
offer_fields=offer_fields,
|
|
39
41
|
)
|
|
40
42
|
|
|
41
|
-
async def parse_result(self, response: RawResponse[Any]) -> bool:
|
|
42
|
-
|
|
43
|
+
async def parse_result(self, response: RawResponse[Any]) -> bool | dict[str, Any]:
|
|
44
|
+
try:
|
|
45
|
+
return json.loads(response.raw_response)
|
|
46
|
+
except json.decoder.JSONDecodeError:
|
|
47
|
+
return True
|
|
48
|
+
|
|
49
|
+
async def transform_result(
|
|
50
|
+
self,
|
|
51
|
+
parsing_result: bool | dict[str, Any],
|
|
52
|
+
response: RawResponse[Any]
|
|
53
|
+
) -> bool:
|
|
54
|
+
if isinstance(parsing_result, bool):
|
|
55
|
+
return parsing_result
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
if not parsing_result.get('error'):
|
|
59
|
+
return True
|
|
60
|
+
|
|
61
|
+
error_msg = str(parsing_result.get('msg', '')) or str(parsing_result.get('error'))
|
|
62
|
+
fields: list[list[str, str]] = parsing_result.get('errors')
|
|
63
|
+
try:
|
|
64
|
+
fields_dict = {field: error for field, error in fields}
|
|
65
|
+
except Exception:
|
|
66
|
+
fields_dict = {}
|
|
67
|
+
|
|
68
|
+
raise InvalidOfferFieldsError(error_msg, fields_dict)
|
|
69
|
+
|
|
43
70
|
|
|
44
|
-
async def transform_result(self, parsing_result: Any, response: RawResponse[Any]) -> bool:
|
|
45
|
-
return True
|
|
@@ -22,9 +22,9 @@ class OrderPreview(FunPayObject, BaseModel):
|
|
|
22
22
|
if (
|
|
23
23
|
self.type is OrderPreviewType.UNKNOWN
|
|
24
24
|
and context
|
|
25
|
-
and context.get('order_preview_type')
|
|
25
|
+
and isinstance(context.get('order_preview_type'), OrderPreviewType)
|
|
26
26
|
):
|
|
27
|
-
self.
|
|
27
|
+
self.type = context['order_preview_type']
|
|
28
28
|
|
|
29
29
|
id: str
|
|
30
30
|
"""Order ID."""
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
__all__ = ('SrasInfoPage',)
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
from funpaybotengine.types.sras import SrasSectionRestriction
|
|
8
|
+
from funpaybotengine.types.enums import SubcategoryType
|
|
9
|
+
from funpaybotengine.types.pages.base import FunPayPage
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class SrasInfoPage(FunPayPage):
|
|
13
|
+
"""Represents the SRAS info page (``https://funpay.com/sras/info``)."""
|
|
14
|
+
|
|
15
|
+
restrictions: dict[SubcategoryType, dict[int, SrasSectionRestriction]]
|
|
16
|
+
"""Restrictions grouped by subcategory type and subcategory ID."""
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
__all__ = ('SrasSectionRestriction',)
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
from funpaybotengine.types.base import FunPayObject
|
|
8
|
+
from funpaybotengine.types.enums import SubcategoryType
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class SrasSectionRestriction(FunPayObject):
|
|
12
|
+
"""Represents a SRAS restriction for a specific subcategory."""
|
|
13
|
+
|
|
14
|
+
subcategory_id: int
|
|
15
|
+
"""Subcategory ID."""
|
|
16
|
+
|
|
17
|
+
subcategory_type: SubcategoryType
|
|
18
|
+
"""Subcategory type."""
|
|
19
|
+
|
|
20
|
+
max_rating: int
|
|
21
|
+
"""Maximum allowed seller rating to be listed in this subcategory."""
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "funpaybotengine"
|
|
3
|
-
version = "0.5.
|
|
3
|
+
version = "0.5.4"
|
|
4
4
|
description = "Framework for creating FunPay bots."
|
|
5
5
|
requires-python = ">=3.10"
|
|
6
6
|
readme = "README.md"
|
|
@@ -9,7 +9,7 @@ dependencies = [
|
|
|
9
9
|
"aiohttp>=3.13.3,<3.14",
|
|
10
10
|
"aiohttp-socks>=0.11.0",
|
|
11
11
|
"eventry>=0.3.6,<1.0.0",
|
|
12
|
-
"funpayparsers>=0.
|
|
12
|
+
"funpayparsers>=0.7.0,<0.8.0",
|
|
13
13
|
"pydantic>=2.12,<2.13",
|
|
14
14
|
]
|
|
15
15
|
authors = [
|
|
@@ -0,0 +1,20 @@
|
|
|
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())
|
|
@@ -1,34 +0,0 @@
|
|
|
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())
|
funpaybotengine-0.5.2/temp.json
DELETED
|
File without changes
|
funpaybotengine-0.5.2/temp.py
DELETED
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
from funpaybotengine import Bot
|
|
2
|
-
from funpaybotengine.methods.get_orders import GetOrders
|
|
3
|
-
import json
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
bot = Bot(golden_key='j9k09a1lnifuw3ngpdc9pphxuqe94bqy', proxy='socks5://user148429:dgej93@45.39.104.142:19392')
|
|
7
|
-
|
|
8
|
-
async def main():
|
|
9
|
-
await bot.update()
|
|
10
|
-
print(bot.username)
|
|
11
|
-
|
|
12
|
-
method = GetOrders(order_ids=['B72YEFH9'])
|
|
13
|
-
r = (await method.execute(bot)).response_obj
|
|
14
|
-
print(json.dumps(r, indent=4, ensure_ascii=False))
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
if __name__ == '__main__':
|
|
18
|
-
import asyncio
|
|
19
|
-
asyncio.run(main())
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{funpaybotengine-0.5.2 → funpaybotengine-0.5.4}/funpaybotengine/client/session/aiohttp_session.py
RENAMED
|
File without changes
|
|
File without changes
|
{funpaybotengine-0.5.2 → funpaybotengine-0.5.4}/funpaybotengine/client/session/http_methods.py
RENAMED
|
File without changes
|
|
File without changes
|
{funpaybotengine-0.5.2 → funpaybotengine-0.5.4}/funpaybotengine/dispatching/events/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{funpaybotengine-0.5.2 → funpaybotengine-0.5.4}/funpaybotengine/dispatching/events/builtin_events.py
RENAMED
|
File without changes
|
{funpaybotengine-0.5.2 → funpaybotengine-0.5.4}/funpaybotengine/dispatching/filters/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{funpaybotengine-0.5.2 → funpaybotengine-0.5.4}/funpaybotengine/dispatching/handlers/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{funpaybotengine-0.5.2 → funpaybotengine-0.5.4}/funpaybotengine/dispatching/routers/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{funpaybotengine-0.5.2 → funpaybotengine-0.5.4}/funpaybotengine/dispatching/routers/dispatcher.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{funpaybotengine-0.5.2 → funpaybotengine-0.5.4}/funpaybotengine/exceptions/bot_exceptions.py
RENAMED
|
File without changes
|
{funpaybotengine-0.5.2 → funpaybotengine-0.5.4}/funpaybotengine/exceptions/message_check_errors.py
RENAMED
|
File without changes
|
{funpaybotengine-0.5.2 → funpaybotengine-0.5.4}/funpaybotengine/exceptions/runner_exceptions.py
RENAMED
|
File without changes
|
{funpaybotengine-0.5.2 → funpaybotengine-0.5.4}/funpaybotengine/exceptions/session_exceptions.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{funpaybotengine-0.5.2 → funpaybotengine-0.5.4}/funpaybotengine/methods/get_my_chips_page.py
RENAMED
|
File without changes
|
{funpaybotengine-0.5.2 → funpaybotengine-0.5.4}/funpaybotengine/methods/get_my_offers_page.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{funpaybotengine-0.5.2 → funpaybotengine-0.5.4}/funpaybotengine/methods/get_settings_page.py
RENAMED
|
File without changes
|
{funpaybotengine-0.5.2 → funpaybotengine-0.5.4}/funpaybotengine/methods/get_subcategory_page.py
RENAMED
|
File without changes
|
{funpaybotengine-0.5.2 → funpaybotengine-0.5.4}/funpaybotengine/methods/get_telegram_connect_url.py
RENAMED
|
File without changes
|
|
File without changes
|
{funpaybotengine-0.5.2 → funpaybotengine-0.5.4}/funpaybotengine/methods/get_transactions_page.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{funpaybotengine-0.5.2 → funpaybotengine-0.5.4}/funpaybotengine/methods/set_offers_hidden.py
RENAMED
|
File without changes
|
{funpaybotengine-0.5.2 → funpaybotengine-0.5.4}/funpaybotengine/methods/update_notice_channel.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{funpaybotengine-0.5.2 → funpaybotengine-0.5.4}/funpaybotengine/types/common_page_elements.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{funpaybotengine-0.5.2 → funpaybotengine-0.5.4}/funpaybotengine/types/pages/my_chips_page.py
RENAMED
|
File without changes
|
{funpaybotengine-0.5.2 → funpaybotengine-0.5.4}/funpaybotengine/types/pages/my_offers_page.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{funpaybotengine-0.5.2 → funpaybotengine-0.5.4}/funpaybotengine/types/pages/settings_page.py
RENAMED
|
File without changes
|
{funpaybotengine-0.5.2 → funpaybotengine-0.5.4}/funpaybotengine/types/pages/subcategory_page.py
RENAMED
|
File without changes
|
{funpaybotengine-0.5.2 → funpaybotengine-0.5.4}/funpaybotengine/types/pages/transactions_page.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|