Klasaは廃止されました
この記事を見て、Klasaを使ったDiscordボットを開発しようとしている方はKlasaを使用しないで、別のフレームワークの使用を考えてください。
また現在Klasaを使用している方は、今すぐ移行を開始することを推奨します。
Klasaとは何なのか
Klasaとはdiscord.jsライブラリ上に構築された「プラグ・アンド・プレイ」フレームワークです。
100%カスタマイズ可能でしかも扱いやすいdiscord.jsを使用している人なら誰でも「これを求めていた!」となる位凄いです。
なのにまだ日本ではあまり知られていない・まだ知名度も低いなので皆さんに知ってもらおうと記事を書いてみました!
ざっくりこんな感じ
- 面倒な作業が不要
- メンテナンスしやすい
- 多言語対応が簡単にできちゃう!
- コマンドの使用権限を細く設定できる。
- 自分の好きなようにKlasa、discord.jsを拡張できる。
- 色付きで見やすいログ
- VS Code用の拡張機能もある
- 特定のデータベースをサポートしている。(MongoDB, Firestore, LevelDB などなどこれ以外にも)自分でカスタマイズして追加することも可能
ボットの規模が大きくなり、複雑化してきているならKlasaに移動してみるといいかも!
前提
discord.jsは半分位理解しておくとKlasaはかなり扱いやすいと思います。
まずNode.jsのv12.0.0以上を使用して下さい。
次にdiscord.jsとKlasaのインストールを行います。
npm install --save discord.js dirigeants/klasa#v1.0.0-alpha
注意
Stableバージョンは現在サポートされていない状態です。最新のv1.0.0-alphaブランチを使うようにしてください。
ボットを起動してみる。
このようにコードを書くだけで起動できます。
const { Client } = require('klasa');
// Klasaのクライアントオプション: https://klasa.js.org/#/docs/klasa/master/typedef/KlasaClientOptions
new Client({
prefix: '!!', // ボットのPrefix
}).login('token'); // ここにボットのトークン
そして保存し以下のコマンドを実行して下さい。
node index.js
色付きのコンソールメッセージに完了の文字が出たら起動成功です!
デフォルトで実装されているコマンド
- help コマンド一覧をDMに送信する。
- invite ボットの招待URLを送信する。(ボットに必要な権限も自動で設定してくれるので使用する側も導入する時とても安心)
- info ボットの紹介メッセージを送信する。(デフォルトではKlasaの紹介文が送信されます。言語ファイルから変更可能です。)
- ping ボットの応答速度を計測する。
- stats ボットの統計情報を送信する。(使用メモリ、起動時間などなど)
- userconf ユーザー(自分)の設定を変更したり、確認できるコマンド
- conf サーバーの設定を変更したり、確認できるコマンド(サーバーの管理者権限を持っている人のみ使用できるコマンド)
- reload 編集されたファイルを再読み込みする。(プログラムを一々終了しなくてもいいので結構便利、アプリケーションの管理者のみ利用できる。)
- reboot プログラムを再起動する。(使用にはforeverやpm2などが必要、アプリケーションの管理者のみ利用できる。)
- eval JavaScriptのコードを実行できるコマンド(アプリケーションの管理者のみ利用できる。)
- blacklist サーバーやユーザーをブラックリストに登録したりできるコマンド(アプリケーションの管理者のみ利用できる。)
- disable コマンド、イベント、モニターなどを再度無効にするか、一時的に無効化するためのコマンド(再起動で初期の状態に戻る、無効化したピースは
enable
コマンドを使うことで有効化できる。アプリケーションの管理者のみ利用できる。) - enable コマンド、イベント、モニターなどを再度有効にするか、一時的に有効化するためのコマンド(再起動で初期の状態に戻る、有効化したピースは
disable
コマンドを使うことで無効化できる。アプリケーションの管理者のみ利用できる。) - unload ピースをアンロードできる。(アプリケーションの管理者のみ利用できる。)
- load ピースをロードできる。(アプリケーションの管理者のみ利用できる。)
- transfer コアピースをそれぞれのフォルダに転送する。(???、アプリケーションの管理者のみ利用できる。)
ざっくりとこんな感じです。さらに詳しく知りたい場合はhelp
コマンドを実行するか、GitHubのソースを見てください。
これらのコマンドを全て無効にしたい場合はKlasaClientOptionsにあるdisabledCorePieces
に["commands"]
と書いておくことで無効化できます。
生成されるフォルダー
- arguments
- commands
- extendables
- finalizers
- languages
- monitors
- providers
- serializers
- tasks
- events
コマンドを作ってみよう
commands
フォルダーの中にGeneral
という名前のフォルダーを作ってその中にhello.js
を作ってみましょう。
hello.jsにはこのように書いてみましょうか。
const { Command } = require('klasa');
module.exports = class extends Command {
constructor(...args) {
// コマンドのオプション: https://klasa.js.org/#/docs/klasa/master/typedef/CommandOptions
super(...args, {
description: '世界に挨拶をする。',
});
}
async run(message) {
return message.sendMessage('こんにちは、世界!')
}
};
これでコマンドの実装は終わりです。Klasaを使用するとファイルの名前がコマンド名になります。hello.js
のhello
がコマンドの名前です。
他のコマンドを追加するときは、別の名前のJSファイルを作って同じように書いていくだけです。
ちなみにGeneral
というフォルダはコマンドのカテゴリになり、ヘルプコマンドで整理されて表示されます。これをうまく使うとよりよいボットが作れるでしょう。
そしてdiscord.jsを使用していて、一つのファイルを複雑にせずに済みますね。
Klasaは公式ガイドに記載されているような、コマンドハンドラーの実装部分を無くすことができ、簡単にコマンドを実装することができます。
プラグイン
Klasaにはプラグインを追加できたりもできます。すげー
const { Client } = require('klasa');
Client.use(require('plugin-name'));
これでプラグインを使うことができます。
Klasaのプラグイン(公式)
- klasa-member-gateway - Simple plugin to manage an efficient per-member settings gateway.
- klasa-dashboard-hooks - Simple plugin to expose an api from a klasa bot. Lets you build an external dashboard in one of several frameworks such as Vue.js.
Klasaのプラグイン(非公式)
非公式ですが、このようなものもあります。
- no-mention-spam - A klasa plugin to seamlessly replicate no-mention-spam behavior in klasa bots
- tags - A simple klasa plugin to add tags functionality
- functions - Simple plugin that adds reloadable functions to your Klasa Bot.
- channels-gateway - A simple Klasa plugin which adds settings to all your channels
- raw-events - Simple plugin to handle raw events with ease.
- points - A simple plugin which adds points to your bot
- arguments - A plugin which adds a Tags store to allow for the easy use of TagBuilder
- statistics - A plugin which adds 2 statistics oriented stores
- Starboard
多言語対応
もっと利用してくれるユーザーを増やしたい、そんな人もいるかもしれません。その手段の一つとしてKlasaには多言語にも対応できるようになっています。
日本語に対応する。
GitHubから言語ファイルを落とす。
klasa-piecesに日本語の言語ファイルがあるので全部コピーしてlanguages
フォルダにja-JP.js
というファイルを作りペーストして保存するだけで、OKです。
ボットのデフォルト言語を日本語にする。
とても簡単です。Clientオプションからデフォルトの言語を指定できます。
const { Client } = require('klasa');
// Klasaのクライアントオプション: https://klasa.js.org/#/docs/klasa/master/typedef/KlasaClientOptions
new Client({
prefix: '!!', // ボットのPrefix
language: 'ja-JP', // 言語コード
}).login('token'); // ここにボットのトークン
おわり
コマンドから言語を変更するには?
conf
コマンドで変更できます。
<prefix>conf set language ja-JP
or
<prefix>conf set language en-US
Klasa botの開発を助けるVS Codeの拡張機能
公式がklasa-vscodeというVS Code向けの拡張機能を出しています。便利なSnippetや簡単にピースをダウンロードできる機能もあります。
TypeScriptを使いたい人向け
TypeScriptも使えますが、開発環境ではts-nodeのようなツールは使うことができないし、いちいちコンパイルしてリロードか再起動する必要があります。
こちらのテンプレートリポジトリが参考になると思います。
参考にしたサイト
- Klasa - Klasaのドキュメントサイト