diff --git a/cmds/moderation/mute.js b/cmds/moderation/mute.js index 8964605..b130442 100644 --- a/cmds/moderation/mute.js +++ b/cmds/moderation/mute.js @@ -1,7 +1,7 @@ 'use strict'; const commando = require("@iceprod/discord.js-commando"); -const { trySend, findMemberRegEx, cleanMentionID, findChannelRegEx, findRoleRegEx, defaultImageEmbed, parseDoubleDash, parseComa, getRole, defaultEventLogEmbed } = require("../../resources/functions"); +const { trySend, findMemberRegEx, cleanMentionID, findChannelRegEx, findRoleRegEx, defaultImageEmbed, parseDoubleDash, parseComa, getRole, defaultEventLogEmbed, defaultDateFormat } = require("../../resources/functions"); const { database } = require("../../database/mongo"); const col = database.collection("Guild"); const schedule = database.collection("Schedule"); @@ -113,7 +113,8 @@ module.exports = class mute extends commando.Command { } else return trySend(this.client, msg, "Args: `<[user_[mention|ID|name]]> -- [reason] -- [duration]`. Use `,` to provide multiple user. `--s` to view settings.\nExample:```js\n" + `${msg.guild.commandPrefix + this.name} 580703409934696449, @Shasha#1234, ur mom,#6969,^yuck\\s(ur)?\\s.{5}#\\d+69$--69y69mo69w420d420h420m420s -- Saying "joe"\`\`\``); if (targetUsers.length > 0) { - let muted = [], cant = [], already = [], infractionN = []; + let muted = [], cant = [], already = [], infractionN = [], + infractionToDoc = createInfraction(msg, targetUsers, "mute", reason); for (const EXEC of targetUsers) { try { @@ -127,14 +128,12 @@ module.exports = class mute extends commando.Command { const emb = defaultEventLogEmbed(msg.guild); emb.setTitle("You have been muted") .setDescription("**Reason**\n" + reason) - .addField("At", duration.invoked.toFormat(fn.DT_PRINT_FORMAT), true) + .addField("At", defaultDateFormat(duration.invoked), true) .addField("For", duration.duration?.strings.join(" ") || "Indefinite", true) - .addField("Until", duration.until?.toFormat(fn.DT_PRINT_FORMAT) || "Never", true); + .addField("Until", duration.until ? defaultDateFormat(duration.until) : "Never", true); EXEC.createDM().then(r => trySend(msg.client, r, emb)); } - let infractionToDoc = createInfraction(msg, targetUsers, "mute", reason); - infractionToDoc.executed = muted; infractionToDoc.aborted = already; infractionToDoc.failed = cant; @@ -163,10 +162,9 @@ module.exports = class mute extends commando.Command { if (mutedArr.length > 0) mutedStr += `and ${mutedArr.length} more...`; emb.setDescription("**Reason**\n" + reason) .addField("Muted", mutedStr || "`[NONE]`") - .addField("At", duration.invoked.toFormat(fn.DT_PRINT_FORMAT), true) + .addField("At", defaultDateFormat(duration.invoked), true) .addField("For", duration.duration?.strings.join(" ") || "Indefinite", true) - .addField("Until", duration.until?.toFormat(fn.DT_PRINT_FORMAT) || "Never", true) - .addField("Reason", reason); + .addField("Until", duration.until ? defaultDateFormat(duration.until) : "Never", true); return trySend(msg.client, msg, { content: resultMsg, embed: emb }); } diff --git a/cmds/profile/profile.js b/cmds/profile/profile.js index a4b5efd..b66c046 100644 --- a/cmds/profile/profile.js +++ b/cmds/profile/profile.js @@ -3,7 +3,7 @@ const commando = require("@iceprod/discord.js-commando"); const { MessageEmbed, User, Message } = require("discord.js"); const { DateTime, Interval } = require("luxon"); -const { errLog, trySend, getUser, defaultImageEmbed, splitOnLength } = require("../../resources/functions"); +const { errLog, trySend, getUser, defaultImageEmbed, splitOnLength, defaultDateFormat } = require("../../resources/functions"); const getColor = require("../../resources/getColor"); const { DT_PRINT_FORMAT, intervalToDuration } = require("../moderation/src/duration"); @@ -32,12 +32,12 @@ module.exports = class profile extends commando.Command { emb .setThumbnail(TM.displayAvatarURL({ format: "png", size: 4096, dynamic: true })) .addField("ID", TM.id) - .addField("Registered", ""); + .addField("Registered", defaultDateFormat(TM.createdAt)); if (TM.description) emb.setDescription(TM.description); if (MEM) { const RI = MEM.roles.cache.sort((a, b) => b.position - a.position).map(r => r.id).slice(0, -1), RFS = splitOnLength(RI, 1010, ">, <@&"), INT = Interval.fromDateTimes(DateTime.fromJSDate(MEM.joinedAt), DateTime.now()); - emb.addField("Joined", "\n(${intervalToDuration(INT).strings.join(" ")} ago)`) + emb.addField("Joined", defaultDateFormat(MEM.joinedAt) + `\n(${intervalToDuration(INT).strings.join(" ")} ago)`) .addField("Nick", `\`${MEM.displayName}\``); if (RFS[0]?.length > 0) { for (const p of RFS) { diff --git a/resources/eventsLogger/guildMemberAdd.js b/resources/eventsLogger/guildMemberAdd.js index c93511d..45447e3 100644 --- a/resources/eventsLogger/guildMemberAdd.js +++ b/resources/eventsLogger/guildMemberAdd.js @@ -2,7 +2,7 @@ const { GuildMember } = require("discord.js"), { DateTime } = require("luxon"), - { getChannel, defaultEventLogEmbed, trySend } = require("../functions"), + { getChannel, defaultEventLogEmbed, trySend, defaultDateFormat } = require("../functions"), getColor = require("../getColor"), { DT_PRINT_FORMAT } = require("../../cmds/moderation/src/duration"); @@ -20,7 +20,7 @@ module.exports = (member) => { .setTitle("`" + member.user.tag + "` joined") .setThumbnail(member.user.displayAvatarURL({ format: "png", size: 4096, dynamic: true })) .setColor(getColor("cyan")) - .addField("Registered", "", true) + .addField("Registered", defaultDateFormat(member.user.createdAt), true) .setDescription(`<@!${member.id}> (${member.id}) just joined.\nWe have ${member.guild.memberCount} total members now.`); return trySend(member.client, log, emb); } diff --git a/resources/eventsLogger/guildMemberRemove.js b/resources/eventsLogger/guildMemberRemove.js index 98132ba..8c9fd58 100644 --- a/resources/eventsLogger/guildMemberRemove.js +++ b/resources/eventsLogger/guildMemberRemove.js @@ -3,7 +3,7 @@ const { GuildMember } = require("discord.js"); const { DateTime, Interval, Settings } = require("luxon"); const { DT_PRINT_FORMAT, intervalToDuration } = require("../../cmds/moderation/src/duration"); -const { getChannel, defaultEventLogEmbed, trySend, splitOnLength } = require("../functions"); +const { getChannel, defaultEventLogEmbed, trySend, splitOnLength, defaultDateFormat } = require("../functions"); const getColor = require("../getColor"); Settings.defaultZone = "utc"; @@ -24,8 +24,8 @@ module.exports = (member) => { .setTitle("`" + member.user.tag + "` left") .setThumbnail(member.user.displayAvatarURL({ format: "png", size: 4096, dynamic: true })) .setColor(getColor("yellow")) - .addField("Registered", "", true) - .addField("Joined", "\n(${intervalToDuration(INT).strings.join(" ")} ago)`, true) + .addField("Registered", defaultDateFormat(member.user.createdAt), true) + .addField("Joined", defaultDateFormat(member.joinedAt) + `\n(${intervalToDuration(INT).strings.join(" ")} ago)`, true) .addField("Nick", "`" + member.displayName + "`") .setDescription(`<@!${member.id}> (${member.id}) just left.\nWe have ${member.guild.memberCount} total members now.`); for (const U of RU) { diff --git a/resources/functions.js b/resources/functions.js index afa7e36..2711b66 100644 --- a/resources/functions.js +++ b/resources/functions.js @@ -6,6 +6,7 @@ const { timestampAt } = require('./debug'); const getColor = require('./getColor'); const { randomColors } = require("../config.json"); const { CommandoMessage, CommandoClient } = require('@iceprod/discord.js-commando'); +const { DateTime } = require('luxon'); /** * Log an error. Second or third argument is required @@ -519,6 +520,18 @@ function getRole(guild, key) { function wait(ms) { return new Promise(r => setTimeout(() => r(), ms)) } +/** + * @param {Date|DateTime|number|string} date - Number | String must be in miliseconds + * @returns {string} - Discord format ready to use + */ +function defaultDateFormat(date) { + let use; + if ((date instanceof Date) || date instanceof DateTime) use = date.valueOf(); + else if (typeof date === "string") use = parseInt(date, 10); + else use = date; + return ""; +} + const defaultSplitMessage = { maxLength: 2000, char: ",", append: ',```', prepend: '```js\n' }; module.exports = { cleanMentionID, defaultEventLogEmbed, @@ -526,7 +539,7 @@ module.exports = { findMemberRegEx, findChannelRegEx, findRoleRegEx, getChannelMessage, errLog, execCB, ranLog, noPerm, getUTCComparison, - trySend, tryDelete, tryReact, + trySend, tryDelete, tryReact, defaultDateFormat, adCheck, defaultImageEmbed, getChannel, splitOnLength, parseComa, parseDoubleDash, getMember, parseDash, reValidURL, getUser, getRole, wait, defaultSplitMessage diff --git a/resources/structures.js b/resources/structures.js index 818b466..a3a72f4 100644 --- a/resources/structures.js +++ b/resources/structures.js @@ -231,7 +231,7 @@ Structures.extend("User", u => { const MEM = guild.member(this); if (MEM) { if (moderator.roles.highest.position < MEM.roles.highest.position) throw new Error("You can't mute someone with higher position than you <:nekokekLife:852865942530949160>"); - await MEM.unmute(reason) + await MEM.unmute(reason); } return guild.removeTimedPunishment(this.id, "mute"); } @@ -350,18 +350,11 @@ Structures.extend("GuildMember", u => { try { if (ROLES?.length > 0) await this.roles.remove(ROLES, reason); await this.roles.add(this.DB.muteRole, reason); - const ret = this.user.pushMutedIn(this.guild.id, { - state: true, - duration: data.duration, - infraction: data.infraction - }); this.setDb(this.DB); - this.user.setDb(this.user.DB); - return ret; + return true; } catch (e) { if (this.DB.takenRoles?.length > 0) await this.roles.add(this.DB.takenRoles, reason).catch(() => { }); if (this.DB.muteRole) await this.roles.remove(this.DB.muteRole, reason).catch(() => { }); - this.user.removeMutedIn(this.guild.id); console.log("clear takenRoles M"); this.DB.takenRoles = []; this.DB.muteRole = undefined; @@ -371,17 +364,14 @@ Structures.extend("GuildMember", u => { async unmute(reason) { if (!this.DB) await this.dbLoad(); - if (!this.user.DB) await this.user.dbLoad(); try { if (this.DB.takenRoles.length > 0) await this.roles.add(this.DB.takenRoles, reason); if (this.DB.muteRole) await this.roles.remove(this.DB.muteRole, reason); - const ret = this.user.removeMutedIn(this.guild.id); console.log("clear takenRoles UM"); this.DB.takenRoles = []; this.DB.muteRole = undefined; this.setDb(this.DB); - this.user.setDb(this.user.DB) - return ret; + return true; } catch (e) { throw e; }