2020-10-01 01:43:38 +03:00
|
|
|
import { guildEventListener } from "knub";
|
2020-08-10 02:22:39 +03:00
|
|
|
import { AutomodContext, AutomodPluginType } from "../types";
|
|
|
|
import { RecentActionType } from "../constants";
|
|
|
|
import { runAutomod } from "../functions/runAutomod";
|
|
|
|
import isEqual from "lodash.isequal";
|
|
|
|
import diff from "lodash.difference";
|
|
|
|
|
2020-10-01 01:43:38 +03:00
|
|
|
export const RunAutomodOnMemberUpdate = guildEventListener<AutomodPluginType>()(
|
2020-08-10 02:22:39 +03:00
|
|
|
"guildMemberUpdate",
|
|
|
|
({ pluginData, args: { member, oldMember } }) => {
|
|
|
|
if (!oldMember) return;
|
|
|
|
|
|
|
|
if (isEqual(oldMember.roles, member.roles)) return;
|
|
|
|
|
|
|
|
const addedRoles = diff(member.roles, oldMember.roles);
|
|
|
|
const removedRoles = diff(oldMember.roles, member.roles);
|
|
|
|
|
|
|
|
if (addedRoles.length || removedRoles.length) {
|
|
|
|
const context: AutomodContext = {
|
|
|
|
timestamp: Date.now(),
|
|
|
|
user: member.user,
|
|
|
|
member,
|
|
|
|
rolesChanged: {
|
|
|
|
added: addedRoles,
|
|
|
|
removed: removedRoles,
|
|
|
|
},
|
|
|
|
};
|
|
|
|
|
|
|
|
pluginData.state.queue.add(() => {
|
|
|
|
runAutomod(pluginData, context);
|
|
|
|
});
|
|
|
|
}
|
|
|
|
},
|
|
|
|
);
|