Scripting — API Reference

Complete reference for the api object passed to every script's setup function.

function setup(api)
    -- api.on, api.irc, api.log, etc.
end

Events

api.on(event, handler, priority?)

Register an event handler. Returns a handler ID for removal.

local id = api.on("irc.privmsg", function(event)
    -- handle message
end)

Parameters:

Param Type Description
event string Event name (see event list below)
handler function Handler function receiving event table
priority number Optional. Default: 50 (normal)

Handlers run in descending priority order. Return true from a handler to suppress the event (prevent lower-priority handlers and built-in handling from running).

Priority constants:

Constant Value Description
api.PRIORITY_HIGHEST 100 Run before all other handlers
api.PRIORITY_HIGH 75 Run early
api.PRIORITY_NORMAL 50 Default priority
api.PRIORITY_LOW 25 Run late
api.PRIORITY_LOWEST 0 Run after all other handlers
api.on("irc.privmsg", function(event)
    -- this handler runs before normal-priority handlers
end, api.PRIORITY_HIGH)

api.once(event, handler, priority?)

Same as api.on() but the handler fires only once, then removes itself.

api.off(id)

Remove a previously registered handler by its ID.

local id = api.on("irc.privmsg", handler)
api.off(id)  -- remove the handler

IRC Events

These events fire when the IRC server sends data.

irc.privmsg

A channel or private message.

api.on("irc.privmsg", function(event)
    -- event.connection_id  (string)
    -- event.nick           (string)
    -- event.ident          (string)
    -- event.hostname       (string)
    -- event.target         (string) channel or your nick
    -- event.channel        (string) same as target
    -- event.message        (string)
    -- event.is_channel     (string) "true" or "false"
end)

irc.action

A CTCP ACTION (/me message). Same fields as irc.privmsg.

irc.notice

Field Type Description
connection_id string
nick string Sender (nil for server notices)
target string
message string
from_server boolean

irc.join

Field Type Description
connection_id string
nick string
ident string
hostname string
channel string

irc.part

Same as irc.join plus message (part reason).

irc.quit

Field Type Description
connection_id string
nick string
ident string
hostname string
message string Quit reason

irc.kick

Field Type Description
connection_id string
nick string Who kicked
ident string
hostname string
channel string
kicked string Who was kicked
message string Kick reason

irc.nick

Field Type Description
connection_id string
nick string Old nick
new_nick string New nick
ident string
hostname string

irc.topic

Field Type Description
connection_id string
nick string Who changed it
channel string
topic string

irc.mode

Field Type Description
connection_id string
nick string Who set the mode
target string Channel or nick
modes string Mode string (e.g. "+o nick")

irc.invite

Field Type Description
connection_id string
nick string Who invited
channel string
invited string Who was invited

irc.ctcp_request / irc.ctcp_response

Field Type Description
connection_id string
nick string
ctcp_type string e.g. "PING", "TIME"
message string

irc.wallops

Field Type Description
connection_id string
nick string
message string
from_server boolean

DCC Events

These events fire for DCC CHAT activity. DCC connections are direct peer-to-peer TCP connections that bypass the IRC server.

Event Params Suppressible Description
dcc.chat.request connection_id, nick, ip, port Yes Incoming DCC CHAT offer
dcc.chat.connected connection_id, nick No DCC CHAT TCP connection established
dcc.chat.message connection_id, nick, text Yes Message received over DCC CHAT
dcc.chat.closed connection_id, nick, reason No DCC CHAT connection closed

dcc.chat.request

Fires when a remote user sends a DCC CHAT offer. Return true to suppress (auto-reject).

api.on("dcc.chat.request", function(event)
    -- event.connection_id  (string) IRC connection the offer arrived on
    -- event.nick           (string) offering nick
    -- event.ip             (string) IP address to connect to
    -- event.port           (number) TCP port
    api.ui.print("DCC CHAT offer from " .. event.nick .. " (" .. event.ip .. ":" .. event.port .. ")")
end)

dcc.chat.connected

Fires when a DCC CHAT TCP connection is fully established (either direction).

api.on("dcc.chat.connected", function(event)
    -- event.connection_id  (string)
    -- event.nick           (string)
end)

dcc.chat.message

Fires when a message arrives over an established DCC CHAT connection. Return true to suppress display.

api.on("dcc.chat.message", function(event)
    -- event.connection_id  (string)
    -- event.nick           (string)
    -- event.text           (string) raw message text
end)

dcc.chat.closed

Fires when a DCC CHAT connection closes (either side).

api.on("dcc.chat.closed", function(event)
    -- event.connection_id  (string)
    -- event.nick           (string)
    -- event.reason         (string) e.g. "remote closed", "timeout", "error"
end)

Lifecycle Events

connected

Field Type
connection_id string
nick string

disconnected

Field Type
connection_id string

command_input

Fired before a command executes. Return true to suppress.

Field Type
command string
args table
connection_id string

Commands

api.command(name, def)

Register a custom slash command.

api.command("greet", {
    handler = function(args, connection_id)
        local target = args[1] or "world"
        api.irc.say(target, "Hello, " .. target .. "!")
    end,
    description = "Send a greeting",
    usage = "/greet <nick>",
})

IRC Methods

All IRC methods take an optional connection_id as the last parameter. If omitted, the active buffer's connection is used.

api.irc.say(target, message, connection_id?)

Send a PRIVMSG to a channel or nick.

api.irc.action(target, message, connection_id?)

Send a CTCP ACTION (/me).

api.irc.notice(target, message, connection_id?)

Send a NOTICE.

api.irc.join(channel, key?, connection_id?)

Join a channel, optionally with a key.

api.irc.part(channel, message?, connection_id?)

Leave a channel with an optional part message.

api.irc.raw(line, connection_id?)

Send a raw IRC protocol line.

api.irc.nick(new_nick, connection_id?)

Change your nickname.

api.irc.whois(nick, connection_id?)

Send a WHOIS query.

api.irc.mode(target, mode_string, connection_id?)

Set a channel or user mode.

api.irc.kick(channel, nick, reason?, connection_id?)

Kick a user from a channel.

api.irc.ctcp(target, type, message?, connection_id?)

Send a CTCP request.


UI Methods

api.ui.print(text)

Display a local event message in the active buffer.

api.ui.print_to(buffer_id, text)

Display a local event message in a specific buffer.

api.ui.switch_buffer(buffer_id)

Switch to a buffer.

api.ui.execute(command_line)

Execute a client command (e.g. api.ui.execute("/set theme default")).


State Access

api.store.active_buffer()

Returns the active buffer ID, or nil.

api.store.our_nick(connection_id?)

Returns your current nick, or nil if not connected. If no connection_id is given, uses the active buffer's connection.

api.store.connections()

Returns a table of all connections. Each entry has: id, label, nick, connected, user_modes.

api.store.connection_info(connection_id)

Returns info for a specific connection, or nil.

api.store.buffers()

Returns a table of all buffers. Each entry has: id, connection_id, name, buffer_type, topic, unread_count.

api.store.buffer_info(buffer_id)

Returns info for a specific buffer, or nil.

api.store.nicks(buffer_id)

Returns a table of nicks in a buffer. Each entry has: nick, prefix, modes, away.


Config

api.config.get(key)

Get a per-script config value.

api.config.set(key, value)

Set a per-script config value at runtime.

api.config.app_get(key_path)

Read an app-level config value using dot-separated path. Returns the value as a string, or nil.

local theme = api.config.app_get("general.theme")
local nick_width = api.config.app_get("display.nick_width")

Timers

api.timer(ms, handler)

Start a repeating timer. Returns a timer ID.

api.timeout(ms, handler)

Start a one-shot timeout. Returns a timer ID.

api.cancel_timer(id)

Cancel a timer.


Logging

api.log(message)

Log a debug message. Only outputs when scripts.debug = true in config.