ranking() déclare un classement, depuis n’importe quel fichier de src/, et le nom de son export est le nom du classement. Il prend un objet, RankingConfig, ou rien.
src/levels/best.ts
Comment utiliser un classement, et où sont ses scores, est dans le guide. Cette page liste ce qui existe.
ranking()
src/ : le nom de l’export est le nom du classement. Par serveur sauf si scope: 'global' est donné, le score le plus haut en premier sauf si order: 'lowest' l’est.
RankingConfig
Ce qu’un fichier donne àranking().
'guild' (le défaut) : un classement par serveur, et une fonction qui tourne dans un serveur lit et écrit le classement de ce serveur, sans rien dire. 'global' : un seul classement pour tout le bot.Où les scores sont gardés :
'file' (le défaut), un fichier dans le dossier data/ du projet, ou 'redis', le Redis de REDIS_URL dans .env, où un classement est un sorted set.Quel bout vient en premier :
'highest' (le défaut), le score le plus haut en premier, ou 'lowest', le plus bas en premier (un temps, un nombre d’essais).RankingOrder
StoreScope et StoreStorage sont ceux de store().
Ranking
Ce que renvoieranking() : une déclaration que le framework trouve dans les exports d’un fichier. C’est un ScopedRanking pour le serveur où le code tourne, plus :
in()
ScopedRanking
Un classement, pour un serveur ou pour tout le bot.add()
points (négatifs pour retirer) au score de id, en partant de 0, d’un trait : rien de ce qui est ajouté entre-temps n’est perdu, même par un autre processus. Renvoie le nouveau score.
set()
id, quel qu’il soit.
score()
id, ou undefined quand il n’en a pas.
rankOf()
id, à partir de 1, ou undefined quand il n’a pas de score.
top()
count premiers membres (10 par défaut), après en avoir sauté skip (0 par défaut) : top(10, 10) est la deuxième page.
remove()
id. true quand il en avait un.
size()
clear()
RankingEntry
Un membre d’un classement, commetop() les liste.
Où vivent les scores
Avecstorage: 'file', une entrée par membre dans data/<nom>.json, écrite comme les entrées d’un store ([[id du serveur, id du membre], score, null]). top(), rankOf() et size() remettent chaque score du serveur dans l’ordre à chaque appel ; add() est une mise à jour de l’entrée, d’un trait.
Avec storage: 'redis', un sorted set par serveur : <nom>:<id du serveur>, <nom> pour un classement global, dev: devant dans chapterjs dev. add() est ZINCRBY, set() ZADD, score() ZSCORE, rankOf() ZREVRANK (ZRANK pour order: 'lowest'), top() ZREVRANGE … WITHSCORES (ZRANGE), remove() ZREM, size() ZCARD, clear() DEL.
Les scores égaux sont rangés par les octets de leur id, comme le fait Redis : à l’envers pour le plus haut en premier. Les deux stockages donnent le même ordre.