validate group that all members exist

52b64a823daf15a4003a106ec0802acfad979392

Wolfsblvt <wolfsblvt@gmail.com>

1 files changed, +31 -5Ignore whitespace
public/scripts/group-chats.js+31 -5
@@ -178,8 +178,37 @@ async function loadGroupChat(chatId) {
178178 return [];
179179}
180180
181+async 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+
181202export async function getGroupChat(groupId, reload = false) {
182203 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+
183212 const chat_id = group.chat_id;
184213 const data = await loadGroupChat(chat_id);
185214 let freshChat = false;
@@ -197,7 +226,6 @@ export async function getGroupChat(groupId, reload = false) {
197226 if (group && Array.isArray(group.members)) {
198227 for (let member of group.members) {
199228 const character = characters.find(x => x.avatar === member || x.name === member);
200-
201229 if (!character) {
202230 continue;
203231 }
@@ -219,10 +247,8 @@ export async function getGroupChat(groupId, reload = false) {
219247 freshChat = true;
220248 }
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
227253 if (reload) {
228254 select_group_chats(groupId, true);