Initial code

This commit is contained in:
Aslan 2025-12-23 07:18:10 -05:00
commit 1f20a611da
26 changed files with 1050 additions and 0 deletions

View file

@ -0,0 +1 @@
export * from "./user.js";

57
src/modules/user/user.ts Normal file
View file

@ -0,0 +1,57 @@
import { MatrixClient } from "matrix-js-sdk";
import type { ICallbackStore } from "../types.js";
import { config } from "../../config.js";
import { getRank, getUserById, getUserName } from "../../helpers.js";
import { state } from "../../store/store.js";
import type { IUser } from "../../store/types.js";
let client: MatrixClient;
const registerModuleUser = (
matrixClient: MatrixClient,
callbackStore: ICallbackStore,
) => {
client = matrixClient;
callbackStore.messageCallbacks.push({
startCondition: `${config.app.triggerPrefix}rank`,
callbackFunc: onRank,
});
callbackStore.messageCallbacks.push({
startCondition: `${config.app.triggerPrefix}leaderboard`,
callbackFunc: onLeaderboard,
});
};
const onRank = (_text: string, roomId: string, sender: string) => {
const rank = getRank(getUserById(sender).experience);
client.sendHtmlMessage(
roomId,
"",
`<h3>Your Rank: ${rank.rank}</h3>
<i>Next rank progress: ${rank.experienceInRank}/${rank.expToNextRank}exp</i>`,
);
};
const onLeaderboard = (_text: string, roomId: string) => {
const mapUsersToLeaderboard = (user: IUser): string => {
const rank = getRank(user.experience);
return `<li>${getUserName(user)}: rank ${rank.rank} (${rank.experienceInRank}/${rank.expToNextRank}exp)</li>`;
};
const users = state.users.sort(
(userA, userB) => userB.experience - userA.experience,
);
client.sendHtmlMessage(
roomId,
"",
`<h3>Leaderboard</h3>
<ul>
${users.map(mapUsersToLeaderboard)}
</ul>`,
);
};
export { registerModuleUser };