コンテンツにスキップ

Discord セットアップ

Discord Bot セットアップガイド

MarionetteとDiscordを連携するには、Discord Developer Portalでアプリケーションを作成し、Bot Tokenを取得する必要があります。
このページでは、その手順を最初から説明します。


1. Discord Developer Portal にアクセス

Discord Developer Portal にアクセスし、Discordアカウントでログインしてください。


2. アプリケーションを作成

  1. 右上の 「New Application」 ボタンをクリック
  2. アプリケーション名を入力(例: Marionette Bot
  3. 利用規約に同意し、「Create」 をクリック

作成後、アプリケーションの General Information ページが表示されます。

Application ID を控える

General Information ページの Application ID をコピーしてください。
これが Marionette の設定画面で入力する Application ID です。

Public Key について

同じページに Public Key も表示されていますが、Marionette の Discord 連携では不要です。
Application ID のみ控えてください。


3. Bot を作成して Token を取得

  1. 左メニューの 「Bot」 をクリック
  2. 「Reset Token」 ボタンをクリック(初回は「Add Bot」の場合もあります)
  3. 表示された Token をコピーしてください

Token の取り扱い

Bot Tokenは**パスワードと同等の機密情報**です。
他人に共有したり、Git にコミットしたりしないでください。
Tokenが漏洩した場合は、即座に「Reset Token」で再生成してください。

Bot の設定

同じ Bot ページで、以下の設定を行います:

  • Privileged Gateway Intents のセクションで、以下を ON にしてください:
    • Message Content Intent -- メッセージ内容の取得に必須
    • Server Members Intent -- メンバー情報の取得に必要(Bot一覧表示等)

Intents について

Message Content Intent が OFF のままだと、Botがメッセージの中身を読み取れません。
必ず ON にしてください。


4. Bot をサーバーに招待

  1. 左メニューの 「OAuth2」 をクリック
  2. 「OAuth2 URL Generator」 セクションで以下を設定:
    • SCOPES: bot にチェック
    • BOT PERMISSIONS: 以下にチェック
      • Send Messages
      • Read Message History
      • View Channels
      • Use Slash Commands
  3. 生成された URL をコピーしてブラウザで開く
  4. Botを追加したいサーバーを選択し、「認証」 をクリック

5. Marionette に設定を入力

管理画面の左メニュー 「外部連携」→「Bot管理」 を開き、Discordを選択します。

接続設定

項目 入力する値
Bot Token 手順3で取得したToken
Application ID 手順2で控えたApplication ID

入力後、「設定保存」 をクリックしてから 「接続」 ボタンを押してください。
ステータスが「接続中」に変われば成功です。

スラッシュコマンド (/marionette)

接続設定で 「スラッシュコマンド (/marionette)」 のチェックを有効にすると、Discord上で以下のコマンドが利用可能になります。

コマンド 説明 使い方
reset-session 会話履歴をリセットして新しいセッションを開始 /marionette reset-session rule:<ルール名>
set-state stateの値を更新 /marionette set-state rule:<ルール名> state_name:<state名> value:<値>
get-state stateの値を表示 /marionette get-state rule:<ルール名> state_name:<state名>
list-state state名の一覧を表示 /marionette list-state rule:<ルール名>
  • rule にはルーティングルール名を指定します(オートコンプリート対応)
  • set-statevalue は JSON 形式(例: "hello"{"key": 123})で指定できます
  • get-state / list-state は、該当ルールでセッションが開始されている場合のみ利用可能です

ルーティングルールの設定

接続後、「ルール追加」 でルーティングルールを作成します。

基本的なルール例: メンションで会話
設定項目
ルール名 メンション応答
トリガータイプ mention
チャンネル 全チャンネル
Drama 使用したいDramaを選択
優先度 50

この設定で、Discordサーバー内のどのチャンネルでも @Bot名 こんにちは のようにメンションすると、選択したDramaが応答します。

キーワード検知の例
設定項目
ルール名 困りごと検知
トリガータイプ keyword
キーワード 困った, 助けて, help
チャンネル 全チャンネル
Drama ヘルプ用Dramaを選択
優先度 10(mentionより先に評価される)

6. 動作確認

  1. Discordサーバーのテキストチャンネルで @Bot名 こんにちは とメンション
  2. Botが応答すれば成功
  3. Botの返答に**リプライ**することで会話を継続できます

トリガータイプ一覧

タイプ 説明 会話の継続方法
mention Botがメンションされた時に反応 Botの返答にリプライ
keyword 特定キーワードを含む発言に反応(mentionと同じ扱い) Botの返答にリプライ
dm ダイレクトメッセージに反応(1対1 / グループDM) DM内で自動継続
slash_command スラッシュコマンド /marionette の実行に反応 コマンド実行ごとに新規トリガー
bot_message 他のBotの発言に反応(AI同士の対話用) Botの返答にリプライ

変数マッピングについて

各ルールで、Discord側の情報をDrama内の datastates に渡すことができます。

設定例

Discord変数 dataに追加 statesに追加
user.display_name user_name
message.content user_message
channel.members participants
  • dataに追加: event.triggermessage_data としてDramaに渡されます。Dramaの data 変数でアクセスできます。
  • statesに追加: セッション開始時に state.set として設定されます。Dramaの states 変数でアクセスできます。

利用可能なDiscord変数

変数名 説明
user.id string DiscordユーザーID
user.name string ユーザー名
user.display_name string サーバー表示名(ニックネーム)
user.avatar_url string アバター画像URL
user.roles string[] ロール名の配列
user.is_bot bool Botかどうか
user.joined_at string サーバー参加日時
message.content string メッセージ本文
message.id string メッセージID
message.attachments object[] 添付ファイル情報
message.timestamp string 送信日時
channel.id string チャンネルID
channel.name string チャンネル名
channel.type string text / dm / group_dm
channel.topic string チャンネルトピック
channel.members object[] 参加メンバー一覧(DM/グループDM)
channel.member_count int メンバー数
guild.id string サーバーID
guild.name string サーバー名
guild.member_count int サーバー総メンバー数

Bot発言への応答(AI同士の対話)

bot_message トリガーを使うと、他のBotの発言に反応できます。
無限ループ防止のため、以下の安全装置を設定してください:

設定項目 推奨値 説明
応答確率 70% 毎回反応せず、確率的にスキップ
最大ターン数 50 1セッションあたりの上限
応答間隔 3秒 連続応答の防止

トラブルシューティング

Botが応答しない

  1. 接続状態を確認: 管理画面で「接続中」になっているか
  2. Message Content Intent: Discord Developer Portalで ON になっているか
  3. ルールの確認: 有効なルールが存在し、Drama が設定されているか
  4. チャンネル権限: Botにそのチャンネルでのメッセージ送信権限があるか

Token が無効

  • Discord Developer Portal で Token を再生成し、再入力してください
  • Token の前後に余分な空白が入っていないか確認してください

「discord.py is required」エラー

サーバー環境に discord.py がインストールされていません:

uv add discord.py