utility.presence: add activities
This commit is contained in:
parent
3c3d4e5eff
commit
8f4b230326
1 changed files with 134 additions and 3 deletions
|
@ -59,7 +59,7 @@ const CUSTOM_EMOTE_REGEX = /<(?:\u200b|&)?(a)?:(\w+):(\d+)>/;
|
||||||
|
|
||||||
const sharp = require("sharp");
|
const sharp = require("sharp");
|
||||||
|
|
||||||
const {hastebin, lookupUser} = require("../lib/utils.js");
|
const {hastebin, lookupUser, formatTime} = require("../lib/utils.js");
|
||||||
const {getNamesFromString} = require("../lib/unicode.js");
|
const {getNamesFromString} = require("../lib/unicode.js");
|
||||||
|
|
||||||
const avatar = new Command("avatar");
|
const avatar = new Command("avatar");
|
||||||
|
@ -580,7 +580,9 @@ jumbo.callback = async function (msg, line) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (set.suffix == ".svg") {
|
if (set.suffix == ".svg") {
|
||||||
const svg = await fetch(url).then((res) => res.buffer());
|
const svg = await fetch(url)
|
||||||
|
.then((res) => res.arrayBuffer())
|
||||||
|
.then((b) => Buffer.from(b));
|
||||||
const converted = await sharp(svg, {density: 2400})
|
const converted = await sharp(svg, {density: 2400})
|
||||||
.resize(1024)
|
.resize(1024)
|
||||||
.toBuffer();
|
.toBuffer();
|
||||||
|
@ -663,6 +665,17 @@ const PRESENCE_ICONS = {
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const PRESENCE_TYPES = [
|
||||||
|
"Playing",
|
||||||
|
"Streaming",
|
||||||
|
"Listening to",
|
||||||
|
"Watching",
|
||||||
|
"",
|
||||||
|
"Competing in",
|
||||||
|
];
|
||||||
|
|
||||||
|
const NOWPLAYING_BAR_LENGTH = 30;
|
||||||
|
|
||||||
const presence = new Command("presence");
|
const presence = new Command("presence");
|
||||||
presence.category = CATEGORY;
|
presence.category = CATEGORY;
|
||||||
presence.helpText = "Get presences of a user.";
|
presence.helpText = "Get presences of a user.";
|
||||||
|
@ -690,8 +703,8 @@ presence.callback = async function (msg, line) {
|
||||||
userIDs: [user.id],
|
userIDs: [user.id],
|
||||||
});
|
});
|
||||||
member = fetched[0];
|
member = fetched[0];
|
||||||
target = member;
|
|
||||||
}
|
}
|
||||||
|
target = member;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
@ -709,9 +722,127 @@ presence.callback = async function (msg, line) {
|
||||||
}
|
}
|
||||||
|
|
||||||
const embeds = [];
|
const embeds = [];
|
||||||
|
const files = [];
|
||||||
|
|
||||||
|
for (const index in target.presence.activities) {
|
||||||
|
const activity = target.presence.activities[index];
|
||||||
|
if (activity.type == 4) {
|
||||||
|
let emote = "";
|
||||||
|
if (activity.emoji.id) {
|
||||||
|
emote = `<${activity.emoji.animated ? "a" : ""}:${
|
||||||
|
activity.emoji.name
|
||||||
|
}:${activity.emoji.id}>`;
|
||||||
|
} else {
|
||||||
|
emote = activity.emoji.name;
|
||||||
|
}
|
||||||
|
|
||||||
|
embeds.push({
|
||||||
|
title: `${emote} ${activity.state}`,
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
const embed = {
|
||||||
|
title: `${PRESENCE_TYPES[activity.type]} **${activity.name}**`,
|
||||||
|
};
|
||||||
|
const descLines = [];
|
||||||
|
if (activity.type == 2) {
|
||||||
|
if (activity.details) descLines.push(`**${activity.details}**`);
|
||||||
|
if (activity.state) descLines.push(activity.state);
|
||||||
|
if (activity.assets?.large_text)
|
||||||
|
descLines.push(activity.assets.large_text);
|
||||||
|
} else {
|
||||||
|
if (activity.details) descLines.push(activity.details);
|
||||||
|
if (activity.state) descLines.push(activity.state);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (activity.timestamps.start && !activity.timestamps.end) {
|
||||||
|
descLines.push(
|
||||||
|
formatTime(Date.now() - activity.timestamps.start) + " elapsed"
|
||||||
|
);
|
||||||
|
} else if (!activity.timestamps.start && activity.timestamps.end) {
|
||||||
|
descLines.push(
|
||||||
|
formatTime(activity.timestamps.end - Date.now()) + " remaining"
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
const position = Date.now() - activity.timestamps.start;
|
||||||
|
const length = activity.timestamps.end - activity.timestamps.start;
|
||||||
|
|
||||||
|
const timeEnd = formatTime(length);
|
||||||
|
const timePos = formatTime(position);
|
||||||
|
|
||||||
|
const progress = position / length;
|
||||||
|
const barLength = Math.round(progress * NOWPLAYING_BAR_LENGTH);
|
||||||
|
|
||||||
|
const bar = `\`[${"=".repeat(barLength)}${" ".repeat(
|
||||||
|
NOWPLAYING_BAR_LENGTH - barLength
|
||||||
|
)}]\``;
|
||||||
|
const time = `\`${timePos}${" ".repeat(
|
||||||
|
NOWPLAYING_BAR_LENGTH + 2 - timePos.length - timeEnd.length
|
||||||
|
)}${timeEnd}\``;
|
||||||
|
|
||||||
|
descLines.push(bar);
|
||||||
|
descLines.push(time);
|
||||||
|
}
|
||||||
|
|
||||||
|
embed.description = descLines.join("\n");
|
||||||
|
|
||||||
|
if (activity.assets?.large_image) {
|
||||||
|
let largeUrl;
|
||||||
|
if (activity.assets.large_image.startsWith("mp:")) {
|
||||||
|
largeUrl = activity.large_image.replace(
|
||||||
|
"mp:",
|
||||||
|
"https://media.discordapp.net/"
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
largeUrl = `https://cdn.discordapp.com/app-assets/${activity.application_id}/${activity.assets.large_image}.png`;
|
||||||
|
}
|
||||||
|
|
||||||
|
let smallUrl;
|
||||||
|
if (activity.assets.small_image) {
|
||||||
|
if (activity.assets.small_image.startsWith("mp:")) {
|
||||||
|
smallUrl = activity.small_image.replace(
|
||||||
|
"mp:",
|
||||||
|
"https://media.discordapp.net/"
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
smallUrl = `https://cdn.discordapp.com/app-assets/${activity.application_id}/${activity.assets.small_image}.png`;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const largeImage = await fetch(largeUrl)
|
||||||
|
.then((res) => res.arrayBuffer())
|
||||||
|
.then((b) => Buffer.from(b));
|
||||||
|
const presenceImage = sharp(largeImage).resize(60, 60);
|
||||||
|
if (smallUrl) {
|
||||||
|
const smallImage = await fetch(smallUrl)
|
||||||
|
.then((res) => res.arrayBuffer())
|
||||||
|
.then((b) => Buffer.from(b));
|
||||||
|
const smallImageSharp = sharp(smallImage).resize(20, 20);
|
||||||
|
|
||||||
|
presenceImage.composite([
|
||||||
|
{
|
||||||
|
input: smallImageSharp,
|
||||||
|
gravity: "southeast",
|
||||||
|
},
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
files.push({
|
||||||
|
content: presenceImage.toBuffer(),
|
||||||
|
name: `${index}.png`,
|
||||||
|
});
|
||||||
|
embed.thumbnail = {
|
||||||
|
url: `attachment://${index}.png`,
|
||||||
|
};
|
||||||
|
|
||||||
|
embeds.push(embed);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
content: `Presence for **${target.tag}**: ${icons}`,
|
content: `Presence for **${target.tag}**: ${icons}`,
|
||||||
|
embeds,
|
||||||
|
files,
|
||||||
};
|
};
|
||||||
} else {
|
} else {
|
||||||
return ":warning: Could not get user???";
|
return ":warning: Could not get user???";
|
||||||
|
|
Loading…
Reference in a new issue