logging: join/leave
This commit is contained in:
parent
d59b180961
commit
3199df420c
2 changed files with 163 additions and 3 deletions
|
@ -1,10 +1,15 @@
|
||||||
|
const {Member} = require("@projectdysnomia/dysnomia");
|
||||||
|
|
||||||
const {getGuildData} = require("#lib/guildData.js");
|
const {getGuildData} = require("#lib/guildData.js");
|
||||||
const events = require("#lib/events.js");
|
const events = require("#lib/events.js");
|
||||||
|
|
||||||
//const {AuditLogActions} = require("#util/dconstants.js");
|
const {/*AuditLogActions,*/ APIEndpoints, CDNEndpoints, GuildIntegrationTypes} = require("#util/dconstants.js");
|
||||||
|
const {JoinSourceTypeNames} = require("#util/constants.js");
|
||||||
|
const {formatUsername, getDefaultAvatar} = require("#util/misc.js");
|
||||||
|
const {snowflakeToTimestamp} = require("#util/time.js");
|
||||||
|
|
||||||
//const COLOR_ADDED = 0x399d53;
|
const COLOR_ADDED = 0x399d53;
|
||||||
//const COLOR_REMOVED = 0xe55152;
|
const COLOR_REMOVED = 0xe55152;
|
||||||
const COLOR_CHANGED = 0x3c8cec;
|
const COLOR_CHANGED = 0x3c8cec;
|
||||||
|
|
||||||
async function getLoggingChannel(guild) {
|
async function getLoggingChannel(guild) {
|
||||||
|
@ -52,8 +57,152 @@ events.add("guildUpdate", "logging", async function (guild, oldGuild) {
|
||||||
color: COLOR_CHANGED,
|
color: COLOR_CHANGED,
|
||||||
title: "Features Updated",
|
title: "Features Updated",
|
||||||
description: diff,
|
description: diff,
|
||||||
|
timestamp: new Date().toISOString(),
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
})
|
})
|
||||||
.catch(() => {});
|
.catch(() => {});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
events.add("guildMemberAdd", "logging", async function (guild, member) {
|
||||||
|
const channel = await getLoggingChannel(guild);
|
||||||
|
if (!channel) return;
|
||||||
|
|
||||||
|
const user = member.user;
|
||||||
|
const defaultAvatar = getDefaultAvatar(user.id, user.discriminator ?? 0);
|
||||||
|
const avatar = user.avatar ? CDNEndpoints.USER_AVATAR(user.id, user.avatar) : defaultAvatar;
|
||||||
|
|
||||||
|
const memberSearch = await hf.bot.requestHandler
|
||||||
|
.request("POST", `/guilds/${guild.id}/members-search`, true, {
|
||||||
|
and_query: {user_id: {or_query: [user.id]}},
|
||||||
|
or_query: {},
|
||||||
|
limit: 5,
|
||||||
|
})
|
||||||
|
.then((res) => res?.members?.[0])
|
||||||
|
.catch(() => {});
|
||||||
|
|
||||||
|
let inviter;
|
||||||
|
if (memberSearch?.inviter_id) inviter = await guild.getMember(memberSearch.inviter_id);
|
||||||
|
|
||||||
|
channel
|
||||||
|
.createMessage({
|
||||||
|
embeds: [
|
||||||
|
{
|
||||||
|
color: COLOR_ADDED,
|
||||||
|
title: "Member Joined",
|
||||||
|
description: `<@${user.id}> ${formatUsername(user)}`,
|
||||||
|
timestamp: new Date().toISOString(),
|
||||||
|
thumbnail: {
|
||||||
|
url: avatar,
|
||||||
|
},
|
||||||
|
fields: [
|
||||||
|
{
|
||||||
|
name: "Created",
|
||||||
|
value: `<t:${Math.floor(snowflakeToTimestamp(user.id) / 1000)}:R>`,
|
||||||
|
inline: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Join Method",
|
||||||
|
value: memberSearch?.join_source_type
|
||||||
|
? `${JoinSourceTypeNames[memberSearch.join_source_type]}${
|
||||||
|
memberSearch.source_invite_code
|
||||||
|
? ` via \`${memberSearch.source_invite_code}\``
|
||||||
|
: memberSearch.integration_type
|
||||||
|
? ` via \`${
|
||||||
|
GuildIntegrationTypes[memberSearch.integration_type] ??
|
||||||
|
`<unknown integration: ${memberSearch.integration_type}>`
|
||||||
|
}\``
|
||||||
|
: ""
|
||||||
|
}`
|
||||||
|
: "Unknown",
|
||||||
|
inline: true,
|
||||||
|
},
|
||||||
|
inviter && {
|
||||||
|
name: "Inviter",
|
||||||
|
value: `<@${inviter.id}> ${formatUsername(inviter.user)}`,
|
||||||
|
inline: true,
|
||||||
|
},
|
||||||
|
].filter((x) => !!x),
|
||||||
|
footer: {
|
||||||
|
text: user.id,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
],
|
||||||
|
})
|
||||||
|
.catch(() => {});
|
||||||
|
});
|
||||||
|
|
||||||
|
events.add("guildMemberRemove", "logging", async function (guild, member) {
|
||||||
|
const channel = await getLoggingChannel(guild);
|
||||||
|
if (!channel) return;
|
||||||
|
|
||||||
|
const timestamp = new Date().toISOString();
|
||||||
|
|
||||||
|
if (member instanceof Member) {
|
||||||
|
const user = member.user;
|
||||||
|
const defaultAvatar = getDefaultAvatar(user.id, user.discriminator ?? 0);
|
||||||
|
const avatar = user.avatar ? CDNEndpoints.USER_AVATAR(user.id, user.avatar) : defaultAvatar;
|
||||||
|
|
||||||
|
channel
|
||||||
|
.createMessage({
|
||||||
|
embeds: [
|
||||||
|
{
|
||||||
|
color: COLOR_REMOVED,
|
||||||
|
title: "Member Left",
|
||||||
|
description: `<@${user.id}> ${formatUsername(user)}`,
|
||||||
|
timestamp,
|
||||||
|
thumbnail: {
|
||||||
|
url: avatar,
|
||||||
|
},
|
||||||
|
fields: [
|
||||||
|
{
|
||||||
|
name: "Joined",
|
||||||
|
value: `<t:${Math.floor(member.joinedAt / 1000)}:R>`,
|
||||||
|
inline: true,
|
||||||
|
},
|
||||||
|
member?.nick && {
|
||||||
|
name: "Nickname",
|
||||||
|
value: member.nick,
|
||||||
|
inline: true,
|
||||||
|
},
|
||||||
|
member?.roles?.length > 0 && {
|
||||||
|
name: "Roles",
|
||||||
|
value: member.roles
|
||||||
|
.sort((a, b) => guild.roles.get(b).position - guild.roles.get(a).position)
|
||||||
|
.map((role) => `<@&${role}>`)
|
||||||
|
.join(", "),
|
||||||
|
inline: false,
|
||||||
|
},
|
||||||
|
].filter((x) => !!x),
|
||||||
|
footer: {
|
||||||
|
text: user.id,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
],
|
||||||
|
})
|
||||||
|
.catch(() => {});
|
||||||
|
} else {
|
||||||
|
const user = await hf.bot.requestHandler.request("GET", APIEndpoints.USER(member.user.id), true);
|
||||||
|
const defaultAvatar = getDefaultAvatar(user.id, user.discriminator ?? 0);
|
||||||
|
const avatar = user.avatar ? CDNEndpoints.USER_AVATAR(user.id, user.avatar) : defaultAvatar;
|
||||||
|
|
||||||
|
channel
|
||||||
|
.createMessage({
|
||||||
|
embeds: [
|
||||||
|
{
|
||||||
|
color: COLOR_REMOVED,
|
||||||
|
title: "Member Left",
|
||||||
|
description: `-# Uncached member, limited info\n<@${user.id}> ${formatUsername(user)}`,
|
||||||
|
timestamp,
|
||||||
|
thumbnail: {
|
||||||
|
url: avatar,
|
||||||
|
},
|
||||||
|
footer: {
|
||||||
|
text: user.id,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
],
|
||||||
|
})
|
||||||
|
.catch(() => {});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
|
@ -687,3 +687,14 @@ module.exports.ApplicationFlagNames = [
|
||||||
"iframe Modals",
|
"iframe Modals",
|
||||||
"Social Layer Integration",
|
"Social Layer Integration",
|
||||||
];
|
];
|
||||||
|
|
||||||
|
module.exports.JoinSourceTypeNames = {
|
||||||
|
0: "Unspecified",
|
||||||
|
1: "Bot",
|
||||||
|
2: "Integration",
|
||||||
|
3: "Discovery",
|
||||||
|
4: "Hub",
|
||||||
|
5: "Invite",
|
||||||
|
6: "Vanity URL",
|
||||||
|
7: "Manual Verification",
|
||||||
|
};
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue