Configurable group self-responses

This commit is contained in:
SillyLossy
2023-03-28 18:55:12 +03:00
parent 7c4f06e4d9
commit bab50bd58b
4 changed files with 43 additions and 11 deletions

View File

@ -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">&nbsp;</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>

View File

@ -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,
}),
});

View File

@ -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 {

View File

@ -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);