PK: Use webhook name as bridged name
This commit is contained in:
parent
c084aa0156
commit
3d87bd9da5
2 changed files with 17 additions and 10 deletions
|
@ -14,6 +14,13 @@ const file = sync.require("../../matrix/file")
|
||||||
/** @type {import("./register-user")} */
|
/** @type {import("./register-user")} */
|
||||||
const registerUser = sync.require("./register-user")
|
const registerUser = sync.require("./register-user")
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @typedef WebhookAuthor Discord API message->author. A webhook as an author.
|
||||||
|
* @prop {string} username
|
||||||
|
* @prop {string?} avatar
|
||||||
|
* @prop {string} id
|
||||||
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A sim is an account that is being simulated by the bridge to copy events from the other side.
|
* A sim is an account that is being simulated by the bridge to copy events from the other side.
|
||||||
* @param {Ty.PkMessage} pkMessage
|
* @param {Ty.PkMessage} pkMessage
|
||||||
|
@ -90,16 +97,15 @@ async function ensureSimJoined(pkMessage, roomID) {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param {Ty.PkMessage} pkMessage
|
* @param {Ty.PkMessage} pkMessage
|
||||||
|
* @param {WebhookAuthor} author
|
||||||
*/
|
*/
|
||||||
async function memberToStateContent(pkMessage) {
|
async function memberToStateContent(pkMessage, author) {
|
||||||
let displayname = (pkMessage.member.display_name || pkMessage.member.name)
|
// We prefer to use the member's avatar URL data since the image upload can be cached across channels,
|
||||||
if (pkMessage.system.tag) {
|
// unlike the userAvatar URL which is unique per channel, due to the webhook ID being in the URL.
|
||||||
displayname = displayname + " " + pkMessage.system.tag
|
const avatar = pkMessage.member.avatar_url || pkMessage.member.webhook_avatar_url || pkMessage.system.avatar_url || file.userAvatar(author)
|
||||||
}
|
|
||||||
const avatar = pkMessage.member.avatar_url || pkMessage.member.webhook_avatar_url || pkMessage.system.avatar_url
|
|
||||||
|
|
||||||
const content = {
|
const content = {
|
||||||
displayname,
|
displayname: author.username,
|
||||||
membership: "join",
|
membership: "join",
|
||||||
"moe.cadence.ooye.pk_member": pkMessage.member
|
"moe.cadence.ooye.pk_member": pkMessage.member
|
||||||
}
|
}
|
||||||
|
@ -114,12 +120,13 @@ async function memberToStateContent(pkMessage) {
|
||||||
* 2. Make an object of what the new room member state content would be, including uploading the profile picture if it hasn't been done before
|
* 2. Make an object of what the new room member state content would be, including uploading the profile picture if it hasn't been done before
|
||||||
* 3. Compare against the previously known state content, which is helpfully stored in the database
|
* 3. Compare against the previously known state content, which is helpfully stored in the database
|
||||||
* 4. If the state content has changed, send it to Matrix and update it in the database for next time
|
* 4. If the state content has changed, send it to Matrix and update it in the database for next time
|
||||||
|
* @param {WebhookAuthor} author
|
||||||
* @param {Ty.PkMessage} pkMessage
|
* @param {Ty.PkMessage} pkMessage
|
||||||
* @returns {Promise<string>} mxid of the updated sim
|
* @returns {Promise<string>} mxid of the updated sim
|
||||||
*/
|
*/
|
||||||
async function syncUser(pkMessage, roomID) {
|
async function syncUser(author, pkMessage, roomID) {
|
||||||
const mxid = await ensureSimJoined(pkMessage, roomID)
|
const mxid = await ensureSimJoined(pkMessage, roomID)
|
||||||
const content = await memberToStateContent(pkMessage)
|
const content = await memberToStateContent(pkMessage, author)
|
||||||
const currentHash = registerUser._hashProfileContent(content)
|
const currentHash = registerUser._hashProfileContent(content)
|
||||||
const existingHash = select("sim_member", "hashed_profile_content", {room_id: roomID, mxid}).safeIntegers().pluck().get()
|
const existingHash = select("sim_member", "hashed_profile_content", {room_id: roomID, mxid}).safeIntegers().pluck().get()
|
||||||
// only do the actual sync if the hash has changed since we last looked
|
// only do the actual sync if the hash has changed since we last looked
|
||||||
|
|
|
@ -42,7 +42,7 @@ async function sendMessage(message, guild, row) {
|
||||||
e["response"] = root
|
e["response"] = root
|
||||||
throw e
|
throw e
|
||||||
}
|
}
|
||||||
senderMxid = await registerPkUser.syncUser(root, roomID)
|
senderMxid = await registerPkUser.syncUser(message.author, root, roomID)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue