The command reference for Twitch Plays Noita.

The question mark after the argument name means that it is optional.

Shortcodes are alternative short names for certain commands.

If there is a single numerical argument, the : symbol can be omitted, for example slot3~

Keys

  • up:duration?~ shortcode: u

    Hold W for the specified duration.

    Arguments:

    • duration: duration in milliseconds, at most 15000, defaults to 500. You can also specify whole seconds by appending ’s'
  • left:duration?~ shortcode: l

    Hold A for the specified duration.

    Arguments:

    • duration: duration in milliseconds, at most 15000, defaults to 500. You can also specify whole seconds by appending ’s'
  • down:duration?~ shortcode: d

    Hold S for the specified duration.

    Arguments:

    • duration: duration in milliseconds, at most 15000, defaults to 500. You can also specify whole seconds by appending ’s'
  • right:duration?~ shortcode: r

    Hold D for the specified duration.

    Arguments:

    • duration: duration in milliseconds, at most 15000, defaults to 500. You can also specify whole seconds by appending ’s'
  • interact~ shortcode: i

    Press E.

  • kick~ shortcode: k

    Press F.

  • slot:slot~ shortcode: s

    Press 1 through 8.

    Arguments:

    • slot: a number in range from 1 to 8
  • open-inventory~ shortcode: o

    Press Tab only if the inventory is closed.

    This command also waits for the game inventory state to actually change. Also this command moves the mouse to the top left corner of the screen to force mouse movement after opening the inventory, since if you don’t move it the game does not register hovering over slots lol.

  • close-inventory~ shortcode: x

    Press Tab only if the inventory is opened.

    This command also waits for the game inventory state to actually change.

  • pause~ >=Moderator

    Pause the game.

    This actually just presses the Esc key.

    And yes, chatters will be able to move the mouse around and click stuff, so this command is kinda annoying without full-stop~ as they could mess up the settings or start a different gamemode.

Macros

  • macro-record:name:script~ shortcode: mr

    Stores a string as a personal macro.

    Commands can accept complicated strings if you put them in quotes like so:

    macro-record:hop:"wait~ up~ wait~ up~ wait~ up~ wait~ up~"~

    Arguments:

    • name: string
    • script: string
  • macro-delete:name~ shortcode: md

    Deletes a macro created with macro-record~.

    Arguments:

    • name: string
  • global-macro-record:name:script~ >=Moderator shortcode: gmr

    Stores a string as a global macro, meaning it can be used by everyone.

    Arguments:

    • name: string
    • script: string
  • global-macro-delete:name~ >=Moderator shortcode: gmd

    Deletes a macro created with global-macro-record~.

    Arguments:

    • name: string
  • macro-print:name:login?~ shortcode: mp

    Replies with the stored macro.

    Can peek at other users macros if their login is specified, they’re all public here.

    Per-user timeout: 5s

    Arguments:

    • name: string
    • login: string, optional
  • global-macro-print:name~ shortcode: gmp

    Replies with the stored global macro.

    Per-user timeout: 5s

    Arguments:

    • name: string
  • macro-list:login?~ shortcode: ml

    List macros you/given chatter has recorded.

    Per-user timeout: 5s

    Arguments:

    • login: string, optional
  • global-macro-list~ shortcode: gml

    List global macros recorded.

    Per-user timeout: 5s

  • yoink:login:name:rename?~

    Copy someones macro to yourself.

    Arguments:

    • login: string
    • name: string
    • rename: string, optional
  • macro:name:login?~ shortcode: q

    Run the macro.

    Macros can call other macros, but there is a recursion limit!

    Also you can run a macro recorded by someone else by appending their login as the third argument.

    Arguments:

    • name: string
    • login: string, optional
  • repeat:times:script~

    Execute a given string several times.

    jump five times: repeat:5:" wait~ up~ "~

    The total limit of repetitions in a given message is 1000! This counts all repetitions, nested or inside of macros etc. Once the limit is reached, the command will error out.

    Arguments:

    • times: a number in range from 2 to 15
    • script: string
  • group:script:custom_status_name?~ shortcode: g

    Executes a given string, identical to what repeat:1:"script" could’ve been if a singular repeat was allowed.

    This is useful to group together parallel actions, for example:

    wait:5s~ group:" up~ | left~ "~

    Additionally, there is an optional name that you can attach to the group to have it shown on the status wall.

    Arguments:

    • script: string
    • custom_status_name: string, optional
  • lock:script~ shortcode: b

    Similarly to group, executes a given string without counting towards limits.

    The difference is that only one lock script can run at a time, if one is already running this command does nothing.

    Arguments:

    • script: string

Mouse

  • look:dx:dy~

    Position the mouse relative to the player on the screen.

    For example, look:0:0~ will move the mouse to the player’s position - but note that camera will move, quickly making the mouse position no longer be on the player.

    This is extremely useful, for example slot:5~ look:0:-70~ hold~ to douse Minä.

    Arguments:

    • dx: a number
    • dy: a number
  • look-right~ shortcode: lr

    A shortcut for look:500:0~.

  • look-left~ shortcode: ll

    A shortcut for look:-500:0~.

  • look-down~ shortcode: ld

    A shortcut for look:0:500~.

  • look-up~ shortcode: lu

    A shortcut for look:0:-500~.

  • look-up-right~ shortcode: lur

    A shortcut for look:500:-500~.

  • look-up-left~ shortcode: lul

    A shortcut for look:-500:-500~.

  • look-down-right~ shortcode: ldr

    A shortcut for look:500:500~.

  • look-down-left~ shortcode: ldl

    A shortcut for look:-500:500~.

  • mouse:x:y~ shortcode: m

    Move the mouse to the absolute position on the screen.

    The screen is 1920x1080, and the origin is in the center of it, so mouse:0:0~ will move the mouse to the center of the screen.

    Arguments:

    • x: a number
    • y: a number
  • mouse-move:dx:dy~ shortcode: mm

    Move the mouse relative to its current position.

    Arguments:

    • dx: a number
    • dy: a number
  • click~ shortcode: c

    Click the left mouse button.

  • throw~

    Click the right mouse button.

  • hold:millis?~ shortcode: h

    Hold left mouse button down for the specified duration of milliseconds (defaulting to 500).

    An example of consistently dragging an item in your inventory:

    open-inventory~ hotbar:5~ hold~ close-inventory~ | wait:250~ hotbar:8~

    You can replace hotbar:8~ with something like mouse:0:0~ if you want a little tomfoolery, but that will get you voted into the shadow realm.

    Arguments:

    • millis: duration in milliseconds, at most 15000, defaults to 500. You can also specify whole seconds by appending ’s'
  • hotbar:slot~

    A helper to move the mouse to the hotbar slot without you having to guess slot coordinates.

    Arguments:

    • slot: a number in range from 1 to 24
  • wand:wand:slot~

    A helper to move the mouse to the wand slot without you having to guess slot coordinates.

    Arguments:

    • wand: a number in range from 1 to 4
    • slot: a number in range from 1 to 26
  • restore-autosave~

    A shortcut for mouse:-100:85~.

    Moves the mouse to the position of the ‘Restore’ button on the autosave screen. You can type restore-autosave~ click~ to click it real fast.

Util

  • ping~

    Respond with “pong!”.

    I heard that scarcity creates value, so getting a pong is very cool and pog, because only one person can get it in an hour.

    Global timeout: 1h

  • echo:text~

    A building block for basic static text commands.

    This just makes the bot print the given text, but non-moderators can only call it through global macros.

    So you can call a global macro discord~ which will resolve to echo:"discord link etc"~ and print it.

    Per-user timeout: 5s

    Arguments:

    • text: string
  • last-error:login?~

    Respond with the last error message for user.

    Last error message is set when you run invalid commands, or if the command execution managed to crash somehow. In the latter case, you’ll be given the message id - please send it to me to look at logs and fix the issue.

    Per-user timeout: 3s

    Arguments:

    • login: string, optional
  • seed~

    Get the current seed (surely you are not planning to look at noitool, right?)

    Global timeout: 15s

  • death-count~

    Get the current death count

    Global timeout: 15s

  • fix-obs-capture~

    Sometimes the capture dies (but the game is fine) because of my brittle scripts.

    Try running this first before doing a full restart etc etc.

    Global timeout: 30s

  • fix-obs-sound~

    The sound setup is the most brittle jank thing actually, and dies most often.

    Try running this first before doing a full restart etc etc.

    Global timeout: 30s

  • wait:duration?~ shortcode: w

    Wait for a specified duration milliseconds.

    Very useful for multi-command messages.

    Arguments:

    • duration: duration in milliseconds, at most 15000, defaults to 500. You can also specify whole seconds by appending ’s'
  • break~

    Complete all current holds immediately.

    “Holds” here are referring to all “non-instantaneous” commands that are currently being executed right now - so movement, hold~ and wait~.

    This is kind of a niche thing, most likely you need interrupt~.

  • interrupt~

    Stop running all current commands. This is similar to break~, except the commands following the holds that get completed do not run.

  • full-stop~ >=Moderator

    Stop processing commands from everyone below the moderator level.

  • full-ahead~ >=Moderator

    Undo the effect of full-stop~.

Voting

  • yes~

    Vote yes in an ongoing vote.

  • no~

    Vote no in an ongoing vote.

  • is-vote~

    Check if there is an ongoing vote and what it is about.

    Global timeout: 10s

  • votekick:login~

    If several(!) people run this command with the same Twitch login (this is important, use their login, not display name) as an argument - this will start a vote to send that user to the shadow realm.

    The vote has to have >=70% yes votes for them to get yeeted.

    By “shadow realm” I mean that their commands will be ignored - initially for an hour, but if they get voted for the second time then forever, unless a moderator clears them.

    This is obviously to deal with trolls and other problematic users. Channel moderators and above are immune.

    Be aware that there can be only one vote at a time and this command has a large per-user cooldown, so dont waste it.

    Per-user timeout: 5m

    Arguments:

    • login: string
  • banish:login~ >=TwitchStaff

    Instantly banish a user to the shadow realm. Thin ice rule applies.

    Arguments:

    • login: string
  • pull-out:login~ >=Moderator

    Restore users ability to use the bot, bringing them back from the shadow realm regardless of their crimes.

    Arguments:

    • login: string
  • shadowbanned:login~

    Check if a user was yeeted into the shadow realm. Per-user 15 second cooldown.

    The user will or will not return depending on if it was their first offence, and if they dipped their toes in the shadow realm previously then they’re on thin ice.

    If you are yeeted currently (or forever), the bot ignores you utterly, so this won’t work ¯\_(ツ)_/¯.

    Per-user timeout: 15s

    Arguments:

    • login: string
  • vote-restart~

    This allows to start a vote to restart the game in case it crashed or got stuck or whatever, and I’m not there to fix it.

    This command could fix a lot of issues as it is fully kills and restarts everything (like the OBS capture might get broken etc).

    Needs several(!) people to run this to start the vote, and the vote itself has to have >=70% yes votes.

    Be aware that there can be only one vote at a time and this command has a large per-user cooldown, so dont waste it.

    Per-user timeout: 5m

  • restart~ >=Verified

    (Re)start the game immediately. This is the same as a successful vote-restart~, but instant.

    Global timeout: 2m

  • vote-reset~

    This allows to start a vote to restart the game and delete the world, in case you got soft-locked or the world is corrupted etc.

    Needs several(!) people to run this to start the vote, and the vote itself has to have >=70% yes votes.

    Be aware that there can be only one vote at a time and this command has a large per-user cooldown, so dont waste it.

    Per-user timeout: 5m

  • reset~ >=Moderator

    Reset the game (deleting the current world) immediately. This is the same as a successful vote-reset~, but instant.

    Global timeout: 2m

Permission levels

I am obviously just looking at the message badges lmao
  • (7) Caster - Only the broadcaster can use this command.
  • (6) Moderator - Channel moderators and above can use this command.
  • (5) TwitchAdmin - Twitch administrators and above can use this command.
  • (4) TwitchStaff - Twitch staff and above can use this command.
  • (3) Vip - Channel VIPs and above can use this command.
  • (2) Verified - Verified users (partners) and above can use this command.
  • (1) Subscriber - Channel subscribers and above can use this command.
  • (0) Viewer - Anyone can use this command.
Last modified 2025-04-06 03:01:18 via
6e174ef Twitch Plays Noita