svoid dm_discord_gatherFeedbackFromLine(GazelleLine l) pcall { S mrStruct = gazelle_discord_matchedRuleStructForMsgID(l.msgID); if (mrStruct == null) ret; // with print("Not a Gazelle line or legacy"); print("Processing: " + l.msgID + " - " + l.text); printIndent(shorten(mrStruct, 50)); printIndent(l.reactions); LS posNeg = uniquifyCI(map dm_posNegStringForEmoji(collectStrings emoji(l.reactions))); printIndent("posNeg = " + posNeg); if (l(posNeg) > 1) ret with warn(" Mixed feedback, skipping"); S judgement = cic(posNeg, 'positive) ? 'good : 'bad; dm_gazelle_saveAppliedRule( +judgement, matchedRuleStruct := mrStruct, context := "discord msg " + l.msgID); }