absfuyu 3.2.0__py3-none-any.whl → 3.3.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.
Potentially problematic release.
This version of absfuyu might be problematic. Click here for more details.
- absfuyu/__init__.py +3 -10
- absfuyu/__main__.py +5 -250
- absfuyu/cli/__init__.py +51 -0
- absfuyu/cli/color.py +24 -0
- absfuyu/cli/config_group.py +56 -0
- absfuyu/cli/do_group.py +76 -0
- absfuyu/cli/game_group.py +109 -0
- absfuyu/config/__init__.py +55 -94
- absfuyu/config/config.json +0 -7
- absfuyu/core.py +5 -66
- absfuyu/everything.py +7 -9
- absfuyu/extensions/beautiful.py +30 -23
- absfuyu/extensions/dev/__init__.py +11 -8
- absfuyu/extensions/dev/password_hash.py +4 -2
- absfuyu/extensions/dev/passwordlib.py +7 -5
- absfuyu/extensions/dev/project_starter.py +4 -2
- absfuyu/extensions/dev/shutdownizer.py +148 -0
- absfuyu/extensions/extra/__init__.py +1 -2
- absfuyu/extensions/extra/data_analysis.py +110 -58
- absfuyu/fun/WGS.py +50 -26
- absfuyu/fun/__init__.py +6 -7
- absfuyu/fun/tarot.py +1 -1
- absfuyu/game/__init__.py +75 -81
- absfuyu/game/game_stat.py +36 -0
- absfuyu/game/sudoku.py +41 -48
- absfuyu/game/tictactoe.py +303 -548
- absfuyu/game/wordle.py +56 -47
- absfuyu/general/__init__.py +17 -7
- absfuyu/general/content.py +16 -15
- absfuyu/general/data_extension.py +282 -90
- absfuyu/general/generator.py +67 -67
- absfuyu/general/human.py +74 -78
- absfuyu/logger.py +94 -68
- absfuyu/pkg_data/__init__.py +29 -25
- absfuyu/py.typed +0 -0
- absfuyu/sort.py +61 -47
- absfuyu/tools/__init__.py +0 -1
- absfuyu/tools/converter.py +80 -62
- absfuyu/tools/keygen.py +62 -67
- absfuyu/tools/obfuscator.py +57 -53
- absfuyu/tools/stats.py +24 -24
- absfuyu/tools/web.py +10 -9
- absfuyu/util/__init__.py +38 -40
- absfuyu/util/api.py +53 -43
- absfuyu/util/json_method.py +25 -27
- absfuyu/util/lunar.py +20 -24
- absfuyu/util/path.py +362 -241
- absfuyu/util/performance.py +36 -98
- absfuyu/util/pkl.py +8 -8
- absfuyu/util/zipped.py +17 -19
- absfuyu/version.py +137 -148
- absfuyu-3.3.3.dist-info/METADATA +124 -0
- absfuyu-3.3.3.dist-info/RECORD +59 -0
- {absfuyu-3.2.0.dist-info → absfuyu-3.3.3.dist-info}/WHEEL +1 -2
- {absfuyu-3.2.0.dist-info → absfuyu-3.3.3.dist-info}/entry_points.txt +1 -0
- {absfuyu-3.2.0.dist-info → absfuyu-3.3.3.dist-info/licenses}/LICENSE +1 -1
- absfuyu/extensions/dev/pkglib.py +0 -98
- absfuyu/game/tictactoe2.py +0 -318
- absfuyu-3.2.0.dist-info/METADATA +0 -216
- absfuyu-3.2.0.dist-info/RECORD +0 -55
- absfuyu-3.2.0.dist-info/top_level.txt +0 -1
absfuyu/__init__.py
CHANGED
|
@@ -11,20 +11,18 @@ LINKS
|
|
|
11
11
|
USAGE
|
|
12
12
|
-----
|
|
13
13
|
|
|
14
|
-
Normal import:
|
|
14
|
+
Normal import:
|
|
15
15
|
>>> import absfuyu
|
|
16
16
|
>>> help(absfuyu)
|
|
17
17
|
|
|
18
|
-
Using in cmd (`absfuyu[cli]` required):
|
|
18
|
+
Using in cmd (`absfuyu[cli]` required):
|
|
19
19
|
``$ fuyu --help``
|
|
20
20
|
"""
|
|
21
21
|
|
|
22
|
-
|
|
23
|
-
# Module level
|
|
24
|
-
###########################################################################
|
|
25
22
|
__title__ = "absfuyu"
|
|
26
23
|
__author__ = "AbsoluteWinter"
|
|
27
24
|
__license__ = "MIT License"
|
|
25
|
+
__version__ = "3.3.3"
|
|
28
26
|
__all__ = [
|
|
29
27
|
"core",
|
|
30
28
|
"config",
|
|
@@ -40,8 +38,3 @@ __all__ = [
|
|
|
40
38
|
"util",
|
|
41
39
|
"version",
|
|
42
40
|
]
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
# Library
|
|
46
|
-
###########################################################################
|
|
47
|
-
from .version import __version__
|
absfuyu/__main__.py
CHANGED
|
@@ -1,260 +1,15 @@
|
|
|
1
1
|
"""
|
|
2
2
|
ABSFUYU
|
|
3
|
-
|
|
3
|
+
-------
|
|
4
4
|
COMMAND LINE INTERFACE
|
|
5
|
-
|
|
6
|
-
Version: 2.0.1
|
|
7
|
-
Date updated: 25/11/2023 (dd/mm/yyyy)
|
|
8
5
|
"""
|
|
9
6
|
|
|
10
|
-
|
|
11
|
-
# Library
|
|
12
|
-
###########################################################################
|
|
13
|
-
from random import choice as __randc
|
|
14
|
-
import subprocess
|
|
15
|
-
|
|
16
|
-
CLI_MODE = False
|
|
17
|
-
try:
|
|
18
|
-
import click
|
|
19
|
-
import colorama
|
|
20
|
-
except ImportError:
|
|
21
|
-
# Auto install absfuyu[cli]
|
|
22
|
-
from absfuyu.config import ABSFUYU_CONFIG
|
|
23
|
-
|
|
24
|
-
if ABSFUYU_CONFIG._get_setting("auto-install-extra").value:
|
|
25
|
-
__cmd: str = "python -m pip install -U absfuyu[cli]".split()
|
|
26
|
-
subprocess.run(__cmd)
|
|
27
|
-
else:
|
|
28
|
-
raise SystemExit("This feature is in absfuyu[cli] package")
|
|
29
|
-
else:
|
|
30
|
-
CLI_MODE = True
|
|
31
|
-
|
|
32
|
-
from absfuyu.config import ABSFUYU_CONFIG
|
|
33
|
-
from absfuyu import core as __core
|
|
34
|
-
from absfuyu import version as __v
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
# Color stuff
|
|
38
|
-
###########################################################################
|
|
39
|
-
if CLI_MODE:
|
|
40
|
-
if colorama is not None:
|
|
41
|
-
colorama.init(autoreset=True)
|
|
42
|
-
__COLOR = __core.Color
|
|
43
|
-
else:
|
|
44
|
-
__COLOR = {"green": "", "blue": "", "red": "", "yellow": "", "reset": ""}
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
# Main group
|
|
48
|
-
###########################################################################
|
|
49
|
-
@click.command()
|
|
50
|
-
def welcome():
|
|
51
|
-
"""Welcome message"""
|
|
52
|
-
import os as __os
|
|
53
|
-
|
|
54
|
-
try:
|
|
55
|
-
user = __os.getlogin()
|
|
56
|
-
except:
|
|
57
|
-
import getpass
|
|
58
|
-
|
|
59
|
-
user = getpass.getuser()
|
|
60
|
-
welcome_msg = f"{__COLOR['green']}Welcome {__COLOR['red']}{user} {__COLOR['green']}to {__COLOR['blue']}absfuyu's cli"
|
|
61
|
-
click.echo(
|
|
62
|
-
f"""
|
|
63
|
-
{__COLOR['reset']}{'='*(len(welcome_msg)-20)}
|
|
64
|
-
{welcome_msg}
|
|
65
|
-
{__COLOR['reset']}{'='*(len(welcome_msg)-20)}
|
|
66
|
-
"""
|
|
67
|
-
)
|
|
68
|
-
ABSFUYU_CONFIG.welcome()
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
@click.command()
|
|
72
|
-
@click.argument("name")
|
|
73
|
-
def greet(name):
|
|
74
|
-
"""Greet"""
|
|
75
|
-
click.echo(f"{__COLOR['yellow']}Hello {name}")
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
@click.command()
|
|
79
|
-
@click.option(
|
|
80
|
-
"--setting",
|
|
81
|
-
"-s",
|
|
82
|
-
type=click.Choice(["luckgod", "install-extra"]),
|
|
83
|
-
help="Toggle on/off selected setting",
|
|
84
|
-
)
|
|
85
|
-
def toggle(setting: str):
|
|
86
|
-
"""Toggle on/off setting"""
|
|
87
|
-
|
|
88
|
-
# Dictionary
|
|
89
|
-
trans = {
|
|
90
|
-
"luckgod": "luckgod-mode",
|
|
91
|
-
"install-extra": "auto-install-extra",
|
|
92
|
-
} # trans[setting]
|
|
93
|
-
|
|
94
|
-
if setting is None:
|
|
95
|
-
click.echo(f"{__COLOR['red']}Invalid setting")
|
|
96
|
-
else:
|
|
97
|
-
ABSFUYU_CONFIG.toggle_setting(trans[setting])
|
|
98
|
-
out = ABSFUYU_CONFIG._get_setting(trans[setting])
|
|
99
|
-
click.echo(f"{__COLOR['red']}{out}")
|
|
100
|
-
pass
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
@click.command()
|
|
104
|
-
def version():
|
|
105
|
-
"""Check current version"""
|
|
106
|
-
click.echo(f"{__COLOR['green']}absfuyu: {__v.__version__}")
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
# Do group
|
|
110
|
-
###########################################################################
|
|
111
|
-
@click.command()
|
|
112
|
-
@click.option(
|
|
113
|
-
"--force_update/--no-force-update",
|
|
114
|
-
"-F/-f",
|
|
115
|
-
"force_update",
|
|
116
|
-
type=bool,
|
|
117
|
-
default=True,
|
|
118
|
-
show_default=True,
|
|
119
|
-
help="Update the package",
|
|
120
|
-
)
|
|
121
|
-
def update(force_update: bool):
|
|
122
|
-
"""Update the package to latest version"""
|
|
123
|
-
click.echo(__COLOR["green"])
|
|
124
|
-
__v._AbsfuyuPackage.check_for_update(force_update=force_update)
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
@click.command()
|
|
128
|
-
def reset():
|
|
129
|
-
"""Reset config to default value"""
|
|
130
|
-
ABSFUYU_CONFIG.reset_config()
|
|
131
|
-
click.echo(f"{__COLOR['green']}All settings have been reseted")
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
@click.command()
|
|
135
|
-
@click.option(
|
|
136
|
-
"--game-name",
|
|
137
|
-
"-g",
|
|
138
|
-
type=click.Choice(["random", "esc", "rps", "ttt"], case_sensitive=False),
|
|
139
|
-
default="random",
|
|
140
|
-
show_default=True,
|
|
141
|
-
help="Play game",
|
|
142
|
-
)
|
|
143
|
-
@click.option(
|
|
144
|
-
"--size",
|
|
145
|
-
"-s",
|
|
146
|
-
type=int,
|
|
147
|
-
default=3,
|
|
148
|
-
show_default=True,
|
|
149
|
-
help="Change game's size (if any)",
|
|
150
|
-
)
|
|
151
|
-
@click.option(
|
|
152
|
-
"--mode", "-m", type=str, default=None, help="Change game's gamemode (if any)"
|
|
153
|
-
)
|
|
154
|
-
@click.option(
|
|
155
|
-
"--board-style",
|
|
156
|
-
"-b",
|
|
157
|
-
"board_style",
|
|
158
|
-
type=str,
|
|
159
|
-
default="1",
|
|
160
|
-
help="Change game's board style (if any)",
|
|
161
|
-
)
|
|
162
|
-
def game(game_name: str, size: int, mode: str, board_style):
|
|
163
|
-
"""
|
|
164
|
-
Play game
|
|
165
|
-
|
|
166
|
-
Game list:
|
|
167
|
-
- esc: Escape loop
|
|
168
|
-
- rps: Rock Paper Scissors
|
|
169
|
-
- ttt: Tic Tac Toe
|
|
170
|
-
"""
|
|
171
|
-
from absfuyu.game import game_escapeLoop, game_RockPaperScissors
|
|
172
|
-
|
|
173
|
-
if game_name.startswith("random"):
|
|
174
|
-
if __randc([0, 1]) == 0:
|
|
175
|
-
game_escapeLoop()
|
|
176
|
-
else:
|
|
177
|
-
game_RockPaperScissors()
|
|
178
|
-
else:
|
|
179
|
-
if game_name.startswith("esc"):
|
|
180
|
-
game_escapeLoop()
|
|
181
|
-
elif game_name.startswith("rps"):
|
|
182
|
-
game_RockPaperScissors(hard_mode=mode)
|
|
183
|
-
elif game_name.startswith("ttt"):
|
|
184
|
-
from absfuyu.game.tictactoe import game_tictactoe
|
|
185
|
-
|
|
186
|
-
if board_style == "None":
|
|
187
|
-
board_style = None
|
|
188
|
-
elif board_style == "1":
|
|
189
|
-
board_style = True
|
|
190
|
-
else:
|
|
191
|
-
board_style = False
|
|
192
|
-
game_tictactoe(size=size, mode=mode, board_game=board_style)
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
@click.command()
|
|
196
|
-
@click.argument("pkg", type=click.Choice(__core.ModulePackage))
|
|
197
|
-
def install(pkg: str):
|
|
198
|
-
"""Install absfuyu's extension"""
|
|
199
|
-
cmd = f"pip install -U absfuyu[{pkg}]".split()
|
|
200
|
-
try:
|
|
201
|
-
subprocess.run(cmd)
|
|
202
|
-
except:
|
|
203
|
-
try:
|
|
204
|
-
cmd2 = f"python -m pip install -U absfuyu[{pkg}]".split()
|
|
205
|
-
subprocess.run(cmd2)
|
|
206
|
-
except:
|
|
207
|
-
click.echo(f"{__COLOR['red']}Unable to install absfuyu[{pkg}]")
|
|
208
|
-
else:
|
|
209
|
-
click.echo(f"{__COLOR['green']}absfuyu[{pkg}] installed")
|
|
210
|
-
else:
|
|
211
|
-
click.echo(f"{__COLOR['green']}absfuyu[{pkg}] installed")
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
@click.command()
|
|
215
|
-
def advice():
|
|
216
|
-
"""Give some recommendation when bored"""
|
|
217
|
-
from .fun import im_bored
|
|
218
|
-
|
|
219
|
-
click.echo(f"{__COLOR['green']}{im_bored()}")
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
@click.group(name="do")
|
|
223
|
-
def do_group():
|
|
224
|
-
"""Perform functionalities"""
|
|
225
|
-
pass
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
do_group.add_command(reset)
|
|
229
|
-
do_group.add_command(update)
|
|
230
|
-
do_group.add_command(game)
|
|
231
|
-
do_group.add_command(install)
|
|
232
|
-
do_group.add_command(advice)
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
# Main group init
|
|
236
|
-
###########################################################################
|
|
237
|
-
@click.group()
|
|
238
|
-
def main():
|
|
239
|
-
"""
|
|
240
|
-
absfuyu's command line interface
|
|
241
|
-
|
|
242
|
-
Usage:
|
|
243
|
-
python -m absfuyu --help
|
|
244
|
-
fuyu --help
|
|
245
|
-
"""
|
|
246
|
-
pass
|
|
7
|
+
from absfuyu.cli import cli
|
|
247
8
|
|
|
248
9
|
|
|
249
|
-
main
|
|
250
|
-
|
|
251
|
-
main.add_command(toggle)
|
|
252
|
-
main.add_command(version)
|
|
253
|
-
main.add_command(do_group)
|
|
10
|
+
def main() -> None:
|
|
11
|
+
cli()
|
|
254
12
|
|
|
255
13
|
|
|
256
|
-
# Run
|
|
257
|
-
###########################################################################
|
|
258
14
|
if __name__ == "__main__":
|
|
259
|
-
|
|
260
|
-
main()
|
|
15
|
+
main()
|
absfuyu/cli/__init__.py
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
"""
|
|
2
|
+
ABSFUYU
|
|
3
|
+
-------
|
|
4
|
+
COMMAND LINE INTERFACE
|
|
5
|
+
|
|
6
|
+
Version: 1.0.0
|
|
7
|
+
Date updated: 14/04/2024 (dd/mm/yyyy)
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
__all__ = ["cli"]
|
|
11
|
+
|
|
12
|
+
import platform
|
|
13
|
+
|
|
14
|
+
import click
|
|
15
|
+
import colorama
|
|
16
|
+
|
|
17
|
+
from absfuyu import __title__, __version__
|
|
18
|
+
from absfuyu.cli.color import COLOR
|
|
19
|
+
from absfuyu.cli.config_group import config_group
|
|
20
|
+
from absfuyu.cli.do_group import do_group
|
|
21
|
+
from absfuyu.cli.game_group import game_group
|
|
22
|
+
|
|
23
|
+
# Color stuff
|
|
24
|
+
colorama.init(autoreset=True)
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
@click.command()
|
|
28
|
+
def version() -> None:
|
|
29
|
+
"""Check current version"""
|
|
30
|
+
ver_msg = f"{__title__} v{__version__}"
|
|
31
|
+
click.echo(
|
|
32
|
+
f"{COLOR['green']}{ver_msg}{COLOR['reset']}\n"
|
|
33
|
+
f"- os/type: {platform.system().lower()}\n"
|
|
34
|
+
f"- os/kernel: {platform.version()}\n"
|
|
35
|
+
f"- os/arch: {platform.machine().lower()}\n"
|
|
36
|
+
f"- python version: {platform.python_version()}\n"
|
|
37
|
+
)
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
@click.group(name="cli")
|
|
41
|
+
def cli() -> None:
|
|
42
|
+
"""
|
|
43
|
+
absfuyu's command line interface
|
|
44
|
+
"""
|
|
45
|
+
pass
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
cli.add_command(config_group)
|
|
49
|
+
cli.add_command(do_group)
|
|
50
|
+
cli.add_command(game_group)
|
|
51
|
+
cli.add_command(version)
|
absfuyu/cli/color.py
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"""
|
|
2
|
+
ABSFUYU CLI
|
|
3
|
+
-----------
|
|
4
|
+
Color
|
|
5
|
+
|
|
6
|
+
Version: 1.0.0
|
|
7
|
+
Date updated: 14/04/2024 (dd/mm/yyyy)
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
__all__ = ["COLOR"]
|
|
11
|
+
|
|
12
|
+
import colorama
|
|
13
|
+
|
|
14
|
+
COLOR = {
|
|
15
|
+
"green": colorama.Fore.LIGHTGREEN_EX,
|
|
16
|
+
"GREEN": colorama.Fore.GREEN,
|
|
17
|
+
"blue": colorama.Fore.LIGHTCYAN_EX,
|
|
18
|
+
"BLUE": colorama.Fore.CYAN,
|
|
19
|
+
"red": colorama.Fore.LIGHTRED_EX,
|
|
20
|
+
"RED": colorama.Fore.RED,
|
|
21
|
+
"yellow": colorama.Fore.LIGHTYELLOW_EX,
|
|
22
|
+
"YELLOW": colorama.Fore.YELLOW,
|
|
23
|
+
"reset": colorama.Fore.RESET,
|
|
24
|
+
}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"""
|
|
2
|
+
ABSFUYU CLI
|
|
3
|
+
-----------
|
|
4
|
+
Config
|
|
5
|
+
|
|
6
|
+
Version: 1.0.0
|
|
7
|
+
Date updated: 14/04/2024 (dd/mm/yyyy)
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
__all__ = ["config_group"]
|
|
11
|
+
|
|
12
|
+
import click
|
|
13
|
+
|
|
14
|
+
from absfuyu.cli.color import COLOR
|
|
15
|
+
from absfuyu.config import ABSFUYU_CONFIG
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
@click.command()
|
|
19
|
+
@click.option(
|
|
20
|
+
"--setting",
|
|
21
|
+
"-s",
|
|
22
|
+
type=click.Choice(["luckgod", "install-extra"]),
|
|
23
|
+
help="Toggle on/off selected setting",
|
|
24
|
+
)
|
|
25
|
+
def toggle(setting: str) -> None:
|
|
26
|
+
"""Toggle on/off setting"""
|
|
27
|
+
|
|
28
|
+
# Dictionary
|
|
29
|
+
trans = {
|
|
30
|
+
"luckgod": "luckgod-mode",
|
|
31
|
+
"install-extra": "auto-install-extra",
|
|
32
|
+
} # trans[setting]
|
|
33
|
+
|
|
34
|
+
if setting is None:
|
|
35
|
+
click.echo(f"{COLOR['red']}Invalid setting") # type: ignore
|
|
36
|
+
else:
|
|
37
|
+
ABSFUYU_CONFIG.toggle_setting(trans[setting])
|
|
38
|
+
out = ABSFUYU_CONFIG._get_setting(trans[setting])
|
|
39
|
+
click.echo(f"{COLOR['red']}{out}")
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
@click.command()
|
|
43
|
+
def reset():
|
|
44
|
+
"""Reset config to default value"""
|
|
45
|
+
ABSFUYU_CONFIG.reset_config()
|
|
46
|
+
click.echo(f"{COLOR['green']}All settings have been reseted")
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
@click.group(name="config")
|
|
50
|
+
def config_group() -> None:
|
|
51
|
+
"""absfuyu configuration"""
|
|
52
|
+
pass
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
config_group.add_command(toggle)
|
|
56
|
+
config_group.add_command(reset)
|
absfuyu/cli/do_group.py
ADDED
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
"""
|
|
2
|
+
ABSFUYU CLI
|
|
3
|
+
-----------
|
|
4
|
+
Do
|
|
5
|
+
|
|
6
|
+
Version: 1.0.0
|
|
7
|
+
Date updated: 14/04/2024 (dd/mm/yyyy)
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
__all__ = ["do_group"]
|
|
11
|
+
|
|
12
|
+
import subprocess
|
|
13
|
+
|
|
14
|
+
import click
|
|
15
|
+
|
|
16
|
+
from absfuyu import __title__
|
|
17
|
+
from absfuyu.cli.color import COLOR
|
|
18
|
+
from absfuyu.core import __package_feature__
|
|
19
|
+
from absfuyu.version import PkgVersion
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
@click.command()
|
|
23
|
+
@click.option(
|
|
24
|
+
"--force_update/--no-force-update",
|
|
25
|
+
"-F/-f",
|
|
26
|
+
"force_update",
|
|
27
|
+
type=bool,
|
|
28
|
+
default=True,
|
|
29
|
+
show_default=True,
|
|
30
|
+
help="Update the package",
|
|
31
|
+
)
|
|
32
|
+
def update(force_update: bool) -> None:
|
|
33
|
+
"""Update the package to latest version"""
|
|
34
|
+
click.echo(f"{COLOR['green']}")
|
|
35
|
+
AbsfuyuPackage = PkgVersion(
|
|
36
|
+
package_name=__title__,
|
|
37
|
+
)
|
|
38
|
+
AbsfuyuPackage.check_for_update(force_update=force_update)
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
@click.command()
|
|
42
|
+
@click.argument("pkg", type=click.Choice(__package_feature__))
|
|
43
|
+
def install(pkg: str) -> None:
|
|
44
|
+
"""Install absfuyu's extension"""
|
|
45
|
+
cmd = f"pip install -U absfuyu[{pkg}]".split()
|
|
46
|
+
try:
|
|
47
|
+
subprocess.run(cmd)
|
|
48
|
+
except Exception:
|
|
49
|
+
try:
|
|
50
|
+
cmd2 = f"python -m pip install -U absfuyu[{pkg}]".split()
|
|
51
|
+
subprocess.run(cmd2)
|
|
52
|
+
except Exception:
|
|
53
|
+
click.echo(f"{COLOR['red']}Unable to install absfuyu[{pkg}]")
|
|
54
|
+
else:
|
|
55
|
+
click.echo(f"{COLOR['green']}absfuyu[{pkg}] installed")
|
|
56
|
+
else:
|
|
57
|
+
click.echo(f"{COLOR['green']}absfuyu[{pkg}] installed")
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
@click.command()
|
|
61
|
+
def advice() -> None:
|
|
62
|
+
"""Give some recommendation when bored"""
|
|
63
|
+
from absfuyu.fun import im_bored
|
|
64
|
+
|
|
65
|
+
click.echo(f"{COLOR['green']}{im_bored()}")
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
@click.group(name="do")
|
|
69
|
+
def do_group() -> None:
|
|
70
|
+
"""Perform functionalities"""
|
|
71
|
+
pass
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
do_group.add_command(update)
|
|
75
|
+
do_group.add_command(install)
|
|
76
|
+
do_group.add_command(advice)
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
"""
|
|
2
|
+
ABSFUYU CLI
|
|
3
|
+
-----------
|
|
4
|
+
Game
|
|
5
|
+
|
|
6
|
+
Version: 1.0.0
|
|
7
|
+
Date updated: 14/04/2024 (dd/mm/yyyy)
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
__all__ = ["game_group"]
|
|
11
|
+
|
|
12
|
+
import click
|
|
13
|
+
|
|
14
|
+
from absfuyu.game import game_escapeLoop, game_RockPaperScissors
|
|
15
|
+
from absfuyu.game.sudoku import Sudoku
|
|
16
|
+
from absfuyu.game.tictactoe import GameMode, TicTacToe
|
|
17
|
+
from absfuyu.game.wordle import Wordle
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
@click.command
|
|
21
|
+
@click.option(
|
|
22
|
+
"--hard",
|
|
23
|
+
"hard_mode",
|
|
24
|
+
is_flag=True,
|
|
25
|
+
default=False,
|
|
26
|
+
show_default=True,
|
|
27
|
+
help="Hard mode",
|
|
28
|
+
)
|
|
29
|
+
def rps(hard_mode: bool) -> None:
|
|
30
|
+
"""Game: Rock Paper Scissors"""
|
|
31
|
+
game_RockPaperScissors(hard_mode=hard_mode)
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
@click.command(name="esl")
|
|
35
|
+
def escape_loop() -> None:
|
|
36
|
+
"""Game: Escape loop"""
|
|
37
|
+
game_escapeLoop()
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
@click.command(name="wordle")
|
|
41
|
+
def wordle_solver() -> None:
|
|
42
|
+
"""Worldle solver"""
|
|
43
|
+
Wordle().solve()
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
@click.command(name="sudoku")
|
|
47
|
+
@click.argument("sudoku_string", type=str)
|
|
48
|
+
@click.option(
|
|
49
|
+
"--raw",
|
|
50
|
+
"raw",
|
|
51
|
+
is_flag=True,
|
|
52
|
+
default=False,
|
|
53
|
+
show_default=True,
|
|
54
|
+
help="Returns answer in string form",
|
|
55
|
+
)
|
|
56
|
+
def sudoku_solver(sudoku_string: str, raw: bool) -> None:
|
|
57
|
+
"""Sudoku solver"""
|
|
58
|
+
sdk = Sudoku.from_string(sudoku_string)
|
|
59
|
+
if raw:
|
|
60
|
+
click.echo(sdk.solve().export_to_string())
|
|
61
|
+
else:
|
|
62
|
+
click.echo(sdk.solve().to_board_form())
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
@click.command(name="ttt")
|
|
66
|
+
@click.option(
|
|
67
|
+
"--size",
|
|
68
|
+
"-s",
|
|
69
|
+
"size",
|
|
70
|
+
type=int,
|
|
71
|
+
default=3,
|
|
72
|
+
show_default=True,
|
|
73
|
+
help="Size of the board",
|
|
74
|
+
)
|
|
75
|
+
@click.option(
|
|
76
|
+
"--mode",
|
|
77
|
+
"-m",
|
|
78
|
+
"game_mode",
|
|
79
|
+
type=click.Choice([GameMode.ONE_V_BOT, GameMode.ONE_V_ONE, GameMode.BOT_V_BOT]),
|
|
80
|
+
default=GameMode.ONE_V_BOT,
|
|
81
|
+
show_default=True,
|
|
82
|
+
help="Game mode",
|
|
83
|
+
)
|
|
84
|
+
@click.option(
|
|
85
|
+
"--bot-time",
|
|
86
|
+
"-t",
|
|
87
|
+
"bot_time",
|
|
88
|
+
type=float,
|
|
89
|
+
default=0.0,
|
|
90
|
+
show_default=True,
|
|
91
|
+
help="Time between bot move",
|
|
92
|
+
)
|
|
93
|
+
def tictactoe(size: int, game_mode: str, bot_time: float) -> None:
|
|
94
|
+
"""Game: Tictactoe"""
|
|
95
|
+
instance = TicTacToe(size)
|
|
96
|
+
instance.play(game_mode, bot_time=bot_time)
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
@click.group(name="game")
|
|
100
|
+
def game_group() -> None:
|
|
101
|
+
"""Play game"""
|
|
102
|
+
pass
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
game_group.add_command(rps)
|
|
106
|
+
game_group.add_command(escape_loop)
|
|
107
|
+
game_group.add_command(wordle_solver)
|
|
108
|
+
game_group.add_command(sudoku_solver)
|
|
109
|
+
game_group.add_command(tictactoe)
|