68 lines
1.8 KiB
TypeScript
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 };
|