apps/bot/src/lib/db.ts (view raw)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
import { User, type APIInteractionGuildMember, GuildMember, Guild } from "discord.js";
import { upsertActor } from "@stealth-developers/db";
export async function upsertUser(
input: APIInteractionGuildMember | GuildMember | User,
guild: Guild,
) {
let discordId: string;
let username: string;
let displayName: string | null = null;
let avatar: string | null = null;
let isModerator = false;
if ("user" in input) {
const member = input;
const user = member.user;
discordId = user.id;
username = user.username;
const nick = member instanceof GuildMember ? member.nickname : member.nick;
const globalName = user instanceof User ? user.globalName : user.global_name;
displayName = nick || globalName || user.username;
avatar = member.avatar || user.avatar;
if (member instanceof GuildMember) {
isModerator = member.permissions.has("Administrator");
} else if (member.permissions) {
const { PermissionsBitField } = await import("discord.js");
const perms = new PermissionsBitField(BigInt(member.permissions));
isModerator = perms.has("Administrator");
}
} else {
const user = input;
discordId = user.id;
username = user.username;
displayName = user.displayName;
avatar = user.avatar;
try {
const member = await guild.members.fetch(user.id);
isModerator = member.permissions.has("ModerateMembers");
} catch {}
}
return upsertActor({
guild: {
discordId: guild.id,
name: guild.name,
icon: guild.iconURL() || guild.icon,
},
user: {
discordId,
username,
displayName,
avatar,
},
moderator: isModerator,
});
}
|