Warning: session_start(): open(/var/lib/php/sessions/sess_qgr80d286hkui427obmsh32869, 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
abstract sclass DynDiscordHopper > DynPrintLogAndEnabled {
!include #1023434 // Discord
bool discordEnabled() { ret enabled; }
bool printToModule() { true; }
bool discordHopperMetaCmdsEnabled;
long preferredChannelID;
enhanceFrame {
internalFramePopupMenuItem(f, "Start keep-alive module", rThread startKeepAliveModule);
}
start {
startDiscord();
dm_vmBus_onMessage_q incomingDiscordMessage(voidfunc(Map map) {
if (!enabled) ret;
O module = map.get('module);
if (!dm_isMe(module)) ret;
S s = getString content(map);
long channelID = toLong(map.get('channelID));
if (channelID != 0 && preferredChannelID == 0)
setField(preferredChannelID := channelID);
S answer = answer(s, map);
if (nempty(answer))
dm_call(module, 'reply, map, answer);
});
}
S answer(S s, Map map) {
if (discordHopperMetaCmdsEnabled && eq(s, "!bot count"))
ret lstr(dm_activeDiscordTokens());
LS tokens = extractPossibleDiscordTokens(s);
for unnull (S token : tokens) {
if (getLong guildID(map) != 0)
ret "Send tokens only in private messages!!";
S answer = "That's a Discord token!";
if (contains(concatLists((LLS) vmBus_queryAll activeDiscordTokens()), token))
answer += " And I'm there already.";
else {
answer += " Jumping there!!";
dm_showNewModuleWithParams(dm_moduleLibID(), discordToken := token);
}
reply(map, answer);
}
null;
}
S atSelf() { ret discordAt(discordBotID); }
// API
S migrateToType(S moduleLibID) {
S moduleID = assertNotNull(dm_showNewModuleWithParams(moduleLibID, +discordToken));
print("Migrated to new module " + moduleID + ", disabling me");
setEnabled(false);
dm_reload(); // actually disable Discord
ret moduleID;
}
}