Quantcast
Channel: Node.jsタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 8898

discord.js + Klasa を使ったBotの作成覚え書き

$
0
0

参考 : discord.jsのフレームワークKlasaが強すぎる
合わせて読んでください。

準備

  • 環境
    • Win10
    • Node.js 12.13.0
    • npm 6.12.0

適当にプロジェクトフォルダを作成し discord.js と Klasa をインストール

npm install--save discordjs/discord.js dirigeants/klasa

コーディング

最初の一歩

app.jsを作成

app.js
constsecret=require('./secret.js');// BOTトークンはここに記述consttoken=secret.token;const{Client}=require('klasa');newClient({prefix:'!!',// ボットのPrefixlanguage:'ja-JP',// 言語コード}).login(token);

この状態で一度 node app.jsから起動し、危険なログが出てなければとりあず成功。

コマンドの作成

commands/general配下に以下のソースを作成。Klasaはファイル名がそのままコマンド名になる。
ディレクトリ名はヘルプのカテゴリ名になる。
なお、下のソースに書かれている usageは単なる説明文ではなく引数のマッチャを参照するための記述なので注意。(これで30分ぐらい潰した……)

commands/general/hello.js
const{Command}=require('klasa');module.exports=classextendsCommand{/**
   * @constructor
   * @param  {...any} args
   */constructor(...args){// コマンドのオプション: https://klasa.js.org/#/docs/klasa/master/typedef/CommandOptionssuper(...args,{description:'挨拶を返す',usage:'<name:string>',// <>は必須引数、[]はオプション引数、<名前:型>のように書く});}/**
   * @param {*} message
   */asyncrun(message,[name]){returnmessage.sendMessage(`${name}さんこんにちは!`);}};

参考 :
Klasa : CreatingArguments
Klasa : CreatingCommands

BOTの反応はこんなかんじ

コメント 2020-04-14 002903.png

コメント 2020-04-14 002903_.png

データストアの作成

providersディレクトリにプロバイダを作成する。公式を見るとなんか適当に書いてよさそうだったので適当に書いてみる。

providers/datas.js
const{Provider}=require('klasa');module.exports=classextendsProvider{/**
   * @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++;returnthis.counter;}};

hello.jsから動作確認してみる。

const{Command}=require('klasa');module.exports=classextendsCommand{/**
   * @constructor
   * @param  {...any} args
   */constructor(...args){// コマンドのオプション: https://klasa.js.org/#/docs/klasa/master/typedef/CommandOptionssuper(...args,{description:'挨拶を返す',usage:'<name:string>',});this.data=this.client.providers.get('datas');}/**
   * @param {*} message
   */asyncrun(message,[name]){returnmessage.sendMessage(`${name}さんこんにちは!${this.data.countup()}回めの挨拶ですね!`);}};

コメント 2020-04-14 005829.png

本当に適当に動いてしまった。


Viewing all articles
Browse latest Browse all 8898

Trending Articles