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>
<div id="rm_group_buttons"> <div id="rm_group_buttons">
<label class="checkbox" style="display:none"> <label class="checkbox_label">
<input id="rm_group_automode" type="checkbox" /><span></span> <input id="rm_group_allow_self_responses" type="checkbox" />
<h4>Auto Mode</h4> 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> </label>
<input id="rm_group_submit" class="menu_button" type="submit" value="Create">
<div id="rm_group_buttons_expander">&nbsp;</div> <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"> <input id="rm_group_delete" class="menu_button" type="submit" value="Delete">
</div> </div>
</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 // 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,17 +355,22 @@ function activateSwipe(members) {
return memberIds; return memberIds;
} }
function activateMembers(members, input, lastMessage) { function activateMembers(members, input, lastMessage, allowSelfResponses) {
let activatedNames = []; let activatedNames = [];
// prevents the same character from speaking twice // prevents the same character from speaking twice
let bannedUser = lastMessage && !lastMessage.is_user && lastMessage.name; let bannedUser = lastMessage && !lastMessage.is_user && lastMessage.name;
// ...unless allowed to do so
if (allowSelfResponses) {
bannedUser = undefined;
}
// find mentions (excluding self) // 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) { if (member === bannedUser) {
continue; continue;
} }
@@ -380,7 +385,7 @@ function activateMembers(members, input, lastMessage) {
// activation by talkativeness (in shuffled order, except banned) // 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) { if (member === bannedUser) {
continue; continue;
} }
@@ -573,6 +578,7 @@ function select_group_chats(chat_id) {
const groupHasMembers = !!$("#rm_group_members").children().length; const groupHasMembers = !!$("#rm_group_members").children().length;
$("#rm_group_submit").prop("disabled", !groupHasMembers); $("#rm_group_submit").prop("disabled", !groupHasMembers);
$("#rm_group_allow_self_responses").prop("checked", group && group.allow_self_responses);
// bottom buttons // bottom buttons
if (chat_id) { if (chat_id) {
@@ -594,11 +600,24 @@ function select_group_chats(chat_id) {
callPopup("<h3>Delete the group?</h3>", "del_group"); 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 // top bar
if (group) { if (group) {
$("#rm_group_automode_label").show();
$("#rm_button_selected_ch").children("h2").text(groupName); $("#rm_button_selected_ch").children("h2").text(groupName);
setRightTabSelectedClass('rm_button_selected_ch'); setRightTabSelectedClass('rm_button_selected_ch');
} }
else {
$("#rm_group_automode_label").hide();
}
} }
$(document).ready(() => { $(document).ready(() => {
@@ -636,6 +655,7 @@ $(document).ready(() => {
$("#rm_group_submit").click(async function () { $("#rm_group_submit").click(async function () {
let name = $("#rm_group_chat_name").val(); 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") const members = $("#rm_group_members .group_member")
.map((_, x) => $(x).data("id")) .map((_, x) => $(x).data("id"))
.toArray(); .toArray();
@@ -657,6 +677,7 @@ $(document).ready(() => {
name: name, name: name,
members: members, members: members,
avatar_url: avatar_url, avatar_url: avatar_url,
allow_self_responses: allow_self_responses,
}), }),
}); });

View File

@@ -2111,8 +2111,9 @@ input[type="range"]{
display: flex; display: flex;
flex-direction: row; flex-direction: row;
width: 100%; width: 100%;
align-items: flex-end; align-items: center;
margin-bottom: 10px; margin-bottom: 5px;
column-gap: 10px;
} }
#rm_group_buttons .checkbox { #rm_group_buttons .checkbox {

View File

@@ -1553,7 +1553,13 @@ app.post('/creategroup', jsonParser, (request, response) => {
} }
const id = Date.now(); 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 pathToFile = path.join(directories.groups, `${id}.json`);
const fileData = JSON.stringify(chatMetadata); const fileData = JSON.stringify(chatMetadata);