absfuyu 4.1.1__py3-none-any.whl → 5.0.0__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.
Potentially problematic release.
This version of absfuyu might be problematic. Click here for more details.
- absfuyu/__init__.py +4 -4
- absfuyu/__main__.py +13 -1
- absfuyu/cli/__init__.py +4 -2
- absfuyu/cli/color.py +7 -0
- absfuyu/cli/do_group.py +9 -91
- absfuyu/cli/tool_group.py +136 -0
- absfuyu/config/__init__.py +17 -34
- absfuyu/core/__init__.py +49 -0
- absfuyu/core/baseclass.py +299 -0
- absfuyu/core/baseclass2.py +165 -0
- absfuyu/core/decorator.py +67 -0
- absfuyu/core/docstring.py +163 -0
- absfuyu/core/dummy_cli.py +67 -0
- absfuyu/core/dummy_func.py +47 -0
- absfuyu/dxt/__init__.py +42 -0
- absfuyu/dxt/dictext.py +201 -0
- absfuyu/dxt/dxt_support.py +79 -0
- absfuyu/dxt/intext.py +586 -0
- absfuyu/dxt/listext.py +508 -0
- absfuyu/dxt/strext.py +530 -0
- absfuyu/{extensions → extra}/__init__.py +3 -2
- absfuyu/extra/beautiful.py +251 -0
- absfuyu/{extensions/extra → extra}/data_analysis.py +51 -82
- absfuyu/fun/__init__.py +110 -135
- absfuyu/fun/tarot.py +9 -17
- absfuyu/game/__init__.py +6 -0
- absfuyu/game/game_stat.py +6 -0
- absfuyu/game/sudoku.py +7 -1
- absfuyu/game/tictactoe.py +12 -5
- absfuyu/game/wordle.py +14 -8
- absfuyu/general/__init__.py +6 -79
- absfuyu/general/content.py +22 -36
- absfuyu/general/generator.py +17 -42
- absfuyu/general/human.py +108 -228
- absfuyu/general/shape.py +1334 -0
- absfuyu/logger.py +8 -13
- absfuyu/pkg_data/__init__.py +137 -99
- absfuyu/pkg_data/deprecated.py +133 -0
- absfuyu/pkg_data/passwordlib_lzma.pkl +0 -0
- absfuyu/sort.py +6 -130
- absfuyu/tools/__init__.py +2 -2
- absfuyu/tools/checksum.py +44 -22
- absfuyu/tools/converter.py +82 -50
- absfuyu/tools/keygen.py +25 -30
- absfuyu/tools/obfuscator.py +246 -112
- absfuyu/tools/passwordlib.py +330 -0
- absfuyu/tools/shutdownizer.py +287 -0
- absfuyu/tools/web.py +2 -9
- absfuyu/util/__init__.py +15 -15
- absfuyu/util/api.py +10 -15
- absfuyu/util/json_method.py +7 -24
- absfuyu/util/lunar.py +3 -9
- absfuyu/util/path.py +22 -27
- absfuyu/util/performance.py +43 -67
- absfuyu/util/shorten_number.py +65 -14
- absfuyu/util/zipped.py +9 -15
- absfuyu-5.0.0.dist-info/METADATA +143 -0
- absfuyu-5.0.0.dist-info/RECORD +68 -0
- absfuyu/core.py +0 -57
- absfuyu/everything.py +0 -32
- absfuyu/extensions/beautiful.py +0 -188
- absfuyu/extensions/dev/__init__.py +0 -244
- absfuyu/extensions/dev/password_hash.py +0 -80
- absfuyu/extensions/dev/passwordlib.py +0 -258
- absfuyu/extensions/dev/project_starter.py +0 -60
- absfuyu/extensions/dev/shutdownizer.py +0 -156
- absfuyu/extensions/extra/__init__.py +0 -24
- absfuyu/fun/WGS.py +0 -134
- absfuyu/general/data_extension.py +0 -1796
- absfuyu/tools/stats.py +0 -226
- absfuyu/util/pkl.py +0 -67
- absfuyu-4.1.1.dist-info/METADATA +0 -121
- absfuyu-4.1.1.dist-info/RECORD +0 -61
- {absfuyu-4.1.1.dist-info → absfuyu-5.0.0.dist-info}/WHEEL +0 -0
- {absfuyu-4.1.1.dist-info → absfuyu-5.0.0.dist-info}/entry_points.txt +0 -0
- {absfuyu-4.1.1.dist-info → absfuyu-5.0.0.dist-info}/licenses/LICENSE +0 -0
|
@@ -1,156 +0,0 @@
|
|
|
1
|
-
# type: ignore
|
|
2
|
-
# flake8: noqa
|
|
3
|
-
|
|
4
|
-
"""
|
|
5
|
-
Absfuyu: Shutdownizer
|
|
6
|
-
---------------------
|
|
7
|
-
This shutdowns
|
|
8
|
-
|
|
9
|
-
Version: 1.0.0dev
|
|
10
|
-
Date updated: 27/11/2023 (dd/mm/yyyy)
|
|
11
|
-
"""
|
|
12
|
-
|
|
13
|
-
# Module level
|
|
14
|
-
###########################################################################
|
|
15
|
-
__all__ = ["ShutDownizer"]
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
# Library
|
|
19
|
-
###########################################################################
|
|
20
|
-
import datetime
|
|
21
|
-
import os
|
|
22
|
-
import random
|
|
23
|
-
import subprocess
|
|
24
|
-
import sys
|
|
25
|
-
from pathlib import Path
|
|
26
|
-
|
|
27
|
-
from absfuyu.logger import LogLevel, logger
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
# Class
|
|
31
|
-
###########################################################################
|
|
32
|
-
class Dummy:
|
|
33
|
-
def __init__(self) -> None:
|
|
34
|
-
pass
|
|
35
|
-
|
|
36
|
-
def __str__(self) -> str:
|
|
37
|
-
return f"{self.__class__.__name__}()"
|
|
38
|
-
|
|
39
|
-
def __repr__(self) -> str:
|
|
40
|
-
return self.__str__()
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
class ShutDownizer(Dummy):
|
|
44
|
-
"""
|
|
45
|
-
ShutDownizer
|
|
46
|
-
|
|
47
|
-
Shutdown tool because why not
|
|
48
|
-
"""
|
|
49
|
-
|
|
50
|
-
def __init__(self) -> None:
|
|
51
|
-
"""doc_string"""
|
|
52
|
-
self.os: str = sys.platform
|
|
53
|
-
logger.debug(f"Current OS: {self.os}")
|
|
54
|
-
|
|
55
|
-
if self.os in ["win32", "cygwin"]: # Windows
|
|
56
|
-
self.engine = ShutDownizerWin()
|
|
57
|
-
elif self.os == "darwin": # MacOS
|
|
58
|
-
self.engine = ShutDownizerMac()
|
|
59
|
-
elif self.os == "linux": # Linux
|
|
60
|
-
self.engine = ShutDownizerLinux()
|
|
61
|
-
else: # Other (probably linux)
|
|
62
|
-
self.engine = ShutDownizerLinux()
|
|
63
|
-
|
|
64
|
-
def __str__(self) -> str:
|
|
65
|
-
return f"{self.__class__.__name__}({self.os})"
|
|
66
|
-
|
|
67
|
-
def shutdown(self):
|
|
68
|
-
"""Shutdown"""
|
|
69
|
-
self.engine.shutdown()
|
|
70
|
-
|
|
71
|
-
def restart(self):
|
|
72
|
-
"""Restart"""
|
|
73
|
-
self.engine.restart()
|
|
74
|
-
|
|
75
|
-
def cancel(self):
|
|
76
|
-
"""Cancel"""
|
|
77
|
-
self.engine.cancel()
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
class ShutDownizerEngine(Dummy):
|
|
81
|
-
"""
|
|
82
|
-
Abstract class for different type of OS
|
|
83
|
-
"""
|
|
84
|
-
|
|
85
|
-
def __init__(self) -> None:
|
|
86
|
-
self.shutdown_cmd = ""
|
|
87
|
-
self.restart_cmd = ""
|
|
88
|
-
self.cancel_cmd = ""
|
|
89
|
-
|
|
90
|
-
def _excute_cmd(self, cmd) -> None:
|
|
91
|
-
"""Execute the cmd"""
|
|
92
|
-
try:
|
|
93
|
-
if isinstance(cmd, str):
|
|
94
|
-
subprocess.run(cmd.split())
|
|
95
|
-
elif isinstance(cmd, list):
|
|
96
|
-
subprocess.run(cmd)
|
|
97
|
-
else:
|
|
98
|
-
logger.error(f'"{cmd}" failed to run')
|
|
99
|
-
except:
|
|
100
|
-
logger.error(f'"{cmd}" failed to run')
|
|
101
|
-
|
|
102
|
-
def shutdown(self):
|
|
103
|
-
"""Shutdown"""
|
|
104
|
-
try:
|
|
105
|
-
self._excute_cmd(self.shutdown_cmd)
|
|
106
|
-
except:
|
|
107
|
-
pass
|
|
108
|
-
|
|
109
|
-
def restart(self):
|
|
110
|
-
"""Restart"""
|
|
111
|
-
self._excute_cmd(self.restart_cmd)
|
|
112
|
-
|
|
113
|
-
def cancel(self):
|
|
114
|
-
"""Cancel shutdown/restart"""
|
|
115
|
-
self._excute_cmd(self.cancel_cmd)
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
class ShutDownizerWin(ShutDownizerEngine):
|
|
119
|
-
"""ShutDownizer - Windows"""
|
|
120
|
-
|
|
121
|
-
def __init__(self) -> None:
|
|
122
|
-
self.shutdown_cmd = "shutdown -f -s -t 0"
|
|
123
|
-
self.cancel_cmd = "shutdown -a"
|
|
124
|
-
|
|
125
|
-
def _punish(self):
|
|
126
|
-
"""Create a `batch` script that shut down computer when boot up"""
|
|
127
|
-
try:
|
|
128
|
-
startup_folder_win = Path(os.getenv("appdata")).joinpath(
|
|
129
|
-
"Microsoft", "Windows", "Start Menu", "Programs", "Startup"
|
|
130
|
-
)
|
|
131
|
-
with open(startup_folder_win.joinpath("system.bat"), "w") as f:
|
|
132
|
-
f.write(self.shutdown_cmd)
|
|
133
|
-
except:
|
|
134
|
-
logger.error("Cannot write file to startup folder")
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
class ShutDownizerMac(ShutDownizerEngine):
|
|
138
|
-
"""ShutDownizer - MacOS"""
|
|
139
|
-
|
|
140
|
-
def __init__(self) -> None:
|
|
141
|
-
self.shutdown_cmd = ["osascript", "-e", 'tell app "System Events" to shut down']
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
class ShutDownizerLinux(ShutDownizerEngine):
|
|
145
|
-
"""ShutDownizer - Linux"""
|
|
146
|
-
|
|
147
|
-
def __init__(self) -> None:
|
|
148
|
-
self.shutdown_cmd = "shutdown -h now"
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
# Run
|
|
152
|
-
###########################################################################
|
|
153
|
-
if __name__ == "__main__":
|
|
154
|
-
logger.setLevel(LogLevel.DEBUG)
|
|
155
|
-
test = ShutDownizer()
|
|
156
|
-
print(ShutDownizerLinux().shutdown())
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
"""
|
|
2
|
-
Absfuyu: Extra
|
|
3
|
-
--------------
|
|
4
|
-
Extra feature that require additional libraries
|
|
5
|
-
|
|
6
|
-
Version: 1.0.1
|
|
7
|
-
Date updated: 24/11/2023 (dd/mm/yyyy)
|
|
8
|
-
"""
|
|
9
|
-
|
|
10
|
-
# Module level
|
|
11
|
-
###########################################################################
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
# Library
|
|
15
|
-
###########################################################################
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
# Function
|
|
19
|
-
###########################################################################
|
|
20
|
-
|
|
21
|
-
# Run
|
|
22
|
-
###########################################################################
|
|
23
|
-
if __name__ == "__main__":
|
|
24
|
-
pass
|
absfuyu/fun/WGS.py
DELETED
|
@@ -1,134 +0,0 @@
|
|
|
1
|
-
# flake8: noqa
|
|
2
|
-
"""
|
|
3
|
-
Absfuyu: WGS
|
|
4
|
-
------------
|
|
5
|
-
Wolf's Gravestone
|
|
6
|
-
|
|
7
|
-
- This module is not affiliated with miHoYo/Hoyoverse.
|
|
8
|
-
- Genshin Impact, game content and materials are trademarks and copyrights of miHoYo/Hoyoverse.
|
|
9
|
-
|
|
10
|
-
Version: 1.0.3
|
|
11
|
-
Date updated: 24/11/2023 (dd/mm/yyyy)
|
|
12
|
-
|
|
13
|
-
Usage:
|
|
14
|
-
------
|
|
15
|
-
>>> test = WGS()
|
|
16
|
-
>>> print(test.pixel_art())
|
|
17
|
-
"""
|
|
18
|
-
|
|
19
|
-
# Module level
|
|
20
|
-
###########################################################################
|
|
21
|
-
__all__ = ["WGS"]
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
# Library
|
|
25
|
-
###########################################################################
|
|
26
|
-
import base64
|
|
27
|
-
|
|
28
|
-
from absfuyu.logger import logger
|
|
29
|
-
from absfuyu.tools.converter import Str2Pixel
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
# Class
|
|
33
|
-
###########################################################################
|
|
34
|
-
class WGS:
|
|
35
|
-
"""
|
|
36
|
-
Wolf's Gravestone
|
|
37
|
-
|
|
38
|
-
- This module is not affiliated with miHoYo/Hoyoverse.
|
|
39
|
-
- Genshin Impact, game content and materials are trademarks and copyrights of miHoYo/Hoyoverse.
|
|
40
|
-
"""
|
|
41
|
-
|
|
42
|
-
def __init__(self) -> None:
|
|
43
|
-
self._text_art_big = "ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLjo9KzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0qKioqKi4gCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuPSojKisrCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIyslKyA6LgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSMjJSsuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4qIyUqLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IyMlPQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IyMjOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIyUrICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIyMjLQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9KyAgICA9JSMjLiAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDojIyUrLi4tLT0tIDojIyo9KiMlJT0gICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMlJSUlIyUjIyUlJSUlJSMjIyUlOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOj0lJUAlIyMjIyUjJSUlJSUlPS0tOiAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuJSo6JSUjJSUlIyMlJSUlJSUqPSAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IyM9KysjJSMjKyolJSMlJSo6ICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo9KiojIyMjJSMlIyUlJSUlJSUjKyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC49KyoqIyUlJSMjIyUjIyUlJSUlJSsgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqJSMjIyUjIyMjQCMlIys9LSNAJSUjKz0tICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOisqIyVAJSUjIyUlJSMlIyUjKiouOislJSMjLiAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKiMjJSVAJSUlJSUlIyUtLis9ICAgICA6Ky0tLiAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0qIyMlQEAlIyVAQCUjJUArIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4tIyUlJUAlJUBAIyUlIyouICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuPSMjJSUlJSUlJSUjJSU9LiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLSojJSUlJSUlQCUlJSMqLSAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuOiolJSUlJSUlJSUlIyorLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiojJSUlJSUlJSUlIz06ICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gLSMjIyMjIyUlJSUlIy0gCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IyMjIyUjIyUlIz0qLiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOisjIyMjIyMlJSUqLS0uIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLSojIyMjJSMlJSUqLTouIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9KysqKioqIyMqKj0tLiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLSsqKiorKiojIyMqPTogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSsrKysqIyMrKiMqPS4gIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgLjorKiojIyMjIyUjKj0tICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gOisqIyMjIyMjIyMqPTogIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgLiA9KyojKisjIyMjIystIAogICAgICAgICAgICAgICAgICAgICAgICAuIC49KiojKi0qIyMjKj0tICAKICAgICAgICAgICAgICAgICAgICAgICAgOisqKiMrPSojIyMqPToKICAgICAgICAgICAgICAgICAgICAgICAgLSsqKiotPSoqKyorPS4KICAgICAgICAgICAgICAgICAgICAgICAgLj0rKiorLSojKioqKy0uICAKICAgICAgICAgICAgICAgICAgICAuOi09KyoqLT0jIyoqKz06IAogICAgICAgICAgICAgICAgICAgIDotPSsrKiotKyMqKiorLSAKICAgICAgICAgICAgICAgICAgICA6PSsrKyAgOioqKis9OiAgICAKICAgICAgICAgICAgICAgIDo9KyoqLS09KioqKz06IAogICAgICAgICAgICAgICAgLT0rKiotKysrKz06LiAgCiAgICAgICAgICAgICAgICA6PT0rKis6PT06LiAgCiAgICAgICAgICAgIDo9KysqLQogICAgICAgICAgICAuLT0rKy0uIAogICAgICAgIC46PS06LiAgICAKICAgICAgICAuOjouICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAK"
|
|
44
|
-
self._text_art_small = "CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuKiorCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLiojLi4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDojKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSM6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uICAqKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPSUrPSsrIyMqIyoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArKiUjJSMlJSM9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyoqIyMjJSUlPQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsjIyUjIyMqKiUjOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgLisjJSUlJSUrKjogLSotCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IyUlJSUlKy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIC49IyUlJSUjPQogICAgICAgICAgICAgICAgICAgICAgICAuKiUlJSUlKy4KICAgICAgICAgICAgICAgICAgICAgICAgLiojJSUlIy0KICAgICAgICAgICAgICAgICAgICAgICAgLSMjIyUjPS4KICAgICAgICAgICAgICAgICAgICAuPSoqKiMqOgogICAgICAgICAgICAgICAgICAgIDorKiMjKisuCiAgICAgICAgICAgICAgICAgICAgLSoqIyMjLQogICAgICAgICAgICAgICAgLj0qKyojKjoKICAgICAgICAgICAgICAgIDorKisqKj0uCiAgICAgICAgICAgICAgICAuLSsrKyoqLQogICAgICAgICAgICAuPSotLSorOgogICAgICAgICAgICAuPSs9PS0uCiAgICAgICAgICAgIDorPQogICAgICAgIC46Lgo="
|
|
45
|
-
self._pixel_art_wgs = [
|
|
46
|
-
# Art Credit: https://www.reddit.com/r/PixelArt/comments/n6xyrb/wolfs_gravestone_genshin_impact/
|
|
47
|
-
"51w",
|
|
48
|
-
"46w3b1w",
|
|
49
|
-
"43w2b1w1b1R1b1w",
|
|
50
|
-
"43w1b1R1b1R2b1w",
|
|
51
|
-
"43w2b1r1b3w",
|
|
52
|
-
"41w3b1r1b1r1b2w",
|
|
53
|
-
"28w3b10w1b1g5b2w",
|
|
54
|
-
"28w1b1r1b9w1b3g1b5w",
|
|
55
|
-
"28w2b1R1b1w2b4w1b3g2b5w",
|
|
56
|
-
"30w1b1m1b1g1b1w1b1w1b3g1b7w",
|
|
57
|
-
"30w3b2g3b3g1b8w",
|
|
58
|
-
"29w1b2g1b5g1b1g1b9w",
|
|
59
|
-
"29w1b1g2b1g4b1g1b10w",
|
|
60
|
-
"29w1b3g2b1R2b1g2b9w",
|
|
61
|
-
"27w7b3r1b1g1b10w",
|
|
62
|
-
"27w1b5g1b1r1w2b2g2b8w",
|
|
63
|
-
"26w2b3g6b4g1b8w",
|
|
64
|
-
"26w1b2g2b2R1b1g1b1g4b9w",
|
|
65
|
-
"25w1b2g1b2R2r1b1g1b1g1b1g1b1m1b8w",
|
|
66
|
-
"24w1b1w1m1g1b3r1b2g1b3g2b1R2b6w",
|
|
67
|
-
"21w3b2w1m1b3r1w1b2g4b2w1b1r1b6w",
|
|
68
|
-
"21w1b2w3m1b1r1w2b3g1b5w3b6w",
|
|
69
|
-
"21w1b1w3m1b1r2b3g3b14w",
|
|
70
|
-
"20w1b1w2R1m1b1r1b3m1g2b16w",
|
|
71
|
-
"19w1b1w3R1b1r1b2m2w1b18w",
|
|
72
|
-
"18w1b1w3R1b1r1b3m1w1b19w",
|
|
73
|
-
"17w1b1r3R1b1w1b2R1m1w1b20w",
|
|
74
|
-
"16w1b1w1R1r1R1b1r1b3R2w1b20w",
|
|
75
|
-
"15w1b1w1r1R1y1R2b3R1w3b20w",
|
|
76
|
-
"14w1b3r1y1R2r4y1b23w",
|
|
77
|
-
"13w1b1w3r4y2R1w1b24w",
|
|
78
|
-
"12w1b1w2r2R3r1R2y1b25w",
|
|
79
|
-
"10w2b1w2r1R2b1R3r1w1b26w",
|
|
80
|
-
"9w1b2w2r1R1b1w1b1R2r1w1b27w",
|
|
81
|
-
"9w1b1w2r1R1b1w1b1R2r1y1b28w",
|
|
82
|
-
"8w1b1w1r2R1b1w1b2r1y1w1b29w",
|
|
83
|
-
"7w1b1w1r1R2b1w1b4y1b30w",
|
|
84
|
-
"6w1b1w1r1R1b2w1b1R2r1w1b31w",
|
|
85
|
-
"5w1b1w2r1R1b2w1b1R1r2w1b31w",
|
|
86
|
-
"4w1b1w2r1R1b1w2b2r1w2b32w",
|
|
87
|
-
"3w1b1w1r1y1R1b1w1b3y1w1b34w",
|
|
88
|
-
"2w1b1w1r2y1b1w6b35w",
|
|
89
|
-
"1w6b43w",
|
|
90
|
-
"50w",
|
|
91
|
-
]
|
|
92
|
-
|
|
93
|
-
def __str__(self) -> str:
|
|
94
|
-
return f"{self.__class__.__name__}()"
|
|
95
|
-
|
|
96
|
-
def __repr__(self) -> str:
|
|
97
|
-
return self.__str__()
|
|
98
|
-
|
|
99
|
-
@staticmethod
|
|
100
|
-
def _base64_decode(base64_text: str) -> str:
|
|
101
|
-
return base64.b64decode(base64_text).decode()
|
|
102
|
-
|
|
103
|
-
def text_art(self, option: int = 1) -> str:
|
|
104
|
-
"""
|
|
105
|
-
Text art
|
|
106
|
-
|
|
107
|
-
:param option: ``1`` | ``2``
|
|
108
|
-
:type option: int
|
|
109
|
-
:rtype: str
|
|
110
|
-
"""
|
|
111
|
-
if option == 1:
|
|
112
|
-
return self._base64_decode(self._text_art_big)
|
|
113
|
-
else:
|
|
114
|
-
return self._base64_decode(self._text_art_small)
|
|
115
|
-
|
|
116
|
-
def pixel_art(self) -> str:
|
|
117
|
-
"""
|
|
118
|
-
Pixel art
|
|
119
|
-
|
|
120
|
-
:rtype: str
|
|
121
|
-
"""
|
|
122
|
-
# Make data
|
|
123
|
-
out = "1N".join(self._pixel_art_wgs)
|
|
124
|
-
out = out.replace("y", "r") # Convert yellow into red
|
|
125
|
-
out = out.replace("m", "R") # Convert magenta into dark red
|
|
126
|
-
return Str2Pixel(out).convert()
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
# Run
|
|
130
|
-
###########################################################################
|
|
131
|
-
if __name__ == "__main__":
|
|
132
|
-
logger.setLevel(10)
|
|
133
|
-
test = WGS()
|
|
134
|
-
print(test.pixel_art())
|