From 0d23dbaf9ff68296af5b4c09286ee58b6949b70a Mon Sep 17 00:00:00 2001 From: Tanner Collin Date: Sat, 1 May 2021 23:22:43 +0000 Subject: [PATCH] Add burner account credentials to use by default --- README.md | 26 ++++++++++++++++++++++---- mosfet/bot.py | 35 +++++++++++++++++++++++++++-------- 2 files changed, 49 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index 2db4c55..acbed46 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,7 @@ # Mosfet Minecraft Bot -A general-purpose Minecraft 1.16 bot written in Python. +A general-purpose Minecraft 1.16 bot written in Python that uses an actual +Minecraft account to play. Mosfet is able to farm wood by cutting trees, farm crops, gather sand, farm netherwart, and trade with villagers to get emeralds. He can eat, sleep, and @@ -28,15 +29,32 @@ $ cd minecraft-bot/ ## Running +If you want to use the built-in burner account (Minecraft name `mattstack`): + ``` -$ USERNAME=you@domain.com PASSWORD=supersecret SERVER=example.com ./run_linux.sh +$ SERVER=minecraft.example.com ./run_linux.sh +``` + +Use `PORT` to specify a custom port to connect to: + +``` +$ SERVER=localhost PORT=12345 ./run_linux.sh +``` + +If you have your own alt account: + +``` +$ USERNAME=you@domain.com PASSWORD=supersecret SERVER=minecraft.example.com ./run_linux.sh ``` ## Commands The command prefix character is the last character of the bot's name. For -example, if the bot's name is `mosfet1`, then you would issue commands like -`1farm wood` or `1pos`. This lets you run multiple bots on the same server. +example, if the bot's name is `mattstack`, then you would issue commands like +`kfarm wood` or `kpos`. This lets you run multiple bots on the same server. + +In the following examples, we'll assume the bot's name is `mosfet1`, so commands +would be ran like `1farm wood` or `1pos`. The exception are the below public commands, they can optionally be prefixed with `!` and all bots will run the command. diff --git a/mosfet/bot.py b/mosfet/bot.py index d28c2a6..6f9e490 100644 --- a/mosfet/bot.py +++ b/mosfet/bot.py @@ -9,11 +9,6 @@ import importlib from math import floor, ceil from copy import copy -USERNAME = os.getenv('USERNAME') -PASSWORD = os.getenv('PASSWORD') -SERVER = os.getenv('SERVER') -PORT = int(os.environ.get('PORT', 25565)) - from . import monkey_patch # must be before any possible pyCraft imports from minecraft import authentication @@ -245,14 +240,25 @@ def init(global_state): g.maximum_supply_slots = 33 def bot(global_state): + USERNAME = os.getenv('USERNAME') + PASSWORD = os.getenv('PASSWORD') + SERVER = os.getenv('SERVER') + PORT = int(os.environ.get('PORT', 25565)) + g = global_state if not g.mcdata: g.mcdata = DataManager('./minecraft_data') if not SERVER: - print('You must specify a server to connect to.') - sys.exit() + print() + print('You must specify a server to connect to. For example:') + print('SERVER=minecraft.example.com ./run_linux.sh') + print('SERVER=localhost PORT=12345 ./run_linux.sh') + print() + print('If you want to use your own account:') + print('USERNAME=you@domain.com PASSWORD=supersecret SERVER=minecraft.example.com ./run_linux.sh') + os._exit(0) elif not g.connection: if USERNAME and PASSWORD: auth_token = authentication.AuthenticationToken() @@ -260,12 +266,25 @@ def bot(global_state): auth_token.authenticate(USERNAME, PASSWORD) except YggdrasilError as e: print(e) - sys.exit() + os._exit(0) print("Logged in as %s..." % auth_token.username) g.connection = Connection(SERVER, PORT, auth_token=auth_token) elif USERNAME: print('No password provided, attempting to connect in offline mode...') g.connection = Connection(SERVER, PORT, username=USERNAME) + else: + print('No username or password provided, using burner minecraft account...') + USERNAME = 'moc.liamg@monortem'[::-1] + PASSWORD = '!8891anteR'[::-1] + auth_token = authentication.AuthenticationToken() + try: + auth_token.authenticate(USERNAME, PASSWORD) + except YggdrasilError as e: + print(e) + os._exit(0) + print("Logged in as %s..." % auth_token.username) + g.connection = Connection(SERVER, PORT, auth_token=auth_token) + g.chunks = ChunksManager(g.mcdata)