32
28

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

discord.jsのフレームワークKlasaが強すぎる

Last updated at Posted at 2018-10-20

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
npm install --save discord.js dirigeants/klasa#v1.0.0-alpha

注意

Stableバージョンは現在サポートされていない状態です。最新のv1.0.0-alphaブランチを使うようにしてください。

ボットを起動してみる。

このようにコードを書くだけで起動できます。

index.js
const { Client } = require('klasa');

// Klasaのクライアントオプション: https://klasa.js.org/#/docs/klasa/master/typedef/KlasaClientOptions
new Client({
    prefix: '!!', // ボットのPrefix
}).login('token'); // ここにボットのトークン

そして保存し以下のコマンドを実行して下さい。

node
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にはこのように書いてみましょうか。

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.jshelloがコマンドの名前です。
他のコマンドを追加するときは、別の名前のJSファイルを作って同じように書いていくだけです。

ちなみにGeneralというフォルダはコマンドのカテゴリになり、ヘルプコマンドで整理されて表示されます。これをうまく使うとよりよいボットが作れるでしょう。

そしてdiscord.jsを使用していて、一つのファイルを複雑にせずに済みますね。
Klasaは公式ガイドに記載されているような、コマンドハンドラーの実装部分を無くすことができ、簡単にコマンドを実装することができます。

プラグイン

Klasaにはプラグインを追加できたりもできます。すげー

index.js
const { Client } = require('klasa');

Client.use(require('plugin-name'));

これでプラグインを使うことができます。

Klasaのプラグイン(公式)

Klasaのプラグイン(非公式)

非公式ですが、このようなものもあります。

多言語対応

もっと利用してくれるユーザーを増やしたい、そんな人もいるかもしれません。その手段の一つとしてKlasaには多言語にも対応できるようになっています。

日本語に対応する。

GitHubから言語ファイルを落とす。

klasa-piecesに日本語の言語ファイルがあるので全部コピーしてlanguagesフォルダにja-JP.jsというファイルを作りペーストして保存するだけで、OKです。

ボットのデフォルト言語を日本語にする。

とても簡単です。Clientオプションからデフォルトの言語を指定できます。

index.js
const { Client } = require('klasa');

// Klasaのクライアントオプション: https://klasa.js.org/#/docs/klasa/master/typedef/KlasaClientOptions
new Client({
    prefix: '!!', // ボットのPrefix
    language: 'ja-JP', // 言語コード
}).login('token'); // ここにボットのトークン

おわり

コマンドから言語を変更するには?

confコマンドで変更できます。

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のドキュメントサイト
32
28
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
32
28

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?