Skip to main content

services

tip

This is version 3 api only!!

Services

tip

TLDR: The direct upgrade to useContainer. if you set up a bot with create-bot, check dependencies.d.ts. Dependencies are the types that Services uses.

You need someway to use dependencies in your command module. Services to the rescue!

src/dependencies.d.ts
import { CoreDependencies, Singleton } from '@sern/handler'
import { Client } from 'discord.js'

interface Dependencies extends CoreDependencies {
'@sern/client': Singleton<Client>
}

Recall, some keys in Dependencies are special.

Special key dependency must implement its contracts.

  • @sern/client: Your discord client. -> Emitter
  • @sern/logger: Log data -> Logging
  • @sern/errors: Handling errors and lifetime -> ErrorHandling
  • @sern/modules: Managing all command modules -> ModuleManager
  • @sern/emitter: is the key to emit events and occurences in a project -> Emitter

Lets try to access the client you provided.

src/commands/ping.ts
import { Service } from '@sern/handler'

export default commandModule({
// ...
execute: (ctx) => {
//Client!
const client = Service('@sern/client');
}
//
})

Safety

  • Services can only be used after sern has made dependencies.
    • Calling a service before will crash your application.
  • Services can be safely used outside of commandModules.
    • Be careful to not cause too many side effects.
  • use Service for single dependency.
  • use Services for multiple dependencies.