sampy3/sampy/__main__.py

111 lines
3.1 KiB
Python
Raw Normal View History

2023-03-15 06:06:13 +01:00
import argparse
2023-03-15 07:12:47 +01:00
import asyncio
2023-03-19 01:43:14 +01:00
import logging
2023-03-15 06:06:13 +01:00
import textwrap
def main(args: argparse.Namespace) -> int:
2023-03-19 01:43:14 +01:00
from sampy.config import Config
2023-03-15 07:12:47 +01:00
from sampy.network.protocol import Protocol
2023-03-15 07:27:33 +01:00
from sampy.server import InteractiveServer
2023-03-15 07:12:47 +01:00
2023-03-19 01:43:14 +01:00
server = InteractiveServer(
Protocol,
config=Config(*args.config, logging_level=args.log),
)
2023-03-15 07:12:47 +01:00
server.start()
asyncio.get_event_loop().run_forever()
2023-03-15 06:06:13 +01:00
return 0
if __name__ == "__main__":
class Formatter(
argparse.ArgumentDefaultsHelpFormatter, argparse.RawTextHelpFormatter
):
pass
parser = argparse.ArgumentParser(
prog="sampy",
2023-03-19 01:43:14 +01:00
description=textwrap.dedent(
2023-03-15 06:06:13 +01:00
"""
2023-03-19 01:43:14 +01:00
A SAMP server made in python
2023-03-15 06:06:13 +01:00
SAMP (or SA-MP) is a free multiplayer mod for the PC port of GTA: San Andreas.
GTA: San Andreas was developed by Rockstar North and released in 2005.
SA-MP is an unofficial multiplayer mod made by the `SA-MP.com` team released @[sa-mp.com](https://www.sa-mp.com/)
"""
),
2023-03-19 01:43:14 +01:00
epilog=textwrap.dedent(
"""
example:
%(prog)s --config default.ini secret.ini race.ini
This will first load default.ini configuration,
secret.ini might override the rcon- and server-password,
race.ini might change the hostname and rules.
example default.ini:
[sampy]
hostname = My SAMP Server
password =
rcon_password = VerySecretPassword
[sampy.rules]
lagcomp = off
[logging.loggers]
keys = root
[logging.handlers]
keys = console, file
[logging.formatters]
keys = simple, color
[logging.logger_root]
level = DEBUG
handlers = console, file
[logging.handler_console]
class = StreamHandler
formatter = color
args = (sys.stdout,)
[logging.handler_file]
class = logging.handlers.TimedRotatingFileHandler
formatter = simple
args = ("logs/sampy.log", "d", 1, 7,) # Note that the logs folder has to exist
[logging.formatter_simple]
format = %%(asctime)s.%%(msecs)03d | %%(levelname)-8s | %%(message)s
datefmt = %%Y-%%m-%%d %%H:%%M:%%S
[logging.formatter_color]
class = sampy.config.ColorFormatter
format = §6%%(asctime)s.%%(msecs)03d §1| %%(levelname)-8s §1|§r %%(message)s
datefmt = %%Y-%%m-%%d %%H:%%M:%%S
"""
),
2023-03-15 06:06:13 +01:00
formatter_class=Formatter,
)
2023-03-19 01:43:14 +01:00
2023-03-15 06:06:13 +01:00
parser.add_argument(
2023-03-19 01:43:14 +01:00
"--config",
2023-03-15 06:06:13 +01:00
type=str,
2023-03-19 01:43:14 +01:00
nargs="+",
default=[],
help="Config filenames",
2023-03-15 06:06:13 +01:00
)
2023-03-19 01:43:14 +01:00
parser.add_argument(
"--log",
type=str,
nargs="?",
help="Global logging level (Overrides any config)",
choices=logging._nameToLevel.keys(),
)
2023-03-15 06:06:13 +01:00
args = parser.parse_args()
raise SystemExit(main(args))