Code Monkey home page Code Monkey logo

factorio-mods-manager's Introduction

This is a tool for Factorio headless server management. It provides mod management : List / Install / Update / Remove / Enable / Disable.

This package is heavily inspired by Factorio-mod-updater and Factorio Updater so big think to you for your inspiration !

Installation

Just clone this repository in any directory. Here, /opt/factorio-mod-manager as an example.

git clone [email protected]:Tantriss/Factorio-mod-manager.git /opt/factorio-mod-manager

This script has been tested (only on Debian) with Python 2.7 and 3.5 using a single non-standard library, Requests.

To install the required dependency, you should need do no more than run pip install requests (or, easy_install requests). If this does not work, you are encouraged to read the linked documentation and try to figure out what's gone wrong.

Configuration

Some constant parameters can be put in a config file. These options are :

  • verbose (enable verbose mode)
  • factorio_path (path to the root folder of your Factorio installation)
  • username (Your username, see Username and token)
  • token (Your token, see Username and token)
  • should_reload (If the script should try to reload Factorio via systemctl and the service_name parameter)
  • service_name (If Factorio is started via a service and you want to restart it automatically otherwise let "null")

An example file can be found in this repo, just copy config.example.json to config.json and edit values inside.

Keep in mind that any corresponding command line argument will override these in config file.

Usage

From there, it's really simple: go in the folder you where you cloned this repo earlier, and run it (try it with --help first!). Here's an example session:

$ python mods_manager.py -h
usage: mods_manager.py [-h] [-p FACTORIO_PATH] [-u USERNAME] [-t TOKEN] [-d]
                       [-i MOD_NAME_TO_INSTALL] [-U] [-e] [-l]
                       [-r REMOVE_MOD_NAME] [-E LIST_ENABLE_MODS]
                       [-D LIST_DISABLE_MODS] [-v]

Install / Update / Remove mods for Factorio

optional arguments:
  -h, --help            show this help message and exit
  -p FACTORIO_PATH, --path-to-factorio FACTORIO_PATH
                        Path to your Factorio folder.
  -u USERNAME, --user USERNAME
                        Your Factorio service username, from player-data.json.
  -t TOKEN, --token TOKEN
                        Your Factorio service token, from player-data.json.
  -d, --dry-run         Don't download files, just state which mods updates
                        would be downloaded.
  -i MOD_NAME_TO_INSTALL, --install MOD_NAME_TO_INSTALL
                        Install the given mod. See README to find how easily
                        get the correct name for the mod.
  -U, --update          Enable the update process. By default, all mods are
                        updated. Seed -e/--update-enabled-only.
  -e, --update-enabled-only
                        Will only updates mods 'enabled' in 'mod-list.json'.
  -l, --list            List installed mods and return. Ignore other switches.
  -r REMOVE_MOD_NAME, --remove REMOVE_MOD_NAME
                        Remove specified mod.
  -E LIST_ENABLE_MODS, --enable-mod LIST_ENABLE_MODS
                        A mod name to enable. Repeat the flag for each mod you
                        want to enable.
  -D LIST_DISABLE_MODS, --disable-mod LIST_DISABLE_MODS
                        A mod name to disable. Repeat the flag for each mod
                        you want to disable.
  -v, --verbose         Print URLs and stuff as they happen.

More complex example :

Here we want to :

  • Install "bobvehicleequipment"
  • Enable "bobplates" and "bobgreenhouse" (assuming they are already installed)
  • Disable "IndustrialRevolution" because of incompatibility issues with bob's mods
  • Finally we update all mods

All this can be done in one command :

$ python mods_manager.py -p /app/projects/factorio/factorio -u YOUR_USER -t YOUR_TOKEN -i bobvehicleequipment -E bobplates -E bobgreenhouse -D IndustrialRevolution -U
Loading configuration...
Auto-detected Factorio version 0.17 from binary.
Enabling mod(s) ['bobplates', 'bobgreenhouse']
Parsing "mod-list.json"...
Writing to mod-list.json

Disabling mod(s) ['IndustrialRevolution']
Parsing "mod-list.json"...
Writing to mod-list.json

Starting mods update...
Parsing "mod-list.json"...
Getting mod "bobinserters" infos...
A file already exists at the path "/app/projects/factorio/factorio/mods/bobinserters_0.17.10.zip" and is identical (same SHA1), skipping...
Getting mod "bobplates" infos...
Downloading mod bobplates
[==================================================]

Installing mod bobvehicleequipment
Getting mod "bobvehicleequipment" infos...
Parsing "mod-list.json"...
Writing to mod-list.json
Downloading mod bobvehicleequipment
[==================================================]

Finished !

Username and token

The keen-eyed will have noticed the options for --user and --token. These allow you to supply a username and token normally used by the Factorio (like the in-game updater and authenticated multiplayer). Having them will allow you to download the mods from the Factorio API.

First, how to get them:

  • Go to the Factorio website and login to your account.
  • Click your username in top right to go to your profile.

How to find the correct mod name

In order to use this script, you have to find the correct mod name, not the "friendly" one. You can do it directly from mod portal !

Once you find an interesting mod, for example Bob's Metals, Chemicals and Intermediates, open the mod portal page, here https://mods.factorio.com/mod/bobplates

The correct mod name to use is the last part of the URL : bobplates.

License

The source of Factorio Mod Manager is Copyright 2019 Tristan "Tantriss" Chanove. It is licensed under the MIT license, available in this package in the file LICENSE.md.

TODO

  • Add crontab example
  • Interactive mod
  • Support multiple instances of Factorio

factorio-mods-manager's People

Contributors

tantrisse avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.