mirror of
https://github.com/SillyTavern/SillyTavern.git
synced 2025-06-05 21:59:27 +02:00
Prevent same character from speaking twice in a row in group.
This commit is contained in:
@@ -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) {
|
||||||
|
Reference in New Issue
Block a user