discroak is a discord role manager with keycloak attributes.
requires https://discord.com/developers/docs/resources/guild#list-guild-members
- KeycloakのユーザーグループとDiscordロールの同期
- Discordトークンの自動再接続機能
- リアルタイム設定変更(Discordコマンド)
- レート制限対応
./discroakDiscord接続を維持し、定期的にKeycloakとDiscordの同期を行います。
RUN_ONCE=true ./discroak従来通り、1回だけ同期処理を実行して終了します。
| 変数名 | デフォルト値 | 説明 |
|---|---|---|
RUN_ONCE |
false |
trueの場合、1回実行モードで動作 |
CHECK_INTERVAL |
5m |
常時実行モードでの同期間隔 |
STATE_FILE_PATH |
./discroak_state.json |
状態ファイルのパス |
DISCORD_TOKEN |
- | Discord Bot Token |
DISCORD_GUILD_ID |
- | Discord Guild ID |
DISCORD_ROLE_ID |
- | 管理対象のDiscord Role ID |
DISCORD_NOTIFY_CHANNEL_ID |
- | 通知チャンネルID(オプション) |
DISCORD_IGNORE_USER_IDS |
- | 無視するユーザーID(カンマ区切り) |
DISABLE_ROLE_REMOVAL |
false |
ロール削除の無効化 |
ALTERNATIVE_ROLE_ID |
- | 代替ロールID(オプション) |
| 変数名 | デフォルト値 | 説明 |
|---|---|---|
MAX_WORKERS |
2 |
並列処理の最大ワーカー数 |
MIN_INTERVAL_DURATION |
1m |
コマンドで設定可能な最小同期間隔 |
COMMAND_CHANNEL_BUFFER |
10 |
コマンドチャンネルのバッファサイズ |
| 変数名 | デフォルト値 | 説明 |
|---|---|---|
MAX_RETRIES |
3 |
最大リトライ回数 |
BASE_RETRY_DELAY |
500ms |
基本リトライ間隔 |
CONNECTION_RETRY_DELAY |
2s |
接続リトライの基本間隔 |
| 変数名 | 説明 |
|---|---|
KEYCLOAK_ENDPOINT |
KeycloakエンドポイントURL |
KEYCLOAK_USERNAME |
Keycloak管理者ユーザー名 |
KEYCLOAK_PASSWORD |
Keycloak管理者パスワード |
KEYCLOAK_LOGIN_REALM |
ログイン用レルム |
KEYCLOAK_USER_REALM |
ユーザー管理レルム |
KEYCLOAK_ATTRS_KEY |
Discord ID を格納する属性キー |
KEYCLOAK_GROUP_PATH |
対象グループのパス |
常時実行モードでは、以下のDiscordスラッシュコマンドが利用できます:
同期間隔をリアルタイムで変更します。
/discroak-interval 10m # 10分間隔に変更
/discroak-interval 2h # 2時間間隔に変更
/discroak-interval 30s # 30秒間隔に変更(最小間隔は設定可能)
現在のBot状態を表示します。
/discroak-status
利用可能なコマンドのヘルプを表示します。
/discroak-help
# 環境変数を設定
export DISCORD_TOKEN="your_discord_bot_token"
export DISCORD_GUILD_ID="your_guild_id"
export DISCORD_ROLE_ID="your_role_id"
export KEYCLOAK_ENDPOINT="https://keycloak.example.com"
export KEYCLOAK_USERNAME="admin"
export KEYCLOAK_PASSWORD="admin_password"
export KEYCLOAK_LOGIN_REALM="master"
export KEYCLOAK_USER_REALM="your_realm"
export KEYCLOAK_ATTRS_KEY="discord_id"
export KEYCLOAK_GROUP_PATH="/members"
# 常時実行モードで開始(デフォルト5分間隔)
./discroak
# カスタム間隔で開始
CHECK_INTERVAL=30m ./discroakdocker run -d \
-e DISCORD_TOKEN="your_token" \
-e DISCORD_GUILD_ID="your_guild_id" \
-e DISCORD_ROLE_ID="your_role_id" \
-e KEYCLOAK_ENDPOINT="https://keycloak.example.com" \
-e KEYCLOAK_USERNAME="admin" \
-e KEYCLOAK_PASSWORD="admin_password" \
-e KEYCLOAK_LOGIN_REALM="master" \
-e KEYCLOAK_USER_REALM="your_realm" \
-e KEYCLOAK_ATTRS_KEY="discord_id" \
-e KEYCLOAK_GROUP_PATH="/members" \
-e CHECK_INTERVAL="10m" \
discroak:latestcreateDiscordSessionでエラーが発生する場合、トークンが正しいか確認してください- 自動再接続機能により、一時的な接続エラーは自動的に復旧されます
- Discord API のレート制限に達した場合、自動的に待機して再試行します
- 同時実行数はデフォルトで2に制限されていますが、
MAX_WORKERSで変更可能 - リトライ回数や間隔も環境変数で調整可能
Discordで/discroak-statusを実行して、現在の設定を確認できます。