From 3ae6cca154ced7cbfe74abb03d5a633461bc5c63 Mon Sep 17 00:00:00 2001 From: MathMan05 Date: Sun, 21 Sep 2025 19:14:11 -0500 Subject: [PATCH] fox --- src/d2m/converters/pins-to-list.js | 47 +++++++++++++++++------------- 1 file changed, 27 insertions(+), 20 deletions(-) diff --git a/src/d2m/converters/pins-to-list.js b/src/d2m/converters/pins-to-list.js index 3e890ea..a4b7fe7 100644 --- a/src/d2m/converters/pins-to-list.js +++ b/src/d2m/converters/pins-to-list.js @@ -1,31 +1,38 @@ // @ts-check -const {select} = require("../../passthrough") +const { select } = require("../../passthrough"); /** - * @param {import("discord-api-types/v10").RESTGetAPIChannelPinsResult} pins + * @param {import("discord-api-types/v10").RESTGetAPIChannelMessagesPinsResult} pins * @param {{"m.room.pinned_events/"?: {pinned?: string[]}}} kstate */ function pinsToList(pins, kstate) { - let alreadyPinned = kstate["m.room.pinned_events/"]?.pinned || [] + let alreadyPinned = kstate["m.room.pinned_events/"]?.pinned || []; - // If any of the already pinned messages are bridged messages then remove them from the already pinned list. - // * If a bridged message is still pinned then it'll be added back in the next step. - // * If a bridged message was unpinned from Discord-side then it'll be unpinned from our side due to this step. - // * Matrix-only unbridged messages that are pinned will remain pinned. - alreadyPinned = alreadyPinned.filter(event_id => { - const messageID = select("event_message", "message_id", {event_id}).pluck().get() - return !messageID || pins.find(m => m.id === messageID) // if it is bridged then remove it from the filter - }) + // If any of the already pinned messages are bridged messages then remove them from the already pinned list. + // * If a bridged message is still pinned then it'll be added back in the next step. + // * If a bridged message was unpinned from Discord-side then it'll be unpinned from our side due to this step. + // * Matrix-only unbridged messages that are pinned will remain pinned. + alreadyPinned = alreadyPinned.filter((event_id) => { + const messageID = select("event_message", "message_id", { event_id }) + .pluck() + .get(); + return !messageID || pins.items.find((m) => m.message.id === messageID); // if it is bridged then remove it from the filter + }); - /** @type {string[]} */ - const result = [] - for (const message of pins) { - const eventID = select("event_message", "event_id", {message_id: message.id, part: 0}).pluck().get() - if (eventID && !alreadyPinned.includes(eventID)) result.push(eventID) - } - result.reverse() - return alreadyPinned.concat(result) + /** @type {string[]} */ + const result = []; + for (const { message } of pins.items) { + const eventID = select("event_message", "event_id", { + message_id: message.id, + part: 0, + }) + .pluck() + .get(); + if (eventID && !alreadyPinned.includes(eventID)) result.push(eventID); + } + result.reverse(); + return alreadyPinned.concat(result); } -module.exports.pinsToList = pinsToList +module.exports.pinsToList = pinsToList; -- 2.51.0 ssageID = select("event_message", "message_id", { event_id }) + .pluck() + .get(); + return !messageID || pins.items.find((m) => m.message.id === messageID); // if it is bridged then remove it from the filter + }); - /** @type {string[]} */ - const result = [] - for (const message of pins) { - const eventID = select("event_message", "event_id", {message_id: message.id, part: 0}).pluck().get() - if (eventID && !alreadyPinned.includes(eventID)) result.push(eventID) - } - result.reverse() - return alreadyPinned.concat(result) + /** @type {string[]} */ + const result = []; + for (const { message } of pins.items) { + const eventID = select("event_message", "event_id", { + message_id: message.id, + part: 0, + }) + .pluck() + .get(); + if (eventID && !alreadyPinned.includes(eventID)) result.push(eventID); + } + result.reverse(); + return alreadyPinned.concat