It is flexible, fully object-oriented, easy to use, and makes it trivial to create your own powerful commands. Based on tmi.js.
with npm:
npm install twitch-core
or yarn:
yarn add twitch-core
- 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
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 methodregisterDefaultCommands
.
Method
registerTextCommands
allows loading text commands, usingtext-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.
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
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
Create issue to add your bot 👍
- 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: Message text
- messageType?: Message send type (
reply
,actionReply
,say
,actionSay
)
- !commands: All registered commands
- !help <command>: Help with command (detailed information)