forked from cadence/out-of-your-element
make removing single reactions work correctly
This commit is contained in:
parent
a396e6f596
commit
6dcf3a383a
7 changed files with 67 additions and 30 deletions
38
d2m/converters/emoji-to-key.js
Normal file
38
d2m/converters/emoji-to-key.js
Normal file
|
@ -0,0 +1,38 @@
|
|||
// @ts-check
|
||||
|
||||
const assert = require("assert").strict
|
||||
const passthrough = require("../../passthrough")
|
||||
const {discord, sync, db, select} = passthrough
|
||||
/** @type {import("../../matrix/file")} */
|
||||
const file = sync.require("../../matrix/file")
|
||||
|
||||
/**
|
||||
* @param {import("discord-api-types/v10").APIEmoji} emoji
|
||||
* @returns {Promise<string>}
|
||||
*/
|
||||
async function emojiToKey(emoji) {
|
||||
let key
|
||||
if (emoji.id) {
|
||||
// Custom emoji
|
||||
const mxc = select("emoji", "mxc_url", "WHERE id = ?").pluck().get(emoji.id)
|
||||
if (mxc) {
|
||||
// The custom emoji is registered and we should send it
|
||||
key = mxc
|
||||
} else {
|
||||
// The custom emoji is not registered. We will register it and then add it.
|
||||
assert(emoji.name) // The docs say: "name may be null when custom emoji data is not available, for example, if it was deleted from the guild"
|
||||
const mxc = await file.uploadDiscordFileToMxc(file.emoji(emoji.id, emoji.animated))
|
||||
db.prepare("INSERT OR IGNORE INTO emoji (id, name, animated, mxc_url) VALUES (?, ?, ?, ?)").run(emoji.id, emoji.name, +!!emoji.animated, mxc)
|
||||
key = mxc
|
||||
// TODO: what happens if the matrix user also tries adding this reaction? the bridge bot isn't able to use that emoji...
|
||||
}
|
||||
} else {
|
||||
// Default emoji
|
||||
const name = emoji.name
|
||||
assert(name)
|
||||
key = name
|
||||
}
|
||||
return key
|
||||
}
|
||||
|
||||
module.exports.emojiToKey = emojiToKey
|
Loading…
Add table
Add a link
Reference in a new issue