Database
このクラスは、データベースを操作するためのメソッドを提供します。MongoDB と SQLite の両方をサポートし、ユーザーおよびレベルロールのドキュメントを作成、更新、削除、検索できます。レコードの作成または更新時には、createdAt と lastUpdated のタイムスタンプが設定されます。
Methods
Database.getCollection()
データベースからコレクションを返します。
この関数は MongoDB データベースでのみ使用できます。
パラメーター
| Parameter | Type | Required | Description |
|---|---|---|---|
| collection | string | ✅ | 取得するコレクション名。 |
戻り値 Collection - MongoDB コレクション
Database.createOne()
ここでは query のプロパティを すべて 指定する必要があります。
データベースに新しいドキュメントを作成します。このメソッドは createdAt と lastUpdated の ISO タイムスタンプを自動で追加します。data オブジェクトの多くのフィールド (name、user、level、xp、flags など。simply-xps の場合) は任意です。MongoDB と SQLite の両方をサポートします。
パラメーター
| Parameter | Type | Required | Description |
|---|---|---|---|
| query | UserOptions LevelRoleOptions | ✅ | ユーザーまたはレベルロール用オプション。 |
戻り値 Promise<UserResult | LevelRoleResult> - User または LevelRole
Database.deleteMany()
複数のドキュメントを削除します。基盤ドライバーが結果オブジェクトを返した場合に true を返します。SQLite では run() の結果が成功時に truthy として扱われます。
パラメーター
| Parameter | Type | Required | Description |
|---|---|---|---|
| query | UserOptions LevelRoleOptions | ✅ | ユーザーまたはレベルロール用オプション。 |
戻り値 Promise<boolean> - ドキュメントが削除された場合は true、それ以外は false
Database.deleteOne()
単一のドキュメントを削除します。
パラメーター
| Parameter | Type | Required | Description |
|---|---|---|---|
| query | UserOptions LevelRoleOptions | ✅ | ユーザーまたはレベルロール用オプション。 |
戻り値 Promise<boolean> - ドキュメントが削除された場合は true、それ以外は false
Database.findOne()
データベースから 1 件のドキュメントを検索します。
パラメーター
| Parameter | Type | Required | Description |
|---|---|---|---|
| query | UserOptions LevelRoleOptions | ✅ | ユーザーまたはレベルロール用オプション。 |
戻り値 Promise<UserResult | LevelRoleResult> - User または LevelRole
Database.find()
指定したギルドのドキュメントを検索します。SQLite では simply-xps の flags カラムは JSON から配列に再変換されます。collection パラメーターには simply-xps または simply-xp-levelroles を指定する必要があります。
パラメーター
| Parameter | Type | Required | Description |
|---|---|---|---|
| collection | simply-xps simply-xp-levelroles | ✅ | 取得するコレクション名。 |
| guild | string | ✅ | ギルド ID。 |
| limit | number | ❌ | 返却する最大ドキュメント数。 |
戻り値 Promise< UserResult[] | LevelRoleResult[] > - User または LevelRole
Database.findAll()
すべてのドキュメントを検索します。
パラメーター
| Parameter | Type | Required | Description |
|---|---|---|---|
| collection | simply-xps simply-xp-levelroles | ✅ | 取得するコレクション名。 |
| limit | number | ❌ | 返却する最大ドキュメント数。 |
戻り値 Promise< UserResult[] | LevelRoleResult[] > - User または LevelRole
Database.findGlobalLeaderboard()
すべてのギルドを横断したグローバルリーダーボードを取得し、ユーザーごとに 1 行だけを残します。各ユーザーについて、XP が最も高いギルドの行が採用されます(同点の場合は最終更新日時、次に作成日時が新しい方が優先されます)。guildId を指定せずに leaderboard() を呼び出した際に内部で使用されます。
パラメーター
| Parameter | Type | Required | Description |
|---|---|---|---|
| limit | number | ❌ | 返却する最大ユーザー数。 |
戻り値 Promise< UserResult[] > - XP の降順で並んだ、ユーザーごとに 1 行の結果。
Database.updateOne()
データベース内のドキュメントを更新します。
パラメーター
| Parameter | Type | Required | Description |
|---|---|---|---|
| filter | UserOptions LevelRoleOptions | ✅ | ユーザーまたはレベルロール用オプション。 |
| update | UserOptions LevelRoleOptions | ✅ | ドキュメントに適用する更新内容。 |
| options | { upsert?: boolean } | ❌ | MongoDB の upsert オプション。 |
戻り値 Promise<UserResult | LevelRoleResult> - User または LevelRole
Database.namespace()
プラグイン専用のキー/値ストアを返します。これにより、プラグインは xp.database や simply-xp のテーブルを直接操作することなく、独自のデータを保存できます。
MongoDB と SQLite の両方で動作します。ストレージは最初の書き込み時に遅延作成されるため、何も保存しないプラグインはデータベースに一切影響しません。
パラメーター
| Parameter | Type | Required | Description |
|---|---|---|---|
| name | string | ✅ | 名前空間。通常はプラグインのパッケージ名。 |
戻り値 PluginStore
| メソッド | 戻り値 | 説明 |
|---|---|---|
get(key) | Promise<T | null> | 値を読み取ります。未設定の場合は null。 |
set(key, value) | Promise<void> | 値を書き込みます。JSON 化できる値であれば何でも可。 |
delete(key) | Promise<boolean> | キーを削除し、存在したかどうかを返します。 |
keys() | Promise<string[]> | この名前空間のすべてのキーを列挙します。 |
clear() | Promise<number> | この名前空間のすべてのキーを削除し、その件数を返します。 |
例外
XpFatal- 名前が指定されていない場合、またはデータベース接続がない場合。
例
const { Database } = require("simply-xp");
const store = Database.namespace("simply-xp-rate-limits");
await store.set(`cooldown:${userId}`, { until: Date.now() + 60_000 });
const cooldown = await store.get(`cooldown:${userId}`);
if (cooldown && cooldown.until > Date.now()) return; // まだクールダウン中
名前空間は互いに分離されているため、2 つのプラグインが同じキー名を安全に使用できます。
Database.countUsersWithMoreXp()
指定した値より厳密に多くの XP を持つギルド内のユーザー数を数えます。fetch() と rankCard() が、ギルド全体をメモリに読み込まずにユーザーのリーダーボード順位を計算するために内部で使用します。
パラメーター
| Parameter | Type | Required | Description |
|---|---|---|---|
| guildId | string | ✅ | ギルド ID。 |
| xpValue | number | ✅ | この値より多い XP を持つユーザーを数えます。 |