🏆

ランクシステム

チャット・VCの活動を計測してレベルアップ

💡 ランクシステムとは? メッセージ送信やVC接続時間に応じて経験値(XP)を 獲得し、レベルアップしていくシステムです。 サーバーごとに自由に成長曲線を設計できます。

🎯 設計思想: レベルは常にXPからその場計算されます。 保存されるのは生のXP値のみで、 ランク表示時に設定に応じて加算してレベルを算出します。 そのため、成長曲線を変更すると過去のXPから 新しいレベルが自動的に再計算されます。

概要

ランクシステムは、ユーザーのDiscord活動量を可視化する機能です。 チャットでの発言やVCへの接続時間に応じてXPが溜まり、 一定量貯まるとレベルアップします。

ミュート勢の利便性を考慮し、VCミュート中もXPが獲得できる設計です。 また、テキストチャットとインチャットを別々に計測する設定も可能です。

機能一覧

機能説明
経験値計測メッセージ送信・VC接続時間に応じてXPを付与
レベルアップ累積XPがしきい値を超えると自動でレベルアップ
ランク付与特定レベル到達でロールを自動付与(任意設定)
ランキングサーバー内のXPランキングTOP10を表示(0XP除外)
期間ランキング週間・月間のランキングを表示
XP集計モード全体・VC/チャット・VC/チャット/インチャットの3モード
ランダムEXP固定値・一様ランダム・三角分布・カスタム数式から選択可能
チャンネルフィルター特定のCH/カテゴリのみXP計測(許可/拒否)
XPキャップ日次・週次で獲得XPに上限を設定
メッセージボーナス文字数・添付・スタンプに応じたボーナスXP
イベントブースト期間限定でXP獲得量を増加
有効期間ランク計測を特定の期間だけ有効化
VC/チャット条件VC最小人数・VC/チャット/インチャットのロール要件
VC最小接続時間指定分数未満のVC接続ではXP不付与(分単位、デフォルト1分)
チャット/インチャットロール制限特定ロール未所持でチャット・インチャットXP不付与
VC切断時比例計算接続秒数に比例したXP付与(端数も計算)

経験値の獲得方法

チャット経験値

メッセージを送信するとXPが付与されます。 ただし、以下の条件で付与されません。

チャットXPの計算フロー

1. チャット/インチャット ロール要件チェック
   └── ロール未所持 → 付与なし

2. 基本XP = _calc_random_exp(chat=True)
   ├── モード0(固定値): chat_exp × chat_multiplier
   ├── モード1(一様): random.uniform(min, max)
   ├── モード2(三角): random.triangular(min, max)
   └── モード3(カスタム): ユーザー定義式 (lo, hi, R 利用可)

3. + メッセージボーナス
   ├── 文字数ボーナス(設定文字数以上で加算)
   ├── 添付ファイルボーナス(1添付ごとに加算)
   └── スタンプボーナス(1スタンプごとに加算)

4. × イベントブースト倍率(boost_chat_mult)

5. XPキャップ適用(日次上限を超過しないよう調整)

メッセージボーナス

メッセージの質に応じて追加XPが付与されます。管理者が各項目を個別に設定できます。

ボーナス種別条件加算量
📝 文字数ボーナス設定文字数以上(例: 50文字)設定値(例: +5 XP)
📎 添付ファイルメッセージにファイル添付設定値 × 添付数(例: +10 × 2)
🏷️ スタンプメッセージにスタンプ設定値 × スタンプ数(例: +3 × 1)

VC経験値

VCに接続している間、XPが付与されます。 切断時に接続時間に応じて一括計算されます。

⚠️ 注意: VCから切断すると、接続開始時からの経過時間に応じたXPが 一括で計算されて加算されます。

⏳ VC最小接続時間

VC接続後、指定分数未満の接続ではXPが一切付与されません。 デフォルトは1分で、1分未満のVC接続はXPなしになります。

設定値経過時間結果
1(デフォルト)30秒❌ 付与なし(1分未満)
1(デフォルト)90秒✅ 1.5分分のXP
0(比例計算)30秒✅ 0.5分分のXP(比例)
3150秒✅ 2.5分分のXP
3120秒❌ 付与なし(3分未満)

💬🎙️ チャット・インチャット ロール要件 NEW

チャット・インチャットそれぞれに獲得に必要なロールを設定できます。 設定されたロールを1つも持っていないユーザーは、 そのトラックでXPを一切獲得できません。

設定項目対象空の場合
💬 チャット獲得ロール通常のテキストチャット全員がXP獲得可能
🎙️ インチャット獲得ロールVC/ステージ内のテキストチャット全員がXP獲得可能
🎤 VC自分ロールVC接続全員がXP獲得可能

これらの設定は「🎤 VC/チャット条件設定」Modalで一括管理できます。

💡 ユースケース: 例えば「認証済み」ロールを持っている人のみチャットXPを獲得できるようにしたり、 VC常連ロールを持っている人のみインチャットXPを獲得できるようにするなど、 活動の質を担保するために使用できます。

XP集計モード

プリセットごとにXP集計モードを選択できます。 設定パネルの「XP集計モード」をクリックするたびに 3つのモードが循環します。

モード表示名チャットXPの記録先VC XPの記録先VC/Stage内チャットレベル判定
combined🔄 全体chat_expvc_expchat_expchat_exp + inchat_exp + vc_exp(合算)
separate🔀 VC/チャットchat_expvc_expchat_exp各XPから独立(2系統)
inchat🎙️ VC/チャット/インチャットchat_expvc_expinchat_exp(独立)各XPから独立(3系統)

🔑 重要な設計: レベルは保存されず、全ての表示でXPからその場計算されます。 そのため成長曲線の変更が過去のデータに即座に反映され、 レベルがずれる心配はありません。

ランダムEXPシステム

経験値の獲得量にバラつきを持たせられるランダムEXP機能を 搭載しています。4つのモードから選択可能です。

モード名称挙動用途
0🎲 固定常に一定値(設定値 × 倍率)安定したXP配分
1🎲 ランダム①一様分布 random.randint(min, max)シンプルなランダム
2🎲 ランダム②三角分布 random.triangular(min, max, min)下限寄りの分布
3🎯 カスタム数式ユーザー定義の式で計算自由な設計

カスタム数式モード(モード3)

以下の変数が利用可能です:

変数説明
lo設定されている下限XP
hi設定されている上限XP
Rrandom.random() — 0~1のランダム値

設定例:

# 一様ランダムと同じ挙動
lo + int(R * (hi - lo + 1))

# 正規分布風
int((lo + hi) / 2 + (R - 0.5) * (hi - lo))

# 高確率で最大値近く
int(hi * R ** 0.5)

拡張機能

📅 XPキャップ

1日・1週間あたりの獲得XPに上限を設定できます。キャップを超えたXPは切り捨てられます。

🚀 イベントブースト

特定の期間、XP獲得量に倍率を掛けられるイベント機能です。

🟢 有効期間

ランクシステムの計測自体を特定の期間だけ有効にできます。

#️⃣ チャンネルフィルター

特定のチャンネル・カテゴリをXP計測の対象・除外に指定できます。 テキストCH(TC)とVCで独立して設定可能です。

フィルターはホワイトリスト(許可)ブラックリスト(拒否)の2つを同時に設定できます。

リスト挙動
✅ ホワイトリスト設定されている場合、該当CH/カテゴリのみXP計測。未設定(空)の場合は全CHが対象。
❌ ブラックリスト該当CH/カテゴリをXP計測から除外。ホワイトリストより優先。

テキストCH(TC)とVCでそれぞれ以下の4項目を設定できます:

📊 ランキング

/ランキング コマンドでサーバー内のXPランキングを表示できます。

期間ランキング

レベル・経験値の仕組み

成長テンプレート

4種類のテンプレートから選択できます。デフォルトは 🌱 スムーズ成長(初期が優しめ)です。

テンプレート次レベルXP式Lv.1→2Lv.10→11特徴
🌱 スムーズ成長5L² + 50L55 XP1,000 XP初期がとても優しい
⚖️ 序盤ハードル+スムーズ成長5L² + 50L + 100155 XP1,100 XP旧デフォルト
📈 線形成長30L + 2050 XP320 XP安定した伸び
🍃 緩やか成長3L² + 30L + 1548 XP630 XP全体的に緩やか
レベル🌱 スムーズ成長⚖️ 序盤ハードル+スムーズ成長📈 線形成長🍃 緩やか成長
Lv.1 → Lv.255 XP155 XP50 XP48 XP
Lv.5 → Lv.6375 XP475 XP170 XP240 XP
Lv.10 → Lv.111,000 XP1,100 XP320 XP630 XP
Lv.50 → Lv.5115,000 XP15,100 XP1,520 XP9,030 XP

📈 成長曲線グラフ

各テンプレートの累積XP(Lv.1から各レベルに到達するまでの必要総XP)を比較したグラフです。

🌱 スムーズ成長
⚖️ 序盤ハードル+スムーズ成長
📈 線形成長
🍃 緩やか成長

高度設定:カスタム数式

管理者は任意の数式で成長曲線を設計できます。テンプレートにない独自の曲線も自由に設定可能です。

使用可能な構文

要素説明
L現在のレベル変数5 * L + 100
+ - * / // % **四則演算・切り捨て除算・剰余・累乗L ** 2
min max abs最小・最大・絶対値max(100, 50 * L)
pow int float round累乗・整数化・浮動小数点化・丸めpow(L, 2.5)

設定例

# デフォルト(スムーズ成長)
5 * L ** 2 + 50 * L

# 序盤ハードル+スムーズ成長
5 * L ** 2 + 50 * L + 100

# 線形成長
30 * L + 20

# イベント向け
max(100, 50 * L ** 1.5)

# 超長期サーバー向け
200 * L ** 1.8

💡 累積XP式について: 累積XPの計算式は通常、次レベルXP式から自動導出されます。 高度な用途で独自に設定したい場合のみ、累積XP式も入力できます。

コマンド一覧

/ランク [@ユーザー]
自分または指定ユーザーのランクを表示します。
画像式のランクカードで表示されます(1100×420)。
表示対象: ⭐ メイン設定されたプリセットのみ表示
メイン設定がない場合はエラーメッセージが表示されます。
全体モード: chat_exp + inchat_exp + vc_exp の合算レベル表示(メーター1本)
VC/チャットモード: チャットXP・VC XPを個別表示(メーター2本)
インチャットモード: 通常チャット・VC内チャット・VCの3系統を独立表示(メーター3本)
カスタマイズ: 追加機能「🎴 ランクカード設定」でカラーや表示を変更可能(設定しなくても画像で表示)
全員
/ランキング [period]
サーバー内のXPランキングTOP10を表示します。
プリセット一覧がページネーションで表示され、 ✅ 選択ボタンでランキングの種別と期間を設定して実行します。
種別: 全て / チャット / VC / インチャット
期間: 週間 / 月間(省略時は全期間、Modal内で変更可能)
0XPのユーザーは表示されません。
全員
/ランク設定
ランクシステムの設定パネルを開きます
管理者専用

設定パネル項目一覧

/ランク設定 で開く設定パネルでは、 2つのSelectメニューとアクションボタンで設定を変更できます。
上のSelect: 追加機能のON/OFF(複数選択可)
下のSelect: 各項目の詳細設定
設定項目を選ぶとModalが開くか、直接値が切り替わります。

以下が設定可能な全項目です:

項目説明
🟢 プリセット有効プリセットのアクティブ状態を切り替え(同時に有効化できるのは最大3つまで
📛 設定名変更プリセット名を設定(Modal)
⭐ メイン設定このプリセットをメインに設定。ONにすると他プリセットのメインは自動OFFに
🔀 XP集計モードクリックで combined/separate/inchat を循環
💬🎤 XP統合設定チャットXP・VC XP・ランダムモード・範囲・倍率を一括設定(Modal)
🎯 ランダム数式設定カスタム乱数計算式の設定(Modal)
⏱️ クールダウン設定チャットクールダウン秒数 + VC最小接続時間(分)を設定(Modal)
📋 成長テンプレート選択4種のテンプレートから選択(Select)
📈 カスタム数式設定カスタム成長曲線の数式を設定(Modal)
📢 通知CH設定レベルアップ通知の送信先CHを設定(Modal)
🔝 上限Lv設定最大到達レベルを設定(Modal)
📋 ログ機能設定ログ出力先をカテゴリ別に設定(下記参照)

⚠️ 有効化上限: 同時に有効化できるプリセットは最大3つまでです。 4つ目以降を有効化するには、先に他のプリセットを 無効化してください。

拡張機能設定

拡張機能は上のSelectメニューからON/OFFを切り替えます。 ONにすると下のSelectに詳細設定項目が出現します。

機能説明
💬 チャット計測チャットXPの計測ON/OFF
🎤 VC計測VC XPの計測ON/OFF
#️⃣ チャットWH/BL設定テキストCH/カテゴリの許可/拒否を設定(Modal)
🎤 VC WH/BL設定VC CH/カテゴリの許可/拒否を設定(Modal)
📅 XPキャップ設定日次・週次の獲得XP上限を設定(Modal)
📝 ボーナス設定文字数・添付・スタンプのボーナスXPを設定(Modal)
🎤 VC/チャット条件設定VC最小人数・VC/チャット/インチャットのロール要件を一括設定(Modal)
🚀 ブースト設定イベントブーストのON/OFF・倍率・期間を設定(Modal)
🟢 有効期間ランク計測の有効期間を設定(Modal)
🎭 ランクロール制御設定レベル到達時のロール付与/剥奪を設定(Modal)
🎭 ランクロール高度制御設定複数ロールの段階的付与など高度設定(Modal)
💬 カスタムメッセージ設定レベルアップ時のカスタム通知メッセージを設定(Modal)
🎴 ランクカード設定ランクカードのカラーコード指定・順位/合計経験値/現在経験値/次レベル必要経験値の表示/非表示を設定(Modal)。設定しなくても `/ランク` は画像式で表示されます

⭐ メイン設定

複数のプリセットを作成できるランクシステムでは、 メイン設定機能で /ランク コマンドの表示対象を1つに絞れます。

💡 仕組み:

  • 各プリセットのエディタ項目から「⭐ メイン設定」をONにできます
  • メインをONにすると、他の全プリセットのメイン設定が自動的にOFFになります
  • /ランク コマンドはメイン設定されたプリセットのみ表示します
  • メイン設定が1つもない場合、/ランク はエラーメッセージを表示します
  • 設定パネル上ではメイン設定のプリセットに ⭐ アイコンが表示されます
  • /ランキング やXP計測はメイン設定に関係なく全プリセットが動作します

📋 ログ設定

ランクシステムの各イベントを特定のチャンネルにログ出力できます。 5つのカテゴリに分かれており、それぞれ個別に 出力先チャンネルを設定可能です。 設定されていないカテゴリはグローバル設定にフォールバックします。

ログカテゴリ一覧

カテゴリ設定項目説明
🌐 グローバルグローバルCH他カテゴリ未設定時のフォールバック先
📊 レベルレベルアップレベルが上がったときのログ
レベルダウンレベルが下がったときのログ
レベルキャップ最大レベル到達時のログ
🎭 ロールロール付与ランクロールが付与されたときのログ
ロール剥奪ランクロールが剥奪されたときのログ
高度付与高度制御によるロール付与のログ
高度剥奪高度制御によるロール剥奪のログ
⚡ XPXPキャップXPキャップに達したときのログ
VC/チャット条件VC/チャット条件不適合でXP不付与のログ
⚙️ システムプリセット切替メイン設定が切り替えられたときのログ
設定変更プリセット設定が変更されたときのログ
エラーランクシステム内部でエラーが発生したときのログ
警告ランクシステムの警告事項のログ

設定方法

  1. /ランク設定 を実行
  2. プリセットのエディタを開く
  3. 下のSelectで「📋 ログ機能設定」を選択
  4. ログ設定Viewでカテゴリを選択 → Modal内でChannelSelect
  5. 未設定のカテゴリはグローバルCHにフォールバック
  6. 全て未設定の場合はログは出力されません

ランク表示の例

/ランク を実行すると、以下のような 画像式のランクカードが表示されます。 XP集計モードに応じてメーターの本数が変化します。

全体モード(combined・メーター1本)

ランクカード(全体モード)

VC/チャットモード(separate・メーター2本)

ランクカード(VC/チャットモード)

インチャットモード(inchat・メーター3本)

ランクカード(インチャットモード)

💡 ランクカードの内容:

  • 左上: 丸抜きアイコン+カラーリング(色はランクカード設定で変更可能)
  • 中央上部: 表示名・ユーザー名(絵文字はカラーで描画。フォントは data/fonts/NotoColorEmoji.ttf
  • 表示名の文字補完: 日本語フォントに無い文字は、以下の補完フォントから文字ごとに最適なフォントを自動選択して描画
    • Yi文字(「꒳」「꒰」など): MSYI.TTF / NotoSansYi-Regular.ttf
    • シンボル文字(「❅」「♔」「⋆」など): NotoSansSymbols-Regular.ttf / NotoSansSymbols2-Regular.ttf
    • 数学記号(「⟡」「⫘」など): NotoSansMath-Regular.ttf
    • 各種言語文字(「ঌ」など): NotoSansBengali-Regular.ttf
    • その他の記号: NotoSans-Regular.ttf
  • ZWJ合成絵文字: 「🐈‍⬛」のような複合絵文字もカラーで描画可能
  • アイコン下: 全体レベル(LVL+数字)
  • 各メーター直上: 系統別の順位・合計EXP
  • 各メーター左側: 系統別のレベル(LVL+数字)
  • メーター内: 現在Lv内XP / 次Lv必要XP(進捗%)
  • 背景画像は data/img/rank_default_card.png に置くことでカスタマイズ可能(無い場合は単色背景)

🎴 表示の隠し方(ランクカード設定):

  • 順位を隠す: 各メーター直上の順位表示自体を非表示にします
  • 合計経験値を隠す: 各メーター直上の合計EXP表示自体を非表示にします
  • 現在経験値を隠す: メーター内の現在Lv内XPを ??? にします
  • 次レベル必要経験値を隠す: メーター内の次Lv必要XPを ??? にします
  • 現在経験値と次レベル必要経験値の両方を隠す: メーター内は進捗%(例: 45%)のみ表示されます

注意事項