Skip to content

Userscript Development

David Reed edited this page Oct 3, 2022 · 4 revisions

Tampermonkey scripts

Scripts containing // ==UserScript== will be treated as game-only legacy IDKR scripts.

Legacy IDKR scripts

Support for legacy IDKR scripts are supported.

exports.locations = ["game" /* 'all', 'social', 'editor' */];
exports.run = () => {
  alert("Hi");
};

Chief UserScript

JSON Metadata

  • Allows comments (// Comment, /* Block */)
  • Must be valid JSON (no JS style properties)
  • First occurance of const metadata = {...}; is used
  • End metadata object with semicolon
  • Can be anywhere; Preferably after 'use strict';
"use strict";

const metadata = {
  // Despite being valid JS syntax, this is parsed as JSON with comments
  name: "Userscript",
  author: "Chief Software",
  description: "A script to demonstrate new powerful APIs",
  version: 0.1,
  locations: ["game"],
  features: {
    // Blocked hosts take effect when the page loads
    block_hosts: ["domain.com"],
    // Command line flags take effect when the client launches
    command_line: ["--allow-running-insecure-content"],
    gui: {
      Work: {
        "Will alert?": {
          type: "boolean",
          walk: "will_alert",
          // Refers to an exported function
          change: "will_alert_change",
        },
      },
    },
    libs: {
      // Import the Utils library
      utils: true,
    },
    config: {
      will_alert: true,
    },
  },
};

// destructure
const { config, gui, libs } = metadata.features;

libs.utils.add_ele("style", () => document.head, {
  textContent: "* { color: red !IMPORTANT; }",
});

if (config.will_alert) {
  console.log("Will alert on GUI update");
}

export function will_alert_change(value, init) {
  if (value && init) alert("Updated. Hi");
  else alert("Changed will alert to: " + value);
}

Features

Feature Effect Description
gui Script load An object organized by category->controls
utils Script load An object including libraries to import
config Script load An object containing a default config.
block_hosts Page load An array of strings containing hosts to block
command_line Client launch An array of command-line flags

Config

  • Written to by the GUI
  • features.config always returns the latest version
  • Script author will be used as the key in config->userscripts

The above demo will result in config.json looking like:

{
	"userscripts": {
		"Chief Software": {
			"will_alert": true
		},
	},
}

Clone this wiki locally