mirror of
https://github.com/SillyTavern/SillyTavern.git
synced 2025-06-05 21:59:27 +02:00
Configurable group self-responses
This commit is contained in:
@@ -1005,12 +1005,16 @@
|
||||
</div>
|
||||
|
||||
<div id="rm_group_buttons">
|
||||
<label class="checkbox" style="display:none">
|
||||
<input id="rm_group_automode" type="checkbox" /><span></span>
|
||||
<h4>Auto Mode</h4>
|
||||
<label class="checkbox_label">
|
||||
<input id="rm_group_allow_self_responses" type="checkbox" />
|
||||
Allow bot responses to self
|
||||
</label>
|
||||
<label id="rm_group_automode_label" class="checkbox_label">
|
||||
<input id="rm_group_automode" type="checkbox" />
|
||||
Auto Mode
|
||||
</label>
|
||||
<input id="rm_group_submit" class="menu_button" type="submit" value="Create">
|
||||
<div id="rm_group_buttons_expander"> </div>
|
||||
<input id="rm_group_submit" class="menu_button" type="submit" value="Create">
|
||||
<input id="rm_group_delete" class="menu_button" type="submit" value="Delete">
|
||||
</div>
|
||||
</div>
|
||||
|
@@ -298,7 +298,7 @@ async function generateGroupWrapper(by_auto_mode, type=null) {
|
||||
}
|
||||
}
|
||||
|
||||
const activatedMembers = type !== "swipe" ? activateMembers(group.members, activationText, lastMessage) : activateSwipe(group.members);
|
||||
const activatedMembers = type !== "swipe" ? activateMembers(group.members, activationText, lastMessage, group.allow_self_responses) : activateSwipe(group.members);
|
||||
// now the real generation begins: cycle through every character
|
||||
for (const chId of activatedMembers) {
|
||||
const generateType = type !== "swipe" ? "group_chat" : "swipe";
|
||||
@@ -355,17 +355,22 @@ function activateSwipe(members) {
|
||||
return memberIds;
|
||||
}
|
||||
|
||||
function activateMembers(members, input, lastMessage) {
|
||||
function activateMembers(members, input, lastMessage, allowSelfResponses) {
|
||||
let activatedNames = [];
|
||||
|
||||
// prevents the same character from speaking twice
|
||||
let bannedUser = lastMessage && !lastMessage.is_user && lastMessage.name;
|
||||
|
||||
// ...unless allowed to do so
|
||||
if (allowSelfResponses) {
|
||||
bannedUser = undefined;
|
||||
}
|
||||
|
||||
// find mentions (excluding self)
|
||||
if (input && input.length) {
|
||||
for (let inputWord of extractAllWords(input)) {
|
||||
for (let member of members) {
|
||||
if (member == bannedUser) {
|
||||
if (member === bannedUser) {
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -380,7 +385,7 @@ function activateMembers(members, input, lastMessage) {
|
||||
// activation by talkativeness (in shuffled order, except banned)
|
||||
const shuffledMembers = shuffle([...members]);
|
||||
for (let member of shuffledMembers) {
|
||||
if (member == bannedUser) {
|
||||
if (member === bannedUser) {
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -573,6 +578,7 @@ function select_group_chats(chat_id) {
|
||||
|
||||
const groupHasMembers = !!$("#rm_group_members").children().length;
|
||||
$("#rm_group_submit").prop("disabled", !groupHasMembers);
|
||||
$("#rm_group_allow_self_responses").prop("checked", group && group.allow_self_responses);
|
||||
|
||||
// bottom buttons
|
||||
if (chat_id) {
|
||||
@@ -594,11 +600,24 @@ function select_group_chats(chat_id) {
|
||||
callPopup("<h3>Delete the group?</h3>", "del_group");
|
||||
});
|
||||
|
||||
$("#rm_group_allow_self_responses").off();
|
||||
$("#rm_group_allow_self_responses").on("input", async function () {
|
||||
if (group) {
|
||||
const value = $(this).prop("checked");
|
||||
group.allow_self_responses = value;
|
||||
await editGroup(chat_id);
|
||||
}
|
||||
});
|
||||
|
||||
// top bar
|
||||
if (group) {
|
||||
$("#rm_group_automode_label").show();
|
||||
$("#rm_button_selected_ch").children("h2").text(groupName);
|
||||
setRightTabSelectedClass('rm_button_selected_ch');
|
||||
}
|
||||
else {
|
||||
$("#rm_group_automode_label").hide();
|
||||
}
|
||||
}
|
||||
|
||||
$(document).ready(() => {
|
||||
@@ -636,6 +655,7 @@ $(document).ready(() => {
|
||||
|
||||
$("#rm_group_submit").click(async function () {
|
||||
let name = $("#rm_group_chat_name").val();
|
||||
let allow_self_responses = !!$("#rm_group_allow_self_responses").prop("checked");
|
||||
const members = $("#rm_group_members .group_member")
|
||||
.map((_, x) => $(x).data("id"))
|
||||
.toArray();
|
||||
@@ -657,6 +677,7 @@ $(document).ready(() => {
|
||||
name: name,
|
||||
members: members,
|
||||
avatar_url: avatar_url,
|
||||
allow_self_responses: allow_self_responses,
|
||||
}),
|
||||
});
|
||||
|
||||
|
@@ -2111,8 +2111,9 @@ input[type="range"]{
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
width: 100%;
|
||||
align-items: flex-end;
|
||||
margin-bottom: 10px;
|
||||
align-items: center;
|
||||
margin-bottom: 5px;
|
||||
column-gap: 10px;
|
||||
}
|
||||
|
||||
#rm_group_buttons .checkbox {
|
||||
|
@@ -1553,7 +1553,13 @@ app.post('/creategroup', jsonParser, (request, response) => {
|
||||
}
|
||||
|
||||
const id = Date.now();
|
||||
const chatMetadata = { id: id, name: request.body.name ?? 'New Group', members: request.body.members ?? [], avatar_url: request.body.avatar_url };
|
||||
const chatMetadata = {
|
||||
id: id,
|
||||
name: request.body.name ?? 'New Group',
|
||||
members: request.body.members ?? [],
|
||||
avatar_url: request.body.avatar_url,
|
||||
allow_self_responses: !!request.body.allow_self_responses,
|
||||
};
|
||||
const pathToFile = path.join(directories.groups, `${id}.json`);
|
||||
const fileData = JSON.stringify(chatMetadata);
|
||||
|
||||
|
Reference in New Issue
Block a user