diff --git a/module/sockets/_index.mjs b/module/sockets/_index.mjs index e866530..bcb2b5e 100644 --- a/module/sockets/_index.mjs +++ b/module/sockets/_index.mjs @@ -1,8 +1,10 @@ import { localizer } from "../utils/Localizer.mjs"; import { Logger } from "../utils/Logger.mjs"; +import { notify } from "./notify.mjs"; import { updateSands } from "./updateSands.mjs"; const events = { + notify, updateSands, }; diff --git a/module/sockets/notify.mjs b/module/sockets/notify.mjs new file mode 100644 index 0000000..072e5af --- /dev/null +++ b/module/sockets/notify.mjs @@ -0,0 +1,56 @@ +import { localizer } from "../utils/Localizer.mjs"; + +export function notify(payload) { + // #region Payload Validity + const { + message, + users = [], + type = `info`, + permanent = false, + } = payload; + + if (!message) { + ui.notifications.error(localizer( + `RipCrypt.notifs.error.malformed-socket-payload`, + { + event: `notify`, + details: `A message must be provided`, + }, + )); + return; + }; + + if (users && !Array.isArray(users)) { + ui.notifications.error(localizer( + `RipCrypt.notifs.error.malformed-socket-payload`, + { + event: `notify`, + details: `"users" must be an array of user IDs`, + }, + )); + return; + }; + + if (![`info`, `error`, `success`].includes(type)) { + ui.notifications.error(localizer( + `RipCrypt.notifs.error.malformed-socket-payload`, + { + event: `notify`, + details: `An invalid notification type was provided.`, + }, + )); + return; + } + // #endregion Payload Validity + + // Act + if (users.length === 0 || users.includes(game.user.id)) { + ui.notifications[type]?.( + localizer(message), + { + console: false, + permanent, + }, + ); + }; +};