2023-05-09 05:13:59 +00:00
// @ts-check
2023-07-04 05:19:17 +00:00
const assert = require ( "assert" ) . strict
2023-05-09 05:13:59 +00:00
const passthrough = require ( "../../passthrough" )
2023-09-18 10:51:59 +00:00
const { discord , sync , db , select } = passthrough
2023-05-09 05:13:59 +00:00
/** @type {import("../../matrix/api")} */
const api = sync . require ( "../../matrix/api" )
/** @type {import("./register-user")} */
const registerUser = sync . require ( "./register-user" )
/** @type {import("../actions/create-room")} */
const createRoom = sync . require ( "../actions/create-room" )
/ * *
* @ param { import ( "discord-api-types/v10" ) . GatewayMessageReactionAddDispatchData } data
* /
async function addReaction ( data ) {
2023-08-21 09:04:41 +00:00
const user = data . member ? . user
assert . ok ( user && user . username )
2023-09-19 11:02:51 +00:00
2023-09-19 07:10:02 +00:00
const parentID = select ( "event_message" , "event_id" , "WHERE message_id = ? AND part = 0" ) . pluck ( ) . get ( data . message _id ) // 0 = primary
2023-08-21 09:04:41 +00:00
if ( ! parentID ) return // Nothing can be done if the parent message was never bridged.
assert . equal ( typeof parentID , "string" )
2023-09-19 11:02:51 +00:00
let key
if ( data . emoji . id ) {
// Custom emoji
const mxc = select ( "emoji" , "mxc_url" , "WHERE emoji_id = ?" ) . pluck ( ) . get ( data . emoji . id )
if ( mxc ) {
// The custom emoji is registered and we should send it
key = mxc
} else {
// The custom emoji is not registered. We *could* register it right now and it would work, but for now I'm just going to send the name. It's whatever. TODO change this probably.
key = "<" + data . emoji . name + ">"
}
} else {
// Default emoji
key = data . emoji . name
}
2023-05-09 05:13:59 +00:00
const roomID = await createRoom . ensureRoom ( data . channel _id )
const senderMxid = await registerUser . ensureSimJoined ( user , roomID )
2023-08-19 06:40:01 +00:00
const eventID = await api . sendEvent ( roomID , "m.reaction" , {
2023-08-21 09:04:41 +00:00
"m.relates_to" : {
rel _type : "m.annotation" ,
event _id : parentID ,
2023-09-19 11:02:51 +00:00
key
2023-08-21 09:04:41 +00:00
}
} , senderMxid )
2023-05-09 05:13:59 +00:00
return eventID
}
module . exports . addReaction = addReaction