Skip to content

Commit

Permalink
User member avatars in more places
Browse files Browse the repository at this point in the history
  • Loading branch information
JulianVennen committed Aug 15, 2023
1 parent 0574db0 commit dbbe98d
Show file tree
Hide file tree
Showing 15 changed files with 52 additions and 32 deletions.
6 changes: 4 additions & 2 deletions src/commands/moderation/ModerationDeleteCommand.js
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,8 @@ export default class ModerationDeleteCommand extends CompletingModerationCommand
}

await moderation.delete();
const embed = new ModerationEmbed(moderation, await moderation.getUser())
const user = await (await moderation.getMemberWrapper()).getMemberOrUser();
const embed = new ModerationEmbed(moderation, user)
.setTitle(`Deleted Moderation #${moderation.id} | ${moderation.action.toUpperCase()}`)
.setColor(colors.RED);
await interaction.reply({
Expand All @@ -48,7 +49,8 @@ export default class ModerationDeleteCommand extends CompletingModerationCommand
}

await moderation.delete();
const embed = new ModerationEmbed(moderation, await moderation.getUser())
const user = await (await moderation.getMemberWrapper()).getMemberOrUser();
const embed = new ModerationEmbed(moderation, user)
.setTitle(`Deleted Moderation #${moderation.id} | ${moderation.action.toUpperCase()}`)
.setColor(colors.RED);
await interaction.update({
Expand Down
3 changes: 2 additions & 1 deletion src/commands/moderation/ModerationEditCommand.js
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,8 @@ export default class ModerationEditCommand extends CompletingModerationCommand {
}

await moderation.save();
await interaction.reply(new ModerationEmbed(moderation, await moderation.getUser()).toMessage());
const user = await (await moderation.getMemberWrapper()).getMemberOrUser();
await interaction.reply(new ModerationEmbed(moderation, user).toMessage());
}

getDescription() {
Expand Down
24 changes: 12 additions & 12 deletions src/commands/moderation/ModerationListCommand.js
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ export default class ModerationListCommand extends SubCommand {
const user = interaction.options.getUser('user', true);
const moderations = await Moderation.getAll(interaction.guildId, user.id);

await interaction.reply(await this.generateMessage(user, moderations));
await interaction.reply(await this.generateMessage(new MemberWrapper(user, interaction.guild), moderations));
}

async executeButton(interaction) {
Expand All @@ -41,7 +41,7 @@ export default class ModerationListCommand extends SubCommand {

let page = interaction.customId.split(':')[3] ?? null;
if (page === null) {
await interaction.reply(await this.generateMessage(member.user, moderations));
await interaction.reply(await this.generateMessage(member, moderations));
return;
}

Expand All @@ -52,16 +52,16 @@ export default class ModerationListCommand extends SubCommand {
} else {
page = parseInt(page);
}
await interaction.update(await this.generateMessage(member.user, moderations, page));
await interaction.update(await this.generateMessage(member, moderations, page));
}

/**
* @param {import('discord.js').User} user
* @param {MemberWrapper} member
* @param {Moderation[]} moderations
* @param {number} page
* @return {Promise<{ephemeral: boolean, embeds: EmbedWrapper[]}>}
*/
async generateMessage(user, moderations, page = 1) {
async generateMessage(member, moderations, page = 1) {
const lastPage = Math.ceil(moderations.length / MODERATIONS_PER_PAGE);
if (page < 1) {
page = 1;
Expand All @@ -71,11 +71,11 @@ export default class ModerationListCommand extends SubCommand {
}

if (!moderations.length) {
return new ModerationListEmbed(user)
return new ModerationListEmbed(await member.getMemberOrUser())
.setDescription('This user has no moderations.')
.toMessage();
}
const embed = new ModerationListEmbed(user);
const embed = new ModerationListEmbed(await member.getMemberOrUser());

const start = (page - 1) * MODERATIONS_PER_PAGE;
const end = Math.min(page * MODERATIONS_PER_PAGE, moderations.length);
Expand Down Expand Up @@ -115,11 +115,11 @@ export default class ModerationListCommand extends SubCommand {
/** @type {ActionRowBuilder<ButtonBuilder>} */
const actionRow = new ActionRowBuilder();
for (const data of [
{ id: `moderation:list:${user.id}:first`, emoji: 'firstPage', label: icons.first, disabled: page === 1 },
{ id: `moderation:list:${user.id}:${page - 1}`, emoji: 'previousPage', label: icons.left, disabled: page === 1 },
{ id: `moderation:list:${user.id}:${page}`, emoji: 'refresh', label: icons.refresh },
{ id: `moderation:list:${user.id}:${page + 1}`, emoji: 'nextPage', label: icons.right, disabled: page === lastPage },
{ id: `moderation:list:${user.id}:last`, emoji: 'lastPage', label: icons.last, disabled: page === lastPage },
{ id: `moderation:list:${member.user.id}:first`, emoji: 'firstPage', label: icons.first, disabled: page === 1 },
{ id: `moderation:list:${member.user.id}:${page - 1}`, emoji: 'previousPage', label: icons.left, disabled: page === 1 },
{ id: `moderation:list:${member.user.id}:${page}`, emoji: 'refresh', label: icons.refresh },
{ id: `moderation:list:${member.user.id}:${page + 1}`, emoji: 'nextPage', label: icons.right, disabled: page === lastPage },
{ id: `moderation:list:${member.user.id}:last`, emoji: 'lastPage', label: icons.last, disabled: page === lastPage },
]) {
const button = new ButtonBuilder()
.setCustomId(data.id)
Expand Down
3 changes: 2 additions & 1 deletion src/commands/moderation/ModerationShowCommand.js
Original file line number Diff line number Diff line change
Expand Up @@ -25,9 +25,10 @@ export default class ModerationShowCommand extends CompletingModerationCommand {
return;
}

const user = await (await moderation.getMemberWrapper()).fetchMember() ?? await moderation.getUser();
await interaction.reply({
ephemeral: true,
embeds: [new ModerationEmbed(moderation, await moderation.getUser())],
embeds: [new ModerationEmbed(moderation, user)],
components: [
new ActionRowBuilder()
.addComponents(
Expand Down
2 changes: 1 addition & 1 deletion src/commands/user/UserCommand.js
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,7 @@ export default class UserCommand extends Command {
const embed = new ConfirmationEmbed(this.getName(), await confirmation.save())
.setAuthor({
name: `${await member.displayName()} has already been moderated in the last ${formatTime(MODERATION_WARN_DURATION)}.`,
iconURL: member.user.avatarURL()
iconURL: await member.displayAvatarURL()
});

for (const result of results.slice(-3)) {
Expand Down
7 changes: 4 additions & 3 deletions src/database/Moderation.js
Original file line number Diff line number Diff line change
Expand Up @@ -237,14 +237,15 @@ export default class Moderation {
async log(total = null) {
const user = await this.getUser();
const moderator = await this.getModerator();
const member = await this.getMemberWrapper();

return (await this.getGuildWrapper()).log({
embeds: [
new KeyValueEmbed()
.setColor(resolveColor(this.action))
.setAuthor({
name: `Case ${this.id} | ${toTitleCase(this.action)} | ${user.displayName}`,
iconURL: user.avatarURL()
name: `Case ${this.id} | ${toTitleCase(this.action)} | ${await member.displayName}`,
iconURL: await member.displayAvatarURL()
})
.setFooter({text: user.id})
.addPair('User', userMention(user.id))
Expand Down Expand Up @@ -296,7 +297,7 @@ export default class Moderation {
* @return {Promise<MemberWrapper>}
*/
async getMemberWrapper() {
return new MemberWrapper(await this.getUser(), await GuildWrapper.fetch(this.guildid));
return new MemberWrapper(await this.getUser(), await this.getGuildWrapper());
}

/**
Expand Down
19 changes: 17 additions & 2 deletions src/discord/MemberWrapper.js
Original file line number Diff line number Diff line change
Expand Up @@ -78,13 +78,28 @@ export default class MemberWrapper {
return this.member;
}

/**
* get the member or user object
* @return {Promise<import('discord.js').GuildMember|import('discord.js').User>}
*/
async getMemberOrUser() {
return this.member ?? await this.fetchMember() ?? this.user;
}

/**
* get the display name of this member
* @return {Promise<string>}
*/
async displayName() {
if (!this.member) await this.fetchMember();
return this.member?.displayName ?? this.user.displayName;
return (await this.getMemberOrUser()).displayName;
}

/**
* get the avatar url of this member
* @return {Promise<?string>}
*/
async displayAvatarURL() {
return (await this.getMemberOrUser()).displayAvatarURL();
}

/**
Expand Down
2 changes: 1 addition & 1 deletion src/embeds/MessageDeleteEmbed.js
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ export default class MessageDeleteEmbed extends EmbedWrapper {
const author = message.member ?? message.author;
this.setAuthor({
name: `Message by ${escapeMarkdown(author.displayName)} was deleted in #${message.channel.name}`,
iconURL: author.avatarURL()
iconURL: author.displayAvatarURL()
}).setFooter({text:
`Message ID: ${message.id}\n` +
`Channel ID: ${message.channel.id}\n` +
Expand Down
4 changes: 2 additions & 2 deletions src/embeds/ModerationEmbed.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,13 @@ export default class ModerationEmbed extends KeyValueEmbed {

/**
* @param {Moderation} moderation
* @param {import('discord.js').User} user
* @param {import('discord.js').GuildMember|import('discord.js').User} user
*/
constructor(moderation, user) {
super();
this.setTitle(`Moderation #${moderation.id} | ${moderation.action.toUpperCase()} | ${user.displayName}`)
.setColor(resolveColor(moderation.action))
.setFooter({text: `${user.displayName} - ${moderation.userid}`, iconURL: user.avatarURL()})
.setFooter({text: `${user.displayName} - ${moderation.userid}`, iconURL: user.displayAvatarURL()})
.addPair('User ID', moderation.userid)
.addPair('Created at', time(moderation.created, TimestampStyles.LongDate));

Expand Down
4 changes: 2 additions & 2 deletions src/embeds/ModerationListEmbed.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,14 @@ import KeyValueEmbed from './KeyValueEmbed.js';

export default class ModerationListEmbed extends KeyValueEmbed {
/**
* @param {import('discord.js').User} user
* @param {import('discord.js').GuildMember|import('discord.js').User} user
*/
constructor(user) {
super();
this.setColor(colors.ORANGE)
.setAuthor({
name: `Moderations for ${user.displayName}`,
iconURL: user.avatarURL()
iconURL: user.displayAvatarURL()
});
}
}
2 changes: 1 addition & 1 deletion src/events/discord/GuildMemberRemoveEventListener.js
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ export default class GuildMemberRemoveEventListener extends EventListener {
const embed = new KeyValueEmbed()
.setTitle(`${member.displayName} left this server`)
.setColor(colors.RED)
.setThumbnail(member.avatarURL())
.setThumbnail(member.displayAvatarURL())
.addPair('User ID', member.user.id)
.addPair('Created Account', time(member.user.createdAt, TimestampStyles.RelativeTime))
.setTimestamp()
Expand Down
2 changes: 1 addition & 1 deletion src/events/discord/guildMemberAdd/LogJoinEventListener.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ export default class LogJoinEventListener extends GuildMemberAddEventListener {
const embed = new KeyValueEmbed()
.setTitle(`${member.displayName} joined this server`)
.setColor(colors.GREEN)
.setThumbnail(member.user.avatarURL())
.setThumbnail(member.displayAvatarURL())
.addPair('User ID', member.user.id)
.addPair('Created Account', time(member.user.createdAt, TimestampStyles.RelativeTime))
.setTimestamp()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ export default class LogMessageUpdateEventListener extends MessageUpdateEventLis
.setColor(colors.ORANGE)
.setAuthor({
name: `Message by ${escapeMarkdown(message.member.displayName)} in #${message.channel.name} was edited`,
iconURL: oldMessage.author.avatarURL()
iconURL: message.member.displayAvatarURL()
})
.setDescription(formatted.trim())
.setFooter({text: message.author.id})
Expand Down
2 changes: 1 addition & 1 deletion src/interval/UnbanInterval.js
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ export default class UnbanInterval extends Interval {
await database.query('UPDATE moderations SET active = FALSE WHERE active = TRUE AND guildid = ? AND userid = ? AND action = \'ban\'',
guild.guild.id, user.id);
await guild.log(new ErrorEmbed('Missing permissions to unban user!')
.setAuthor({name: user.displayName, iconURL: user.avatarURL()})
.setAuthor({name: user.displayName, iconURL: user.displayAvatarURL()})
.setFooter({text: user.id})
.toMessage(false));
}
Expand Down
2 changes: 1 addition & 1 deletion src/interval/UnmuteInterval.js
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ export default class UnmuteInterval extends Interval {
await database.query('UPDATE moderations SET active = FALSE WHERE active = TRUE AND guildid = ? AND userid = ? AND action = \'mute\'',
guild.guild.id, user.id);
await guild.log(new ErrorEmbed('Missing permissions to unmute user!')
.setAuthor({name: (member.member ?? user).displayName, iconURL: user.avatarURL()})
.setAuthor({name: await member.displayAvatarURL(), iconURL: await member.displayAvatarURL()})
.setFooter({text: user.id})
.toMessage(false));
}
Expand Down

0 comments on commit dbbe98d

Please sign in to comment.