utility.guildinfo: implement preview, discovery and widget
This commit is contained in:
parent
3abaf21585
commit
6c08af5aa9
1 changed files with 364 additions and 64 deletions
|
@ -473,7 +473,7 @@ avatar.callback = async function (msg, line, [user], {server, guild}) {
|
|||
} else {
|
||||
const guild = msg.channel.guild || hf.bot.guilds.get(msg.guildID);
|
||||
const url = `${ICON_BASE}${guild.id}/${guild.icon}.${
|
||||
guild.icon.startsWith("a_") ? "gif?size=1024&_=.gif" : "png?size=1024"
|
||||
guild.icon.startsWith("a_") ? "gif?size=4096&_=.gif" : "png?size=4096"
|
||||
}`;
|
||||
return {
|
||||
embeds: [
|
||||
|
@ -523,8 +523,8 @@ avatar.callback = async function (msg, line, [user], {server, guild}) {
|
|||
normalAvatar +
|
||||
"." +
|
||||
(normalAvatar.startsWith("a_")
|
||||
? "gif?size=1024&_=.gif"
|
||||
: "png?size=1024");
|
||||
? "gif?size=4096&_=.gif"
|
||||
: "png?size=4096");
|
||||
const guildUrl =
|
||||
guildAvatar &&
|
||||
"https://cdn.discordapp.com/guilds/" +
|
||||
|
@ -535,8 +535,8 @@ avatar.callback = async function (msg, line, [user], {server, guild}) {
|
|||
guildAvatar +
|
||||
"." +
|
||||
(guildAvatar.startsWith("a_")
|
||||
? "gif?size=1024&_=.gif"
|
||||
: "png?size=1024");
|
||||
? "gif?size=4096&_=.gif"
|
||||
: "png?size=4096");
|
||||
|
||||
baseEmbed.description =
|
||||
`[Normal avatar](${normalUrl})` +
|
||||
|
@ -568,8 +568,8 @@ avatar.callback = async function (msg, line, [user], {server, guild}) {
|
|||
normalAvatar +
|
||||
"." +
|
||||
(normalAvatar.startsWith("a_")
|
||||
? "gif?size=1024&_=.gif"
|
||||
: "png?size=1024");
|
||||
? "gif?size=4096&_=.gif"
|
||||
: "png?size=4096");
|
||||
const guildUrl =
|
||||
guildAvatar &&
|
||||
"https://cdn.discordapp.com/guilds/" +
|
||||
|
@ -580,8 +580,8 @@ avatar.callback = async function (msg, line, [user], {server, guild}) {
|
|||
guildAvatar +
|
||||
"." +
|
||||
(guildAvatar.startsWith("a_")
|
||||
? "gif?size=1024&_=.gif"
|
||||
: "png?size=1024");
|
||||
? "gif?size=4096&_=.gif"
|
||||
: "png?size=4096");
|
||||
|
||||
baseEmbed.description =
|
||||
`[Normal avatar](${normalUrl})` +
|
||||
|
@ -651,7 +651,7 @@ banner.callback = async function (msg, line, [user], {server, guild}) {
|
|||
if (!userObj.banner) return "This user does not have a banner.";
|
||||
|
||||
const url = `${BANNER_BASE}${userObj.id}/${userObj.banner}.${
|
||||
userObj.banner.startsWith("a_") ? "gif?size=1024&_=.gif" : "png?size=1024"
|
||||
userObj.banner.startsWith("a_") ? "gif?size=4096&_=.gif" : "png?size=4096"
|
||||
}`;
|
||||
return {
|
||||
embeds: [
|
||||
|
@ -807,8 +807,8 @@ lookupinvite.callback = async function (msg, line) {
|
|||
invite.guild.icon &&
|
||||
`${ICON_BASE}${invite.guild.id}/${invite.guild.icon}.${
|
||||
invite.guild.icon.startsWith("a_")
|
||||
? "gif?size=1024&_=.gif"
|
||||
: "png?size=1024"
|
||||
? "gif?size=4096&_=.gif"
|
||||
: "png?size=4096"
|
||||
}`,
|
||||
};
|
||||
|
||||
|
@ -822,15 +822,15 @@ lookupinvite.callback = async function (msg, line) {
|
|||
invite.guild.icon
|
||||
? `[Icon](${ICON_BASE}${invite.guild.id}/${invite.guild.icon}.${
|
||||
invite.guild.icon.startsWith("a_")
|
||||
? "gif?size=1024"
|
||||
: "png?size=1024"
|
||||
? "gif?size=4096"
|
||||
: "png?size=4096"
|
||||
})`
|
||||
: ""
|
||||
}${
|
||||
invite.guild.splash
|
||||
? `${invite.guild.icon ? " | " : ""}[Splash](${SPLASH_BASE}${
|
||||
invite.guild.id
|
||||
}/${invite.guild.splash}.png?size=2048)`
|
||||
}/${invite.guild.splash}.png?size=4096)`
|
||||
: ""
|
||||
}${
|
||||
invite.guild.banner
|
||||
|
@ -840,8 +840,8 @@ lookupinvite.callback = async function (msg, line) {
|
|||
invite.guild.banner
|
||||
}.${
|
||||
invite.guild.banner.startsWith("a_")
|
||||
? "gif?size=1024"
|
||||
: "png?size=1024"
|
||||
? "gif?size=4096"
|
||||
: "png?size=4096"
|
||||
})`
|
||||
: ""
|
||||
}`,
|
||||
|
@ -888,8 +888,8 @@ lookupinvite.callback = async function (msg, line) {
|
|||
const groupIcon = invite.channel.icon
|
||||
? `${CHANNEL_ICON_BASE}${invite.channel.id}/${invite.channel.icon}.${
|
||||
invite.channel.icon.startsWith("a_")
|
||||
? "gif?size=1024&_=.gif"
|
||||
: "png?size=1024"
|
||||
? "gif?size=4096&_=.gif"
|
||||
: "png?size=4096"
|
||||
}`
|
||||
: "https://discord.com" +
|
||||
DEFAULT_GROUP_DM_AVATARS[
|
||||
|
@ -914,8 +914,8 @@ lookupinvite.callback = async function (msg, line) {
|
|||
invite.inviter?.avatar &&
|
||||
`${AVATAR_BASE}${invite.inviter.id}/${invite.inviter.avatar}.${
|
||||
invite.inviter.avatar.startsWith("a_")
|
||||
? "gif?size=1024&_=.gif"
|
||||
: "png?size=1024"
|
||||
? "gif?size=4096&_=.gif"
|
||||
: "png?size=4096"
|
||||
}`;
|
||||
|
||||
if (avatarURL) {
|
||||
|
@ -1479,7 +1479,7 @@ appinfo.callback = async function (msg, line) {
|
|||
|
||||
if (app.icon) {
|
||||
embed.thumbnail = {
|
||||
url: `${APP_ICON_BASE}${app.id}/${app.icon}.png?size=1024`,
|
||||
url: `${APP_ICON_BASE}${app.id}/${app.icon}.png?size=4096`,
|
||||
};
|
||||
}
|
||||
|
||||
|
@ -1871,6 +1871,26 @@ guildinfo.callback = async function (msg, line) {
|
|||
: "Only Mentions",
|
||||
inline: true,
|
||||
},
|
||||
guild.rulesChannelID && {
|
||||
name: "Rules",
|
||||
value: `<#${guild.rulesChannelID}>`,
|
||||
inline: true,
|
||||
},
|
||||
guild.systemChannelID && {
|
||||
name: "System Messages",
|
||||
value: `<#${guild.systemChannelID}>`,
|
||||
inline: true,
|
||||
},
|
||||
guild.publicUpdatesChannelID && {
|
||||
name: "Community Updates",
|
||||
value: `<#${guild.publicUpdatesChannelID}>`,
|
||||
inline: true,
|
||||
},
|
||||
guild.safetyAlertsChannelID && {
|
||||
name: "Safety Alerts",
|
||||
value: `<#${guild.safetyAlertsChannelID}>`,
|
||||
inline: true,
|
||||
},
|
||||
{
|
||||
name: `Channels (${guild.channels.size})`,
|
||||
value:
|
||||
|
@ -1922,49 +1942,12 @@ guildinfo.callback = async function (msg, line) {
|
|||
embed.thumbnail = {
|
||||
url: `${ICON_BASE}${guild.id}/${guild.icon}.${
|
||||
guild.icon.startsWith("a_")
|
||||
? "gif?size=1024&_=.gif"
|
||||
: "png?size=1024"
|
||||
? "gif?size=4096&_=.gif"
|
||||
: "png?size=4096"
|
||||
}`,
|
||||
};
|
||||
}
|
||||
|
||||
if (guild.systemChannelID) {
|
||||
embed.fields.push({
|
||||
name: "System Messages",
|
||||
value: `#${guild.channels.get(guild.systemChannelID).name} (\`${
|
||||
guild.systemChannelID
|
||||
}\`)`,
|
||||
inline: true,
|
||||
});
|
||||
}
|
||||
if (guild.rulesChannelID) {
|
||||
embed.fields.push({
|
||||
name: "Rules",
|
||||
value: `#${guild.channels.get(guild.rulesChannelID).name} (\`${
|
||||
guild.rulesChannelID
|
||||
}\`)`,
|
||||
inline: true,
|
||||
});
|
||||
}
|
||||
if (guild.publicUpdatesChannelID) {
|
||||
embed.fields.push({
|
||||
name: "Community Updates",
|
||||
value: `#${
|
||||
guild.channels.get(guild.publicUpdatesChannelID).name
|
||||
} (\`${guild.publicUpdatesChannelID}\`)`,
|
||||
inline: true,
|
||||
});
|
||||
}
|
||||
if (guild.safetyAlertsChannelID) {
|
||||
embed.fields.push({
|
||||
name: "Safety Alerts",
|
||||
value: `#${guild.channels.get(guild.safetyAlertsChannelID).name} (\`${
|
||||
guild.safetyAlertsChannelID
|
||||
}\`)`,
|
||||
inline: true,
|
||||
});
|
||||
}
|
||||
|
||||
const members = Array.from(guild.members.values());
|
||||
const online = members.filter(
|
||||
(member) => member.status != null && member.status != "offline"
|
||||
|
@ -2038,13 +2021,330 @@ guildinfo.callback = async function (msg, line) {
|
|||
return {embed};
|
||||
}
|
||||
case "preview": {
|
||||
return "TODO: guild from preview";
|
||||
const embed = {
|
||||
title: guild.name,
|
||||
description: guild.description ?? "*No description.*",
|
||||
fields: [
|
||||
{
|
||||
name: "Created",
|
||||
value: `<t:${Math.floor(snowflakeToTimestamp(guild.id) / 1000)}:R>`,
|
||||
inline: true,
|
||||
},
|
||||
{
|
||||
name: `Emotes (${guild.emojis.length})`,
|
||||
value: `${
|
||||
guild.emojis.filter((e) => e.animated).length
|
||||
} animated, ${
|
||||
guild.emojis.filter((e) => e.managed).length
|
||||
} managed\n${
|
||||
guild.emojis.filter((e) => !e.available).length
|
||||
} unavailable`,
|
||||
inline: true,
|
||||
},
|
||||
{
|
||||
name: `Stickers (${guild.stickers.length})`,
|
||||
value: `${
|
||||
guild.stickers.filter((s) => s.format_type == 1).length
|
||||
} PNG, ${
|
||||
guild.stickers.filter((s) => s.format_type == 2).length
|
||||
} APNG, ${
|
||||
guild.stickers.filter((s) => s.format_type == 4).length
|
||||
} GIF, ${
|
||||
guild.stickers.filter((s) => s.format_type == 3).length
|
||||
} Lottie\n${
|
||||
guild.stickers.filter((s) => !s.available).length
|
||||
} unavailable`,
|
||||
inline: true,
|
||||
},
|
||||
],
|
||||
footer: {
|
||||
text: "Fetched from guild preview",
|
||||
},
|
||||
};
|
||||
|
||||
if (guild.icon) {
|
||||
embed.thumbnail = {
|
||||
url: `${ICON_BASE}${guild.id}/${guild.icon}.${
|
||||
guild.icon.startsWith("a_")
|
||||
? "gif?size=4096&_=.gif"
|
||||
: "png?size=4096"
|
||||
}`,
|
||||
};
|
||||
}
|
||||
|
||||
embed.fields.push({
|
||||
name: "Member Count",
|
||||
value: `<:online:1152111668856361010>${guild.approximate_presence_count} online\t\t<:offline:1152111682886316042>${guild.approximate_member_count} members`,
|
||||
inline: false,
|
||||
});
|
||||
|
||||
const features = guild.features.sort().map(
|
||||
(feature) =>
|
||||
(GUILD_FEATURES[feature]?.icon ?? "\u2753") +
|
||||
" " +
|
||||
(GUILD_FEATURES[feature]?.name ??
|
||||
feature
|
||||
.split("_")
|
||||
.map((x) => x[0] + x.substring(1).toLowerCase())
|
||||
.join(" "))
|
||||
);
|
||||
|
||||
embed.fields.push({
|
||||
name: `Features (${features.length})`,
|
||||
value:
|
||||
features.length > 0
|
||||
? features.slice(0, Math.ceil(features.length / 2)).join("\n")
|
||||
: "None",
|
||||
inline: true,
|
||||
});
|
||||
if (features.length > 1)
|
||||
embed.fields.push({
|
||||
name: "\u200b",
|
||||
value: features
|
||||
.slice(Math.ceil(features.length / 2), features.length)
|
||||
.join("\n"),
|
||||
inline: true,
|
||||
});
|
||||
|
||||
const images = [];
|
||||
if (guild.icon) {
|
||||
images.push(`[Icon](${embed.thumbnail.url})`);
|
||||
}
|
||||
if (guild.splash) {
|
||||
images.push(
|
||||
`[Invite Splash](${SPLASH_BASE}${guild.id}/${guild.splash}.png?size=4096)`
|
||||
);
|
||||
}
|
||||
if (guild.discovery_splash) {
|
||||
images.push(
|
||||
`[Discovery Splash](${DISCOVERY_SPLASH_BASE}${guild.id}/${guild.discoverySplash}.png?size=4096)`
|
||||
);
|
||||
}
|
||||
|
||||
if (images.length > 0) {
|
||||
embed.fields.push({
|
||||
name: "\u200b",
|
||||
value: images.join(" | "),
|
||||
inline: false,
|
||||
});
|
||||
}
|
||||
|
||||
return {embed};
|
||||
}
|
||||
case "discovery": {
|
||||
return "TODO: guild from discovery";
|
||||
if (!guild.store_page) {
|
||||
return "Got discovery data but no store page.";
|
||||
}
|
||||
|
||||
const guildObj = guild.store_page.guild;
|
||||
|
||||
let invite;
|
||||
if (
|
||||
guildObj.invite?.code ||
|
||||
guild.store_page.role_subscription.purchase_page_invite?.code
|
||||
) {
|
||||
const code =
|
||||
guildObj.invite?.code ??
|
||||
guild.store_page.role_subscription.purchase_page_invite?.code;
|
||||
invite = await hf.bot.requestHandler.request(
|
||||
"GET",
|
||||
`/invites/${code}?with_counts=true&with_expiration=true`
|
||||
);
|
||||
}
|
||||
|
||||
const embed = {
|
||||
title: guildObj.name,
|
||||
description: invite?.guild?.description ?? "*No description.*",
|
||||
fields: [
|
||||
{
|
||||
name: "Created",
|
||||
value: `<t:${Math.floor(
|
||||
snowflakeToTimestamp(guildObj.id) / 1000
|
||||
)}:R>`,
|
||||
inline: true,
|
||||
},
|
||||
],
|
||||
footer: {
|
||||
text: "Fetched from discovery" + (invite ? " + invite" : ""),
|
||||
},
|
||||
};
|
||||
|
||||
if (guildObj.icon_hash) {
|
||||
embed.thumbnail = {
|
||||
url: `${ICON_BASE}${guildObj.id}/${guildObj.icon_hash}.${
|
||||
guildObj.icon_hash.startsWith("a_")
|
||||
? "gif?size=4096&_=.gif"
|
||||
: "png?size=4096"
|
||||
}`,
|
||||
};
|
||||
}
|
||||
|
||||
const invites = [];
|
||||
if (guildObj.invite?.code) invites.push(guildObj.invite.code);
|
||||
if (guild.store_page.role_subscription.purchase_page_invite?.code)
|
||||
invites.push(
|
||||
guild.store_page.role_subscription.purchase_page_invite.code
|
||||
);
|
||||
|
||||
if (invites.length > 0) {
|
||||
embed.fields.push({
|
||||
name: "Invites",
|
||||
value: invites.map((code) => "https://discord.gg/" + code).join("\n"),
|
||||
inline: true,
|
||||
});
|
||||
}
|
||||
|
||||
embed.fields.push({
|
||||
name: "Member Count",
|
||||
value: `<:online:1152111668856361010>${guildObj.approximate_presence_count} online\t\t<:offline:1152111682886316042>${guildObj.approximate_member_count} members`,
|
||||
inline: false,
|
||||
});
|
||||
|
||||
if (invite?.guild?.features) {
|
||||
const features = invite.guild.features.sort().map(
|
||||
(feature) =>
|
||||
(GUILD_FEATURES[feature]?.icon ?? "\u2753") +
|
||||
" " +
|
||||
(GUILD_FEATURES[feature]?.name ??
|
||||
feature
|
||||
.split("_")
|
||||
.map((x) => x[0] + x.substring(1).toLowerCase())
|
||||
.join(" "))
|
||||
);
|
||||
|
||||
embed.fields.push({
|
||||
name: `Features (${features.length})`,
|
||||
value:
|
||||
features.length > 0
|
||||
? features.slice(0, Math.ceil(features.length / 2)).join("\n")
|
||||
: "None",
|
||||
inline: true,
|
||||
});
|
||||
if (features.length > 1)
|
||||
embed.fields.push({
|
||||
name: "\u200b",
|
||||
value: features
|
||||
.slice(Math.ceil(features.length / 2), features.length)
|
||||
.join("\n"),
|
||||
inline: true,
|
||||
});
|
||||
}
|
||||
|
||||
const images = [];
|
||||
if (guildObj.icon_hash) {
|
||||
images.push(`[Icon](${embed.thumbnail.url})`);
|
||||
}
|
||||
if (invite?.guild?.splash) {
|
||||
images.push(
|
||||
`[Invite Splash](${SPLASH_BASE}${guild.id}/${guild.splash}.png?size=4096)`
|
||||
);
|
||||
}
|
||||
if (invite?.guild?.banner) {
|
||||
images.push(
|
||||
`[Banner](${BANNER_BASE}${guild.id}/${guild.banner}.png?size=4096)`
|
||||
);
|
||||
}
|
||||
|
||||
if (images.length > 0) {
|
||||
embed.fields.push({
|
||||
name: "\u200b",
|
||||
value: images.join(" | "),
|
||||
inline: false,
|
||||
});
|
||||
}
|
||||
|
||||
return {embed};
|
||||
}
|
||||
case "widget": {
|
||||
return "TODO: guild from widget";
|
||||
let invite;
|
||||
if (guild.instant_invite) {
|
||||
invite = await hf.bot.requestHandler.request(
|
||||
"GET",
|
||||
`/invites/${guild.instant_invite}?with_counts=true&with_expiration=true`
|
||||
);
|
||||
}
|
||||
|
||||
const embed = {
|
||||
title: guild.name,
|
||||
description: invite?.guild?.description ?? "*No description.*",
|
||||
fields: [
|
||||
{
|
||||
name: "Created",
|
||||
value: `<t:${Math.floor(snowflakeToTimestamp(guild.id) / 1000)}:R>`,
|
||||
inline: true,
|
||||
},
|
||||
],
|
||||
footer: {
|
||||
text: "Fetched from widget" + (invite ? " + invite" : ""),
|
||||
},
|
||||
};
|
||||
|
||||
if (invite) {
|
||||
embed.fields.push({
|
||||
name: "Member Count",
|
||||
value: `<:online:1152111668856361010>${invite.approximate_presence_count} online\t\t<:offline:1152111682886316042>${invite.approximate_member_count} members`,
|
||||
inline: false,
|
||||
});
|
||||
|
||||
const features = invite.guild.features.sort().map(
|
||||
(feature) =>
|
||||
(GUILD_FEATURES[feature]?.icon ?? "\u2753") +
|
||||
" " +
|
||||
(GUILD_FEATURES[feature]?.name ??
|
||||
feature
|
||||
.split("_")
|
||||
.map((x) => x[0] + x.substring(1).toLowerCase())
|
||||
.join(" "))
|
||||
);
|
||||
|
||||
embed.fields.push({
|
||||
name: `Features (${features.length})`,
|
||||
value:
|
||||
features.length > 0
|
||||
? features.slice(0, Math.ceil(features.length / 2)).join("\n")
|
||||
: "None",
|
||||
inline: true,
|
||||
});
|
||||
if (features.length > 1)
|
||||
embed.fields.push({
|
||||
name: "\u200b",
|
||||
value: features
|
||||
.slice(Math.ceil(features.length / 2), features.length)
|
||||
.join("\n"),
|
||||
inline: true,
|
||||
});
|
||||
|
||||
const images = [];
|
||||
if (invite.guild.icon) {
|
||||
images.push(`[Icon](${embed.thumbnail.url})`);
|
||||
}
|
||||
if (invite.guild.splash) {
|
||||
images.push(
|
||||
`[Invite Splash](${SPLASH_BASE}${guild.id}/${guild.splash}.png?size=4096)`
|
||||
);
|
||||
}
|
||||
if (invite.guild.banner) {
|
||||
images.push(
|
||||
`[Banner](${BANNER_BASE}${guild.id}/${guild.banner}.png?size=4096)`
|
||||
);
|
||||
}
|
||||
|
||||
if (images.length > 0) {
|
||||
embed.fields.push({
|
||||
name: "\u200b",
|
||||
value: images.join(" | "),
|
||||
inline: false,
|
||||
});
|
||||
}
|
||||
} else {
|
||||
embed.fields.push({
|
||||
name: "Member Count",
|
||||
value: `<:online:1152111668856361010>${guild.presence_count} online`,
|
||||
inline: false,
|
||||
});
|
||||
}
|
||||
|
||||
return embed;
|
||||
}
|
||||
default:
|
||||
return "Guild not found.";
|
||||
|
|
Loading…
Reference in a new issue