背景・やりたいこと
サークルで各々の作業について共有するためにtimesのようなチャンネルを作るようにしたが、参照した記事が色々なチャンネルに分散してしまうようになってしまった。せっかくいい感じの記事を見つけたならメンバー全員がすぐにアクセスできる方が良い。
そこで、Node.jsやらTypeScriptの勉強も兼ねて、参照した記事をNotionに投げて記事を共有するDiscord Botを開発することにした。
ざっくりやったこと
DiscordBotの設定
とりあえず以下の記事を参考にアカウントの設定、特定のワードに返答してくれるBotをつくってテスト。
ほとんどコピペですんなり
https://qiita.com/0xkei10/items/ac906d50a922dbbfbcea
NotionAPIまわり
これも以下を参考にとりあえずAPI叩いてGetだけしました。
あとはPostできるようにしてがっちゃんこすれば終わり
https://qiita.com/n0bisuke/items/b0cf0c416aa8e46bdb1b
実際のコード
main.ts
つまづき
includs()とindexOf()
if (message.content.includes("!ref"))
メッセージに「!ref」が含まれる場合にBotを起動する感じにしたかったので特定の文字列の有無をブールにしたかった。
検索して謎の英語のサイトにincludOf()が〜とか書いてあったので早とちりで使ってみたら全然見当違いな挙動をみせたのでちゃんとググったら欲しいのはinclude()の機能だったっぽい。
indexOf()は文字列や配列の中から指定した要素が最初に現れるインデックスを返し、include()は指定した要素の有無のブールを返すっていう理解でいいのかな。。
TypeScript全然わかってないので勉強します、、、
あと、Array.include()はあんまり使わない方がいいっぽい。今後の参考にします。
https://zenn.dev/sumire_sakamoto/articles/5082ea429d363f
スラッシュコマンド
メッセージじゃなくてスラッシュコマンドでリファレンスを投げられるようにした方が絶対便利だけど、色々記事を漁った末上手くいかなくてやめました。。。
まぁサークル内でしか使わないし、なるはやで完成させたかったので最低限の機能だけ付けて不便だったら腰を据えて取り組んでみます。
Aspida
FlutterでいうFreezedみたいな感じなのかな?
結局NotionのSDKでどうにかなったので使わず。
今後API叩くときには積極的に使いたい。めちゃ便利そう
https://qiita.com/h-taro/items/4e112771685584775d1d
デプロイ
できれば無料でデプロイしたいのでRender使おうと試行錯誤してます。
ただ時間経つとダウンするっぽい、、UpTimeRobotでいい感じにできるっぽいけど今のところうまくいってない。
課金すればいいんだけど、できれば無料が良い
Botの場合の場合はバックグラウンドワークとしてデプロイするほうがやっぱ良いっぽい。お金ない。
https://community.render.com/t/stuck-deploy-in-progress-status/7340
ここらへん解決策あれば教えてほしいです!!!!!!
追記
結局fly.ioでデプロイしました。。当分無料枠超えないことを祈る。
Discussion