log support actions to Discord
aaa these came out so nice!!
This commit is contained in:
parent
4fa07de299
commit
10cea2ff92
1 changed files with 188 additions and 8 deletions
|
@ -11,6 +11,7 @@ const {
|
||||||
getEmotion,
|
getEmotion,
|
||||||
getGenderPresentation,
|
getGenderPresentation,
|
||||||
logToDiscord,
|
logToDiscord,
|
||||||
|
normalizeRow,
|
||||||
} = require("./util");
|
} = require("./util");
|
||||||
|
|
||||||
const typeDefs = gql`
|
const typeDefs = gql`
|
||||||
|
@ -623,7 +624,7 @@ const resolvers = {
|
||||||
throw new Error(`Support secret is incorrect. Try setting up again?`);
|
throw new Error(`Support secret is incorrect. Try setting up again?`);
|
||||||
}
|
}
|
||||||
|
|
||||||
const item = await itemLoader.load(itemId);
|
const oldItem = await itemLoader.load(itemId);
|
||||||
|
|
||||||
const [
|
const [
|
||||||
result,
|
result,
|
||||||
|
@ -638,6 +639,8 @@ const resolvers = {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
itemLoader.clear(itemId); // we changed the item, so clear it from cache
|
||||||
|
|
||||||
if (process.env["SUPPORT_TOOLS_DISCORD_WEBHOOK_URL"]) {
|
if (process.env["SUPPORT_TOOLS_DISCORD_WEBHOOK_URL"]) {
|
||||||
try {
|
try {
|
||||||
const [
|
const [
|
||||||
|
@ -646,8 +649,8 @@ const resolvers = {
|
||||||
newColorTranslation,
|
newColorTranslation,
|
||||||
] = await Promise.all([
|
] = await Promise.all([
|
||||||
itemTranslationLoader.load(itemId),
|
itemTranslationLoader.load(itemId),
|
||||||
item.manualSpecialColorId
|
oldItem.manualSpecialColorId
|
||||||
? colorTranslationLoader.load(item.manualSpecialColorId)
|
? colorTranslationLoader.load(oldItem.manualSpecialColorId)
|
||||||
: Promise.resolve(null),
|
: Promise.resolve(null),
|
||||||
colorId
|
colorId
|
||||||
? colorTranslationLoader.load(colorId)
|
? colorTranslationLoader.load(colorId)
|
||||||
|
@ -665,7 +668,7 @@ const resolvers = {
|
||||||
{
|
{
|
||||||
title: `🛠 ${itemTranslation.name}`,
|
title: `🛠 ${itemTranslation.name}`,
|
||||||
thumbnail: {
|
thumbnail: {
|
||||||
url: item.thumbnailUrl,
|
url: oldItem.thumbnailUrl,
|
||||||
height: 80,
|
height: 80,
|
||||||
width: 80,
|
width: 80,
|
||||||
},
|
},
|
||||||
|
@ -676,7 +679,7 @@ const resolvers = {
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
timestamp: new Date().toISOString(),
|
timestamp: new Date().toISOString(),
|
||||||
url: `https://impress.openneo.net/items/${item.id}`,
|
url: `https://impress.openneo.net/items/${oldItem.id}`,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
});
|
});
|
||||||
|
@ -693,12 +696,14 @@ const resolvers = {
|
||||||
setItemExplicitlyBodySpecific: async (
|
setItemExplicitlyBodySpecific: async (
|
||||||
_,
|
_,
|
||||||
{ itemId, explicitlyBodySpecific, supportSecret },
|
{ itemId, explicitlyBodySpecific, supportSecret },
|
||||||
{ db }
|
{ itemLoader, itemTranslationLoader, db }
|
||||||
) => {
|
) => {
|
||||||
if (supportSecret !== process.env["SUPPORT_SECRET"]) {
|
if (supportSecret !== process.env["SUPPORT_SECRET"]) {
|
||||||
throw new Error(`Support secret is incorrect. Try setting up again?`);
|
throw new Error(`Support secret is incorrect. Try setting up again?`);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const oldItem = await itemLoader.load(itemId);
|
||||||
|
|
||||||
const [
|
const [
|
||||||
result,
|
result,
|
||||||
] = await db.execute(
|
] = await db.execute(
|
||||||
|
@ -712,14 +717,64 @@ const resolvers = {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
itemLoader.clear(itemId); // we changed the item, so clear it from cache
|
||||||
|
|
||||||
|
if (process.env["SUPPORT_TOOLS_DISCORD_WEBHOOK_URL"]) {
|
||||||
|
try {
|
||||||
|
const itemTranslation = await itemTranslationLoader.load(itemId);
|
||||||
|
const oldRuleName = oldItem.explicitlyBodySpecific
|
||||||
|
? "Body specific"
|
||||||
|
: "Auto-detect";
|
||||||
|
const newRuleName = explicitlyBodySpecific
|
||||||
|
? "Body specific"
|
||||||
|
: "Auto-detect";
|
||||||
|
await logToDiscord({
|
||||||
|
embeds: [
|
||||||
|
{
|
||||||
|
title: `🛠 ${itemTranslation.name}`,
|
||||||
|
thumbnail: {
|
||||||
|
url: oldItem.thumbnailUrl,
|
||||||
|
height: 80,
|
||||||
|
width: 80,
|
||||||
|
},
|
||||||
|
fields: [
|
||||||
|
{
|
||||||
|
name: "Pet compatibility rule",
|
||||||
|
value: `${oldRuleName} → **${newRuleName}**`,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
timestamp: new Date().toISOString(),
|
||||||
|
url: `https://impress.openneo.net/items/${oldItem.id}`,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
});
|
||||||
|
} catch (e) {
|
||||||
|
console.error("Error sending Discord support log", e);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
console.warn("No Discord support webhook provided, skipping");
|
||||||
|
}
|
||||||
|
|
||||||
return { id: itemId };
|
return { id: itemId };
|
||||||
},
|
},
|
||||||
|
|
||||||
setLayerBodyId: async (_, { layerId, bodyId, supportSecret }, { db }) => {
|
setLayerBodyId: async (
|
||||||
|
_,
|
||||||
|
{ layerId, bodyId, supportSecret },
|
||||||
|
{
|
||||||
|
itemLoader,
|
||||||
|
itemTranslationLoader,
|
||||||
|
swfAssetLoader,
|
||||||
|
zoneTranslationLoader,
|
||||||
|
db,
|
||||||
|
}
|
||||||
|
) => {
|
||||||
if (supportSecret !== process.env["SUPPORT_SECRET"]) {
|
if (supportSecret !== process.env["SUPPORT_SECRET"]) {
|
||||||
throw new Error(`Support secret is incorrect. Try setting up again?`);
|
throw new Error(`Support secret is incorrect. Try setting up again?`);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const oldSwfAsset = await swfAssetLoader.load(layerId);
|
||||||
|
|
||||||
const [
|
const [
|
||||||
result,
|
result,
|
||||||
] = await db.execute(
|
] = await db.execute(
|
||||||
|
@ -733,18 +788,106 @@ const resolvers = {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
swfAssetLoader.clear(layerId); // we changed it, so clear it from cache
|
||||||
|
|
||||||
|
if (process.env["SUPPORT_TOOLS_DISCORD_WEBHOOK_URL"]) {
|
||||||
|
try {
|
||||||
|
async function loadBodyName(bodyId) {
|
||||||
|
if (String(bodyId) === "0") {
|
||||||
|
return "All bodies";
|
||||||
|
}
|
||||||
|
|
||||||
|
const [rows] = await db.execute(
|
||||||
|
`SELECT pt.body_id, st.name AS species_name,
|
||||||
|
ct.name AS color_name, c.standard FROM pet_types pt
|
||||||
|
INNER JOIN species_translations st
|
||||||
|
ON pt.species_id = st.species_id AND st.locale = "en"
|
||||||
|
INNER JOIN color_translations ct
|
||||||
|
ON pt.color_id = ct.color_id AND ct.locale = "en"
|
||||||
|
INNER JOIN colors c ON c.id = pt.color_id
|
||||||
|
WHERE pt.body_id = ?
|
||||||
|
ORDER BY ct.name, st.name LIMIT 1;`,
|
||||||
|
[bodyId]
|
||||||
|
);
|
||||||
|
const row = normalizeRow(rows[0]);
|
||||||
|
const speciesName = capitalize(row.speciesName);
|
||||||
|
const colorName = row.standard
|
||||||
|
? "Standard"
|
||||||
|
: capitalize(row.colorName);
|
||||||
|
return `${colorName} ${speciesName}`;
|
||||||
|
}
|
||||||
|
|
||||||
|
const itemId = await db
|
||||||
|
.execute(
|
||||||
|
`SELECT parent_id FROM parents_swf_assets
|
||||||
|
WHERE swf_asset_id = ? AND parent_type = "Item" LIMIT 1;`,
|
||||||
|
[layerId]
|
||||||
|
)
|
||||||
|
.then(([rows]) => normalizeRow(rows[0]).parentId);
|
||||||
|
|
||||||
|
const [
|
||||||
|
item,
|
||||||
|
itemTranslation,
|
||||||
|
zoneTranslation,
|
||||||
|
oldBodyName,
|
||||||
|
newBodyName,
|
||||||
|
] = await Promise.all([
|
||||||
|
itemLoader.load(itemId),
|
||||||
|
itemTranslationLoader.load(itemId),
|
||||||
|
zoneTranslationLoader.load(oldSwfAsset.zoneId),
|
||||||
|
loadBodyName(oldSwfAsset.bodyId),
|
||||||
|
loadBodyName(bodyId),
|
||||||
|
]);
|
||||||
|
|
||||||
|
await logToDiscord({
|
||||||
|
embeds: [
|
||||||
|
{
|
||||||
|
title: `🛠 ${itemTranslation.name}`,
|
||||||
|
thumbnail: {
|
||||||
|
url: item.thumbnailUrl,
|
||||||
|
height: 80,
|
||||||
|
width: 80,
|
||||||
|
},
|
||||||
|
fields: [
|
||||||
|
{
|
||||||
|
name:
|
||||||
|
`Layer ${layerId} (${zoneTranslation.label}): ` +
|
||||||
|
`Pet compatibility`,
|
||||||
|
value: `${oldBodyName} → **${newBodyName}**`,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
timestamp: new Date().toISOString(),
|
||||||
|
url: `https://impress.openneo.net/items/${itemId}`,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
});
|
||||||
|
} catch (e) {
|
||||||
|
console.error("Error sending Discord support log", e);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
console.warn("No Discord support webhook provided, skipping");
|
||||||
|
}
|
||||||
|
|
||||||
return { id: layerId };
|
return { id: layerId };
|
||||||
},
|
},
|
||||||
|
|
||||||
removeLayerFromItem: async (
|
removeLayerFromItem: async (
|
||||||
_,
|
_,
|
||||||
{ layerId, itemId, supportSecret },
|
{ layerId, itemId, supportSecret },
|
||||||
{ db }
|
{
|
||||||
|
itemLoader,
|
||||||
|
itemTranslationLoader,
|
||||||
|
swfAssetLoader,
|
||||||
|
zoneTranslationLoader,
|
||||||
|
db,
|
||||||
|
}
|
||||||
) => {
|
) => {
|
||||||
if (supportSecret !== process.env["SUPPORT_SECRET"]) {
|
if (supportSecret !== process.env["SUPPORT_SECRET"]) {
|
||||||
throw new Error(`Support secret is incorrect. Try setting up again?`);
|
throw new Error(`Support secret is incorrect. Try setting up again?`);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const oldSwfAsset = await swfAssetLoader.load(layerId);
|
||||||
|
|
||||||
const [result] = await db.execute(
|
const [result] = await db.execute(
|
||||||
`DELETE FROM parents_swf_assets ` +
|
`DELETE FROM parents_swf_assets ` +
|
||||||
`WHERE swf_asset_id = ? AND parent_type = "Item" AND parent_id = ? ` +
|
`WHERE swf_asset_id = ? AND parent_type = "Item" AND parent_id = ? ` +
|
||||||
|
@ -758,6 +901,43 @@ const resolvers = {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
swfAssetLoader.clear(layerId); // we changed it, so clear it from cache
|
||||||
|
|
||||||
|
if (process.env["SUPPORT_TOOLS_DISCORD_WEBHOOK_URL"]) {
|
||||||
|
try {
|
||||||
|
const [item, itemTranslation, zoneTranslation] = await Promise.all([
|
||||||
|
itemLoader.load(itemId),
|
||||||
|
itemTranslationLoader.load(itemId),
|
||||||
|
zoneTranslationLoader.load(oldSwfAsset.zoneId),
|
||||||
|
]);
|
||||||
|
|
||||||
|
await logToDiscord({
|
||||||
|
embeds: [
|
||||||
|
{
|
||||||
|
title: `🛠 ${itemTranslation.name}`,
|
||||||
|
thumbnail: {
|
||||||
|
url: item.thumbnailUrl,
|
||||||
|
height: 80,
|
||||||
|
width: 80,
|
||||||
|
},
|
||||||
|
fields: [
|
||||||
|
{
|
||||||
|
name: `Layer ${layerId} (${zoneTranslation.label})`,
|
||||||
|
value: `❌ Removed from item`,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
timestamp: new Date().toISOString(),
|
||||||
|
url: `https://impress.openneo.net/items/${itemId}`,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
});
|
||||||
|
} catch (e) {
|
||||||
|
console.error("Error sending Discord support log", e);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
console.warn("No Discord support webhook provided, skipping");
|
||||||
|
}
|
||||||
|
|
||||||
return { layer: { id: layerId }, item: { id: itemId } };
|
return { layer: { id: layerId }, item: { id: itemId } };
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
Loading…
Reference in a new issue