get room mentions formatting working
This commit is contained in:
parent
0f4f404160
commit
5326b7d6be
6 changed files with 124 additions and 8 deletions
|
@ -20,11 +20,11 @@ function getDiscordParseCallbacks(message, useHTML) {
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
channel: node => {
|
channel: node => {
|
||||||
const roomID = db.prepare("SELECT room_id FROM channel_room WHERE channel_id = ?").pluck().get(node.id)
|
const {room_id, name, nick} = db.prepare("SELECT room_id, name, nick FROM channel_room WHERE channel_id = ?").get(node.id)
|
||||||
if (roomID && useHTML) {
|
if (room_id && useHTML) {
|
||||||
return "https://matrix.to/#/" + roomID
|
return `<a href="https://matrix.to/#/${room_id}">#${nick || name}</a>`
|
||||||
} else {
|
} else {
|
||||||
return "#" + node.id
|
return `#${nick || name}`
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
role: node =>
|
role: node =>
|
||||||
|
|
|
@ -27,9 +27,9 @@ test("message2event: simple room mention", async t => {
|
||||||
t.deepEqual(events, [{
|
t.deepEqual(events, [{
|
||||||
$type: "m.room.message",
|
$type: "m.room.message",
|
||||||
msgtype: "m.text",
|
msgtype: "m.text",
|
||||||
body: "@crunch god: Tell me about Phil, renowned martial arts master and creator of the Chin Trick",
|
body: "#main",
|
||||||
format: "org.matrix.custom.html",
|
format: "org.matrix.custom.html",
|
||||||
formatted_body: '<a href="https://matrix.to/#/@_ooye_crunch_god:cadence.moe">@crunch god</a> Tell me about Phil, renowned martial arts master and creator of the Chin Trick'
|
formatted_body: '<a href="https://matrix.to/#/!kLRqKKUQXcibIMtOpl:cadence.moe">#main</a>'
|
||||||
}])
|
}])
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
|
@ -12,8 +12,9 @@ const discordPackets = sync.require("./discord-packets")
|
||||||
class DiscordClient {
|
class DiscordClient {
|
||||||
/**
|
/**
|
||||||
* @param {string} discordToken
|
* @param {string} discordToken
|
||||||
|
* @param {boolean} listen whether to set up the event listeners for OOYE to operate
|
||||||
*/
|
*/
|
||||||
constructor(discordToken) {
|
constructor(discordToken, listen) {
|
||||||
this.discordToken = discordToken
|
this.discordToken = discordToken
|
||||||
this.snow = new SnowTransfer(discordToken)
|
this.snow = new SnowTransfer(discordToken)
|
||||||
this.cloud = new CloudStorm(discordToken, {
|
this.cloud = new CloudStorm(discordToken, {
|
||||||
|
|
2
index.js
2
index.js
|
@ -13,7 +13,7 @@ Object.assign(passthrough, {config, sync, db})
|
||||||
|
|
||||||
const DiscordClient = require("./d2m/discord-client")
|
const DiscordClient = require("./d2m/discord-client")
|
||||||
|
|
||||||
const discord = new DiscordClient(config.discordToken)
|
const discord = new DiscordClient(config.discordToken, true)
|
||||||
passthrough.discord = discord
|
passthrough.discord = discord
|
||||||
|
|
||||||
const as = require("./m2d/appservice")
|
const as = require("./m2d/appservice")
|
||||||
|
|
58
scripts/save-channel-names-to-db.js
Normal file
58
scripts/save-channel-names-to-db.js
Normal file
|
@ -0,0 +1,58 @@
|
||||||
|
// @ts-check
|
||||||
|
|
||||||
|
const sqlite = require("better-sqlite3")
|
||||||
|
const HeatSync = require("heatsync")
|
||||||
|
|
||||||
|
const config = require("../config")
|
||||||
|
const passthrough = require("../passthrough")
|
||||||
|
const db = new sqlite("db/ooye.db")
|
||||||
|
|
||||||
|
const sync = new HeatSync({watchFS: false})
|
||||||
|
|
||||||
|
Object.assign(passthrough, {config, sync, db})
|
||||||
|
|
||||||
|
const DiscordClient = require("../d2m/discord-client")
|
||||||
|
|
||||||
|
const discord = new DiscordClient(config.discordToken, false)
|
||||||
|
passthrough.discord = discord
|
||||||
|
|
||||||
|
;(async () => {
|
||||||
|
await discord.cloud.connect()
|
||||||
|
console.log("Discord gateway started")
|
||||||
|
|
||||||
|
const f = event => onPacket(discord, event, () => discord.cloud.off("event", f))
|
||||||
|
discord.cloud.on("event", f)
|
||||||
|
})()
|
||||||
|
|
||||||
|
const expectedGuilds = new Set()
|
||||||
|
|
||||||
|
const prepared = db.prepare("UPDATE channel_room SET name = ? WHERE channel_id = ?")
|
||||||
|
|
||||||
|
/** @param {DiscordClient} discord */
|
||||||
|
function onPacket(discord, event, unsubscribe) {
|
||||||
|
if (event.t === "READY") {
|
||||||
|
for (const obj of event.d.guilds) {
|
||||||
|
expectedGuilds.add(obj.id)
|
||||||
|
}
|
||||||
|
|
||||||
|
} else if (event.t === "GUILD_CREATE") {
|
||||||
|
expectedGuilds.delete(event.d.id)
|
||||||
|
|
||||||
|
// Store the channel.
|
||||||
|
for (const channel of event.d.channels || []) {
|
||||||
|
prepared.run(channel.name, channel.id)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Checked them all?
|
||||||
|
if (expectedGuilds.size === 0) {
|
||||||
|
discord.cloud.disconnect()
|
||||||
|
unsubscribe()
|
||||||
|
|
||||||
|
// I don't know why node keeps running.
|
||||||
|
setTimeout(() => {
|
||||||
|
console.log("Stopping now.")
|
||||||
|
process.exit()
|
||||||
|
}, 1500).unref()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
57
test/data.js
57
test/data.js
|
@ -216,6 +216,63 @@ module.exports = {
|
||||||
flags: 0,
|
flags: 0,
|
||||||
components: []
|
components: []
|
||||||
},
|
},
|
||||||
|
simple_room_mention: {
|
||||||
|
type: 0,
|
||||||
|
tts: false,
|
||||||
|
timestamp: "2023-07-10T20:04:25.939000+00:00",
|
||||||
|
referenced_message: null,
|
||||||
|
pinned: false,
|
||||||
|
nonce: "1128054139385806848",
|
||||||
|
mentions: [],
|
||||||
|
mention_roles: [],
|
||||||
|
mention_everyone: false,
|
||||||
|
member: {
|
||||||
|
roles: [
|
||||||
|
"112767366235959296", "118924814567211009",
|
||||||
|
"204427286542417920", "199995902742626304",
|
||||||
|
"222168467627835392", "238028326281805825",
|
||||||
|
"259806643414499328", "265239342648131584",
|
||||||
|
"271173313575780353", "287733611912757249",
|
||||||
|
"225744901915148298", "305775031223320577",
|
||||||
|
"318243902521868288", "348651574924541953",
|
||||||
|
"349185088157777920", "378402925128712193",
|
||||||
|
"392141548932038658", "393912152173576203",
|
||||||
|
"482860581670486028", "495384759074160642",
|
||||||
|
"638988388740890635", "373336013109461013",
|
||||||
|
"530220455085473813", "454567553738473472",
|
||||||
|
"790724320824655873", "1123518980456452097",
|
||||||
|
"1040735082610167858", "695946570482450442",
|
||||||
|
"1123460940935991296", "849737964090556488"
|
||||||
|
],
|
||||||
|
premium_since: null,
|
||||||
|
pending: false,
|
||||||
|
nick: null,
|
||||||
|
mute: false,
|
||||||
|
joined_at: "2015-11-11T09:55:40.321000+00:00",
|
||||||
|
flags: 0,
|
||||||
|
deaf: false,
|
||||||
|
communication_disabled_until: null,
|
||||||
|
avatar: null
|
||||||
|
},
|
||||||
|
id: "1128054143064494233",
|
||||||
|
flags: 0,
|
||||||
|
embeds: [],
|
||||||
|
edited_timestamp: null,
|
||||||
|
content: "<#112760669178241024>",
|
||||||
|
components: [],
|
||||||
|
channel_id: "266767590641238027",
|
||||||
|
author: {
|
||||||
|
username: "kumaccino",
|
||||||
|
public_flags: 128,
|
||||||
|
id: "113340068197859328",
|
||||||
|
global_name: "kumaccino",
|
||||||
|
discriminator: "0",
|
||||||
|
avatar_decoration: null,
|
||||||
|
avatar: "b48302623a12bc7c59a71328f72ccb39"
|
||||||
|
},
|
||||||
|
attachments: [],
|
||||||
|
guild_id: "112760669178241024"
|
||||||
|
},
|
||||||
simple_message_link: {
|
simple_message_link: {
|
||||||
id: "1126788210308161626",
|
id: "1126788210308161626",
|
||||||
type: 0,
|
type: 0,
|
||||||
|
|
Loading…
Reference in a new issue