asclass DynServerAwareDiscordBot extends DynDiscordHopper { new Map dataByServer; int guildCount; transient IF0 makeByServer; // mandatory class ByServer { bool isGuild; S answer(S s, Map map) { null; } bool setField(S name, O value) { if (set_trueIfChanged(this, name, value)) false; ret true with _change(); } Member getSelfMember(Guild guild) { ret guild.getMember(getSelfUser()); } } @Override S answer(S input, Map map) { try answer super.answer(input, map); // discord hopping ret mapEachLine_tlft_nempties(input, s -> { // config by guild or user long guildID = toLong(map.get('guildID)); long id = guildID; print("Guild ID: " + guildID); if (id == 0) { id = toLong(map.get('userID)); print("User ID: " + id); } A data = getByServer(id, id == guildID); ret data.answer(s, map); }); } A getByServer(long id, bool isGuild) { ret pairA(getByServer2(id, isGuild)); } Pair getByServer2(long id, bool isGuild) { A data, bool isNew = unpair syncGetOrCreate2(dataByServer, id, makeByServer); data.isGuild = isGuild; if (isNew) { if (data.isGuild) ++guildCount; change(); } ret pair(data, isNew); } start { if (guildCount == 0) setField(guildCount := countValuesWhere(dataByServer, isGuild := true)); } int liveGuildCount() { ret l(discord.getGuilds()); } }