aboutsummaryrefslogtreecommitdiff
path: root/174bg/discord-bot/source/utilities/messageMembersByRoleName.js
diff options
context:
space:
mode:
Diffstat (limited to '174bg/discord-bot/source/utilities/messageMembersByRoleName.js')
-rw-r--r--174bg/discord-bot/source/utilities/messageMembersByRoleName.js30
1 files changed, 30 insertions, 0 deletions
diff --git a/174bg/discord-bot/source/utilities/messageMembersByRoleName.js b/174bg/discord-bot/source/utilities/messageMembersByRoleName.js
new file mode 100644
index 0000000..0730c32
--- /dev/null
+++ b/174bg/discord-bot/source/utilities/messageMembersByRoleName.js
@@ -0,0 +1,30 @@
+/**
+ * Messages all members of a specific role in a Discord guild by the role's name.
+ *
+ * @param {Guild} guild The Discord guild.
+ * @param {string} roleName The name of the role.
+ * @param {string} message The message to send.
+ *
+ * @returns {Promise<{successes: Array, failures: Array}>} The results of the messaging attempts.
+ */
+export default async function messageMembersByRoleName(guild, roleName, message) {
+ const role = guild.roles.cache.find(
+ (role) => role.name.toLowerCase() === roleName.toLowerCase(),
+ );
+
+ if (!role) throw new Error(`Role "${roleName}" not found.`);
+
+ let successes = [];
+ let failures = [];
+
+ for (const member of role.members.values()) {
+ try {
+ let result = await member.send(message);
+ successes.push(result);
+ } catch (error) {
+ failures.push({ member, error });
+ }
+ }
+
+ return { successes, failures };
+}