Merge pull request #2455 from SillyTavern/sanitize-group-members validate group that all members exist

e8c5ce0669d1b1a52dd51959395b38d434b957fa

Cohee <18619528+Cohee1207@users.noreply.github.com>

Signed
1 files changed, +31 -5Ignore whitespace
public/scripts/group-chats.js+31 -5
@@ -178,8 +178,37 @@ async function loadGroupChat(chatId) {
178 return [];178 return [];
179}179}
180180
181async function validateGroup(group) {
182 if (!group) return;
183
184 // Validate that all members exist as characters
185 let dirty = false;
186 group.members = group.members.filter(member => {
187 const character = characters.find(x => x.avatar === member || x.name === member);
188 if (!character) {
189 const msg = `Warning: Listed member ${member} does not exist as a character. It will be removed from the group.`;
190 toastr.warning(msg, 'Group Validation');
191 console.warn(msg);
192 dirty = true;
193 }
194 return character;
195 });
196
197 if (dirty) {
198 await editGroup(group.id, true, false);
199 }
200}
201
181export async function getGroupChat(groupId, reload = false) {202export async function getGroupChat(groupId, reload = false) {
182 const group = groups.find((x) => x.id === groupId);203 const group = groups.find((x) => x.id === groupId);
204 if (!group) {
205 console.warn('Group not found', groupId);
206 return;
207 }
208
209 // Run validation before any loading
210 validateGroup(group);
211
183 const chat_id = group.chat_id;212 const chat_id = group.chat_id;
184 const data = await loadGroupChat(chat_id);213 const data = await loadGroupChat(chat_id);
185 let freshChat = false;214 let freshChat = false;
@@ -197,7 +226,6 @@ export async function getGroupChat(groupId, reload = false) {
197 if (group && Array.isArray(group.members)) {226 if (group && Array.isArray(group.members)) {
198 for (let member of group.members) {227 for (let member of group.members) {
199 const character = characters.find(x => x.avatar === member || x.name === member);228 const character = characters.find(x => x.avatar === member || x.name === member);
200
201 if (!character) {229 if (!character) {
202 continue;230 continue;
203 }231 }
@@ -219,10 +247,8 @@ export async function getGroupChat(groupId, reload = false) {
219 freshChat = true;247 freshChat = true;
220 }248 }
221249
222 if (group) {250 let metadata = group.chat_metadata ?? {};
223 let metadata = group.chat_metadata ?? {};251 updateChatMetadata(metadata, true);
224 updateChatMetadata(metadata, true);
225 }
226252
227 if (reload) {253 if (reload) {
228 select_group_chats(groupId, true);254 select_group_chats(groupId, true);