LoginSignup
2
0

P2P地震情報APIとWolfxAPIを使ってすごい(当社比)地震情報Botを作ろう!

Posted at

この記事、なんか変?

実はこの記事、これの書き直し版です。
コードもパッケージも変わったので、見ていきましょう!

はじめに

この記事では、誰でも簡単に地震情報Botを作れるという感じの雰囲気で行っていきますが、、
最低限の知識は必要です。
まぁ脳死で動かせるようにもしてますので!しかもなんとなんとコードの解説まで!
わかんないことがありましたら気軽にコメントお待ちしてます!

どういうのが出来るの?

  • 緊急地震速報(予報)の配信だったり... (※今の情報じゃないよ)
    image.png

  • 各地の震度情報の配信だったり...
    image.png

  • 津波情報とか... (※今の情報じゃないよ)
    image.png

  • もちろんEEWも! (※今の情報じゃないよ)
    image.png
    ↑なんか大丈夫なのこれ?

早速やっていこう!

早速やっていこう、とは言いましたがgithub貼り付けるだけなんですよね、、
これほんとにこんな記事でいいんですか(困惑)

コード (github)

簡単な動かし方

1. まずはコードをクローンもしくはダウンロードしよう。

どっちでもいいですが、とりあえず自分の環境にコードを移動させましょう!

  • Cloneを使う
$ git clone https://github.com/akikaki-bot/p2peqbot
  • Download ZIPを使う
    <> Code ってところを押すとドロップダウンメニューが出てきます。
    一番下にあるDownload ZIPってところを押すとダウンロードが始まりますよ!
    image.png

2.必要パッケージをインストールしましょう。

npmを使います。

$ npm i 

3.トークンを設定しよう。

src/constants/token.example.tsっていうファイルがあります。
それのexampleを取ってtoken.tsというファイルにし、

export const Token = "Your bot token"

となっているところのYour bot tokenをあなたのBotのトークンにしてください。

4.試しに動かしてみよう。

コンソールで

$ npm run prestart

っていう感じのコマンドを打って実行してみてください。

起動した的メッセージが出てきたら成功です。やったね!

5. このBotを本番駆動をしたい!

scriptを用意しておきました!えらーい!

  • 初回起動の場合
$ npm run buildStart

を実行してみてください。するとトランスパイルされたファイルが入るdistフォルダが生成されます。

  • 2回目以降の起動の場合
    2回目以降の場合、トランスパイルをスキップできます。
$ npm run production

-- その他設定 --

6. ステータスをカスタマイズしたい!

src/client/index.tsのL42らへんにある、displayTextっていう定数をいじってみてください。

7. どうやってチャンネルを登録するの?

/helpにも書いてありますが、/registerを実行してみてくださいね。

8. helpのスラッシュコマンドがおかしくない?

すいません、ちょっとこれは私のBotに合わせちゃってるので各自で書き直してみてください。
スラッシュコマンドのIDは
image.png
スラッシュコマンドの説明の部分を右クリでコピーできますよ!

コードの解説 ( 必要そうなところだけ )

みんな気になるでしょ?早速見ていきましょう。

興味ねーよって人はもうここで見るのをやめても大丈夫です。
お疲れさまでした!!!見てくれてありがとうございました!!!

ファイル構成

src/client - このBotが送受信する情報をここで処理しています。
src/components - まぁこれは、、、おまけみたいなやつです。たぶん。
src/constants - 定数等を保管しています。
src/utils - 情報をいい感じに処理するresolveシリーズが保管してあります。ちょっとこういうのすき。

命名ルール

resolveホニャニャ - 何かをもとに情報を整形するもの。
ホニャニャvClient - 情報を受信して、いい感じにするところ。
ホニャニャSender - 何かに送るためにある。
ホニャニャManager - 共通化されたマネージャー

ChannelSendManagerについて

このBotはいろんな情報を複数のチャンネルに高速に送ることを目標にしています。
そんなBotのコードによく出てくるChannelSendManagerという謎のクラス。こいつは何?
実はですね、このクラスのおかげで高速に情報を送ることができています。

...まぁ実際、コードがクッソ悲惨なことになってるんですが... (抜粋)

        await Promise.all([
            GuildChannels.map(async guildData => {
                guildData.datas.map(async id => {
                    const catgoryMatched = this.data.sendCategory.some(v => v.type === id.type.type)
                    if( !catgoryMatched ) return;
                    const Channel = client.channels.resolve( id.channelId )
                    if(Channel?.isTextBased() && ( Channel instanceof ( TextChannel || NewsChannel ) || Channel.type === ChannelType.GuildAnnouncement) ){
                        const Message = await Channel.send({
                            embeds : [embed]
                        }).catch(err => console.log(err))
                        if(typeof Message !== "object") return;
                        if(Channel.type === ChannelType.GuildAnnouncement) {
                            if(Message.crosspostable) {
                                Message.crosspost()
                                .catch((err) => console.log(err))
                            }
                        }
                    }
                })
            })
        ])

まぁでも、共通化した結果にいるコードなので私は別に気にしてません。たぶん。

長いと思ったらもうこれでおしまいです

あれ?この記事そこまで需要なくない?

スペシャルサンクス

S-Server-Developers - 私が所属しているだけです。えへ

Wolfx API - WebSocketでPLUM法とかいろんな奴に対応してる、タフなやつ。

P2P地震情報 API - いつもお世話になっております。今後ともよろしくお願いいたします。

おわり!

ありがとうございました!

2
0
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
2
0