Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/k5342/ikabot3

a friendly discord bot to serve Splatoon 3 stage information (JP) / スプラトゥーン 3 のステージ情報を返却する Discord ボット
https://github.com/k5342/ikabot3

discord-bot splatoon3

Last synced: 3 days ago
JSON representation

a friendly discord bot to serve Splatoon 3 stage information (JP) / スプラトゥーン 3 のステージ情報を返却する Discord ボット

Awesome Lists containing this project

README

        

# ikabot3
メンションすると Splatoon 3 のステージ情報を返却する Discord Bot です。

こちらのボットの API はえむおん氏制作の [Spla3 API](https://spla3.yuu26.com/) を情報取得に利用しています。コマンド体系は Project-Cube 様制作の[イカボット](https://cube-library.net/works/co-production-works/splatoon2-bot-discord/)の書式を参考にしています。

## ボット起動方法
.env に Discord Token と [Spla3 API](https://spla3.yuu26.com/) の注意事項をよく読んだ上で `全ステージ情報をまとめて取得` への URL を記述してください。ボットは以下で起動します。
```
% cp .env{.example,}
% $EDITOR .env # IKABOT3_TOKEN と IKABOT3_API_SOURCE を埋める
% make build # ikabot3 バイナリをビルド
% ./ikabot3
```

## コマンドの使い方
Discord サーバにボットを参加させたのち、ボットに以下のようにキーワードでメンションすると対応するステージ情報を返却します。一部のキーワードはスラッシュコマンドでも呼び出すことができます。
```
@ikabot3 オープンマッチ
```

注: Discord の Message Content Intent を有効にするとメンション無しでも呼び出すことができます。Message Content Intent が利用可能な場合はすべてのメッセージを検索コマンドとして処理し、ステージ情報の検索結果が空でない場合のみメッセージを送信します。Message Content Intent は Privilleged Intent であるため初期値は無効です。Discord の Developer Portal で有効化したのち、.env の `IKABOT3_ALLOW_MESSAGE_CONTENT_INTENT` を `TRUE` にセットします(ボットの入出力の挙動に変化はないですが、Gateway に利用可能な Intent を申告するようになります)。

### 現在のステージ情報を得る
キーワードに反応します
- `オープン`, `オープンマッチ`, `/open` ... 現在のオープンマッチのステージ情報を返却します
- `チャレンジ`, `チャレンジマッチ`, `/challange` ... 現在のチャレンジマッチのステージ情報を返却します
- `バンカラ`, `バンカラマッチ`, `バカマ`, `/bankara` ... 現在のオープンマッチとチャレンジマッチのステージ情報を返却します
- `エックス`, `エックスマッチ`, `Xマッチ`, `/x` ... 現在のエックスマッチのステージ情報を返却します
- `レギュラー`, `レギュラーマッチ`, `/regular` ... 現在のレギュラーマッチのステージ情報を返却します
- `シャケ`, `サーモンラン`, `サーモン`, `/salmon` ... 現在のサーモンランのステージ情報を返却します

少々正確さを省いて以下の書式にも対応しています
- `ガチマ`, `ガチマッチ` ... チャレンジマッチと等価です
- `リグマ`, `リーグマッチ` ... オープンマッチと等価です

### 特定の時刻のステージ情報を得る(サーモンランを除く)
時刻を指定して問い合わせできます。過去情報は検索対象から除外されます(より正確には API が返却する時刻の範囲に依存します)。時刻は先述のキーワードに続くように時刻を加えるか、キーワードの先頭に○○時のを付加することで検索対象になります。

- `オープンマッチ19` ... 19 時時点のオープンマッチのステージ情報を返却します
- `1 時のチャレンジマッチ` ... 1 時時点のチャレンジマッチのステージ情報を返却します

### 相対指定で指定した時刻でステージ情報を得る
時刻指定の代わりに「次の」と記述すると相対指定になります。以下は相対指定を使ったサンプルです。現在開催中のステージ枠の次の開催枠に関する情報を返却します。
- `次のオープン`
- `次の次のバンカラマッチ`
- `次の次の次の次の次の次のチャレンジマッチ`
- `次のサーモンラン`

上記は、「前の」を入れることでフェイントを加えることができます。

### 特定のルールを検索する
スケジュールからルールにマッチするステージ情報を検索して返却します。
- `オープンマッチガチヤグラ` ... オープンマッチで開催されるガチヤグラのうち最も直近のものを返却します
- `チャレンジアサリ` ... チャレンジマッチで開催されるガチアサリのうち最も直近のものを返却します
- `ガチホコ` ... チャレンジマッチ、オープンマッチ、X マッチで開催されるガチホコバトルのうち最も直近のものをそれぞれ返却します

ルールは以下の表記ゆれに対応しています
- `(ガチ)?(エリア|ホコ|ホコバトル|ヤグラ|アサリ)`

ルール名のみの場合はオープンとチャレンジの両方を返却します。

スラッシュコマンドでは `/rule` コマンドに対応します。

### コマンドの例
他のコマンドの例はテストコード [parser_test.go](./parser_test.go) も参照してみてください。

### キーワード
(@ikabot3 は適宜読み替えてください)
```
@ikabot3 ガチマ
@ikabot3 次の次の前の次の次のガチマッチ
@ikabot3 次のガチマ
@ikabot3 次のオープンマッチ
@ikabot3 ガチマアサリ
@ikabot3 次のリグマヤグラ
@ikabot3 次のナワバリバトル
@ikabot3 エリア20
@ikabot3 19 時のガチマッチ
@ikabot3 ガチマ 20
@ikabot3 次のエリア
@ikabot3 次のガチヤグラ
@ikabot3 シャケ
@ikabot3 次のサーモンラン
@ikabot3 次のエックスマッチヤグラ
```

### スラッシュコマンド
```
/open
/challange
/bankara
/regular
/x
/salmon
/rule
```

## 実行例

### オープンマッチ(時刻指定)
時刻を指定して検索できます。

![image](https://user-images.githubusercontent.com/1993005/222441139-38693b2b-2d27-4c5f-94ac-48d054da4603.png)

### サーモンラン(相対指定のみ)
最も直近に開催されるものを起点に相対指定に対応します。

![image](https://user-images.githubusercontent.com/1993005/222440646-66baf4fb-3f55-4062-87e5-ce10eb30066c.png)
![image](https://user-images.githubusercontent.com/1993005/222440423-bc0f1802-bb64-4743-bd3c-3f9d125b7bb2.png)

### ルール名で検索(相対指定のみ)
チャレンジ、オープン、X マッチの中からそれぞれ検索します。

![image](https://user-images.githubusercontent.com/1993005/222440571-129d9757-dcce-44f4-b8a8-1d6443b2a4d0.png)

## TODO
- More slash commands
- More unit tests
- Configuration file (customize UA)
- Cosmetic changes (color output for Discord embeds)
- Cleanup codes