twitch-core

Twitch bot command client

Usage no npm install needed!

<script type="module">
  import twitchCore from 'https://cdn.skypack.dev/twitch-core';
</script>

README


It is flexible, fully object-oriented, easy to use, and makes it trivial to create your own powerful commands. Based on tmi.js.


npm Size

Installation

with npm:

npm install twitch-core

or yarn:

yarn add twitch-core

Features

  • Automatic command parsing
  • Automatic parsing of command arguments and conversion to named variables with type preservation
  • All commands run asynchronously
  • You can configure the prefix of commands
  • Loading configuration files
  • TypeScript definitions

Base settings for the client

import { join } from 'path'
import { TwitchCommandClient, TwitchChatMessage } from 'twitch-core'

const client = new TwitchCommandClient({
  username: 'vs_code',
  oauth: 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
  channels: ['archikoff', 'le_xot'],
  botOwners: ['vs_code']
})

client.on('connected', () => {})

client.on('join', channel => { })

client.on('error', err => { })

client.on('message', (msg: TwitchChatMessage) => { })

client.provider.set(
  join(__dirname, 'config/text-commands.json'),
  join(__dirname, 'config/commands.json')
)

client.registerTextCommands()

client.registerDefaultCommands()

client.registerCommandsIn(
  join(__dirname, '/commands')
)

client.connect()

Client extends of EventEmitter, so you can easily subscribe to his events.

You can register the bot's default commands (!commands, !help, etc.), using method registerDefaultCommands.

Method registerTextCommands allows loading text commands, using text-commands.json config.

Create folder called commands, that will contain all your commands.

Don't forget to call method registerCommandsIn, to register your own commands.

Creating a standard command

import { TwitchChatCommand, TwitchCommandClient, TwitchChatMessage, CommandOptions } from 'twitch-core'

class Example extends TwitchChatCommand {
  constructor(client: TwitchCommandClient, options: CommandOptions) {
    super(client, {
      name: 'example',
      userlevel: 'everyone',
      description: 'Example command',
      examples: [
        '!example',
        '!example <args>'
      ]
    })
  }

  async run(msg: TwitchChatMessage, args: string[]) {
    msg.reply(`Args -> ${args.join(' ')}`)
  }
}

export default Example

Command with named arguments

import { TwitchChatCommand, TwitchCommandClient, TwitchChatMessage, CommandOptions } from 'twitch-core'

interface CommandArgs {
  name: string
  age: number
  bool: boolean
}

class ExampleArgs extends TwitchChatCommand {
  constructor(client: TwitchCommandClient, options: CommandOptions) {
    super(client, {
      name: 'example-args',
      userlevel: 'everyone',
      description: 'Example of command with named arguments',
      examples: [
        '!example',
        '!example <args>'
      ],
      {
        name: 'name',
        type: String,
        defaultValue: 'Text string'
      },
      {
        name: 'age',
        type: Number,
        defaultValue: 22
      },
      {
        name: 'bool',
        type: Boolean,
        defaultValue: false
      }
    })
  }

  async run(msg: TwitchChatMessage, { name, age, bool }: CommandArgs) {
    msg.reply(`Args -> ${name} ${age} ${bool}`)
  }
}

export default ExampleArgs

Example bots

Create issue to add your bot 👍

Commands params

  • name: Name of command (default alias of command)
  • description: Description of command (using at !help <command>)
  • userlevel: Access level (everyone, regular, vip, subscriber, moderator, broadcaster)
  • examples?: Examples for command (using in !help <command>)
  • args?: Creating named command arguments
  • aliases?: Additional command aliases
  • botChannelOnly?: Is thing command only available on the bot channel (if you have enabled autoJoinBotChannel in client constructor)?
  • hideFromHelp?: Do we need to hide command from !commands list?
  • privmsgOnly?: Answer to command only at PM?

Text command params (also implements the options above)

  • text: Message text
  • messageType?: Message send type (reply, actionReply, say, actionSay)

Default commands

  • !commands: All registered commands
  • !help <command>: Help with command (detailed information)