Add part that dynamically builds and sets up server
parent
3a3042192d
commit
30f51d8d2b
|
@ -0,0 +1,44 @@
|
|||
import os
|
||||
import config
|
||||
|
||||
def rewriter(file_name):
|
||||
"""Create a decorator that rewrites a file based on given settings."""
|
||||
|
||||
def exec(func):
|
||||
"""Rewrite a file"""
|
||||
new_lines = []
|
||||
|
||||
info_to_remember = {}
|
||||
line_no = 0
|
||||
|
||||
with open(file_name, 'r', encoding='utf-8') as open_file:
|
||||
for line in open_file:
|
||||
line_no += 1
|
||||
new_line = func(line, line_no, data=info_to_remember)
|
||||
new_lines.append(new_line)
|
||||
|
||||
with open(file_name, 'w', encoding='utf-8') as write_file:
|
||||
for line in new_lines:
|
||||
write_file.write(line)
|
||||
return exec
|
||||
|
||||
@rewriter('eula.txt')
|
||||
def confirm_eula(line : str, line_no : int, data):
|
||||
"""Confirm the Minecraft EULA"""
|
||||
if os.getenv('EULA') is None or os.getenv('EULA').lower() != 'true':
|
||||
return line
|
||||
else:
|
||||
return line.replace('eula=false', 'eula=true')
|
||||
|
||||
@rewriter('server.properties')
|
||||
def fill_in_server_settings(line : str, line_no : int, data):
|
||||
"""Set up the server based on our chosen properties"""
|
||||
if line.strip().startswith('#'):
|
||||
return line
|
||||
|
||||
value = line.split('=')[0]
|
||||
|
||||
if value in config.SERVER_SETTINGS:
|
||||
return value + '=' + str(config.SERVER_SETTINGS[value]) + '\n'
|
||||
else:
|
||||
return line
|
49
config.py
49
config.py
|
@ -1,7 +1,11 @@
|
|||
import os
|
||||
|
||||
# Minecraft bridge credentials
|
||||
MATRIX_HOMESERVER = "https://homeserv.er"
|
||||
MATRIX_USERNAME = "@bridge_username:homeserv.er"
|
||||
MATRIX_PASSWORD = "bridge_password"
|
||||
MATRIX_HOMESERVER = os.getenv('MATRIX_HOMESERVER') or "https://homeserv.er"
|
||||
MATRIX_USERNAME = os.getenv('MATRIX_USERNAME') or "@bridge_username:homeserv.er"
|
||||
MATRIX_PASSWORD = os.getenv('MATRIX_PASSWORD') or "bridge_password"
|
||||
|
||||
SERVER_IP = os.getenv('SERVER_ADDRESS') or 'unknown ip'
|
||||
|
||||
# Matrix users who are allowed to run OP commands in Minecraft through Matrix
|
||||
MC_ADMINS = [
|
||||
|
@ -9,6 +13,43 @@ MC_ADMINS = [
|
|||
"@_discord_625632515314548736:t2bot.io" # Bram on Discord (example, feel free to remove)
|
||||
# Your username on Matrix
|
||||
]
|
||||
if os.getenv('MATRIX_ADMINS') is not None:
|
||||
MC_ADMINS = os.getenv('MATRIX_ADMINS').split(',')
|
||||
|
||||
# Matrix channel that the bot should talk to
|
||||
MC_CHANNEL = "!channel_id:homeserv.er"
|
||||
MC_CHANNEL = os.getenv('MC_CHANNEL') or "!channel_id:homeserv.er"
|
||||
|
||||
make_bool = lambda os_value, default_value : default_value if not os_value else (
|
||||
False if os_value.lower() == 'false' else True
|
||||
)
|
||||
|
||||
SERVER_SETTINGS = {
|
||||
'level-name': os.getenv('WORLD') or 'world',
|
||||
|
||||
# Server settings
|
||||
'port' : 25565 if os.getenv('PORT') == None else int(os.getenv('PORT')),
|
||||
'query.port' : 25565 if os.getenv('PORT') == None else int(os.getenv('PORT')),
|
||||
'max-players' : 7 if os.getenv('MAX_PLAYERS') == None else int(os.getenv('MAX_PLAYERS')),
|
||||
|
||||
# Server temperature >:3
|
||||
'view-distance' : 10 if os.getenv('RENDER_DISTANCE') == None else int(os.getenv('RENDER_DISTANCE')),
|
||||
'enable-command-block' : make_bool(os.getenv('COMMAND_BLOCKS'), True),
|
||||
|
||||
# Environment
|
||||
'allow-nether' : make_bool(os.getenv('NETHER'), True),
|
||||
'spawn-npcs' : make_bool(os.getenv('NPCS'), True),
|
||||
'spawn-animals' : make_bool(os.getenv('ANIMALS'), True),
|
||||
'spawn-monsters' : make_bool(os.getenv('MONSTERS'), True),
|
||||
|
||||
# Gamemode
|
||||
'pvp' : make_bool(os.getenv('PVP'), True),
|
||||
'gamemode' : os.getenv('GAMEMODE') or 'survival',
|
||||
'difficulty': os.getenv('DIFFICULTY') or 'medium',
|
||||
'hardcore' : make_bool(os.getenv('HARDCORE'), False),
|
||||
|
||||
# Grief protection
|
||||
'online-mode' : make_bool(os.getenv('VERIFY_ACCOUNTS'), True),
|
||||
'white-list' : make_bool(os.getenv('WHITELIST'), True),
|
||||
'enforce-whitelist' : make_bool(os.getenv('WHITELIST'), True),
|
||||
'spawn-protection' : 16 if os.getenv('SPAWN_PROTECTION') == None else os.getenv('SPAWN_PROTECTION'),
|
||||
}
|
||||
|
|
1
main.py
1
main.py
|
@ -6,6 +6,7 @@ from nio import AsyncClient, MatrixRoom, RoomMessageText
|
|||
import mc_wrapper
|
||||
|
||||
import config
|
||||
import build_server
|
||||
|
||||
STARTUP_TIME = time.time()
|
||||
|
||||
|
|
|
@ -5,6 +5,7 @@ import json
|
|||
import sys
|
||||
import re
|
||||
from nbsr import NonBlockingStreamReader as NBSR
|
||||
import config
|
||||
|
||||
# run the shell as a subprocess:
|
||||
p = Popen(sys.argv[1:],
|
||||
|
@ -60,7 +61,7 @@ def process_message(sentence : str) -> Union[str, None]:
|
|||
r"\[[\d:]+\] \[Server thread\/INFO\]: Done \(\d+.?\d*s\)! For help, type \"help\"",
|
||||
sentence):
|
||||
server_live = True
|
||||
return "The Minecraft server is live. The server is reacable at <code>mc.noordstar.me</code>.", "The minecraft server is live. The server is reacable at <code>mc.noordstar.me</code>."
|
||||
return f"The Minecraft server is live. The server is reacable at <code>{config.SERVER_IP}</code>.", f"The minecraft server is live. The server is reacable at <code>{config.SERVER_IP}</code>."
|
||||
|
||||
if re.fullmatch(
|
||||
r"\[[\d:]+\] \[Server thread\/INFO\]: Stopping server",
|
||||
|
|
Loading…
Reference in New Issue