@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
td
(TimeDelta): The TimeDelta object.
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
td
(TimeDelta): The TimeDelta object.
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
td
(TimeDelta): The TimeDelta object.
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
td
(TimeDelta): The TimeDelta object.
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
td
(TimeDelta): The TimeDelta object.
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
td
(TimeDelta): The TimeDelta object.
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
td
(TimeDelta): The TimeDelta object.
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
td
(TimeDelta): The TimeDelta object.
@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
action_type
(Serenity.AuditLogs.Action?): The action type to filter byuser_id
(string?): The user ID to filter bybefore
(string?): The entry ID to filter bylimit
(number?): The limit of entries to return
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 channelposition
(number?): The position of the channeltopic
(string?): The topic of the channelnsfw
(bool?): Whether the channel is NSFWrate_limit_per_user
(number?): The rate limit per user/Slow mode of the channelbitrate
(number?): The bitrate of the channelpermission_overwrites
({Serenity.PermissionOverwrite}?): The permission overwrites of the channelparent_id
(string??): The parent ID of the channelrtc_region
(string??): The RTC region of the channelvideo_quality_mode
(number?): The video quality mode of the channeldefault_auto_archive_duration
(number?): The default auto archive duration of the channelflags
(string?): The flags of the channelavailable_tags
({Serenity.ForumTag}?): The available tags of the channeldefault_reaction_emoji
(Serenity.ForumEmoji??): The default reaction emoji of the channeldefault_thread_rate_limit_per_user
(number?): The default thread rate limit per userdefault_sort_order
(number?): The default sort order of the channeldefault_forum_layout
(number?): The default forum layout of the channelarchived
(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 editreason
(string): The reason for editing the channeldata
(EditChannel): The new channels' data
DeleteChannelOptions
Options for deleting a channel in Discord
{
"channel_id": "0",
"reason": ""
}
Fields
CreateMessageAttachment
An attachment in a message
[
{
"id": 0,
"filename": "test.txt",
"description": "Test file"
}
]
Fields
filename
(string): The filename of the attachmentdescription
(string?): The description (if any) of the attachmentcontent
({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
channel_id
(string): The channel ID to send the message indata
(Serenity.CreateMessage): The data of the message to send
CreateInteractionResponse
Options for creating an interaction response in Discord
Fields
interaction_id
(string): The interaction ID to respond tointeraction_token
(string): The interaction token to respond todata
(Serenity.InteractionResponse): The interaction response bodyfiles
({Serenity.CreateMessageAttachment}?): The files to send with the response
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
data
(GetAuditLogOptions): Options for getting audit logs.
Returns
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
data
(GetChannelOptions): Options for getting a channel.
Returns
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
data
(EditChannelOptions): Options for editing a channel.
Returns
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
data
(DeleteChannelOptions): Options for deleting a channel.
Returns
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
data
(SendMessageChannelAction): Options for creating a message.
Returns
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
data
(CreateInteractionResponse): Options for creating a message.
Returns
Methods
new
function new(token: TemplateContext): DiscordExecutor
Parameters
token
(TemplateContext): The token of the template to use.
Returns
executor
(DiscordExecutor): A discord executor.
@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/captchaviewbox_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
records
({KvRecord}): The records found.
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
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
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 tothis_guild
if not specified.
Returns
executor
(KvExecutor): A key-value executor.
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 returnstrue
if the current context has the capability specified.scope
(string): The scope of the executor. Eitherthis_guild
for the originating guild, orowner_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 accesslazy
(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
data
(TemplateContext): The data to wrap in a lazy
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 lockdownreason
(string): The reason for the lockdowntype
(string): The type of lockdown in string formdata
(any): The data associated with the lockdowncreated_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
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
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
token
(TemplateContext): The token of the template to use
Returns
executor
(LockdownExecutor): A lockdown executor
@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
perm_overrides
({Permission}): Permission overrides on the member.user_positions
({PartialStaffPosition}): The staff positions of the user.
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
permissions
({Permission}): The list of permissionspermission
(Permission): The permission to check for.
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
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
sp
(StaffPermissions): The StaffPermissions object to resolve.
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 containtype
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
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
promise
(LuaPromise): The promise to yield.
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 ONcreator
(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 ONcreator
(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
id
(string): The sting ID.
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
data
(StingCreate): The sting data.
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
id
(string): The sting ID.
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
Returns
result
(U64): The rotated value.
bitu64:lshift
function bitu64:lshift(n: U64, i: i64): U64
Shifts a value left or right.
Parameters
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
Returns
result
(U64): The rotated value.
bitu64:rshift
function bitu64:rshift(n: U64, i: i64): U64
Shifts a value left or right.
Parameters
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 userkittycat_staff_permissions
(StaffPermissions): The staff permissions of the userkittycat_resolved_permissions
({Permission}): The resolved permissions of the userguild_owner_id
(string): The guild owner idguild_roles
([{[string]: Serenity.Role}](#type.[string]: Serenity.Role)): The roles of the guildmember_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
Methods
new
function new(token: TemplateContext): UserInfoExecutor
Parameters
token
(TemplateContext): The token of the template to use.
Returns
executor
(UserInfoExecutor): A userinfo executor.
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 benil
ornull
.
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].