-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcli.py
124 lines (109 loc) · 4.06 KB
/
cli.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
import argparse
import os
from pathlib import Path
try:
import dotenv
from appdirs import user_data_dir
from dumper import Dumper
from plugin_generator import generate_plugin
except ImportError:
print("did you install necessary requirements?")
raise
DUMP_COMMAND = "dump"
GENERATE_COMMAND = "generate"
IMPORT_COMMAND = "import"
EXPORT_COMMAND = "export"
def main():
dotenv.load_dotenv()
parser = argparse.ArgumentParser(
description="Universal Discord Emoji",
formatter_class=argparse.ArgumentDefaultsHelpFormatter,
)
subparser = parser.add_subparsers(dest="command")
add_dump_parser(subparser)
add_generate_parser(subparser)
args = parser.parse_args()
if args.command == DUMP_COMMAND:
token = os.getenv("DISCORD_TOKEN")
if not token:
print(
"DISCORD_TOKEN env variable not set. Create a .env file or set it in your terminal"
)
return
dumper = Dumper(token, Path(args.emoji_dir))
if not args.normalize_only:
dumper.dump_emojis(force_refresh=args.refresh)
if args.normalize is not None:
dumper.normalize(args.normalize)
elif args.command == GENERATE_COMMAND:
print("generating plugin from template")
emoji_dir = Path(args.emoji_dir)
generate_plugin(
command_name=args.command_name,
command_shortcut=args.command_shortcut,
emoji_dir=emoji_dir.absolute().as_posix(),
emoji_load_limit=args.emoji_load_limit,
)
def add_dump_parser(subparsers):
parser_download = subparsers.add_parser(DUMP_COMMAND, help="Updates emojis based on the servers you are in")
parser_download.add_argument(
"--emoji-dir",
type=str,
help="Directory to store emojis in. Will be created if it does not exist",
default=user_data_dir("universal-discord-emojis"),
)
parser_download.add_argument(
"--refresh",
help="By default, emojis are not downloaded if already present. "
"If this flag is specified, all emojis are downloaded whether they currently exist or not.",
default=False,
action='store_true',
)
parser_download.add_argument(
"--normalize",
type=int,
help="What size to normalize emojis to, 64-128 is recommended. "
"This operation requires the ffmpeg variable to be in the path, as pure python solutions are quite slow. "
"By default, this is not done",
default=None,
)
parser_download.add_argument(
"--normalize-only",
help="Don't download anything, only normalize ALL emojis already downloaded, "
"including emojis which may have have already been normalized. "
"If the input and output size are the same, no degrading in quality is expected. "
"--normalize must also be specified for any normalization to take place.",
default=False,
action='store_true',
)
def add_generate_parser(subparsers):
parser_generate = subparsers.add_parser(GENERATE_COMMAND, help="Generate something")
parser_generate.add_argument(
"--emoji-dir",
type=str,
help="Directory to search for emojis in",
default=user_data_dir("universal-discord-emojis"),
)
parser_generate.add_argument(
"--emoji-load-limit",
type=int,
help="Number of emojis to load to the clipboard",
default=50,
)
parser_generate.add_argument(
"--command-name",
type=str,
help="Name of the command in CopyQ",
default="Universal Emoji",
)
parser_generate.add_argument(
"--command-shortcut",
type=str,
help="Shortcut to trigger command in CopyQ",
default="ctrl+shift+;",
)
def add_import_export_parsers(subparsers):
import_parser = subparsers.add_parser(IMPORT_COMMAND, help="import an exported dump of emojis")
export_parser = subparsers.add_parser(EXPORT_COMMAND, help="Export emojis to a file")
if __name__ == "__main__":
main()