Skip to main content

LoliCode statements

In addition to blocks, LoliCode also has statements that can be used to control the flow of the script, print messages to the debugger log, and more.

LOG​

Prints text to the debugger log. Example:

LOG "hello"

CLOG​

Prints colored text to the debugger log. A full list of colors is available here (remove dashes and spaces and apply PascalCase). Example:

CLOG YellowGreen "hello"

JUMP​

Jumps to a specified point in the code. Remember to watch out for endless loops! Example:

...
#HERE
...
JUMP #HERE

REPEAT​

Repeats something N times. Example:

REPEAT 5
LOG "hello"
END

FOREACH​

Iterates over a list variable. Example:

BLOCK:ConstantList
value = ["one", "two", "three"]
=> VAR @list
ENDBLOCK

FOREACH elem IN list
LOG elem
END

WHILE​

Executes something while a condition is true. Example:

WHILE INTKEY 1 LessThan 2
...
END

IF / ELSE / ELSE IF​

Executes something, or something else. Example:

IF INTKEY 5 LessThan 1
LOG "nope"
ELSE IF INTKEY 5 LessThan 3
LOG "nope again"
ELSE
LOG "yep"
END

TRY / CATCH​

Executes something. If it fails, executes something else. Example:

TRY
// request to an unreliable URL
CATCH
// fallback request to a reliable URL
END

LOCK​

Very useful if you want to execute synchronous operations on global variables. It makes sure that only one bot can enter a given piece of code at a time, so that multiple bots do not edit the same global variable at the same time. Often used in conjunction with TRY/CATCH. Example:

LOCK globals
TRY
// Try to increase globals.Count by 1 if it exists
globals.Count++;
CATCH
// Create globals.Count if it doesn't exist
globals.Count = 1;
END
END

ACQUIRELOCK / RELEASELOCK​

Very useful if you want to execute asynchronous operations on global variables. It makes sure that only one bot can enter a given piece of code at a time, so that multiple bots do not edit the same global variable at the same time. You MUST use this in conjunction with TRY/CATCH/FINALLY. Example:

ACQUIRELOCK globals
TRY
// Do some async operation here
CATCH
throw; // Rethrow any exception
FINALLY
RELEASELOCK globals
END

SET VAR/CAP​

Sets a string variable, and optionally also marks it for capture. Introduced for consistency with OB1. Example:

SET VAR @myString "variable"
LOG myString

SET CAP @myCapture "capture"
LOG myCapture

SET USEPROXY​

Sets whether to use the currently set proxy or not. Example:

SET USEPROXY TRUE
SET USEPROXY FALSE

SET PROXY​

Sets a given proxy. The available types are: HTTP, HTTPS, SOCKS4, SOCKS4A, SOCKS5. Example:

SET PROXY "127.0.0.1" 9050 SOCKS5
SET PROXY "127.0.0.1" 9050 SOCKS5 "username" "password"

MARK​

Adds a variable to the capture. Example:

MARK @myVar

UNMARK​

Removes a variable from the capture. Example:

UNMARK @myVar

TAKEONE​

Takes a single item from a resource. You can configure resources in Config Settings > Data > Resources. You need to provide the name of the resource and the name of the variable that will be created (of type string). Example:

TAKEONE FROM "resourceName" => @myString
LOG myString

TAKE​

Takes multiple items from a resource. You can configure resources in Config Settings > Data > Resources. You need to provide the name of the resource and the name of the variable that will be created (of type List<string>). Example:

TAKE 5 FROM "resourceName" => @myList