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 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 IssueHotline
9
- from .utils.crx import IssueCRX
10
- from .utils.convert import steam_to_be_guid, steam_to_dayz_guid
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
- "read_json",
19
- "write_json",
20
+
20
21
  "steam_to_be_guid",
21
22
  "steam_to_dayz_guid",
22
- "log",
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
@@ -1,6 +1,6 @@
1
1
  from sys import path
2
2
  from pathlib import Path
3
- from logger import log
3
+ from .logger import log
4
4
 
5
5
 
6
6
  async def load_cogs(bot, folder: str = "src", utils_folder: str = "utils") -> None:
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
- if key not in file_data:
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
@@ -1,4 +1,4 @@
1
- from logger import log
1
+ from .logger import log
2
2
  from tortoise import Tortoise
3
3
 
4
4
 
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, AsyncGenerator
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
- async def __generate_count(
18
- self,
19
- items_list: List[Dict[str, Any]]
20
- ) -> AsyncGenerator[Dict[str, Any], None]:
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
- issue_name: str,
36
- items_list: List[Dict[str, Any]]
37
- ) -> Dict[str, Any]:
38
- """
39
- Create a dictionary with generated codes and processed items.
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 create_teleport(
92
- self,
93
- issue_name: str,
94
- teleport_position: str
95
- ) -> Dict[str, Any]:
96
- """
97
- Create a dictionary with generated code and teleport data.
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
- teleport_position format: (x, y, z)
100
- """
101
- return {
102
- "m_CodeArray": [
103
- {
104
- "m_code": await self.__generate_code(),
105
- "m_name": issue_name,
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
1
+ Metadata-Version: 2.2
2
2
  Name: crxsnake
3
- Version: 1.4.1
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,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (72.2.0)
2
+ Generator: setuptools (75.8.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
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
@@ -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,,