| 765 | */ | 765 | */ |
| 766 | async function handleTagImport(character, { importSetting = null } = {}) { | 766 | async function handleTagImport(character, { importSetting = null } = {}) { |
| 767 | /** @type {string[]} */ | 767 | /** @type {string[]} */ |
| | 768 | const alreadyAssignedTags = tag_map[character.avatar] ?? []; |
| 768 | const importTags = character.tags.map(t => t.trim()).filter(t => t) | 769 | const importTags = character.tags.map(t => t.trim()).filter(t => t) |
| 769 | .filter(t => !IMPORT_EXLCUDED_TAGS.includes(t)) | 770 | .filter(t => !IMPORT_EXLCUDED_TAGS.includes(t)) |
| | 771 | .filter(t => { |
| | 772 | const existingTag = getTag(t); |
| | 773 | return !existingTag || !alreadyAssignedTags.includes(existingTag.id); |
| | 774 | }) |
| 770 | .slice(0, ANTI_TROLL_MAX_TAGS); | 775 | .slice(0, ANTI_TROLL_MAX_TAGS); |
| 771 | const existingTags = getExistingTags(importTags); | 776 | const existingTags = getExistingTags(importTags); |
| 772 | const newTags = importTags.filter(t => !existingTags.some(existingTag => existingTag.name.toLowerCase() === t.toLowerCase())) | 777 | const newTags = importTags.filter(t => !existingTags.some(existingTag => existingTag.name.toLowerCase() === t.toLowerCase())) |