From 31b94718f1695c9221b6f20b0f8bc42208199138 Mon Sep 17 00:00:00 2001 From: DJj123dj <80536295+DJj123dj@users.noreply.github.com> Date: Mon, 16 Jun 2025 14:47:09 +0200 Subject: [PATCH] Repositioned + Tested Reaction Role Logs --- src/actions/reactionRole.ts | 18 +++++--- src/builders/embeds.ts | 77 ++++++++++++++++++++------------ src/builders/messages.ts | 16 +++++-- src/core/api/defaults/builder.ts | 6 +++ 4 files changed, 79 insertions(+), 38 deletions(-) diff --git a/src/actions/reactionRole.ts b/src/actions/reactionRole.ts index f947bdf..c9cff4b 100644 --- a/src/actions/reactionRole.ts +++ b/src/actions/reactionRole.ts @@ -81,13 +81,21 @@ export const registerActions = async () => { //update instance & finish event instance.result = result - - if (generalConfig.data.system.logs.enabled && generalConfig.data.system.messages.roleAdding.logs){ - const logChannel = opendiscord.posts.get("opendiscord:logs") - if (logChannel) { logChannel.send( await opendiscord.builders.messages.getSafe("opendiscord:reaction-role-logs").build(source,{guild,user,role,result}))}} - await opendiscord.events.get("afterRolesUpdated").emit([user,role]) }), + new api.ODWorker("opendiscord:discord-logs",1,async (instance,params,source,cancel) => { + const {guild,user,option,overwriteMode} = params + if (!instance.role || !instance.result) return + + //to logs + if (generalConfig.data.system.logs.enabled && (generalConfig.data.system.messages.roleAdding.logs || generalConfig.data.system.messages.roleRemoving.logs)){ + const logChannel = opendiscord.posts.get("opendiscord:logs") + if (logChannel) logChannel.send(await opendiscord.builders.messages.getSafe("opendiscord:reaction-role-logs").build(source,{guild,user,role:instance.role,result:instance.result})) + } + + //to dm + if (generalConfig.data.system.messages.roleAdding.dm || generalConfig.data.system.messages.roleRemoving.dm) await opendiscord.client.sendUserDm(user,await opendiscord.builders.messages.getSafe("opendiscord:reaction-role-dm").build(source,{guild,user,role:instance.role,result:instance.result})) + }), new api.ODWorker("opendiscord:logs",0,(instance,params,source,cancel) => { const {guild,user,option} = params opendiscord.log(user.displayName+" updated his roles!","info",[ diff --git a/src/builders/embeds.ts b/src/builders/embeds.ts index 9ff53b4..f06d209 100644 --- a/src/builders/embeds.ts +++ b/src/builders/embeds.ts @@ -1108,38 +1108,57 @@ const roleEmbeds = () => { }) ) - //REACTION ROLE LOGS - embeds.add(new api.ODEmbed("opendiscord:reaction-role-logs")) - embeds.get("opendiscord:reaction-role-logs")!.workers.add( - new api.ODWorker("opendiscord:reaction-role-logs",0,async (instance,params,source) => { - const {user,result} = params - - const newResult = result - .filter(r => r.action != null && r.role?.id) - .sort((a, b) => { - if (a.action === "added" && b.action === "removed") return -1; - if (a.action === "removed" && b.action === "added") return 1; - return 0; - }) - .map(r => { - return (r.action === "added") - ? `🟢${lang.getTranslation("params.uppercase.added")} ${discord.roleMention(r.role.id)}` - : `🔴 ${lang.getTranslation("params.uppercase.removed")} ${discord.roleMention(r.role.id)}` - }) - - let baseDescription = lang.getTranslationWithParams("actions.logs.roleLog", [discord.userMention(user.id)]) - if (!baseDescription || baseDescription === "null") { - baseDescription = `Roles updated for ${discord.userMention(user.id)}` - } - - const fullDescription = (newResult.length > 0) ? `${baseDescription}\n\n${newResult.join("\n")}` : `${baseDescription}\n\n${lang.getTranslation("actions.descriptions.rolesEmpty")}` + //REACTION ROLE DM + embeds.add(new api.ODEmbed("opendiscord:reaction-role-dm")) + embeds.get("opendiscord:reaction-role-dm").workers.add( + new api.ODWorker("opendiscord:reaction-role-dm",0,async (instance,params,source) => { + const {guild,user,role,result} = params instance.setColor(generalConfig.data.mainColor) - instance.setTitle(utilities.emojiTitle("📋", lang.getTranslation("actions.titles.roles"))) - instance.setThumbnail(user.displayAvatarURL()) - instance.setAuthor(user.displayName, user.displayAvatarURL()) + instance.setTitle(utilities.emojiTitle("🎨",lang.getTranslation("actions.titles.roles"))) + instance.setAuthor(user.displayName,user.displayAvatarURL()) instance.setTimestamp(new Date()) - instance.setDescription(fullDescription) + + const newResult = result.filter((r) => r.action != null).sort((a,b) => { + if (a.action == "added" && b.action == "removed") return -1 + else if (a.action == "removed" && b.action == "added") return 1 + else return 0 + }).map((r) => { + return (r.action == "added") ? "🟢 "+lang.getTranslation("params.uppercase.added")+" @"+r.role.name : "🔴 "+lang.getTranslation("params.uppercase.removed")+" @"+r.role.name + }) + + //TODO TRANSLATION!!! + const baseDescription = ("Your roles in our server have been updated!") + + if (newResult.length > 0) instance.setDescription(baseDescription+"\n\n"+newResult.join("\n")) + else instance.setDescription(baseDescription+"\n"+lang.getTranslation("actions.descriptions.rolesEmpty")) + }) + ) + + //REACTION ROLE LOGS + embeds.add(new api.ODEmbed("opendiscord:reaction-role-logs")) + embeds.get("opendiscord:reaction-role-logs").workers.add( + new api.ODWorker("opendiscord:reaction-role-logs",0,async (instance,params,source) => { + const {guild,user,role,result} = params + + instance.setColor(generalConfig.data.mainColor) + instance.setTitle(utilities.emojiTitle("🎨",lang.getTranslation("actions.titles.roles"))) + instance.setAuthor(user.displayName,user.displayAvatarURL()) + instance.setTimestamp(new Date()) + + const newResult = result.filter((r) => r.action != null).sort((a,b) => { + if (a.action == "added" && b.action == "removed") return -1 + else if (a.action == "removed" && b.action == "added") return 1 + else return 0 + }).map((r) => { + return (r.action == "added") ? "🟢 "+lang.getTranslation("params.uppercase.added")+" "+discord.roleMention(r.role.id) : "🔴 "+lang.getTranslation("params.uppercase.removed")+" "+discord.roleMention(r.role.id) + }) + + //TODO TRANSLATION!!! + const baseDescription = ("{0} has updated their roles!").replace("{0}",discord.userMention(user.id)) + + if (newResult.length > 0) instance.setDescription(baseDescription+"\n\n"+newResult.join("\n")) + else instance.setDescription(baseDescription+"\n"+lang.getTranslation("actions.descriptions.rolesEmpty")) }) ) } diff --git a/src/builders/messages.ts b/src/builders/messages.ts index b618b0d..a371e28 100644 --- a/src/builders/messages.ts +++ b/src/builders/messages.ts @@ -965,13 +965,21 @@ const roleMessages = () => { }) ) + //REACTION ROLE DM + messages.add(new api.ODMessage("opendiscord:reaction-role-dm")) + messages.get("opendiscord:reaction-role-dm").workers.add( + new api.ODWorker("opendiscord:reaction-role-dm",0,async (instance,params,source) => { + const {guild,user,role,result} = params + instance.addEmbed(await embeds.getSafe("opendiscord:reaction-role-dm").build(source,{guild,user,role,result})) + }) + ) + //REACTION ROLE LOGS messages.add(new api.ODMessage("opendiscord:reaction-role-logs")) - messages.get("opendiscord:reaction-role-logs")!.workers.add( - new api.ODWorker("opendiscord:reaction-role-logs",0,async(instance,params,source) => { + messages.get("opendiscord:reaction-role-logs").workers.add( + new api.ODWorker("opendiscord:reaction-role-logs",0,async (instance,params,source) => { const {guild,user,role,result} = params - const embed = await embeds.getSafe("opendiscord:reaction-role-logs").build(source,{guild,user,role,result}) - instance.addEmbed(embed) + instance.addEmbed(await embeds.getSafe("opendiscord:reaction-role-logs").build(source,{guild,user,role,result})) }) ) } diff --git a/src/core/api/defaults/builder.ts b/src/core/api/defaults/builder.ts index 6d556c3..b105a18 100644 --- a/src/core/api/defaults/builder.ts +++ b/src/core/api/defaults/builder.ts @@ -281,6 +281,9 @@ export interface ODEmbedManagerIds_Default { "opendiscord:transcript-error":{source:"slash"|"text"|"ticket-message"|"reopen-message"|"close-message"|"autoclose-message"|"autodelete"|"clear"|"other",params:{guild:discord.Guild,channel:discord.GuildTextBasedChannel,user:discord.User,ticket:ODTicket,compiler:ODTranscriptCompiler,reason:string|null},workers:"opendiscord:transcript-error"}, "opendiscord:reaction-role":{source:"panel-button"|"other",params:{guild:discord.Guild,user:discord.User,role:ODRole,result:ODRoleUpdateResult[]},workers:"opendiscord:reaction-role"}, + "opendiscord:reaction-role-dm":{source:"panel-button"|"other",params:{guild:discord.Guild,user:discord.User,role:ODRole,result:ODRoleUpdateResult[]},workers:"opendiscord:reaction-role-dm"}, + "opendiscord:reaction-role-logs":{source:"panel-button"|"other",params:{guild:discord.Guild,user:discord.User,role:ODRole,result:ODRoleUpdateResult[]},workers:"opendiscord:reaction-role-logs"}, + "opendiscord:clear-verify-message":{source:"slash"|"text"|"other",params:{guild:discord.Guild,channel:discord.GuildTextBasedChannel,user:discord.User,filter:ODTicketClearFilter,list:string[]},workers:"opendiscord:clear-verify-message"}, "opendiscord:clear-message":{source:"slash"|"text"|"other",params:{guild:discord.Guild,channel:discord.GuildTextBasedChannel,user:discord.User,filter:ODTicketClearFilter,list:string[]},workers:"opendiscord:clear-message"}, "opendiscord:clear-logs":{source:"slash"|"text"|"other",params:{guild:discord.Guild,channel:discord.GuildTextBasedChannel,user:discord.User,filter:ODTicketClearFilter,list:string[]},workers:"opendiscord:clear-logs"}, @@ -412,6 +415,9 @@ export interface ODMessageManagerIds_Default { "opendiscord:transcript-error":{source:"slash"|"text"|"ticket-message"|"reopen-message"|"close-message"|"autoclose-message"|"autodelete"|"clear"|"other",params:{guild:discord.Guild,channel:discord.GuildTextBasedChannel,user:discord.User,ticket:ODTicket,compiler:ODTranscriptCompiler,reason:string|null},workers:"opendiscord:transcript-error"}, "opendiscord:reaction-role":{source:"panel-button"|"other",params:{guild:discord.Guild,user:discord.User,role:ODRole,result:ODRoleUpdateResult[]},workers:"opendiscord:reaction-role"}, + "opendiscord:reaction-role-dm":{source:"panel-button"|"other",params:{guild:discord.Guild,user:discord.User,role:ODRole,result:ODRoleUpdateResult[]},workers:"opendiscord:reaction-role-dm"}, + "opendiscord:reaction-role-logs":{source:"panel-button"|"other",params:{guild:discord.Guild,user:discord.User,role:ODRole,result:ODRoleUpdateResult[]},workers:"opendiscord:reaction-role-logs"}, + "opendiscord:clear-verify-message":{source:"slash"|"text"|"other",params:{guild:discord.Guild,channel:discord.GuildTextBasedChannel,user:discord.User,filter:ODTicketClearFilter,list:string[]},workers:"opendiscord:clear-verify-message"}, "opendiscord:clear-message":{source:"slash"|"text"|"other",params:{guild:discord.Guild,channel:discord.GuildTextBasedChannel,user:discord.User,filter:ODTicketClearFilter,list:string[]},workers:"opendiscord:clear-message"}, "opendiscord:clear-logs":{source:"slash"|"text"|"other",params:{guild:discord.Guild,channel:discord.GuildTextBasedChannel,user:discord.User,filter:ODTicketClearFilter,list:string[]},workers:"opendiscord:clear-logs"},