Retry PK API if it doesn't return a message
This commit is contained in:
parent
9e51482b60
commit
149cee845a
2 changed files with 15 additions and 11 deletions
|
@ -142,8 +142,19 @@ async function syncUser(author, pkMessage, roomID) {
|
||||||
}
|
}
|
||||||
|
|
||||||
/** @returns {Promise<Ty.PkMessage>} */
|
/** @returns {Promise<Ty.PkMessage>} */
|
||||||
function fetchMessage(messageID) {
|
async function fetchMessage(messageID) {
|
||||||
return fetch(`https://api.pluralkit.me/v2/messages/${messageID}`).then(res => res.json())
|
// Their backend is weird. Sometimes it says "message not found" (code 20006) on the first try, so we make multiple attempts.
|
||||||
|
let attempts = 0
|
||||||
|
do {
|
||||||
|
var res = await fetch(`https://api.pluralkit.me/v2/messages/${messageID}`)
|
||||||
|
if (res.ok) return res.json()
|
||||||
|
|
||||||
|
// I think the backend needs some time to update.
|
||||||
|
await new Promise(resolve => setTimeout(resolve, 2000))
|
||||||
|
} while (++attempts < 3)
|
||||||
|
|
||||||
|
const errorMessage = await res.json()
|
||||||
|
throw new Error(`PK API returned an error after ${attempts} tries: ${JSON.stringify(errorMessage)}`)
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports._memberToStateContent = memberToStateContent
|
module.exports._memberToStateContent = memberToStateContent
|
||||||
|
|
|
@ -39,15 +39,8 @@ async function sendMessage(message, channel, guild, row) {
|
||||||
} else if (row && row.speedbump_webhook_id === message.webhook_id) {
|
} else if (row && row.speedbump_webhook_id === message.webhook_id) {
|
||||||
// Handle the PluralKit public instance
|
// Handle the PluralKit public instance
|
||||||
if (row.speedbump_id === "466378653216014359") {
|
if (row.speedbump_id === "466378653216014359") {
|
||||||
const root = await registerPkUser.fetchMessage(message.id)
|
const pkMessage = await registerPkUser.fetchMessage(message.id)
|
||||||
// Member is null if member was deleted. We just got this message, so member surely exists.
|
senderMxid = await registerPkUser.syncUser(message.author, pkMessage, roomID)
|
||||||
if (!root.member) {
|
|
||||||
const e = new Error("PK API did not return a member")
|
|
||||||
message["__pk_response__"] = root
|
|
||||||
console.error(root)
|
|
||||||
throw e
|
|
||||||
}
|
|
||||||
senderMxid = await registerPkUser.syncUser(message.author, root, roomID)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue