チュートリアル2
ここではチュートリアルで作成したボットのreverseコマンドを$username > reverse > reverseのようにパイプとして実行できるようにしていきます。
今回作成するボットはGithubで公開されています。
https://github.com/quro-framework/quro-tutorial-bot
ステップ1. onPipeの実装
まずonPipeを実装するためにsrc/commands/Reverse.tsの1行目にPipeNextのimportを追加します。
code:src/commands/Reverse.ts
import { Command, CommandRequest, ArgDef, ArgType, PipeNext } from 'quro'
// -------------------------------------------------↑ココ
つぎにonPipeを実装していきます。
src/commands/Reverse.ts の onHandle メソッドの下あたりを以下のように変更してください。
code:src/commands/Reverse.ts
onHandle(request: CommandRequest) {/* 省略 */}
onPipe(request: CommandRequest, next: PipeNext) {
const args = this.getArgs(request)
const reversed = args.input.split('').reverse().join('')
return next.setAppendArgs(reversed)
}
この辺の解説は割愛します。
実際に実行してみましょう。
試しに$username > reverse > reverseを送ってみます。
https://gyazo.com/54879b3f8f186855387ee0ff8fa05baa
このように自分のユーザー名を反転して、さらに反転した文字列(普通のユーザー名)が返ってきます。
ちなみにこのように沢山reverseをつなげることもできます。とんだマッチポンプですね。
https://gyazo.com/a2817ebbd9384a81d17c55f4f354e62a
ステップ2. リファクタリング
ここでsrc/commands/Reverse.tsのonHandleとonPipeを比較してみましょう。
code:src/commands/Reverse.ts
onHandle(request: CommandRequest) {
const args = this.getArgs(request)
const reversed = args.input.split('').reverse().join('')
return this.reply(reversed)
}
onPipe(request: CommandRequest, next: PipeNext) {
const args = this.getArgs(request)
const reversed = args.input.split('').reverse().join('')
return next.setAppendArgs(reversed)
}
よく見ると
code:typescript
const args = this.getArgs(request)
const reversed = args.input.split('').reverse().join('')
という部分が同じです。
これは1つのメソッドとして実装できそうです。
早速メソッド化してみましょう。
以下のようにsrc/commands/Reverse.tsのonPipeメソッドの下にreverseArgというメソッドを定義します。
code:src/commands/Reverse.ts
onPipe(request: CommandRequest, next: PipeNext) {/* 省略 */}
private reverseArg(request: CommandRequest) {
const args = this.getArgs(request)
const reversed = args.input.split('').reverse().join('')
return reversed
}
このメソッドはCommandRequestオブジェクトを引数として受け取り、引数inputを反転して返すメソッドです。
では早速onHandleメソッドとonPipeメソッドをreverseArgを使うようにしてみましょう。
src/commands/Reverse.tsを以下の様に変更します。
code:src/commands/Reverse.ts
onHandle(request: CommandRequest) {
const reversed = this.reverseArg(request)
return this.reply(reversed)
}
onPipe(request: CommandRequest, next: PipeNext) {
const reversed = this.reverseArg(request)
return next.setAppendArgs(reversed)
}
だいぶスッキリしたのではないでしょうか...してないか...
ここまでお疲れさまでした
これでチュートリアルは終了です。お疲れさまでした。