discord.js + Klasa를 사용하여 Bot 만들기 기억
함께 읽으십시오.
준비
적절한 프로젝트 폴더를 만들고 discord.js와 Klasa를 설치하십시오.
npm install --save discordjs/discord.js dirigeants/klasa
코딩
첫걸음
app.js
만들기
app.jsconst secret = require('./secret.js'); // BOTトークンはここに記述
const token = secret.token;
const {Client} = require('klasa');
new Client({
prefix: '!!', // ボットのPrefix
language: 'ja-JP', // 言語コード
}).login(token);
이 상태에서 한 번 node app.js
에서 시작하고 위험한 로그가 나오지 않으면 우선 성공.
명령 작성
commands/general
아래에 다음 소스를 만듭니다. Klasa는 파일명이 그대로 명령명이 된다.
디렉토리명은 도움말의 카테고리명이 된다.
덧붙여 아래의 소스에 쓰여져 있다 usage
는 단순한 설명문이 아니고 인수의 매챠를 참조하기 위한 기술이므로 주의. (이것으로 30분 정도 부서졌다……)
commands/general/hello.jsconst {Command} = require('klasa');
module.exports = class extends Command {
/**
* @constructor
* @param {...any} args
*/
constructor(...args) {
// コマンドのオプション: https://klasa.js.org/#/docs/klasa/master/typedef/CommandOptions
super(...args, {
description: '挨拶を返す',
usage: '<name:string>', // <>は必須引数、[]はオプション引数、<名前:型>のように書く
});
}
/**
* @param {*} message
*/
async run(message,[name]) {
return message.sendMessage(`${name}さんこんにちは!`);
}
};
참고 :
Klasa : CreatingArguments
Klasa : CreatingCommands
BOT의 반응은 이런 느낌
그래서, 이때의 message
에는 아무래도 KlasaMessage
라고 하는 형태가 건네지고 있는 모양. 문서를 찾을 수 없지만. 우선
message.author.sendMessage('hogahoga');
빗질하면 그 사람에게 DM을 보낼 수 있다.
인수가 여러 개인 명령 작성
Klasa 공식의 ADVANCED COMMANDS Commands I: Arguments 을 핥아 읽을 뿐이라고 「usage에 복수의 인수를 지정하면 복수의 인수를 지정할 수 있다」라고 어딘지 모르게 읽을 수 있지만, 그것은 실수이다. 자세히 보면 "Repeating Arguments"섹션에
you may want the user to write in multiple arguments, more likely with ,
as usageDelim
to separate them.
라고 써 있다. 이 usageDelim
파라미터를 지정하지 않으면 인수를 복수 취할 수 없기 때문에 주의한다.
const {Command} = require('klasa');
module.exports = class extends Command {
/**
* @constructor
* @param {...any} args
*/
constructor(...args) {
// コマンドのオプション: https://klasa.js.org/#/docs/klasa/master/typedef/CommandOptions
super(...args, {
description: 'n番のカードを対象に公開する、aなら全体に公開する。(opc)',
usage: '<target:number|a> <n:number> [...]',
usageDelim: ' ', /** これ! **/
runIn: ['text', 'group'],
aliases: ['opc'],
});
this.game = this.client.providers.get('ganparaGame');
}
/**
* @param {Message} message
*/
async run(message, [target, ...ns]) {
/** 中略 **/
return;
}
};
데이터스토어 만들기
providers
디렉터리에 공급자를 만듭니다. 공식 을 보면 왠지 적당하게 써 좋을 것 같았으므로 적당하게 써 본다.
providers/datas.jsconst {Provider} = require('klasa');
module.exports = class extends Provider {
/**
* @constructor
* @param {...any} args
*/
constructor(...args) {
super(...args, {name: 'datas'});
this.counter = 0;
}
/**
* init
*/
init() {
this.counter=1;
}
/**
* countup
* @return {Number} count
*/
countup() {
this.counter++;
return this.counter;
}
};
hello.js
에서 동작 확인해 봅니다.
const {Command} = require('klasa');
module.exports = class extends Command {
/**
* @constructor
* @param {...any} args
*/
constructor(...args) {
// コマンドのオプション: https://klasa.js.org/#/docs/klasa/master/typedef/CommandOptions
super(...args, {
description: '挨拶を返す',
usage: '<name:string>',
});
this.data = this.client.providers.get('datas');
}
/**
* @param {*} message
*/
async run(message, [name]) {
return message.sendMessage(`${name}さんこんにちは!${this.data.countup()}回めの挨拶ですね!`);
}
};
정말 적당하게 움직여 버렸다.
Reference
이 문제에 관하여(discord.js + Klasa를 사용하여 Bot 만들기 기억), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/Real_analysis/items/85b19410523ea1c6be39
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
const secret = require('./secret.js'); // BOTトークンはここに記述
const token = secret.token;
const {Client} = require('klasa');
new Client({
prefix: '!!', // ボットのPrefix
language: 'ja-JP', // 言語コード
}).login(token);
const {Command} = require('klasa');
module.exports = class extends Command {
/**
* @constructor
* @param {...any} args
*/
constructor(...args) {
// コマンドのオプション: https://klasa.js.org/#/docs/klasa/master/typedef/CommandOptions
super(...args, {
description: '挨拶を返す',
usage: '<name:string>', // <>は必須引数、[]はオプション引数、<名前:型>のように書く
});
}
/**
* @param {*} message
*/
async run(message,[name]) {
return message.sendMessage(`${name}さんこんにちは!`);
}
};
message.author.sendMessage('hogahoga');
const {Command} = require('klasa');
module.exports = class extends Command {
/**
* @constructor
* @param {...any} args
*/
constructor(...args) {
// コマンドのオプション: https://klasa.js.org/#/docs/klasa/master/typedef/CommandOptions
super(...args, {
description: 'n番のカードを対象に公開する、aなら全体に公開する。(opc)',
usage: '<target:number|a> <n:number> [...]',
usageDelim: ' ', /** これ! **/
runIn: ['text', 'group'],
aliases: ['opc'],
});
this.game = this.client.providers.get('ganparaGame');
}
/**
* @param {Message} message
*/
async run(message, [target, ...ns]) {
/** 中略 **/
return;
}
};
const {Provider} = require('klasa');
module.exports = class extends Provider {
/**
* @constructor
* @param {...any} args
*/
constructor(...args) {
super(...args, {name: 'datas'});
this.counter = 0;
}
/**
* init
*/
init() {
this.counter=1;
}
/**
* countup
* @return {Number} count
*/
countup() {
this.counter++;
return this.counter;
}
};
const {Command} = require('klasa');
module.exports = class extends Command {
/**
* @constructor
* @param {...any} args
*/
constructor(...args) {
// コマンドのオプション: https://klasa.js.org/#/docs/klasa/master/typedef/CommandOptions
super(...args, {
description: '挨拶を返す',
usage: '<name:string>',
});
this.data = this.client.providers.get('datas');
}
/**
* @param {*} message
*/
async run(message, [name]) {
return message.sendMessage(`${name}さんこんにちは!${this.data.countup()}回めの挨拶ですね!`);
}
};
Reference
이 문제에 관하여(discord.js + Klasa를 사용하여 Bot 만들기 기억), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/Real_analysis/items/85b19410523ea1c6be39텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)