sidequest_common.schemas.levels#

Leveling schemas.

Attributes#

MAX_XP

Ceiling for admin XP overrides (~level 1800); keeps the level calculation bounded and fits a BIGINT.

Classes#

LeaderboardEntry

One leaderboard row.

LeaderboardPage

A page of the leaderboard, highest XP first.

LevelRoleSchema

Role rewarded at a level.

LevelRoleUpsert

Body for PUT /level-roles/{level}.

MemberLevelSchema

Raw stored level row.

RankSchema

A member's standing. rank is 1-based position by XP, or None if they have no XP yet.

SetXPRequest

Admin override of a member's XP total (level is recomputed).

XPAwardResult

Outcome of POST /members/{user_id}/xp (one chat message's worth of XP).

Module Contents#

class sidequest_common.schemas.levels.LeaderboardEntry#

Bases: pydantic.BaseModel

One leaderboard row.

level: int#
message_count: int#
rank: int#
user_id: int#
xp: int#
class sidequest_common.schemas.levels.LeaderboardPage#

Bases: pydantic.BaseModel

A page of the leaderboard, highest XP first.

entries: list[LeaderboardEntry]#
limit: int#
offset: int#
total: int#
class sidequest_common.schemas.levels.LevelRoleSchema#

Bases: pydantic.BaseModel

Role rewarded at a level.

level: int#
model_config#
role_id: int#
class sidequest_common.schemas.levels.LevelRoleUpsert#

Bases: pydantic.BaseModel

Body for PUT /level-roles/{level}.

role_id: int#
class sidequest_common.schemas.levels.MemberLevelSchema#

Bases: pydantic.BaseModel

Raw stored level row.

guild_id: int#
level: int#
message_count: int#
model_config#
user_id: int#
xp: int#
class sidequest_common.schemas.levels.RankSchema#

Bases: pydantic.BaseModel

A member’s standing. rank is 1-based position by XP, or None if they have no XP yet.

level: int#
message_count: int#
rank: int | None#
user_id: int#
xp: int#
xp_for_next_level: int#
xp_into_level: int#
class sidequest_common.schemas.levels.SetXPRequest#

Bases: pydantic.BaseModel

Admin override of a member’s XP total (level is recomputed).

xp: int#
class sidequest_common.schemas.levels.XPAwardResult#

Bases: pydantic.BaseModel

Outcome of POST /members/{user_id}/xp (one chat message’s worth of XP).

awarded is False while the member is on cooldown (or leveling is disabled); every other field then reflects the unchanged totals. earned_role_ids are level-role rewards for every level crossed by this award; remove_role_ids are lower level-roles to take away when the guild has level_roles_stack=False.

amount: int#
awarded: bool#
earned_role_ids: list[int]#
level: int#
leveled_up: bool#
previous_level: int#
remove_role_ids: list[int]#
xp: int#
sidequest_common.schemas.levels.MAX_XP = 10000000000#

Ceiling for admin XP overrides (~level 1800); keeps the level calculation bounded and fits a BIGINT.