diff --git a/.gitignore b/.gitignore index 461d33f..30e24fb 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,8 @@ *.pyc *.log *.swp +config.yaml login.py run.py +contrib/ /build diff --git a/spock/plugins/__init__.py b/spock/plugins/__init__.py index e39fbce..c4d121d 100644 --- a/spock/plugins/__init__.py +++ b/spock/plugins/__init__.py @@ -2,17 +2,17 @@ from spock.plugins.helpers import start, keepalive, clientinfo, world, move, respawn, physics, inventory DefaultPlugins = [ - event.EventPlugin, - net.NetPlugin, - auth.AuthPlugin, - ticker.TickerPlugin, - timer.TimerPlugin, - start.StartPlugin, - keepalive.KeepalivePlugin, - respawn.RespawnPlugin, - move.MovementPlugin, - world.WorldPlugin, - clientinfo.ClientInfoPlugin, - physics.PhysicsPlugin, - inventory.InventoryPlugin, + ('event', event.EventPlugin), + ('net', net.NetPlugin), + ('auth', auth.AuthPlugin), + ('ticker', ticker.TickerPlugin), + ('timer', timer.TimerPlugin), + ('start', start.StartPlugin), + ('keepalive', keepalive.KeepalivePlugin), + ('respawn', respawn.RespawnPlugin), + ('move', move.MovementPlugin), + ('world', world.WorldPlugin), + ('client', clientinfo.ClientInfoPlugin), + ('physics', physics.PhysicsPlugin), + ('inventory', inventory.InventoryPlugin), ] diff --git a/spock/plugins/core/auth.py b/spock/plugins/core/auth.py index 1cb3782..ed7fcb1 100644 --- a/spock/plugins/core/auth.py +++ b/spock/plugins/core/auth.py @@ -60,13 +60,17 @@ def gen_shared_secret(self): self.shared_secret = Random._UserFriendlyRNG.get_random_bytes(16) return self.shared_secret +default_settings = { + 'authenticated': True, + 'sess_quit': True, +} @pl_announce('Auth') class AuthPlugin: def __init__(self, ploader, settings): + settings = utils.get_settings(settings, default_settings) self.event = ploader.requires('Event') self.net = ploader.requires('Net') - settings = ploader.requires('Settings') self.authenticated = settings['authenticated'] self.sess_quit = settings['sess_quit'] self.auth = AuthCore(self.authenticated, self.event) diff --git a/spock/plugins/core/net.py b/spock/plugins/core/net.py index 70e4143..f6009d3 100644 --- a/spock/plugins/core/net.py +++ b/spock/plugins/core/net.py @@ -140,10 +140,18 @@ def reset(self): disconnect = reset +default_settings = { + 'username': 'Bot', + 'password': None, + 'bufsize': 4096, + 'sock_quit': True, + 'sess_quit': True, +} + @pl_announce('Net') class NetPlugin: def __init__(self, ploader, settings): - settings = ploader.requires('Settings') + settings = utils.get_settings(settings, default_settings) self.bufsize = settings['bufsize'] self.sock_quit = settings['sock_quit'] self.event = ploader.requires('Event') @@ -173,7 +181,7 @@ def tick(self, name, data): time.sleep(1) else: time.sleep(timeout) - + #SOCKET_RECV - Socket is ready to recieve data def handleRECV(self, name, data): diff --git a/spock/plugins/core/settings.py b/spock/plugins/core/settings.py index f2bdaeb..121d763 100644 --- a/spock/plugins/core/settings.py +++ b/spock/plugins/core/settings.py @@ -1,27 +1,10 @@ -from spock.utils import pl_announce +from spock.utils import pl_announce, get_settings from spock.plugins import DefaultPlugins -#2 values = Attribute&Setting name, default value -#3 values = Attribute name, setting name, default value -default_settings = [ - ('plugins', DefaultPlugins), - ('plugin_settings', {}), - ('mc_username', 'username', 'Bot'), - ('mc_password', 'password', ''), - ('authenticated', True), - ('bufsize', 4096), - ('sock_quit', True), - ('sess_quit', True), -] - -for index, setting in enumerate(default_settings): - if len(setting) == 2: - default_settings[index] = (setting[0], setting[0], setting[1]) - class PloaderFetch: - def __init__(self, final_settings): - self.plugins = final_settings['plugins'] - self.plugin_settings = final_settings['plugin_settings'] + def __init__(self, plugins, plugin_settings): + self.plugins = plugins + self.plugin_settings = plugin_settings def get_plugins(self): return self.plugins @@ -29,15 +12,14 @@ def get_plugins(self): def get_plugin_settings(self, plugin): return self.plugin_settings.get(plugin, {}) -@pl_announce('Settings', 'PloaderFetch') +@pl_announce('PloaderFetch') class SettingsPlugin: def __init__(self, ploader, kwargs): - settings = kwargs.get('settings', {}) - final_settings = {} - for setting in default_settings: - val = kwargs.get(setting[1], settings.get(setting[1], setting[2])) - final_settings[setting[0]] = val - ploader.provides('PloaderFetch', PloaderFetch(final_settings)) - del final_settings['plugins'] - del final_settings['plugin_settings'] - ploader.provides('Settings', final_settings) + settings = get_settings(kwargs, kwargs.get('settings', {})) + plugin_list = settings.get('plugins', DefaultPlugins) + plugins = [] + plugin_settings = {} + for plugin in plugin_list: + plugins.append(plugin[1]) + plugin_settings[plugin[1]] = settings.get(plugin[0], {}) + ploader.provides('PloaderFetch', PloaderFetch(plugins, plugin_settings)) diff --git a/spock/plugins/helpers/start.py b/spock/plugins/helpers/start.py index 79f6985..c730bd8 100644 --- a/spock/plugins/helpers/start.py +++ b/spock/plugins/helpers/start.py @@ -7,12 +7,20 @@ a bot. """ +from spock import utils from spock.mcp import mcpacket, mcdata +default_settings = { + 'username': 'Bot', + 'password': None, + 'host': 'localhost', + 'port': 25565, +} + class StartPlugin: def __init__(self, ploader, settings): + self.settings = utils.get_settings(settings, default_settings) self.event = ploader.requires('Event') - self.settings = ploader.requires('Settings') self.net = ploader.requires('Net') self.auth = ploader.requires('Auth') @@ -20,8 +28,8 @@ def __init__(self, ploader, settings): def start(self, host = 'localhost', port = 25565): if 'error' not in self.auth.start_session( - self.settings['mc_username'], - self.settings['mc_password'] + self.settings['username'], + self.settings['password'] ): self.net.connect(host, port) self.handshake() diff --git a/spock/utils.py b/spock/utils.py index da76ddb..86703e3 100644 --- a/spock/utils.py +++ b/spock/utils.py @@ -2,6 +2,7 @@ ALL THE UTILS! """ #silly python2 +import copy try: string_types = unicode except NameError: @@ -87,6 +88,12 @@ def inner(cl): return cl return inner +def get_settings(settings, defaults): + final_settings = copy.deepcopy(defaults) + for k, v in settings.items(): + final_settings[k] = v + return final_settings + def mapshort2id(data): return data>>4, data&0x0F