aslobot-matrix/src/modules/global.ts
2025-12-28 17:36:10 +01:00

68 lines
1.8 KiB
TypeScript

import type { MatrixClient } from "matrix-js-sdk";
import type { TRole } from "../store/types.js";
import { getLevel, getUserById } from "../helpers.js";
import { config } from "../config.js";
import { state } from "../store/store.js";
const onAnyMessage = (
client: MatrixClient,
_text: string,
roomId: string,
sender: string,
) => {
const date = Date.now();
const user = getUserById(sender);
if (user.id === ":") {
state.users.push({
id: sender,
role: "USER",
experience: 0,
money: 10,
aiCost: 0,
lastMessageTimestamp: date,
lastExperienceGainTimestamp: date,
lastMoneyGainTimestamp: date,
});
return onAnyMessage(client, _text, roomId, sender);
}
const levelBefore = getLevel(user.experience);
if (
date >
user.lastExperienceGainTimestamp + config.app.experience.timeout
) {
user.experience += config.app.experience.gain;
user.lastExperienceGainTimestamp = date;
}
if (date > user.lastMoneyGainTimestamp + config.app.money.timeout) {
user.money += config.app.money.gain;
user.lastMoneyGainTimestamp = date;
}
user.lastMessageTimestamp = date;
const levelAfter = getLevel(user.experience);
if (levelAfter.level > levelBefore.level) {
client.sendHtmlMessage(
roomId,
"",
`${sender} - You are now level <b>${levelAfter.level}</b>`,
);
}
};
const onMissingRole = (
client: MatrixClient,
userRole: TRole,
roomId: string,
) => {
client.sendHtmlMessage(
roomId,
"",
`You are missing the required role.<br/>Your current role is <b>${userRole}</b>`,
);
};
export { onAnyMessage, onMissingRole };