3.0.6 • Published 2 months ago

commander-core v3.0.6

Weekly downloads
4
License
MIT
Repository
github
Last release
2 months ago

commander-core - это ядро для вашего обработчика команд, основан на cocoscore. Модуль поддерживает:

📚 Документация📝 Примеры💬 Беседа

Установка

NPM

npm i commander-core

Yarn

yarn add commander-core

Использование

Пример основан на vk-io, вы можете использовать другое Сначало необходимо проинициализировать ваш проект

JavaScript

далее в корне проекта создайте файл utils.js поместите туда следующий код

const { UtilsCore } = require('commander-core');
/**
 * класс утилит, понадобится для использования своих методов и констант в командах
 * bot.testMetods() в теле команды
 */
class Utils extends UtilsCore {
  constructor() {
    super();
    this.adminIds = [1];
  }

  testMetods() {
    return console.log('test');
  }
} // это произвольный пример, можете поместить сюда что угодно

module.exports = Utils;

далее создайте файл start.js

const { Handler } = require('commander-core')
const { VK, getRandomId } = require('vk-io')
const path = require('node:path')
const Utils = require('./utils.js') //наши утилиты

const TOKEN = process.env.TOKEN //токен от группы
const vk = new VK({token: TOKEN})

const handler = new Handler({
	commands: {
		directory: path.resolve(__dirname, 'commands')
		// fromArray: [commands] //массив команд, используйте только один из двух методов загрузки команд
	}
	strictLoader: true, //строгость загрузки (проверяет есть ли команды иначе кидает ошибку)
	utils: new Utils() //загружаем наши утилиты в класс обработчика
});

handler.events.on('command_error', async({context, utils, error}) =>{
	context.send(`Произошла непредвиденная ошибка`)
	if(utils.adminIds) {
		vk.api.messages.send({
			user_ids: utils.adminIds,
			random_id: getRandomId(),
			message: `Ошибка в команде ${utils.getCommand.name}:
				${context.senderId} => ${context.$command}
				${error.stack}`
		})
	}
}); //событие срабатывания ошибок в команде

handler.events.on('command_not_found', async({context}) =>{
	if(!context.isChat) {
		context.send(`Введенной вами команды не существует!`)
	}
}); //событие при отсутствие подходящей команды

handler.loadCommands()
.then(() => console.log('commands loaded')) // загружает команды
.catch(err => console.error(err)) // обязательно обрабатывайте ошибку

vk.updates.on('message_new', async(context, next) => {
	context.text = context.text.replace(/^\[club(\d+)\|(.*)\]/i, '').trim();

	await handler.execute(context);
});

vk.updates.start()
.then(() => console.log('Старт'));

далее создаем папку commands внутри папки создаем файл test.js

//здесь и будет код команды
const { Command } = require('commander-core');

//по желанию вы можете объявить тут массив из команд
module.exports = new Command({
  pattern: /^(?:тест|test)$/i,
  name: 'тест',
  description: 'тестирование',

  handler(context, bot) {
    bot.testMetods(); //созданная нами утилита в файле utils.js
    context.send('тест');
  },
});

TypeScript

далее в корне проекта создайте файл utils.ts поместите туда следующий код

import { UtilsCore } from 'commander-core';
/**
 * класс утилит, понадобится для использования своих методов и констант в командах
 * bot.testMetods() в теле команды
 */
export class Utils extends UtilsCore {
  public adminIds = [1];

  testMetods(): void {
    return console.log('test');
  }
} // это произвольный пример, можете поместить сюда что угодно

далее создайте файл start.ts

import { Handler, IContext } from 'commander-core';
import { VK, getRandomId, MessageContext } from 'vk-io';
import path from 'node:path';

import Utils from './utils.js'; //наши утилиты

interface IListener {
	context: MessageContext & IContext;
	utils: Utils;
	error?: Error;
}

const TOKEN = process.env.TOKEN //токен от группы
const vk = new VK({token: TOKEN})

const handler = new Handler({
	commands: {
		directory: path.resolve(__dirname, 'commands') //директория команд
		// fromArray: [commands] //массив команд, используйте только один из двух методов загрузки команд
	}
	strictLoader: true, //строгость загрузки (проверяет есть ли команды иначе кидает ошибку)
	utils: new Utils() //загружаем наши утилиты в класс обработчика
});

handler.events.on('command_error', async({context, utils, error}: IListener) =>{
	context.send(`Произошла непредвиденная ошибка`)
	if(utils.adminIds) {
		vk.api.messages.send({
			user_ids: utils.adminIds,
			random_id: getRandomId(),
			message: `Ошибка в команде ${utils.getCommand.name}:
				${context.senderId} => ${context.$command}
				${error.stack}`
		})
	}
}); //событие срабатывания ошибок в команде

handler.events.on('command_not_found', async({context}: IListener) =>{
	if(!context.isChat) {
		context.send(`Введенной вами команды не существует!`)
	}
}); //событие при отсутствие подходящей команды

handler.loadCommands()
.then(() => console.log('commands loaded')) // загружает команды
.catch(err => console.error(err)) // обязательно обрабатывайте ошибку

vk.updates.on('message_new', async(context, next) => {
	context.text = context.text.replace(/^\[club(\d+)\|(.*)\]/i, '').trim();

	await handler.execute(context);
});

vk.updates.start()
.then(() => console.log('Старт'));

далее создаем папку commands внутри папки создаем файл test.ts

//здесь и будет код команды
import { Command, IContext } from 'commander-core';
import { Utils } from '../utils';
import { MessageContext } from 'vk-io';

//по желанию вы можете объявить тут массив из команд
export default new Command({
  pattern: /^(?:тест|test)$/i,
  name: 'тест',
  description: 'тестирование',

  handler(context: MessageContext & IContext, bot: Utils) {
    bot.testMetods(); //созданная нами утилита в файле utils.js
    context.send('тест');
  },
});
3.0.7-beta.1

2 months ago

3.0.6

3 months ago

3.0.4

1 year ago

3.0.5

1 year ago

3.0.4-beta.0

1 year ago

3.0.3

1 year ago

3.0.2

2 years ago

3.0.1

3 years ago

3.0.0

3 years ago

2.2.1

3 years ago

2.2.0-rc.1

3 years ago

2.1.2

3 years ago

2.1.1-rc.1

3 years ago

2.1.1

3 years ago

2.1.0-rc.1

3 years ago

2.1.0

3 years ago

2.0.2

3 years ago

2.0.1-rc2

3 years ago

2.0.1-rc1

3 years ago

2.0.0-rc4

3 years ago

2.0.1

3 years ago

2.0.0-rc3

3 years ago

2.0.0-rc2

3 years ago

2.0.0-rc1

3 years ago

2.0.0

3 years ago

1.1.0

4 years ago

1.1.0-rc.2

4 years ago

1.1.0-rc.1

4 years ago

1.0.4-rc.3

4 years ago

1.0.4-rc.1

4 years ago

1.0.4-rc.2

4 years ago

1.0.4

4 years ago

1.0.3-rc.3

4 years ago

1.0.3-rc.2

4 years ago

1.0.3-rc.1

4 years ago

1.0.3

4 years ago

1.0.2-rc.2

4 years ago

1.0.2

4 years ago

1.0.2-rc.1

4 years ago

1.0.1

4 years ago

1.0.0

4 years ago