Discord 自己紹介認証Bot

Discord 自己紹介認証Bot

#Node.js#Discord.js#TypeScript

Overview

Discordコミュニティにおいて、新規参加者が認証ボタンをクリックし、表示されるモーダル(フォーム)に必要事項を入力して送信することで、自動的に特定のロール(権限)を付与するBotアプリケーションです。これにより、管理者の手動承認の手間を省き、コミュニティへの参加障壁を下げることに成功しました。自宅のRaspberry Piサーバー上で稼働させています。また、管理ログ(成功/失敗)はデータベースを使用せず、管理チャンネルにEmbed形式で保存する設計を採用しています。

Challenges & Solutions

[PROBLEM_1] 安定稼働とエラーハンドリング

24時間365日稼働させる必要があるため、ネットワークの瞬断やAPIのレート制限に対する堅牢性が求められました。Dockerを用いたコンテナ管理の導入や、適切な例外処理と自動再接続ロジックを実装することで、長期間の安定稼働を実現しました。

[PROBLEM_2] デプロイの自動化

開発環境から自宅サーバーへのデプロイを手動で行うのは手間であり、ミスも発生しやすいため、GitHub Actionsを用いたCI/CDパイプラインを構築しました。mainブランチへのプッシュをトリガーに自動的にテストとデプロイが行われるようになりました。

[PROBLEM_3] ロジックの品質保証

Botの認証ロジックなどのコア機能について、Discord APIに依存せず単体テストを行うためにVitestを導入しました。これにより、外部サービスの影響を受けずにロジックの正当性を検証できる環境を構築し、保守性を向上させました。

Future Improvements

  • 設定のWebダッシュボード化

    現在は設定ファイルで管理していますが、WebブラウザからBotの設定(対象チャンネルや付与するロール)を変更できるダッシュボード機能の実装を目指しています。

  • 複数サーバー対応

    現在は単一サーバー向けに最適化されていますが、複数のDiscordサーバーに導入できるよう、データベース(MongoDB等)を導入して設定を永続化する改修を計画しています。

Tech Stack

  • Runtime: Node.js
  • Library: Discord.js
  • Language: TypeScript
  • Infrastructure: Raspberry Pi 4 (Ubuntu)
  • Container: Docker
  • Test: Vitest