🤖

DiscordBotでリファレンスをNotionに投げたい

2024/04/10に公開

背景・やりたいこと

サークルで各々の作業について共有するために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