@antiraid/datetime

This plugin allows for the managing timezones.

Types

Timezone

A timezone object.

Methods

Timezone:utcToTz
function Timezone:utcToTz(year: number, month: number, day: number, hours: number, minutes: number, secs: number, all: boolean?)

Translates a timestamp in UTC time to a datetime in the said specific timezone.

Parameters
  • year (number): The year to translate.
  • month (number): The month to translate.
  • day (number): The day to translate.
  • hours (number): The hours to translate.
  • minutes (number): The minutes to translate.
  • secs (number): The seconds to translate.
  • all (boolean?): Whether to return both offsets if the time is ambiguous.
Returns
  • date (DateTime): The translated datetime.- date2 (DateTime?): The second translated datetime if the time is ambiguous.
Timezone:tzToUtc
function Timezone:tzToUtc(year: number, month: number, day: number, hours: number, minutes: number, secs: number, all: boolean?)

Translates a timestamp in the specified timezone to a datetime in UTC.

Parameters
  • year (number): The year to translate.
  • month (number): The month to translate.
  • day (number): The day to translate.
  • hours (number): The hours to translate.
  • minutes (number): The minutes to translate.
  • secs (number): The seconds to translate.
  • all (boolean?): Whether to return both offsets if the time is ambiguous.
Returns
  • date (DateTime): The translated datetime.- date2 (DateTime?): The second translated datetime if the time is ambiguous.
Timezone:timeUtcToTz
function Timezone:timeUtcToTz(hours: number, minutes: number, secs: number): DateTime

Translates a time of the current day in UTC time to a datetime in the said specific timezone.

Parameters
  • hours (number): The hours to translate.
  • minutes (number): The minutes to translate.
  • secs (number): The seconds to translate.
Returns
  • date (DateTime): The translated datetime.
Timezone:timeTzToUtc
function Timezone:timeTzToUtc(hours: number, minutes: number, secs: number): DateTime

Translates a time of the current day in the said specific timezone to a datetime in UTC.

Parameters
  • hours (number): The hours to translate.
  • minutes (number): The minutes to translate.
  • secs (number): The seconds to translate.
Returns
  • date (DateTime): The translated datetime.
Timezone:now
function Timezone:now(): DateTime

Translates the current timestamp to a datetime in the said specific timezone.

Returns
  • date (DateTime): The translated datetime.

TimeDelta

A time delta object. Supports addition/subtraction with another TimeDelta object as well as comparisons with them.

Fields

  • nanos (number): The number of nanoseconds in the time delta.
  • micros (number): The number of microseconds in the time delta.
  • millis (number): The number of milliseconds in the time delta.
  • seconds (number): The number of seconds in the time delta.
  • minutes (number): The number of minutes in the time delta.
  • hours (number): The number of hours in the time delta.
  • days (number): The number of days in the time delta.
  • weeks (number): The number of weeks in the time delta.

Methods

TimeDelta:offset_string
function TimeDelta:offset_string(): string

Returns the offset as a string.

Returns
  • offset (string): The offset as a string.

DateTime

A datetime object. Supports addition/subtraction with TimeDelta objects as well as comparisons with other DateTime objects.

Fields

  • year (number): The year of the datetime.
  • month (number): The month of the datetime.
  • day (number): The day of the datetime.
  • hour (number): The hour of the datetime.
  • minute (number): The minute of the datetime.
  • second (number): The second of the datetime.
  • timestamp_seconds (number): The timestamp in seconds of the datetime from the Unix epoch.
  • timestamp_millis (number): The timestamp in milliseconds of the datetime from the Unix epoch.
  • timestamp_micros (number): The timestamp in microseconds of the datetime from the Unix epoch.
  • timestamp_nanos (number): The timestamp in nanoseconds of the datetime from the Unix epoch.
  • tz (Timezone): The timezone of the datetime.
  • offset (TimeDelta): The offset of the datetime.

Methods

DateTime:with_timezone
function DateTime:with_timezone(tz: Timezone): DateTime

Converts the datetime to the specified timezone.

Parameters
  • tz (Timezone): The timezone to convert to.
Returns
  • dt (DateTime): The converted datetime.
DateTime:format
function DateTime:format(format: string): string

Formats the datetime using the specified format string.

Parameters
  • format (string): The format string to use.
Returns
  • formatted (string): The formatted datetime.
DateTime:duration_since
function DateTime:duration_since(other: DateTime): TimeDelta

Calculates the duration between the current datetime and another datetime.

Parameters
  • other (DateTime): The other datetime to calculate the duration to.
Returns
  • td (TimeDelta): The duration between the two datetimes.

Methods

new

function new(timezone: string): Timezone

Returns a new Timezone object if the timezone is recognized/supported.

Parameters

  • timezone (string): The timezone to get the offset for.

Returns

  • tzobj (Timezone): The timezone userdata object.

timedelta_weeks

function timedelta_weeks(weeks: number): TimeDelta

Creates a new TimeDelta object with the specified number of weeks.

Parameters

  • weeks (number): The number of weeks.

Returns

timedelta_days

function timedelta_days(days: number): TimeDelta

Creates a new TimeDelta object with the specified number of days.

Parameters

  • days (number): The number of days.

Returns

timedelta_hours

function timedelta_hours(hours: number): TimeDelta

Creates a new TimeDelta object with the specified number of hours.

Parameters

  • hours (number): The number of hours.

Returns

timedelta_minutes

function timedelta_minutes(minutes: number): TimeDelta

Creates a new TimeDelta object with the specified number of minutes.

Parameters

  • minutes (number): The number of minutes.

Returns

timedelta_seconds

function timedelta_seconds(seconds: number): TimeDelta

Creates a new TimeDelta object with the specified number of seconds.

Parameters

  • seconds (number): The number of seconds.

Returns

timedelta_millis

function timedelta_millis(millis: number): TimeDelta

Creates a new TimeDelta object with the specified number of milliseconds.

Parameters

  • millis (number): The number of milliseconds.

Returns

timedelta_micros

function timedelta_micros(micros: number): TimeDelta

Creates a new TimeDelta object with the specified number of microseconds.

Parameters

  • micros (number): The number of microseconds.

Returns

timedelta_nanos

function timedelta_nanos(nanos: number): TimeDelta

Creates a new TimeDelta object with the specified number of nanoseconds.

Parameters

  • nanos (number): The number of nanoseconds.

Returns


@antiraid/discord

This plugin allows for templates to interact with the Discord API. Types are as defined by Discord if not explicitly documented

Types

GetAuditLogOptions

Options for getting audit logs in Discord

{
  "action_type": 1,
  "user_id": "0",
  "before": "0",
  "limit": 0
}

Fields

GetChannelOptions

Options for getting a channel in Discord

{
  "channel_id": "0"
}

Fields

  • channel_id (string): The channel ID to get

EditChannel

The data for editing a channel in Discord

{
  "name": "my-channel",
  "type": 0,
  "position": 7,
  "topic": "My channel topic",
  "nsfw": true,
  "rate_limit_per_user": 5,
  "user_limit": 10,
  "parent_id": "0",
  "rtc_region": "us-west",
  "video_quality_mode": 1,
  "default_auto_archive_duration": 1440,
  "flags": 18,
  "default_reaction_emoji": {
    "emoji_id": "0",
    "emoji_name": null
  },
  "status": "online",
  "archived": false,
  "auto_archive_duration": 1440,
  "locked": false,
  "invitable": true
}

Fields

  • type (number?): The type of the channel
  • position (number?): The position of the channel
  • topic (string?): The topic of the channel
  • nsfw (bool?): Whether the channel is NSFW
  • rate_limit_per_user (number?): The rate limit per user/Slow mode of the channel
  • bitrate (number?): The bitrate of the channel
  • permission_overwrites ({Serenity.PermissionOverwrite}?): The permission overwrites of the channel
  • parent_id (string??): The parent ID of the channel
  • rtc_region (string??): The RTC region of the channel
  • video_quality_mode (number?): The video quality mode of the channel
  • default_auto_archive_duration (number?): The default auto archive duration of the channel
  • flags (string?): The flags of the channel
  • available_tags ({Serenity.ForumTag}?): The available tags of the channel
  • default_reaction_emoji (Serenity.ForumEmoji??): The default reaction emoji of the channel
  • default_thread_rate_limit_per_user (number?): The default thread rate limit per user
  • default_sort_order (number?): The default sort order of the channel
  • default_forum_layout (number?): The default forum layout of the channel
  • archived (bool?): Whether the thread is archived (thread only)
  • auto_archive_duration (number?): The auto archive duration of the thread (thread only)
  • locked (bool?): Whether the thread is locked (thread only)
  • invitable (bool?): Whether the thread is invitable (thread only)
  • applied_tags ({Serenity.ForumTag}?): The applied tags of the thread (thread only)

EditChannelOptions

Options for editing a channel in Discord

{
  "channel_id": "0",
  "reason": "",
  "data": {
    "name": "my-channel",
    "type": 0,
    "position": 7,
    "topic": "My channel topic",
    "nsfw": true,
    "rate_limit_per_user": 5,
    "user_limit": 10,
    "parent_id": "0",
    "rtc_region": "us-west",
    "video_quality_mode": 1,
    "default_auto_archive_duration": 1440,
    "flags": 18,
    "default_reaction_emoji": {
      "emoji_id": "0",
      "emoji_name": null
    },
    "status": "online",
    "archived": false,
    "auto_archive_duration": 1440,
    "locked": false,
    "invitable": true
  }
}

Fields

  • channel_id (string): The channel ID to edit
  • reason (string): The reason for editing the channel
  • data (EditChannel): The new channels' data

DeleteChannelOptions

Options for deleting a channel in Discord

{
  "channel_id": "0",
  "reason": ""
}

Fields

  • channel_id (string): The channel ID to delete
  • reason (string): The reason for deleting the channel

CreateMessageAttachment

An attachment in a message

[
  {
    "id": 0,
    "filename": "test.txt",
    "description": "Test file"
  }
]

Fields

  • filename (string): The filename of the attachment
  • description (string?): The description (if any) of the attachment
  • content ({byte}): The content of the attachment

CreateMessageOptions

Options for sending a message in a channel in Discord

{
  "channel_id": "0",
  "data": {
    "tts": false,
    "embeds": [],
    "sticker_ids": [],
    "enforce_nonce": false
  }
}

Fields

CreateInteractionResponse

Options for creating an interaction response in Discord

Fields

DiscordExecutor

DiscordExecutor allows templates to access/use the Discord API in a sandboxed form.

Methods

DiscordExecutor:get_audit_logs
function DiscordExecutor:get_audit_logs(data: GetAuditLogOptions): 

Gets the audit logs

Note that this method returns a promise that must be yielded using promise.yield to actually execute and return results.

Parameters
Returns
  • Lazy<Serenity.AuditLogs> (): The audit log entry
DiscordExecutor:get_channel
function DiscordExecutor:get_channel(data: GetChannelOptions): 

Gets a channel

Note that this method returns a promise that must be yielded using promise.yield to actually execute and return results.

Parameters
Returns
  • Lazy<Serenity.GuildChannel> (): The guild channel
DiscordExecutor:edit_channel
function DiscordExecutor:edit_channel(data: EditChannelOptions): 

Edits a channel

Note that this method returns a promise that must be yielded using promise.yield to actually execute and return results.

Parameters
Returns
  • Lazy<Serenity.GuildChannel> (): The guild channel
DiscordExecutor:delete_channel
function DiscordExecutor:delete_channel(data: DeleteChannelOptions): 

Deletes a channel

Note that this method returns a promise that must be yielded using promise.yield to actually execute and return results.

Parameters
Returns
  • Lazy<Serenity.GuildChannel> (): The guild channel
DiscordExecutor:create_message
function DiscordExecutor:create_message(data: SendMessageChannelAction): 

Creates a message

Note that this method returns a promise that must be yielded using promise.yield to actually execute and return results.

Parameters
Returns
  • Lazy<Message> (): The message
DiscordExecutor:create_interaction_response
function DiscordExecutor:create_interaction_response(data: CreateInteractionResponse): 

Creates an interaction response

Note that this method returns a promise that must be yielded using promise.yield to actually execute and return results.

Parameters
Returns
  • Lazy<Message> (): The message

Methods

new

function new(token: TemplateContext): DiscordExecutor

Parameters

Returns


@antiraid/img_captcha

This plugin allows for the creation of text/image CAPTCHA's with customizable filters which can be useful in protecting against bots.

Types

CaptchaConfig

Captcha configuration. See examples for the arguments

{
  "char_count": 5,
  "filters": [
    {
      "filter": "Noise",
      "prob": 0.1
    },
    {
      "filter": "Wave",
      "f": 4.0,
      "amp": 2.0,
      "d": "horizontal"
    },
    {
      "filter": "Line",
      "p1": [
        1.0,
        0.0
      ],
      "p2": [
        20.0,
        20.0
      ],
      "thickness": 2.0,
      "color": {
        "r": 0,
        "g": 30,
        "b": 100
      }
    },
    {
      "filter": "RandomLine"
    },
    {
      "filter": "Grid",
      "y_gap": 30,
      "x_gap": 10
    },
    {
      "filter": "ColorInvert"
    }
  ],
  "viewbox_size": [
    512,
    512
  ],
  "set_viewbox_at_idx": null
}

Fields

  • char_count (u8): The number of characters the CAPTCHA should have.
  • filters ({any}): See example for the parameters to pass for the filter as well as https://github.com/Anti-Raid/captcha
  • viewbox_size ([(u32, u32)](#type.(u32, u32))): The size of the viewbox to render the CAPTCHA in.
  • set_viewbox_at_idx (Option): At what index of CAPTCHA generation should a viewbox be created at.

Methods

new

function new(config: CaptchaConfig): {u8}

Creates a new CAPTCHA with the given configuration.

Note that this method returns a promise that must be yielded using promise.yield to actually execute and return results.

Parameters

  • config (CaptchaConfig): The configuration to use for the CAPTCHA.

Returns

  • captcha ({u8}): The created CAPTCHA object.

@antiraid/interop

This plugin allows interoperability with the Luau controller.

Types

null

null is a special value that represents nothing. It is often used in AntiRaid instead of nil due to issues regarding existence etc. null is not equal to nil but is also an opaque type.

array_metatable

array_metatable is a special metatable that is used to represent arrays across the Lua-AntiRaid templating subsystem boundary. This metatable must be set on all arrays over this boundary and is required to ensure AntiRaid knows the value you're sending it is actually an array and not an arbitrary Luau table.

Methods

memusage

function memusage(): f64

Returns the current memory usage of the Lua VM.

Returns

  • memory_usage (f64): The current memory usage, in bytes, of the Lua VM.

@antiraid/kv

Utilities for key-value operations.

Types

KvRecord

KvRecord represents a key-value record with metadata.

{
  "key": "",
  "value": null,
  "exists": false,
  "created_at": null,
  "last_updated_at": null
}

Fields

  • key (string): The key of the record.
  • value (any): The value of the record.
  • exists (bool): Whether the record exists.
  • created_at (datetime): The time the record was created.
  • last_updated_at (datetime): The time the record was last updated.

KvExecutor

KvExecutor allows templates to get, store and find persistent data within a scope.

Methods

KvExecutor:find

Finds records in a scoped key-value database. % can be used as wildcards before/after the query. E.g. %{KEY}% will search for {KEY} anywhere in the string, %{KEY} will search for keys which end with {KEY} and _{KEY} will search for a single character before {KEY}.

function KvExecutor:find(key: string): {KvRecord}

Note that this method returns a promise that must be yielded using promise.yield to actually execute and return results.

Parameters
  • key (string): The key to search for. % matches zero or more characters; _ matches a single character. To search anywhere in a string, surround {KEY} with %, e.g. %{KEY}%
Returns
KvExecutor:exists

Determines if a key exists in the scoped key-value database.

function KvExecutor:exists(key: string): bool

Note that this method returns a promise that must be yielded using promise.yield to actually execute and return results.

Parameters
  • key (string): The key to check for existence.
Returns
  • exists (bool): Whether the key exists.
KvExecutor:get

Returns the value of a key in the scoped key-value database.

function KvExecutor:get(key: string)

Note that this method returns a promise that must be yielded using promise.yield to actually execute and return results.

Parameters
  • key (string): The key to get.
Returns
  • value (any): The value of the key.- exists (bool): Whether the key exists.
KvExecutor:getrecord
function KvExecutor:getrecord(key: string): KvRecord

Note that this method returns a promise that must be yielded using promise.yield to actually execute and return results.

Parameters
  • key (string): The key to get.
Returns
  • record (KvRecord): The record of the key.
KvExecutor:set
function KvExecutor:set(key: string, value: any)

Note that this method returns a promise that must be yielded using promise.yield to actually execute and return results.

Parameters
  • key (string): The key to set.
  • value (any): The value to set.
KvExecutor:delete
function KvExecutor:delete(key: string)

Note that this method returns a promise that must be yielded using promise.yield to actually execute and return results.

Parameters
  • key (string): The key to delete.

Methods

new

function new(token: TemplateContext, scope: string?): KvExecutor

Parameters

  • token (TemplateContext): The token of the template to use.
  • scope (string?): The scope of the executor. this_guild to use the originating guilds data, owner_guild to use the KV of the guild that owns the template on the shop. Defaults to this_guild if not specified.

Returns

TO MOVE TO PRIMITIVES DOCS

  • guild_id (string): The guild ID the executor will perform key-value operations on.
  • origin_guild_id (string): The originating guild ID (the guild ID of the template itself).
  • allowed_caps ({string}): The allowed capabilities in the current context.
  • has_cap (function): A function that returns true if the current context has the capability specified.
  • scope (string): The scope of the executor. Either this_guild for the originating guild, or owner_guild for the guild that owns the template (the template that owns the template on the shop if a shop template or the guild that owns the template otherwise).

@antiraid/lazy

This plugin allows for templates to interact with and create 'lazy' data as well as providing documentation for the type. Note that events are not 'lazy' data's and have their own semantics.

Types

Lazy

A lazy data type that is only serialized to Lua upon first access. This can be much more efficient than serializing the data every time it is accessed. Note that events are not 'lazy' data's and have their own semantics.

Fields

  • data (T): The inner data. This is cached upon first access
  • lazy (boolean): Always returns true. Allows the user to check if the data is a lazy or not

Methods

new

function new(data: TemplateContext): Lazy<any>

Creates a new Lazy type from data. This can be useful as a deep-copy implementation [lazy.new(value).data is guaranteed to do a deepcopy of data as long as value is serializable]

Parameters

Returns

  • lazy (Lazy): A lazy value

@antiraid/lockdowns

This plugin allows for templates to interact with AntiRaid lockdowns

Types

Lockdown

A created lockdown

{
  "id": "805c0dd1-a625-4875-81e4-8edc6a14f659",
  "reason": "Testing",
  "type": "qsl",
  "data": {},
  "created_at": "2025-01-13T04:57:43.488340240Z"
}

Fields

  • id (string): The id of the lockdown
  • reason (string): The reason for the lockdown
  • type (string): The type of lockdown in string form
  • data (any): The data associated with the lockdown
  • created_at (string): The time the lockdown was created

LockdownExecutor

An executor for listing, creating and removing lockdowns

Methods

LockdownExecutor:list
function LockdownExecutor:list(): {Lockdown}

Lists all active lockdowns

Note that this method returns a promise that must be yielded using promise.yield to actually execute and return results.

Returns
  • lockdowns ({Lockdown}): A list of all currently active lockdowns
LockdownExecutor:qsl
function LockdownExecutor:qsl(reason: string)

Starts a quick server lockdown

Note that this method returns a promise that must be yielded using promise.yield to actually execute and return results.

Parameters
  • reason (string): The reason for the lockdown
LockdownExecutor:tsl
function LockdownExecutor:tsl(reason: string)

Starts a traditional server lockdown

Note that this method returns a promise that must be yielded using promise.yield to actually execute and return results.

Parameters
  • reason (string): The reason for the lockdown
LockdownExecutor:scl
function LockdownExecutor:scl(channel: string, reason: string)

Starts a lockdown on a single channel

Note that this method returns a promise that must be yielded using promise.yield to actually execute and return results.

Parameters
  • channel (string): The channel to lock down
  • reason (string): The reason for the lockdown
LockdownExecutor:role
function LockdownExecutor:role(role: string, reason: string)

Starts a lockdown on a role

Note that this method returns a promise that must be yielded using promise.yield to actually execute and return results.

Parameters
  • role (string): The role to lock down
  • reason (string): The reason for the lockdown
LockdownExecutor:remove
function LockdownExecutor:remove(id: string)

Removes a lockdown

Note that this method returns a promise that must be yielded using promise.yield to actually execute and return results.

Parameters
  • id (string): The id of the lockdown to remove

Methods

new

function new(token: TemplateContext): LockdownExecutor

Parameters

Returns


@antiraid/permissions

Utilities for handling permission checks.

Types

Permission

Permission is the primitive permission type used by AntiRaid. See https://github.com/InfinityBotList/kittycat for more information

{
  "namespace": "moderation",
  "perm": "ban",
  "negator": false
}

Fields

  • namespace (string): The namespace of the permission.
  • perm (string): The permission bit on the namespace.
  • negator (bool): Whether the permission is a negator permission or not

StaffPermissions

StaffPermissions as per kittycat terminology.

{
  "user_positions": [
    {
      "id": "1234567890",
      "index": 1,
      "perms": [
        {
          "namespace": "moderation",
          "perm": "ban",
          "negator": false
        },
        {
          "namespace": "moderation",
          "perm": "kick",
          "negator": false
        }
      ]
    },
    {
      "id": "0987654321",
      "index": 2,
      "perms": [
        {
          "namespace": "moderation",
          "perm": "ban",
          "negator": false
        },
        {
          "namespace": "moderation",
          "perm": "kick",
          "negator": false
        }
      ]
    }
  ],
  "perm_overrides": [
    {
      "namespace": "moderation",
      "perm": "ban",
      "negator": true
    },
    {
      "namespace": "moderation",
      "perm": "kick",
      "negator": true
    }
  ]
}

Fields

PartialStaffPosition

PartialStaffPosition as per kittycat terminology.

{
  "id": "1234567890",
  "index": 1,
  "perms": [
    {
      "namespace": "moderation",
      "perm": "ban",
      "negator": false
    },
    {
      "namespace": "moderation",
      "perm": "kick",
      "negator": false
    }
  ]
}

Fields

  • id (string): The ID of the staff member.
  • index (number): The index of the staff member.
  • perms ({Permission}): The permissions of the staff member.

Methods

permission_from_string

function permission_from_string(perm_string: string): Permission

Returns a Permission object from a string.

Parameters

  • perm_string (string): The string to parse into a Permission object.

Returns

  • permission (Permission): The parsed Permission object.

permission_to_string

function permission_to_string(permission: Permission): string

Returns a string from a Permission object.

Parameters

  • permission (Permission): The Permission object to parse into a string.

Returns

  • perm_string (string): The parsed string.

has_perm

function has_perm(permissions: {Permission}, permission: Permission): bool

Checks if a list of permissions in Permission object form contains a specific permission.

Parameters

Returns

  • has_perm (bool): Whether the permission is present in the list of permissions as per kittycat rules.

has_perm_str

function has_perm_str(permissions: {string}, permission: string): bool

Checks if a list of permissions in canonical string form contains a specific permission.

Parameters

  • permissions ({string}): The list of permissions
  • permission (string): The permission to check for.

Returns

  • has_perm (bool): Whether the permission is present in the list of permissions as per kittycat rules.

staff_permissions_resolve

function staff_permissions_resolve(sp: StaffPermissions): {Permission}

Resolves a StaffPermissions object into a list of Permission objects. See https://github.com/InfinityBotList/kittycat for more details

Parameters

Returns

  • permissions ({Permission}): The resolved list of Permission objects.

check_patch_changes

function check_patch_changes(manager_perms: {Permission}, current_perms: {Permission}, new_perms: {Permission})

Checks if a list of permissions can be patched to another list of permissions.

Parameters

  • manager_perms ({Permission}): The permissions of the manager.
  • current_perms ({Permission}): The current permissions of the user.
  • new_perms ({Permission}): The new permissions of the user.

Returns

  • can_patch (bool): Whether the permissions can be patched.- error (any): The error if the permissions cannot be patched. Will contain type field with the error type and additional fields depending on the error type.

@antiraid/promise

Lua Promises, yield for a promise to execute the async action returning its result.

Types

LuaPromise

LuaPromise provides a promise that must be yielded to actually execute and get the result of the async action.

Methods

yield

function yield(promise: LuaPromise<T>): T

Yields the promise to execute the async action and return its result. Note that this is the only function other than stream.next that yields.

Parameters

Returns

  • T (T): The result of executing the promise.

Promise Execution Cycle

When you create a promise, it does not do anything (in essence, it acts like a future). You must yield the promise to actually execute the async action and get the result. This is because the Lua VM is single-threaded and cannot execute things concurrently so your code must yield to allow the Promises' internal code to run and return the result back, which resumes your code.

local promise = someAsyncAction() -- A LuaPromise<T> is returned
local result = promise.yield(promise) -- Now, result is a ``T``!

While usually not very useful, the created promise can also be re-used multiple times, as it is not consumed by yielding it.

local promise = someAsyncAction() -- A LuaPromise<T> is returned
local result1 = promise.yield(promise) -- Now, result1 is a ``T``!
local result2 = promise.yield(promise) -- Now, result2 is a ``T``!

@antiraid/stings

List, get, create, update and delete stings on Anti-Raid.

Types

StingCreate

A type representing a new sting to be created.

{
  "src": "test",
  "stings": 10,
  "reason": "test",
  "void_reason": null,
  "guild_id": "128384",
  "creator": "system",
  "target": "user:1945824",
  "state": "active",
  "duration": {
    "secs": 60,
    "nanos": 0
  },
  "sting_data": {
    "a": "b"
  }
}

Fields

  • src (string?): The source of the sting.
  • stings (number): The number of stings.
  • reason (string?): The reason for the stings.
  • void_reason (string?): The reason the stings were voided.
  • guild_id (string): The guild ID the sting targets. MUST MATCH THE GUILD ID THE TEMPLATE IS RUNNING ON
  • creator (StingTarget): The creator of the sting.
  • target (StingTarget): The target of the sting.
  • state (string): The state of the sting. Must be one of 'active', 'voided' or 'handled'
  • duration (Duration?): When the sting expires as a duration.
  • sting_data (any?): The data/metadata present within the sting, if any.

Sting

Represents a sting on AntiRaid

{
  "id": "470a2958-3827-4e59-8b97-928a583a37a3",
  "src": "test",
  "stings": 10,
  "reason": "test",
  "void_reason": null,
  "guild_id": "128384",
  "creator": "system",
  "target": "user:1945824",
  "state": "active",
  "created_at": "2025-01-13T04:57:43.488668165Z",
  "duration": {
    "secs": 60,
    "nanos": 0
  },
  "sting_data": {
    "a": "b"
  },
  "handle_log": {
    "a": "b"
  }
}

Fields

  • id (string): The sting ID.
  • src (string?): The source of the sting.
  • stings (number): The number of stings.
  • reason (string?): The reason for the stings.
  • void_reason (string?): The reason the stings were voided.
  • guild_id (string): The guild ID the sting targets. MUST MATCH THE GUILD ID THE TEMPLATE IS RUNNING ON
  • creator (StingTarget): The creator of the sting.
  • target (StingTarget): The target of the sting.
  • state (StingState): The state of the sting.
  • duration (Duration?): When the sting expires as a duration.
  • sting_data (any?): The data/metadata present within the sting, if any.
  • handle_log (any): The handle log encountered while handling the sting.
  • created_at (string): When the sting was created at.

StingExecutor

An sting executor is used to execute actions related to stings from Lua templates

Methods

StingExecutor:list
function StingExecutor:list(page: number): {Sting}

Note that this method returns a promise that must be yielded using promise.yield to actually execute and return results.

Parameters
  • page (number): The page number to fetch.
Returns
  • stings ({Sting}): The list of stings.
StingExecutor:get
function StingExecutor:get(id: string): Sting

Note that this method returns a promise that must be yielded using promise.yield to actually execute and return results.

Parameters
Returns
  • sting (Sting): The sting.
StingExecutor:create
function StingExecutor:create(data: StingCreate): string

Note that this method returns a promise that must be yielded using promise.yield to actually execute and return results.

Parameters
Returns
  • id (string): The sting ID of the created sting.
StingExecutor:update
function StingExecutor:update(data: Sting)

Note that this method returns a promise that must be yielded using promise.yield to actually execute and return results.

Parameters
  • data (Sting): The sting to update to. Note that if an invalid ID is used, this method may either do nothing or error out.
StingExecutor:delete
function StingExecutor:delete(id: string)

Note that this method returns a promise that must be yielded using promise.yield to actually execute and return results.

Parameters

Enums

StingTarget

The target of the sting.

There are two variants: system (A system target/no associated user) and user:{user_id} (A user target)


@antiraid/typesext

Extra types used by Anti-Raid Lua templating subsystem to either add in common functionality such as streams or handle things like u64/i64 types performantly.

Types

MultiOption

MultiOption allows distinguishing between null and empty fields. Use the value to show both existence and value (Some(Some(value))) an empty object to show existence (Some(None)) or null to show neither (None)

U64

U64 is a 64-bit unsigned integer type. Implements Add/Subtract/Multiply/Divide/Modulus/Power/Integer Division/Equality/Comparison (Lt/Le and its complements Gt/Ge) and ToString with a type name of U64

Methods

U64:to_ne_bytes
function U64:to_ne_bytes(): {u8}

Converts the U64 to a little-endian byte array.

Returns
  • bytes ({u8}): The little-endian byte array.
U64:from_ne_bytes
function U64:from_ne_bytes(bytes: {u8}): U64

Converts a little-endian byte array to a U64.

Parameters
  • bytes ({u8}): The little-endian byte array.
Returns
  • u64 (U64): The U64 value.
U64:to_le_bytes
function U64:to_le_bytes(): {u8}

Converts the U64 to a little-endian byte array.

Returns
  • bytes ({u8}): The little-endian byte array.
U64:from_le_bytes
function U64:from_le_bytes(bytes: {u8}): U64

Converts a little-endian byte array to a U64.

Parameters
  • bytes ({u8}): The little-endian byte array.
Returns
  • u64 (U64): The U64 value.
U64:to_be_bytes
function U64:to_be_bytes(): {u8}

Converts the U64 to a big-endian byte array.

Returns
  • bytes ({u8}): The big-endian byte array.
U64:from_be_bytes
function U64:from_be_bytes(bytes: {u8}): U64

Converts a big-endian byte array to a U64.

Parameters
  • bytes ({u8}): The big-endian byte array.
Returns
  • u64 (U64): The U64 value.
U64:to_i64
function U64:to_i64(): I64

Converts the U64 to an i64.

Returns
  • i64 (I64): The i64 value.

I64

I64 is a 64-bit signed integer type. Implements Add/Subtract/Multiply/Divide/Modulus/Power/Integer Division/Equality/Comparison (Lt/Le and its complements Gt/Ge) and ToString with a type name of I64

Methods

I64:to_ne_bytes
function I64:to_ne_bytes(): {u8}

Converts the I64 to a little-endian byte array.

Returns
  • bytes ({u8}): The little-endian byte array.
I64:from_ne_bytes
function I64:from_ne_bytes(bytes: {u8}): I64

Converts a little-endian byte array to a I64.

Parameters
  • bytes ({u8}): The little-endian byte array.
Returns
  • i64 (I64): The I64 value.
I64:to_le_bytes
function I64:to_le_bytes(): {u8}

Converts the I64 to a little-endian byte array.

Returns
  • bytes ({u8}): The little-endian byte array.
I64:from_le_bytes
function I64:from_le_bytes(bytes: {u8}): I64

Converts a little-endian byte array to a I64.

Parameters
  • bytes ({u8}): The little-endian byte array.
Returns
  • i64 (I64): The I64 value.
I64:to_be_bytes
function I64:to_be_bytes(): {u8}

Converts the I64 to a big-endian byte array.

Returns
  • bytes ({u8}): The big-endian byte array.
I64:from_be_bytes
function I64:from_be_bytes(bytes: {u8}): I64

Converts a big-endian byte array to a I64.

Parameters
  • bytes ({u8}): The big-endian byte array.
Returns
  • i64 (I64): The I64 value.
I64:to_u64
function I64:to_u64(): U64

Converts the I64 to a U64.

Returns
  • u64 (U64): The U64 value.

bitu64

bit32 but for U64 datatype. Note that bit64 is experimental and may not be properly documented at all times. When in doubt, reach for Luau's bit32 documentation and simply replace 31's with 63's

Methods

bitu64:band
function bitu64:band(values: {U64}): U64

Performs a bitwise AND operation on the given values.

Parameters
  • values ({U64}): The values to perform the operation on.
Returns
  • result (U64): The result of the operation.
bitu64:bnor
function bitu64:bnor(n: U64): U64

Performs a bitwise NOR operation on the given value.

Parameters
  • n (U64): The value to perform the operation on.
Returns
  • result (U64): The result of the operation.
bitu64:bor
function bitu64:bor(values: {U64}): U64

Performs a bitwise OR operation on the given values.

Parameters
  • values ({U64}): The values to perform the operation on.
Returns
  • result (U64): The result of the operation.
bitu64:bxor
function bitu64:bxor(values: {U64}): U64

Performs a bitwise XOR operation on the given values.

Parameters
  • values ({U64}): The values to perform the operation on.
Returns
  • result (U64): The result of the operation.
bitu64:btest
function bitu64:btest(values: {U64}): bool

Tests if the bitwise AND of the given values is not zero.

Parameters
  • values ({U64}): The values to perform the operation on.
Returns
  • result (bool): True if the bitwise AND of the values is not zero, false otherwise.
bitu64:extract
function bitu64:extract(n: U64, f: u64, w: u64): U64

Extracts a field from a value.

Parameters
  • n (U64): The value to extract the field from.
  • f (u64): The field to extract.
  • w (u64): The width of the field to extract.
Returns
  • result (U64): The extracted field.
bitu64:lrotate
function bitu64:lrotate(n: U64, i: i64): U64

Rotates a value left or right.

Parameters
  • n (U64): The value to rotate.
  • i (i64): The amount to rotate by.
Returns
  • result (U64): The rotated value.
bitu64:lshift
function bitu64:lshift(n: U64, i: i64): U64

Shifts a value left or right.

Parameters
  • n (U64): The value to shift.
  • i (i64): The amount to shift by.
Returns
  • result (U64): The shifted value.
bitu64:replace
function bitu64:replace(n: U64, v: U64, f: u64, w: u64): U64

Replaces a field in a value.

Parameters
  • n (U64): The value to replace the field in.
  • v (U64): The value to replace the field with.
  • f (u64): The field to replace.
  • w (u64): The width of the field to replace.
Returns
  • result (U64): The value with the field replaced.
bitu64:rrotate
function bitu64:rrotate(n: U64, i: i64): U64

Rotates a value left or right.

Parameters
  • n (U64): The value to rotate.
  • i (i64): The amount to rotate by.
Returns
  • result (U64): The rotated value.
bitu64:rshift
function bitu64:rshift(n: U64, i: i64): U64

Shifts a value left or right.

Parameters
  • n (U64): The value to shift.
  • i (i64): The amount to shift by.
Returns
  • result (U64): The shifted value.

Methods

U64

function U64(value: u64): U64

Creates a new U64.

Parameters

  • value (u64): The value of the U64.

Returns

  • u64 (U64): The U64 value.

I64

function I64(value: i64): I64

Creates a new I64.

Parameters

  • value (i64): The value of the I64.

Returns

  • i64 (I64): The I64 value.

@antiraid/userinfo

This plugin allows for templates to interact with user's core information on AntiRaid (permissions etc)

Types

UserInfo

A user info object

{
  "discord_permissions": "2111062325329919",
  "kittycat_staff_permissions": {
    "user_positions": [],
    "perm_overrides": [
      {
        "namespace": "global",
        "perm": "*",
        "negator": false
      }
    ]
  },
  "kittycat_resolved_permissions": [
    {
      "namespace": "moderation",
      "perm": "kick",
      "negator": false
    },
    {
      "namespace": "moderation",
      "perm": "ban",
      "negator": false
    }
  ],
  "guild_owner_id": "1234567890",
  "guild_roles": [],
  "member_roles": [
    "1234567890"
  ]
}

Fields

  • discord_permissions (string): The discord permissions of the user
  • kittycat_staff_permissions (StaffPermissions): The staff permissions of the user
  • kittycat_resolved_permissions ({Permission}): The resolved permissions of the user
  • guild_owner_id (string): The guild owner id
  • guild_roles ([{[string]: Serenity.Role}](#type.[string]: Serenity.Role)): The roles of the guild
  • member_roles ({string}): The roles of the member

UserInfoExecutor

UserInfoExecutor allows templates to access/use user infos not otherwise sent via events.

Methods

UserInfoExecutor:get
function UserInfoExecutor:get(user: string): 

Gets the user info of a user.

Note that this method returns a promise that must be yielded using promise.yield to actually execute and return results.

Parameters
  • user (string): The user id to get the info of.
Returns
  • UserInfo (): The user info of the user.

Methods

new

function new(token: TemplateContext): UserInfoExecutor

Parameters

Returns


Primitives

u8

type u8 = number

An unsigned 8-bit integer. Note: u8 arrays ({u8}) are often used to represent an array of bytes in AntiRaid

Constraints

  • range: The range of values this number can take on (accepted values: 0-255)

u16

type u16 = number

An unsigned 16-bit integer.

Constraints

  • range: The range of values this number can take on (accepted values: 0-65535)

u32

type u32 = number

An unsigned 32-bit integer.

Constraints

  • range: The range of values this number can take on (accepted values: 0-4294967295)

u64

type u64 = number

An unsigned 64-bit integer. Note that most, if not all, cases of i64 in the actual API are either string or the I64 custom type from typesext

Constraints

  • range: The range of values this number can take on (accepted values: 0-18446744073709551615)

i8

type i8 = number

A signed 8-bit integer.

Constraints

  • range: The range of values this number can take on (accepted values: -128-127)

i16

type i16 = number

A signed 16-bit integer.

Constraints

  • range: The range of values this number can take on (accepted values: -32768-32767)

i32

type i32 = number

A signed 32-bit integer.

Constraints

  • range: The range of values this number can take on (accepted values: -2147483648-2147483647)

i64

type i64 = number

A signed 64-bit integer. Note that most, if not all, cases of i64 in the actual API are either string or the I64 custom type from typesext

Constraints

  • range: The range of values this number can take on (accepted values: -9223372036854775808-9223372036854775807)

f32

type f32 = number

A 32-bit floating point number.

Constraints

  • range: The range of values this number can take on (accepted values: IEEE 754 single-precision floating point)

f64

type f64 = number

A 64-bit floating point number.

Constraints

  • range: The range of values this number can take on (accepted values: IEEE 754 double-precision floating point)

byte

type byte = number

An unsigned 8-bit integer that semantically stores a byte of information

Constraints

  • range: The range of values this number can take on (accepted values: 0-255)

bool

type bool = boolean

A boolean value.


char

type char = string

A single Unicode character.

Constraints

  • length: The length of the string (accepted values: 1)

string

type string = string

A UTF-8 encoded string.

Constraints

  • encoding: Accepted character encoding (accepted values: UTF-8 only)

function

type function = function

A Lua function.


Types

Event

An event that has been dispatched to the template. This is what args is in the template.

Fields

  • base_name (string): The base name of the event.
  • name (string): The name of the event.
  • data (unknown): The data of the event.
  • can_respond (boolean): Whether the event can be responded to.
  • response (unknown): The current response of the event. This can be overwritten by the template by just setting it to a new value.
  • author (string?): The author of the event, if any. If there is no known author, this field will either be nil or null.

Template

Template is a struct that represents the data associated with a template. Fields are still being documented and subject to change.

{
  "guild_id": "0",
  "name": "",
  "description": null,
  "shop_name": null,
  "shop_owner": null,
  "events": [],
  "error_channel": null,
  "content": "",
  "lang": "luau",
  "allowed_caps": [],
  "created_by": "",
  "created_at": "1970-01-01T00:00:00Z",
  "updated_by": "",
  "updated_at": "1970-01-01T00:00:00Z"
}

Fields

  • language (string): The language of the template.
  • allowed_caps ({string}): The allowed capabilities provided to the template.

TemplateContext

TemplateContext is a struct that represents the context of a template. Stores data including the templates data, pragma and what capabilities it should have access to. Passing a TemplateContext is often required when using AntiRaid plugins for security purposes.

Fields

  • template_data (TemplateData): The data associated with the template.
  • guild_id (string): The current guild ID the template is running on.
  • current_user (Serenity.User): Returns AntiRaid's discord user object [the current discord bot user driving the template].