crxsnake 1.4.1__py3-none-any.whl → 1.4.3__py3-none-any.whl
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.
- crxsnake/__init__.py +21 -12
- crxsnake/cogs.py +1 -1
- crxsnake/files.py +27 -6
- crxsnake/tortoise.py +1 -1
- crxsnake/utils/hotline.py +44 -97
- {crxsnake-1.4.1.dist-info → crxsnake-1.4.3.dist-info}/METADATA +10 -2
- crxsnake-1.4.3.dist-info/RECORD +15 -0
- {crxsnake-1.4.1.dist-info → crxsnake-1.4.3.dist-info}/WHEEL +1 -1
- crxsnake/utils/crx.py +0 -15
- crxsnake-1.4.1.dist-info/RECORD +0 -16
- {crxsnake-1.4.1.dist-info → crxsnake-1.4.3.dist-info}/LICENSE +0 -0
- {crxsnake-1.4.1.dist-info → crxsnake-1.4.3.dist-info}/top_level.txt +0 -0
crxsnake/__init__.py
CHANGED
@@ -1,29 +1,38 @@
|
|
1
|
-
from .logger import log
|
2
|
-
from .cogs import load_cogs
|
3
|
-
from .files import read_json, write_json
|
4
1
|
from .tortoise import Database
|
5
2
|
from .embed import EmbedMessage
|
6
3
|
|
4
|
+
from .logger import log
|
5
|
+
from .cogs import load_cogs
|
6
|
+
|
7
|
+
from .files import *
|
8
|
+
|
7
9
|
from .utils.misc import *
|
8
|
-
from .utils.hotline import
|
9
|
-
from .utils.
|
10
|
-
|
10
|
+
from .utils.hotline import *
|
11
|
+
from .utils.convert import *
|
12
|
+
|
11
13
|
|
12
14
|
__all__ = [
|
13
15
|
"Database",
|
14
|
-
"IssueHotline",
|
15
|
-
"IssueCRX",
|
16
16
|
"EmbedMessage",
|
17
|
+
|
18
|
+
"log",
|
17
19
|
"load_cogs",
|
18
|
-
|
19
|
-
"write_json",
|
20
|
+
|
20
21
|
"steam_to_be_guid",
|
21
22
|
"steam_to_dayz_guid",
|
22
|
-
|
23
|
+
|
23
24
|
"trans",
|
24
25
|
"green",
|
25
26
|
"red",
|
26
27
|
"blue",
|
27
28
|
"yellow",
|
28
|
-
"purple"
|
29
|
+
"purple",
|
30
|
+
|
31
|
+
"restart",
|
32
|
+
"get_user_id",
|
33
|
+
|
34
|
+
"read_json",
|
35
|
+
"write_json",
|
36
|
+
"read_jsonc",
|
37
|
+
"IssueHotline"
|
29
38
|
]
|
crxsnake/cogs.py
CHANGED
crxsnake/files.py
CHANGED
@@ -1,19 +1,20 @@
|
|
1
|
+
import re
|
2
|
+
import aiofiles
|
3
|
+
|
1
4
|
from typing import Optional, Any
|
2
5
|
from json import loads, dumps
|
3
|
-
from aiofiles import open
|
4
6
|
|
5
7
|
|
6
8
|
async def read_json(path: str, *keys: str) -> Optional[Any]:
|
7
9
|
try:
|
8
|
-
async with open(path, "r", encoding="utf-8") as file:
|
10
|
+
async with aiofiles.open(path, "r", encoding="utf-8") as file:
|
9
11
|
file_content = await file.read()
|
10
12
|
file_data = loads(file_content)
|
11
13
|
|
12
14
|
for key in keys:
|
13
|
-
|
15
|
+
file_data = file_data.get(key)
|
16
|
+
if file_data is None:
|
14
17
|
return None
|
15
|
-
file_data = file_data[key]
|
16
|
-
|
17
18
|
return file_data
|
18
19
|
|
19
20
|
except Exception:
|
@@ -22,8 +23,28 @@ async def read_json(path: str, *keys: str) -> Optional[Any]:
|
|
22
23
|
|
23
24
|
async def write_json(path: str, data: Any) -> bool:
|
24
25
|
try:
|
25
|
-
async with open(path, "w", encoding="utf-8") as file:
|
26
|
+
async with aiofiles.open(path, "w", encoding="utf-8") as file:
|
26
27
|
await file.write(dumps(data, ensure_ascii=False, indent=2))
|
27
28
|
return True
|
28
29
|
except Exception:
|
29
30
|
raise
|
31
|
+
|
32
|
+
|
33
|
+
async def read_jsonc(path: str, *keys: str) -> Optional[Any]:
|
34
|
+
try:
|
35
|
+
regex = re.compile(r"(\".*?\"|\'.*?\')|(/\*.*?\*/|//[^\r\n]*)", re.MULTILINE | re.DOTALL)
|
36
|
+
|
37
|
+
def __re_sub(match):
|
38
|
+
return match.group(1) or ""
|
39
|
+
|
40
|
+
async with aiofiles.open(path, "r", encoding="utf-8") as file:
|
41
|
+
file_content = regex.sub(__re_sub, await file.read())
|
42
|
+
file_data = loads(file_content)
|
43
|
+
|
44
|
+
for key in keys:
|
45
|
+
file_data = file_data.get(key)
|
46
|
+
if file_data is None:
|
47
|
+
return None
|
48
|
+
return file_data
|
49
|
+
except Exception:
|
50
|
+
raise
|
crxsnake/tortoise.py
CHANGED
crxsnake/utils/hotline.py
CHANGED
@@ -1,24 +1,33 @@
|
|
1
1
|
from random import choices
|
2
|
+
from dataclasses import dataclass, field
|
2
3
|
from string import ascii_uppercase, ascii_letters, digits
|
3
|
-
from typing import List, Dict, Any,
|
4
|
+
from typing import List, Dict, Any, Generator
|
5
|
+
|
6
|
+
|
7
|
+
@dataclass
|
8
|
+
class CodeArray:
|
9
|
+
m_code: str
|
10
|
+
m_name: str
|
11
|
+
m_type: str
|
12
|
+
m_itemsArray: List[Dict[str, Any]] = field(default_factory=list)
|
13
|
+
m_teleport_position: str = ""
|
14
|
+
m_vehicles: Dict[str, Any] = field(default_factory=lambda: {"m_item": "", "m_attachments": [], "m_cargo": []})
|
15
|
+
m_give_zone_positions: List[Dict[str, Any]] = field(default_factory=list)
|
16
|
+
m_give_zone_positions_forbidden: List[Dict[str, Any]] = field(default_factory=list)
|
4
17
|
|
5
18
|
|
6
19
|
class IssueHotline:
|
7
20
|
MAX_STACK = 100
|
8
|
-
"""
|
9
|
-
Hotline issue class.
|
10
|
-
"""
|
11
|
-
async def __generate_code(self) -> str:
|
12
|
-
part1 = "".join(choices(ascii_uppercase, k=2))
|
13
|
-
part2 = "".join(choices(ascii_letters + digits, k=4))
|
14
|
-
part3 = "".join(choices(ascii_letters + digits, k=4))
|
15
|
-
return f"{part1}-{part2}-{part3}"
|
16
21
|
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
22
|
+
@staticmethod
|
23
|
+
def __generate_code() -> str:
|
24
|
+
return "-".join([
|
25
|
+
"".join(choices(ascii_uppercase, k=2)),
|
26
|
+
"".join(choices(ascii_letters + digits, k=4)),
|
27
|
+
"".join(choices(ascii_letters + digits, k=4))
|
28
|
+
])
|
21
29
|
|
30
|
+
def __generate_count(self, items_list: List[Dict[str, Any]]) -> Generator[Dict[str, Any], None, None]:
|
22
31
|
for item in items_list:
|
23
32
|
item_count = item.get("m_count", 0)
|
24
33
|
item_name = item.get("m_item", "")
|
@@ -30,89 +39,27 @@ class IssueHotline:
|
|
30
39
|
if remainder > 0:
|
31
40
|
yield {"m_item": item_name, "m_count": remainder}
|
32
41
|
|
33
|
-
async def create_items(
|
34
|
-
self
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
items_list example: [{"m_item": "item1", "m_count": 10}, {"m_item": "item2", "m_count": 20}]
|
42
|
-
"""
|
43
|
-
processed_items = [item async for item in self.__generate_count(items_list)]
|
44
|
-
return {
|
45
|
-
"m_CodeArray": [
|
46
|
-
{
|
47
|
-
"m_code": await self.__generate_code(),
|
48
|
-
"m_name": issue_name,
|
49
|
-
"m_type": "item",
|
50
|
-
"m_itemsArray": processed_items,
|
51
|
-
"m_teleport_position": "",
|
52
|
-
"m_vehicles": {
|
53
|
-
"m_item": "",
|
54
|
-
"m_attachments": [],
|
55
|
-
"m_cargo": []
|
56
|
-
},
|
57
|
-
"m_give_zone_positions": [],
|
58
|
-
"m_give_zone_positions_forbidden": [],
|
59
|
-
}
|
60
|
-
]
|
61
|
-
}
|
62
|
-
|
63
|
-
async def create_vehicle(
|
64
|
-
self,
|
65
|
-
issue_name: str,
|
66
|
-
items_dict: Dict[str, Any]
|
67
|
-
) -> Dict[str, Any]:
|
68
|
-
"""
|
69
|
-
Create a dictionary with generated code and vehicle data.
|
70
|
-
|
71
|
-
items_dict example: {"m_item": "class_name", "m_attachments": ["class_name"], "m_cargo": null}
|
72
|
-
"""
|
73
|
-
return {
|
74
|
-
"m_CodeArray": [
|
75
|
-
{
|
76
|
-
"m_code": await self.__generate_code(),
|
77
|
-
"m_name": issue_name,
|
78
|
-
"m_type": "vehicle",
|
79
|
-
"m_itemsArray": [],
|
80
|
-
"m_teleport_position": "",
|
81
|
-
"m_vehicles": items_dict,
|
82
|
-
"m_give_zone_position": "",
|
83
|
-
"m_give_zone_radius": 0,
|
84
|
-
"m_give_zone_positions": [],
|
85
|
-
"m_give_zone_positions_forbidden": [],
|
86
|
-
"m_fresh_spawn_delay": 0
|
87
|
-
}
|
88
|
-
]
|
89
|
-
}
|
42
|
+
async def create_items(self, issue_name: str, items_list: List[Dict[str, Any]]) -> Dict[str, Any]:
|
43
|
+
processed_items = [item for item in self.__generate_count(items_list)]
|
44
|
+
return {"m_CodeArray": [CodeArray(
|
45
|
+
m_code=self.__generate_code(),
|
46
|
+
m_name=issue_name,
|
47
|
+
m_type="item",
|
48
|
+
m_itemsArray=processed_items
|
49
|
+
).__dict__]}
|
90
50
|
|
91
|
-
async def
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
51
|
+
async def create_vehicle(self, issue_name: str, items_dict: Dict[str, Any]) -> Dict[str, Any]:
|
52
|
+
return {"m_CodeArray": [CodeArray(
|
53
|
+
m_code=self.__generate_code(),
|
54
|
+
m_name=issue_name,
|
55
|
+
m_type="vehicle",
|
56
|
+
m_vehicles=items_dict
|
57
|
+
).__dict__]}
|
98
58
|
|
99
|
-
|
100
|
-
""
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
"m_type": "teleport",
|
107
|
-
"m_itemsArray": [],
|
108
|
-
"m_teleport_position": teleport_position,
|
109
|
-
"m_vehicles": {
|
110
|
-
"m_item": "",
|
111
|
-
"m_attachments": []
|
112
|
-
},
|
113
|
-
"m_give_zone_position": "",
|
114
|
-
"m_give_zone_radius": 0,
|
115
|
-
"m_fresh_spawn_delay": 0
|
116
|
-
}
|
117
|
-
]
|
118
|
-
}
|
59
|
+
async def create_teleport(self, issue_name: str, teleport_position: str) -> Dict[str, Any]:
|
60
|
+
return {"m_CodeArray": [CodeArray(
|
61
|
+
m_code=self.__generate_code(),
|
62
|
+
m_name=issue_name,
|
63
|
+
m_type="teleport",
|
64
|
+
m_teleport_position=teleport_position
|
65
|
+
).__dict__]}
|
@@ -1,6 +1,6 @@
|
|
1
|
-
Metadata-Version: 2.
|
1
|
+
Metadata-Version: 2.2
|
2
2
|
Name: crxsnake
|
3
|
-
Version: 1.4.
|
3
|
+
Version: 1.4.3
|
4
4
|
Home-page: https://discord.gg/EEp67FWQDP
|
5
5
|
Author: CRX-DEV
|
6
6
|
Author-email: cherniq66@gmail.com
|
@@ -14,6 +14,14 @@ Requires-Dist: tortoise-orm==0.24.0
|
|
14
14
|
Requires-Dist: disnake==2.10.1
|
15
15
|
Requires-Dist: aiofiles==23.2.1
|
16
16
|
Requires-Dist: loguru==0.7.2
|
17
|
+
Dynamic: author
|
18
|
+
Dynamic: author-email
|
19
|
+
Dynamic: description
|
20
|
+
Dynamic: description-content-type
|
21
|
+
Dynamic: home-page
|
22
|
+
Dynamic: license
|
23
|
+
Dynamic: project-url
|
24
|
+
Dynamic: requires-dist
|
17
25
|
|
18
26
|
# CRX-Snake
|
19
27
|
|
@@ -0,0 +1,15 @@
|
|
1
|
+
crxsnake/__init__.py,sha256=OwFoVxu6edgyalD7LPIGHBWdrF0_TJ80nSgPniMDtck,579
|
2
|
+
crxsnake/cogs.py,sha256=E0BF6SBvF4K7KlfpwZ6j6mpIcJYX3H2neaHiLYPK2fI,633
|
3
|
+
crxsnake/embed.py,sha256=NnOqgTJ38BokdeduSVJ4M2nxNl45t7bm0ciJNrUbcI8,2709
|
4
|
+
crxsnake/files.py,sha256=oV8xNSETRLlE_UR5sd0-zaANQLBR9hZ0GlAXDgPn5Sc,1486
|
5
|
+
crxsnake/logger.py,sha256=yv1298VWx0TwoBE2X9wJq1WOsGTRwDfdJ-BLds0Jnew,778
|
6
|
+
crxsnake/tortoise.py,sha256=xRu6ns5a9xyduS8lglps4iKh0Gurkib9WnIDD1k5jZM,637
|
7
|
+
crxsnake/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
8
|
+
crxsnake/utils/convert.py,sha256=lfS4fhePDdNJ4LS0PqT523bs34auIA5114NfZi4aaeE,542
|
9
|
+
crxsnake/utils/hotline.py,sha256=l82Pf6slP4NH_rhXzo7iWjhfN4zXihoOrFxDrbqMh8U,2524
|
10
|
+
crxsnake/utils/misc.py,sha256=eV6WBod5yMpWVH4PaCG4vNIWN9xhoeO-b6z3mRNPe0Q,434
|
11
|
+
crxsnake-1.4.3.dist-info/LICENSE,sha256=xt4Ru6tOCU8e2wVlx_lgx7wh-sNLKbiCbmANzr2e3cc,1085
|
12
|
+
crxsnake-1.4.3.dist-info/METADATA,sha256=VoMS37HEcXyf1jxbPBYfhEes_ENfBEe54eubfTEmGqw,1635
|
13
|
+
crxsnake-1.4.3.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
|
14
|
+
crxsnake-1.4.3.dist-info/top_level.txt,sha256=GOgG6tMH05czsfM6y-Tvm9LUSd-0PPuuuYkkkbWHZjQ,9
|
15
|
+
crxsnake-1.4.3.dist-info/RECORD,,
|
crxsnake/utils/crx.py
DELETED
@@ -1,15 +0,0 @@
|
|
1
|
-
from typing import List, Dict, Any
|
2
|
-
|
3
|
-
|
4
|
-
class IssueCRX:
|
5
|
-
|
6
|
-
|
7
|
-
async def create_items(
|
8
|
-
self, issue_type: str, items_list: List[Dict[str, Any]]
|
9
|
-
) -> Dict[str, List[Dict[str, Any]]]:
|
10
|
-
"""
|
11
|
-
Create a dictionary with generated codes and processed items.
|
12
|
-
"""
|
13
|
-
issue_dict = {"items": [], "cars": [], "sets": []}
|
14
|
-
issue_dict[issue_type].extend(items_list)
|
15
|
-
return issue_dict
|
crxsnake-1.4.1.dist-info/RECORD
DELETED
@@ -1,16 +0,0 @@
|
|
1
|
-
crxsnake/__init__.py,sha256=arrwu6wGSLKjgpaNdP3qK68XqSkmZiw-ZWMzfBgqjvo,624
|
2
|
-
crxsnake/cogs.py,sha256=tzw-YCm1hCp2qMFub-0byR4L2Qm7kB4asVrdFU41ZQw,632
|
3
|
-
crxsnake/embed.py,sha256=NnOqgTJ38BokdeduSVJ4M2nxNl45t7bm0ciJNrUbcI8,2709
|
4
|
-
crxsnake/files.py,sha256=qBn8azQq_RMUZI2y0IK6lEXi8qQHWB-9HlgB-Z_gjRc,811
|
5
|
-
crxsnake/logger.py,sha256=yv1298VWx0TwoBE2X9wJq1WOsGTRwDfdJ-BLds0Jnew,778
|
6
|
-
crxsnake/tortoise.py,sha256=VBQC5tAms-EKnCmGVg7WwkbFBQcYwMS_zUPPvnzOQJc,636
|
7
|
-
crxsnake/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
8
|
-
crxsnake/utils/convert.py,sha256=lfS4fhePDdNJ4LS0PqT523bs34auIA5114NfZi4aaeE,542
|
9
|
-
crxsnake/utils/crx.py,sha256=iBZzz71u-TSWynynSLLfWqcr2CX_Zba4DbPwFmYd7iM,437
|
10
|
-
crxsnake/utils/hotline.py,sha256=DEs70kjdG0MLXTQF2c2Bj2QzfFhCwpp7BM3xKlXmMw0,4042
|
11
|
-
crxsnake/utils/misc.py,sha256=eV6WBod5yMpWVH4PaCG4vNIWN9xhoeO-b6z3mRNPe0Q,434
|
12
|
-
crxsnake-1.4.1.dist-info/LICENSE,sha256=xt4Ru6tOCU8e2wVlx_lgx7wh-sNLKbiCbmANzr2e3cc,1085
|
13
|
-
crxsnake-1.4.1.dist-info/METADATA,sha256=eiLLmS1AqkVn0EhDph986yLMvrPTY8RaSicG4KDZ9CU,1454
|
14
|
-
crxsnake-1.4.1.dist-info/WHEEL,sha256=HiCZjzuy6Dw0hdX5R3LCFPDmFS4BWl8H-8W39XfmgX4,91
|
15
|
-
crxsnake-1.4.1.dist-info/top_level.txt,sha256=GOgG6tMH05czsfM6y-Tvm9LUSd-0PPuuuYkkkbWHZjQ,9
|
16
|
-
crxsnake-1.4.1.dist-info/RECORD,,
|
File without changes
|
File without changes
|