1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

DiscordチャンネルのYouTube URLを自動でプレイリストに追加するBotを作った

Posted at

はじめに

Discordサーバーで友人とYouTubeの動画を共有していると、「この曲いいね!」「あとで聴きたい」となることがよくあります。
しかし、共有された動画をいちいちYouTubeのプレイリストに手動で追加するのは面倒…

そこで、Discordの指定チャンネルに投稿されたYouTube URLを自動的にYouTubeプレイリストに追加するBotを作成しました。

本記事では、このBotの機能紹介と構築手順を解説します。

機能

  • 指定チャンネルに投稿されたYouTube/YouTube Music URLを自動検出
  • YouTubeプレイリストへ自動追加
  • 重複チェック(同じ動画は追加しない)
  • 複数チャンネルの監視に対応
  • Bot起動時に過去メッセージをスキャン
  • 起動/停止/スキャン完了時のDiscord通知
  • ログ出力(通常ログ + デバッグログ、日次ローテーション)

必要要件

  • Python 3.9以上
  • Discord Bot Token
  • Google Cloud Project(YouTube Data API v3)
  • Linux環境(systemdでデーモン化する場合)

構築手順

1. Discord Botの作成

Discord Developer Portal にアクセスし、Botを作成します。

  1. 「New Application」をクリックし、アプリケーションを作成
  2. 左メニューの「Bot」を選択
  3. 「Reset Token」をクリックしてBot Tokenを取得(後で使用)
  4. 「MESSAGE CONTENT INTENT」を有効化
  5. 左メニューの「OAuth2」→「URL Generator」を選択
  6. SCOPESで「bot」を選択
  7. BOT PERMISSIONSで以下を選択:
    • Read Messages/View Channels
    • Send Messages
    • Read Message History
  8. 生成されたURLでBotをサーバーに招待

2. Google Cloud Projectの設定

Google Cloud Console でYouTube Data APIを有効化します。

  1. 新しいプロジェクトを作成
  2. 「APIとサービス」→「ライブラリ」から「YouTube Data API v3」を有効化
  3. 「APIとサービス」→「認証情報」→「認証情報を作成」→「OAuthクライアントID」
  4. アプリケーションの種類:「デスクトップアプリ」を選択
  5. 作成後、JSONをダウンロード → client_secret.json として保存

3. DiscordチャンネルIDの取得

  1. Discordの設定 → 詳細設定 → 「開発者モード」を有効化
  2. 監視したいチャンネルを右クリック → 「チャンネルIDをコピー」

4. YouTubeプレイリストIDの取得

YouTubeでプレイリストを作成または開き、URLの list= 以降の文字列を取得します。

例: https://www.youtube.com/playlist?list=PLxxxxxxxx
→ プレイリストID: PLxxxxxxxx

5. Botのデプロイ

# リポジトリをクローン
git clone https://github.com/yourusername/discord-youtube-bot.git

# 任意のディレクトリに配置
sudo mkdir -p /opt/bot
sudo cp -r discord-youtube-bot /opt/bot/
cd /opt/bot/discord-youtube-bot

# 依存パッケージをインストール
pip3 install -r requirements.txt

6. 設定ファイルの作成

# サンプルファイルをコピー
cp config.yaml.example config.yaml
cp client_secret.json.example client_secret.json

config.yaml を編集します。

discord:
  bot_token: "YOUR_DISCORD_BOT_TOKEN"
  target_channel_ids:
    - 1234567890123456789  # 監視対象のチャンネルID

youtube:
  playlist_id: "YOUR_YOUTUBE_PLAYLIST_ID"

client_secret.json は、Google Cloud Consoleからダウンロードした認証情報JSONの内容で上書きします。

7. YouTube API初回認証

python3 bot.py

初回起動時、ブラウザが開いてGoogleアカウントの認証を求められます。
認証後、token.pickle が生成され、以降は自動認証されます。

ヘッドレスサーバーの場合は、ローカルPCで認証を行い、生成された token.pickle をサーバーに転送してください。

8. systemdサービスの設定

youtube-bot.service をコピーしてパスを編集します。

sudo cp youtube-bot.service /etc/systemd/system/
sudo vi /etc/systemd/system/youtube-bot.service

以下の2箇所を実際のインストールパスに変更します。

WorkingDirectory=/path/to/discord-youtube-bot
ExecStart=/usr/bin/python3 /path/to/discord-youtube-bot/bot.py

サービスを有効化・起動します。

sudo systemctl daemon-reload
sudo systemctl enable youtube-bot.service
sudo systemctl start youtube-bot.service

9. 動作確認

# サービスステータス確認
sudo systemctl status youtube-bot.service

# ログ確認
tail -f /opt/bot/discord-youtube-bot/logs/bot.log

Discordチャンネルに以下のメッセージが表示されれば成功です。

🟢 YouTube Playlist Bot が起動しました。
✅ 過去メッセージのスキャンが完了しました。
プレイリスト内の動画数: XX件

設定項目一覧

設定は全て config.yaml で管理します。メインスクリプト(bot.py)の編集は不要です。

セクション キー 説明 デフォルト
discord bot_token Discord Bot Token -
discord target_channel_ids 監視対象チャンネルID(配列) -
youtube playlist_id 追加先プレイリストID -
bot history_scan_limit 起動時スキャン件数(0で全件) 0
bot notify_on_success 成功時Discord通知 true
bot notify_on_error エラー時Discord通知 false
bot notify_on_start Bot起動時Discord通知 true
bot notify_on_stop Bot停止時Discord通知 true
bot notify_on_scan_complete スキャン完了時Discord通知 true
logging log_directory ログディレクトリ logs
logging retention_days ログ保持日数 7

ログについて

ログは logs/ ディレクトリに出力されます(起動時に自動作成)。

ファイル 内容
bot.log 通常ログ(INFO以上)
debug.log デバッグログ(DEBUG以上、全て)
bot-YYYYMMDD.log ローテーション済み通常ログ
debug-YYYYMMDD.log ローテーション済みデバッグログ

設定した保持日数を超えた古いログは自動削除されます。

動作例

YouTube URLを投稿すると、Botが自動的にプレイリストに追加して通知します。

[ユーザー] https://www.youtube.com/watch?v=xxxxxxxxx

[Bot] 動画「〇〇〇〇」をプレイリストに追加しました!
URL: https://www.youtube.com/playlist?list=PLxxxxxxxx

同じ動画を再度投稿しても、重複チェックにより追加されません。

# ログ出力
ビデオID xxxxxxxxx は既にプレイリストに存在します。

まとめ

Discordに投稿されたYouTube URLを自動的にプレイリストに追加するBotを作成しました。

主なポイント

  • 設定の外部化: config.yaml で全設定を管理、メインスクリプトの編集不要
  • 複数チャンネル対応: 複数のDiscordサーバー/チャンネルを同時に監視可能
  • ログ機能: 通常ログとデバッグログを分離、日次ローテーションと自動削除
  • 通知機能: Bot起動/停止/スキャン完了をDiscordに通知

友人とYouTubeの動画を共有する際に、手動でプレイリストに追加する手間がなくなり、とても便利になりました。

ソースコードはGitHubで公開しています。

参考

1
1
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
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?