🤖

怠惰な自分にサヨナラ!Deno DeployとDiscordenoで自分を監視するDiscord Botを作った

2025/02/24に公開

Discordeno

Discordenoとは

  • Discordenoは、Denoランタイム上で動作するDiscord APIラッパーで、TypeScriptで書かれています。

  • Node.jsベースのDiscord.jsと異なる点で大きいものは、 コンパイル不要で、TypeScriptのまま実行することができるところです。

  • デメリットとして、一部のnpmライブラリをそのまま使用することができないこと、Node.js環境での実行を前提としたプロジェクトでは採用しづらいところが挙げられます。

今回作成したbot

今日、コード書いてないなぁ...まぁいいか! を減らすためのbotです。
怠惰な自分とサヨナラ⦅✋
https://github.com/s-renren/kusa-checker

作ろうと思ったきっかけ

毎日コードを書こう! と意気込んだものの、現実は穴ぼこばかり。全く整備のされていない草原が誕生していました。

日々の生活の中で、コードを書くきっかけを通知とかで作れないかな~と考え、Discord Bot作ってみよ。面白そうだし。と思い、作り始めました。

作成した機能

  • 朝9時、おはようのあいさつと共に今日も頑張りましょうのメッセージ。
  • 草を生やせていない場合、11時、13時などの定期的なタイミングでコーディングを頑張ろうというメッセージを送信する。
  • /kusaを使用すると、現在のcontribution数を確認することができる。
  • /codingを使用すると、コーディング中というロールが割り振られ、contribution数が0でも催促のメッセージが送信されないようになる。
  • 日付が変わるタイミングでコーディング中ロールが割り振られている場合、ロールが自動的に外される。
動作例



以上の機能を作成してみました。

実際にDiscord Botを動かすまで

作成時のバージョンなど

  • WSL2(ubuntu)を使用
  • コードエディター:VSCode
ubuntu
$ deno --version
deno 2.1.10
v8 13.0.245.12-rusty
typescript 5.6.2

Discord Botを用意する

まず、動かすbotを用意しなければいけません。
Discord Botの作り方は世にたくさん出ているので、ここでは省略させていただきます。

Botには以下の権限を付与して作成してください。

  • Sned Messages
  • Read Message History
    bot作成時に取得したトークンは、どこか流出の危険がない場所にメモしておいてください。

コードを用意する

リポジトリから、ローカルにクローンしてください。
.env.localファイルを作成し、環境変数を設定します。
今回は

DISCORD_TOKEN = 
GITHUB_ACCESS_TOKEN = 
GUILD_ID = 
CHANNEL_ID = 
ROLE_ID = 
USER_ID = 

としています。

  • DISCORD_TOKEN: 先ほど取得したものを指定してください。
  • GITHUB_ACCESS_TOKEN: GitHubからcontributionを取得する際に使用。Personal access token
  • GUILD_ID: ディスコードサーバーを指定する際に使用。
  • CHANNEL_ID: 鯖の中のチャンネルを指定する際に使用。
  • ROLE_ID: ロールを割り振る際に使用。
  • USER_ID: ロールを外す際に使用。うまくやれば使わなくてもできるのかもしれない...
    ROLE_IDに関して: ロールをディスコード上で別途作成する必要があります。
  • サーバー設定 -> ロール から、ロールを作成してください。
  • ロールでサーバーに入れたbotをクリックし、権限からロールの管理の権限がない場合は、付与してください。

それぞれの値の取得方法は以下を参照してください。

取得方法

実際に動作を確認する

それぞれの値を設定し終わり、ついにbotを動かします。
ターミナルでdeno task devと打ちこんでください。

〇〇(設定したbot名) is ready!と出てきたら、成功です。実際に、ディスコードでコマンドなどを使用し、確認してみてください。

動作を確認できたら、自分のGitHubにリモートリポジトリを作成し、pushをしてください。

:::

Deno Deployにデプロイをし、永続的にbotが動作するようにする

https://deno.com/deploy

  1. こちらのサイトにアクセスをし、Get started nowをクリックしてください。
    アカウントを持っていない場合は、アカウント登録などをしてください。

  2. New Projectをクリックし、先ほど作成したリポジトリを指定してする

    • エントリーポイントはmain.tsを指定してください。
    • プロジェクト名などは自由に設定してください。
  3. プロジェクトをデプロイする

    • Failed to execute 'removeChild' on 'Node': The node to be removed is not a child of this node.というエラーが出ても、慌てずに少し待機したり、リロードをしてみてください。(2敗)
    • それでも動作しない場合は、エラーの詳細などを調べてみてください。
  4. 環境変数を指定する

    • 先ほど設定していた値はローカルで動かすための値なので、デプロイ先でも先ほどの値を使用するために指定する必要があります。
    • Settingsから環境変数を設定してください。

動作を確認する

ローカルで動作している場合は動作を止め、ディスコードでbotがオンラインになっているかどうかを確認します。
botがオンラインになっている場合は...
おめでとうございます!! これでbotは無事監視体制に入り、あなたは毎日コードを書き続けることができるでしょう。

最後に

この記事を読んでくれたあなたは、プログラミングを頑張りたいという気持ちはあると思います。このbotを通して、あなたの学習習慣がつくことを祈っています。
この記事や、botが面白いと感じてくれたら、いいね🩷やGitHubのスター⭐️を押してくれると嬉しいです👀
https://github.com/s-renren/kusa-checker

Discussion