diff --git a/d2m/actions/create-room.js b/d2m/actions/create-room.js index 479bb79..98333b2 100644 --- a/d2m/actions/create-room.js +++ b/d2m/actions/create-room.js @@ -32,28 +32,19 @@ function applyKStateDiffToRoom(roomID, kstate) { } /** - * @param {DiscordTypes.APIGuildTextChannel} channel - * @param {DiscordTypes.APIGuild} guild + * @param {{id: string, name: string, topic?: string?}} channel + * @param {{id: string}} guild + * @param {string?} customName */ -async function channelToKState(channel, guild) { - const spaceID = db.prepare("SELECT space_id FROM guild_space WHERE guild_id = ?").pluck().get(guild.id) - assert.ok(typeof spaceID === "string") - const customName = db.prepare("SELECT nick FROM channel_room WHERE channel_id = ?").pluck().get(channel.id) - - const avatarEventContent = {} - if (guild.icon) { - avatarEventContent.discord_path = file.guildIcon(guild) - avatarEventContent.url = await file.uploadDiscordFileToMxc(avatarEventContent.discord_path) // TODO: somehow represent future values in kstate (callbacks?), while still allowing for diffing, so test cases don't need to touch the media API - } - +function convertNameAndTopic(channel, guild, customName) { // TODO: Improve nasty nested ifs let convertedName, convertedTopic if (customName) { convertedName = customName if (channel.topic) { - convertedTopic = `${channel.name} | ${channel.topic}\n\nChannel ID: ${channel.id}\nGuild ID: ${guild.id}` + convertedTopic = `#${channel.name} | ${channel.topic}\n\nChannel ID: ${channel.id}\nGuild ID: ${guild.id}` } else { - convertedTopic = `${channel.name}\n\nChannel ID: ${channel.id}\nGuild ID: ${guild.id}` + convertedTopic = `#${channel.name}\n\nChannel ID: ${channel.id}\nGuild ID: ${guild.id}` } } else { convertedName = channel.name @@ -64,6 +55,26 @@ async function channelToKState(channel, guild) { } } + return [convertedName, convertedTopic] +} + +/** + * @param {DiscordTypes.APIGuildTextChannel} channel + * @param {DiscordTypes.APIGuild} guild + */ +async function channelToKState(channel, guild) { + const spaceID = db.prepare("SELECT space_id FROM guild_space WHERE guild_id = ?").pluck().get(guild.id) + assert.ok(typeof spaceID === "string") + + const customName = db.prepare("SELECT nick FROM channel_room WHERE channel_id = ?").pluck().get(channel.id) + const [convertedName, convertedTopic] = convertNameAndTopic(channel, guild, customName) + + const avatarEventContent = {} + if (guild.icon) { + avatarEventContent.discord_path = file.guildIcon(guild) + avatarEventContent.url = await file.uploadDiscordFileToMxc(avatarEventContent.discord_path) // TODO: somehow represent future values in kstate (callbacks?), while still allowing for diffing, so test cases don't need to touch the media API + } + const channelKState = { "m.room.name/": {name: convertedName}, "m.room.topic/": {topic: convertedTopic}, @@ -209,3 +220,4 @@ module.exports.ensureRoom = ensureRoom module.exports.syncRoom = syncRoom module.exports.createAllForGuild = createAllForGuild module.exports.channelToKState = channelToKState +module.exports._convertNameAndTopic = convertNameAndTopic diff --git a/d2m/actions/create-room.test.js b/d2m/actions/create-room.test.js index ab390fc..ec5c3d3 100644 --- a/d2m/actions/create-room.test.js +++ b/d2m/actions/create-room.test.js @@ -1,4 +1,6 @@ -const {channelToKState} = require("./create-room") +// @ts-check + +const {channelToKState, _convertNameAndTopic} = require("./create-room") const {kstateStripConditionals} = require("../../matrix/kstate") const {test} = require("supertape") const testData = require("../../test/data") @@ -9,3 +11,31 @@ test("channel2room: general", async t => { testData.room.general ) }) + +test("convertNameAndTopic: custom name and topic", t => { + t.deepEqual( + _convertNameAndTopic({id: "123", name: "the-twilight-zone", topic: "Spooky stuff here. :ghost:"}, {id: "456"}, "hauntings"), + ["hauntings", "#the-twilight-zone | Spooky stuff here. :ghost:\n\nChannel ID: 123\nGuild ID: 456"] + ) +}) + +test("convertNameAndTopic: custom name, no topic", t => { + t.deepEqual( + _convertNameAndTopic({id: "123", name: "the-twilight-zone"}, {id: "456"}, "hauntings"), + ["hauntings", "#the-twilight-zone\n\nChannel ID: 123\nGuild ID: 456"] + ) +}) + +test("convertNameAndTopic: original name and topic", t => { + t.deepEqual( + _convertNameAndTopic({id: "123", name: "the-twilight-zone", topic: "Spooky stuff here. :ghost:"}, {id: "456"}, null), + ["the-twilight-zone", "Spooky stuff here. :ghost:\n\nChannel ID: 123\nGuild ID: 456"] + ) +}) + +test("convertNameAndTopic: original name, no topic", t => { + t.deepEqual( + _convertNameAndTopic({id: "123", name: "the-twilight-zone"}, {id: "456"}, null), + ["the-twilight-zone", "Channel ID: 123\nGuild ID: 456"] + ) +}) diff --git a/test/data.js b/test/data.js index 5efea36..49bbeaf 100644 --- a/test/data.js +++ b/test/data.js @@ -23,7 +23,7 @@ module.exports = { room: { general: { "m.room.name/": {name: "main"}, - "m.room.topic/": {topic: "collective-unconscious | https://docs.google.com/document/d/blah/edit | I spread, pipe, and whip because it is my will. :headstone:\n\nChannel ID: 112760669178241024\nGuild ID: 112760669178241024"}, + "m.room.topic/": {topic: "#collective-unconscious | https://docs.google.com/document/d/blah/edit | I spread, pipe, and whip because it is my will. :headstone:\n\nChannel ID: 112760669178241024\nGuild ID: 112760669178241024"}, "m.room.guest_access/": {guest_access: "can_join"}, "m.room.history_visibility/": {history_visibility: "invited"}, "m.space.parent/!jjWAGMeQdNrVZSSfvz:cadence.moe": { @@ -48,7 +48,6 @@ module.exports = { owner_id: "112760500130975744", premium_tier: 3, stickers: [{ - version: 1683838696974, type: 2, tags: "sunglasses", name: "pomu puff", @@ -56,8 +55,7 @@ module.exports = { guild_id: "112760669178241024", format_type: 1, description: "damn that tiny lil bitch really chuffing. puffing that fat ass dart", - available: true, - asset: "" + available: true }], max_members: 500000, splash: "86a34ed02524b972918bef810087f8e7",