Warning: session_start(): open(/var/lib/php/sessions/sess_9hscr5cj79de79v438nlii116e, O_RDWR) failed: No space left on device (28) in /var/www/tb-usercake/models/config.php on line 51
Warning: session_start(): Failed to read session data: files (path: /var/lib/php/sessions) in /var/www/tb-usercake/models/config.php on line 51
!7
concept GModule {
S moduleID, moduleLibID;
S userID; // e. g. discord user id
S userName;
S shorthand;
}
cmodule GModulesManager > DynCRUD {
// API
S startModuleForUser(S moduleLibID, S userID, S userName, S shorthand, O... _) {
Pair p = uniqConcept2(+userID, +shorthand);
if (!p.b) ret "Module already running";
cset(p.a, +userName, +moduleLibID);
print("Starting module: " + moduleLibID);
cset(p.a, moduleID := dm_makeNewModule(moduleLibID));
S answer = cast dm_callOpt(p.a.moduleID, 'initialAnswer, (O) _);
if (nempty(answer)) ret answer;
ret print("Module " + moduleLibID + " started for " + userName + " as " + quote(shorthand));
}
S deleteAllModulesForUser(S userID, O... _) {
L l = conceptsWhere GModule(+userID);
if (empty(l)) ret boolPar silentIfEmpty(_) ? "" : "No modules loaded";
for (GModule m : l)
dm_deleteModule(m.moduleID);
deleteConcepts(l);
ret n2(l, "module") + " deleted";
}
S deleteModuleForUser(S userID, S shorthand) {
GModule mod = conceptWhere GModule(+userID, +shorthand);
if (mod == null) ret "Module not found";
dm_deleteModule(mod.moduleID);
deleteConcept(mod);
ret "Module deleted";
}
void removeModule(O mod) {
deleteConcept(conceptWhere GModule(moduleID := dm_moduleID(mod)));
}
void removeModuleAndDelete(O mod) {
removeModule(mod);
doLater(5.0, r {
dm_deleteModule(mod)
});
}
LS modulesForUser(S userID) {
ret collect moduleID(conceptsWhere GModule(+userID));
}
LS activeModulesForUser(S userID) {
ret filter(modulesForUser(userID), mod -> moduleIsActive(mod));
}
bool moduleIsActive(S moduleID) {
O info = dm_getOpt(moduleID, 'gInfo);
ret info == null || !isFalse(getOpt(info, 'active));
}
L modulesInfoForUser(S userID) {
ret conceptsWhere GModule(+userID);
}
}