Hypixel SkyBlock Wiki:Modules

Lua is a programming language that is available via the Scribunto wp:MediaWiki extension on the English The Hypixel Skyblock Wiki. Lua code can now be embedded into wiki templates by employing the "" functionality of Scribunto. This extension supports Lua 5.1 as of July 2015.

Running a module
Modules are run on normal wiki pages using the parser function. The syntax of #invoke is similar to template syntax, but with some differences. The most important difference is that you need to specify a function name. A function is a set of instructions that takes input values, processes them, and returns an output value. This is much like what a template does: you give it arguments, it processes them, and you get a result. However, you can define many functions in one Lua module, whereas you can only define one template on one page.

Furthermore, you can't just run a Lua module directly – you can only run one of the module's functions. The module is just a container for the functions, and doesn't do anything by itself. So there are two reasons that we need to input a function name: we can't run a module by itself, and without specifying a function name, Lua will not know which function it is we want to run.

Request a script
Visit Project:Lua requests to request help in writing a Lua script to perform a specific task on The Hypixel Skyblock Wiki or another Wikimedia Foundation project.

Unit testing
A few unit testing frameworks are available for Lua scripts on The Hypixel Skyblock Wiki. These allow an editor to execute the module with a given set of inputs and verify that the expected outputs are produced. They are useful for rapidly detecting software regressions, where modifications to a script introduce new (or identify old) problems.

By convention, unit tests for a module like Module:Example are placed in Module:Example/testcases, and are executed on Module talk:Example/testcases.

Module:ScribuntoUnit and Module:UnitTests are the more-used test frameworks. Category:Modules for test tools has a few other to review which may be interesting.

Wiki-specific features
Overall: Lua can only get input as text strings passed to the  and what can be fetched via mw.title.new(...):getContent and frame:expandTemplate. Lua output will not be preprocessed unless frame:preprocess is explicitly called, meaning that template calls, parser functions, etc. in the output will not work correctly. Also, all Lua in the page is limited to 10 seconds CPU time (you can look in the source code of a rendered page to see how long a template or module took to parse). And relative to standard Lua, Scribunto's Lua lacks all sorts of functions (see mw:Extension:Scribunto/Lua reference manual § Differences from standard Lua).

Lua input limitations
Lua code in Scribunto is only run when the page is being parsed. Therefore, the only user input that Lua can receive is by page editing – it cannot create a box that calculates the square root of a number you type in, or recalculate a piece of the Mandelbrot set depending on which part of the parent set you click on. The input Lua can receive includes any transcludeable text page on The Hypixel Skyblock Wiki.

Wikitext
Transcluded The Hypixel Skyblock Wiki headers frequently contain a hidden code such as "UNIQ5ae8f2aa414ff233-h-3--QINU" which may need to be stripped out in order for them to be parsed effectively.

Wikilinks using the Pipe trick  won't work if returned as output – they need to be written explicitly as Help. Other pre-save transforms, such as replacing with signatures, will also fail to be processed. Template transclusions, parser function calls, and variable substitutions (i.e. anything with a ) will not be processed, nor will tags such as or.

Labeling converted templates
Please place the lua template on the documentation subpage of all templates that use Lua. It will help to better communicate Lua usage and template conversions.