1
1
"""Command line entrypoint for zeusops-bot"""
2
2
3
3
import argparse
4
+ import logging
4
5
import sys
6
+ from enum import IntEnum
7
+ from pathlib import Path
8
+
9
+ from zeusops_bot import reforger_config_gen as cmd
10
+ from zeusops_bot .discord import ZeusopsBot
11
+ from zeusops_bot .errors import ZeusopsBotConfigException
12
+ from zeusops_bot .logging import setup_logging
13
+ from zeusops_bot .models import ModDetail
14
+ from zeusops_bot .settings import ZeusopsBotConfig , load
15
+
16
+
17
+ class Exit (IntEnum ):
18
+ """Exit codes for the CLI"""
19
+
20
+ SUCCESS = 0
21
+ FAILURE = 1
5
22
6
23
7
24
def parse_arguments (args : list [str ]) -> argparse .Namespace :
@@ -19,18 +36,55 @@ def parse_arguments(args: list[str]) -> argparse.Namespace:
19
36
"zeusops-bot" ,
20
37
description = "Multipurpose discord bot for the Zeusops community" ,
21
38
)
22
- parser .add_argument ("foo" , help = "Some parameter" )
39
+ parser .add_argument (
40
+ "--debug" ,
41
+ help = "Enable debug logging" ,
42
+ action = "store_true" ,
43
+ )
23
44
return parser .parse_args (args )
24
45
25
46
26
47
def cli (arguments : list [str ] | None = None ):
27
48
"""Run the zeusops_bot cli"""
28
49
if arguments is None :
29
50
arguments = sys .argv [1 :]
30
- args = parse_arguments (arguments )
31
- main (args .foo )
51
+ _args = parse_arguments (arguments )
52
+ return main (_args .debug )
53
+
54
+
55
+ def main (debug : bool = False ):
56
+ """Run the main bot"""
57
+ try :
58
+ config = load (ZeusopsBotConfig )
59
+ except ZeusopsBotConfigException as e :
60
+ envvars = e .args [0 ]
61
+ print (f"Missing { len (envvars )} envvars:" , file = sys .stderr )
62
+ for envvar in envvars :
63
+ print (f"- { envvar .upper ()} " , file = sys .stderr )
64
+ return Exit .FAILURE
65
+ except Exception :
66
+ print ("Error while loading the bot's config from envvars" , file = sys .stderr )
67
+ raise
68
+
69
+ setup_logging (debug )
70
+
71
+ bot = ZeusopsBot (config , logging .getLogger ("zeusops.discord" ))
72
+ bot .run () # Token is already in config
32
73
33
74
34
- def main (foo ):
35
- """Run the program's main command"""
36
- print (f"Foo is: { foo } " )
75
+ def reforger_upload (
76
+ base_config_file : Path ,
77
+ target_folder : Path ,
78
+ modlist : list [ModDetail ] | None ,
79
+ scenario_id : str ,
80
+ filename : str ,
81
+ ):
82
+ """Run the program's /zeus-upload command"""
83
+ conf_generator = cmd .ReforgerConfigGenerator (base_config_file , target_folder )
84
+ if modlist is not None :
85
+ print (f"Loading { len (modlist )} mods, for { scenario_id = } ..." )
86
+ else :
87
+ print (f"Loading { scenario_id = } ..." )
88
+ out_path = conf_generator .zeus_upload (scenario_id , filename , modlist )
89
+ print (f"Saved under file { out_path .name } " )
90
+ return Exit .SUCCESS
0 commit comments