Prevent same character from speaking twice in a row in group.

This commit is contained in:
SillyLossy
2023-03-27 21:08:11 +03:00
parent b3d992baee
commit 0b1a7cc06d

View File

@@ -298,7 +298,7 @@ async function generateGroupWrapper(by_auto_mode, type=null) {
} }
} }
const activatedMembers = type !== "swipe" ? activateMembers(group.members, activationText) : activateSwipe(group.members); const activatedMembers = type !== "swipe" ? activateMembers(group.members, activationText, lastMessage) : activateSwipe(group.members);
// now the real generation begins: cycle through every character // now the real generation begins: cycle through every character
for (const chId of activatedMembers) { for (const chId of activatedMembers) {
const generateType = type !== "swipe" ? "group_chat" : "swipe"; const generateType = type !== "swipe" ? "group_chat" : "swipe";
@@ -355,13 +355,20 @@ function activateSwipe(members) {
return memberIds; return memberIds;
} }
function activateMembers(members, input) { function activateMembers(members, input, lastMessage) {
let activatedNames = []; let activatedNames = [];
// find mentions // prevents the same character from speaking twice
let bannedUser = lastMessage && !lastMessage.is_user && lastMessage.name;
// find mentions (excluding self)
if (input && input.length) { if (input && input.length) {
for (let inputWord of extractAllWords(input)) { for (let inputWord of extractAllWords(input)) {
for (let member of members) { for (let member of members) {
if (member == bannedUser) {
continue;
}
if (extractAllWords(member).includes(inputWord)) { if (extractAllWords(member).includes(inputWord)) {
activatedNames.push(member); activatedNames.push(member);
break; break;
@@ -370,9 +377,13 @@ function activateMembers(members, input) {
} }
} }
// activation by talkativeness (in shuffled order) // activation by talkativeness (in shuffled order, except banned)
const shuffledMembers = shuffle([...members]); const shuffledMembers = shuffle([...members]);
for (let member of shuffledMembers) { for (let member of shuffledMembers) {
if (member == bannedUser) {
continue;
}
const character = characters.find((x) => x.name === member); const character = characters.find((x) => x.name === member);
if (!character) { if (!character) {