Skip to content
Classcore/nodev0.10.0

Pluggable

Base class for a plugin host, a transport Seedcord class.

You attach plugins while configuring the bot. Within one startup phase, their init() calls run one after another in attach order.

abstract class Pluggable<
    BotT extends Transport,
    BotRt extends Runtime
> implements CoreBase

Member visibility

Filter class members by access level.

Showing members with Protected visibility and higher.

applicationId

public abstract readonly applicationId: string

bus

public abstract readonly bus: Bus

config

public abstract readonly config: Config

isInitialized

protected isInitialized: boolean

rateLimiter

public abstract readonly rateLimiter: IRateLimiter

rest

public abstract readonly rest: REST

shutdown

Add a task that runs while the bot shuts down.

public readonly shutdown: Pick<CoordinatedShutdown, 'addTask'>

startFailed

protected startFailed: boolean

startup

Add a task that runs while the bot starts.

public readonly startup: Pick<CoordinatedStartup, 'addTask'>

attach()

Attaches a plugin under key. Read the instance back as core[key]. seedcord codegen writes the Core augmentation that types it there.

Put one dot in the key to nest the plugin under a group, so 'services.users' reads back as core.services.users. Each name holds one plugin or one group.

Startup runs each plugin's init() in attach order within its phase.

Attaching a plugin whose transport or runtime differs from this host fails to compile. Your constructor takes CoreBase as its first parameter (you don't need to pass it though). A narrower one fails to compile here.

public attach<Key, Ctor>(
    this: this,
    key: AttachKeyAssert<Key, this>,
    Plugin: AttachableCtor<Ctor, BotT, BotRt>,
    args: PluginArgs<Ctor>
): this & Attached<Key, InstanceType<Ctor>>
Parameter: key

Also the channel the plugin logs on, dots included. Reserved channel names throw.

Parameter: args

Whatever your constructor takes after the host.

Throws:

A SeedcordError if you attach after the bot has started. A taken or reserved key throws too. So does a plugin that extends Plugin from another copy of @seedcord/core.