Krawlet Lua Library CC: TWEAKED

A comprehensive Lua client library for the Krawlet API, designed for CC: Tweaked (Minecraft 1.20.1+)

⚡ Quick Install

Run this command on any CC: Tweaked computer:

wget https://krawlet.cc/krawlet.lua /krawlet.lua

Or use wget run for a one-liner install script.

Table of Contents

Getting Started

After installing the library, you can use it in any Lua program:

local krawlet = require("krawlet")

-- Check API health
local healthy, status = krawlet.healthCheck()
print("API Status:", status)

-- Get all shops
local shops = krawlet.getShops()
for _, shop in ipairs(shops or {}) do
    print(shop.name)
end

-- Find a player by name
local player = krawlet.getPlayerByName("Twijn")
if player then
    print("Address:", player.kromerAddress)
end

Configuration

krawlet.setEndpoint(endpoint)
Set the API endpoint URL. Defaults to production (https://api.krawlet.cc).
Parameters: endpoint (string) - Base URL
krawlet.setApiKey(apiKey)
Set the API key for authenticated requests. Required for API key management endpoints.
Parameters: apiKey (string) - Your API key (format: kraw_...)
krawlet.setDebug(enabled)
Enable or disable debug logging.
Parameters: enabled (boolean)
krawlet.getRateLimit()
Get the last rate limit information from API responses.
Returns: table|nil - {limit, remaining, reset}

Player Functions

krawlet.getPlayers()
Get all registered players.
Returns: table[]|nil, string? (error)
krawlet.getPlayerByName(name)
Get a player by their Minecraft username.
Parameters: name (string) | Returns: table|nil, string?
krawlet.getPlayerByUUID(uuid)
Get a player by their Minecraft UUID.
Parameters: uuid (string) | Returns: table|nil, string?
krawlet.getPlayerByAddress(address)
Get a player by their Kromer address.
Parameters: address (string) | Returns: table|nil, string?

Example: Player Lookup

local krawlet = require("krawlet")

-- Look up a player by name
local player, err = krawlet.getPlayerByName("Twijn")
if player then
    print("Player: " .. player.minecraftName)
    print("Address: " .. player.kromerAddress)
    print("Online: " .. tostring(player.online))
else
    print("Error: " .. (err or "Player not found"))
end

Shop Functions

krawlet.getShops()
Get all shops with their items and addresses.
Returns: table[]|nil, string?
krawlet.getShop(id)
Get a specific shop by its ID (computer ID).
Parameters: id (string|number) | Returns: table|nil, string?
krawlet.searchShops(query)
Search shops by name (case-insensitive partial match).
Parameters: query (string) | Returns: table[]|nil, string?

Item Functions

krawlet.getItems()
Get all items across all shops.
Returns: table[]|nil, string?
krawlet.searchItems(query)
Search items by name (case-insensitive partial match).
Parameters: query (string) | Returns: table[]|nil, string?
krawlet.findBestPrices(itemName, currency?, limit?)
Find items with the lowest buy prices. Great for finding deals!
Parameters: itemName, currency (default: "KRO"), limit (default: 10) | Returns: table[]|nil
krawlet.findBestSellPrices(itemName, currency?, limit?)
Find shops that buy items at the highest prices.
Parameters: itemName, currency (default: "KRO"), limit (default: 10) | Returns: table[]|nil

Example: Price Comparison

local krawlet = require("krawlet")

-- Find the best prices for diamonds
local deals = krawlet.findBestPrices("diamond", "KRO", 5)
if deals then
    print("Best diamond prices:")
    for i, deal in ipairs(deals) do
        local shopName = deal.shop and deal.shop.name or "Unknown Shop"
        print(string.format("%d. %s - %s KRO (stock: %d)", 
            i, shopName, krawlet.formatKromer(deal.price), deal.stock or 0))
    end
end

-- Find where to sell iron ingots
local sellDeals = krawlet.findBestSellPrices("iron_ingot")
if sellDeals and #sellDeals > 0 then
    local best = sellDeals[1]
    print("Best place to sell iron: " .. (best.shop and best.shop.name or "Unknown"))
    print("Price: " .. krawlet.formatKromer(best.price))
end

Known Addresses

krawlet.getKnownAddresses()
Get all known/verified Kromer addresses.
Returns: table[]|nil, string?
krawlet.lookupAddress(address)
Look up information about a known address.
Parameters: address (string) | Returns: table|nil, string?
krawlet.getAddressesByType(type)
Get known addresses filtered by type (official, shop, gamble, service, company).
Parameters: type (string) | Returns: table[]|nil, string?

API Key Management

krawlet.redeemQuickCode(code)
Redeem a 6-digit quick code to receive a full API key. The quick code can be obtained via the \krawlet api chatbox command.
Parameters: code (string - 6 digits) | Returns: table|nil, string?
krawlet.getApiKeyInfo(includeUsage?)
Get information about your current API key. Requires authentication.
Parameters: includeUsage (boolean, default: true) | Returns: table|nil, string?
krawlet.getApiKeyUsage()
Get detailed usage statistics for your API key. Requires authentication.
Returns: table|nil, string?

Example: Quick Code Authentication

local krawlet = require("krawlet")

-- Redeem a quick code from \krawlet api chat command
local result, err = krawlet.redeemQuickCode("123456")
if result then
    print("API Key received!")
    print("Tier: " .. result.tier)
    print("Rate Limit: " .. result.rateLimit .. " requests/hour")
    -- The API key is automatically set on success
    -- Save it to a file for future use:
    local f = fs.open("/.krawlet_key", "w")
    f.write(result.apiKey)
    f.close()
else
    print("Error: " .. (err or "Failed to redeem code"))
end

Utility Functions

krawlet.healthCheck()
Check if the API is online and healthy.
Returns: boolean (healthy), string (status or error)
krawlet.formatKromer(value, decimals?)
Format a number as a Kromer currency string with commas.
Parameters: value (number), decimals (default: 2) | Returns: string (e.g., "1,234.56 KRO")
krawlet.parseItemName(itemString)
Parse a Minecraft item string into its components.
Parameters: itemString (e.g., "minecraft:diamond") | Returns: table {mod, item, full}
krawlet.prettyPrint(table, indent?)
Pretty print a table for debugging.
Parameters: table, indent (number)
krawlet.install(path?)
Download and install/update the Krawlet library.
Parameters: path (default: "/krawlet.lua") | Returns: boolean, string

Complete Example

-- shop_finder.lua
-- A program to find the best prices for items

local krawlet = require("krawlet")

-- Load saved API key if exists
if fs.exists("/.krawlet_key") then
    local f = fs.open("/.krawlet_key", "r")
    krawlet.setApiKey(f.readAll())
    f.close()
end

-- Main program
print("=== Krawlet Shop Finder ===")
print()

while true do
    write("Search for item (or 'quit'): ")
    local query = read()
    
    if query == "quit" or query == "exit" then
        break
    end
    
    print("Searching...")
    local deals = krawlet.findBestPrices(query, "KRO", 5)
    
    if not deals or #deals == 0 then
        print("No results found for '" .. query .. "'")
    else
        print()
        print("Top 5 deals for '" .. query .. "':")
        print(string.rep("-", 50))
        
        for i, deal in ipairs(deals) do
            local name = deal.item.itemDisplayName or deal.item.itemName
            local shopName = deal.shop and deal.shop.name or "Unknown"
            local location = deal.shop and deal.shop.locationDescription or "Unknown location"
            
            print(string.format("%d. %s", i, name))
            print(string.format("   Shop: %s", shopName))
            print(string.format("   Price: %s", krawlet.formatKromer(deal.price)))
            print(string.format("   Stock: %d", deal.stock or 0))
            print(string.format("   Location: %s", location))
            print()
        end
    end
    
    -- Show rate limit info
    local rl = krawlet.getRateLimit()
    if rl then
        print(string.format("Rate limit: %d/%d remaining", rl.remaining, rl.limit))
    end
    print()
end

print("Goodbye!")