-
Notifications
You must be signed in to change notification settings - Fork 13
/
DiscordUserRoleChangeScriptEvent.java
138 lines (124 loc) · 4.61 KB
/
DiscordUserRoleChangeScriptEvent.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
package com.denizenscript.ddiscordbot.events;
import com.denizenscript.ddiscordbot.DiscordScriptEvent;
import discord4j.core.event.domain.guild.MemberUpdateEvent;
import discord4j.core.object.util.Snowflake;
import net.aufdemrand.denizencore.objects.Element;
import net.aufdemrand.denizencore.objects.dList;
import net.aufdemrand.denizencore.objects.dObject;
import net.aufdemrand.denizencore.scripts.containers.ScriptContainer;
import net.aufdemrand.denizencore.utilities.CoreUtilities;
import java.util.ArrayList;
public class DiscordUserRoleChangeScriptEvent extends DiscordScriptEvent {
public static DiscordUserRoleChangeScriptEvent instance;
// <--[event]
// @Events
// discord user role changes
//
// @Regex ^on discord role changes$
// @Switch for <bot>
//
// @Triggers when a Discord user's roles change.
//
// @Plugin dDiscordBot
//
// @Context
// <context.bot> returns the Denizen ID of the bot.
// <context.self> returns the bots own Discord user ID.
// <context.group> returns the group ID.
// <context.group_name> returns the group name.
// <context.user_id> returns the user's internal ID.
// <context.user_name> returns the user's name.
// <context.old_roles_ids> returns a list of the user's previous role set.
// <context.new_role_ids> returns a list of the user's new role set.
// <context.added_role_ids> returns a list of the user's added role set.
// <context.removed_role_ids> returns a list of the user's removed role set.
// -->
public MemberUpdateEvent getEvent() {
return (MemberUpdateEvent) event;
}
@Override
public boolean couldMatch(ScriptContainer scriptContainer, String s) {
return CoreUtilities.toLowerCase(s).startsWith("discord user role changes");
}
public ArrayList<Long> getOldRoles() {
ArrayList<Long> oldRoles = new ArrayList<>();
for (Snowflake role : getEvent().getOld().get().getRoleIds()) {
oldRoles.add(role.asLong());
}
return oldRoles;
}
public ArrayList<Long> getNewRoles() {
ArrayList<Long> newRoles = new ArrayList<>();
for (Snowflake role : getEvent().getCurrentRoles()) {
newRoles.add(role.asLong());
}
return newRoles;
}
public dList getAddedRoles() {
dList addedRoles = new dList();
ArrayList<Long> oldRoles = getOldRoles();
for (Long role : getNewRoles()) {
if (!oldRoles.contains(role)) {
addedRoles.addObject(new Element(role));
}
}
return addedRoles;
}
public dList getRemovedRoles() {
dList removedRoles = new dList();
ArrayList<Long> newRoles = getNewRoles();
for (Long role : getOldRoles()) {
if (!newRoles.contains(role)) {
removedRoles.addObject(new Element(role));
}
}
return removedRoles;
}
@Override
public dObject getContext(String name) {
if (name.equals("group")) {
return new Element(getEvent().getGuildId().asLong());
}
else if (name.equals("group_name")) {
return new Element(getEvent().getGuild().block().getName());
}
else if (name.equals("user_id")) {
return new Element(getEvent().getMember().block().getId().asLong());
}
else if (name.equals("user_name")) {
return new Element(getEvent().getMember().block().getUsername());
}
if (name.equals("old_role_ids")) {
dList oldRoles = new dList();
for (Long role : getOldRoles()) {
oldRoles.addObject(new Element(role));
}
return oldRoles;
}
else if (name.equals("new_role_ids")) {
dList newRoles = new dList();
for (Long role : getNewRoles()) {
newRoles.addObject(new Element(role));
}
return newRoles;
}
else if (name.equals("added_role_ids")) {
return getAddedRoles();
}
else if (name.equals("removed_role_ids")) {
return getRemovedRoles();
}
return super.getContext(name);
}
@Override
public String getName() {
return "DiscordUserRoleChange";
}
@Override
public boolean isProperEvent() {
if (!getEvent().getOld().isPresent()) {
return false;
}
return getAddedRoles().size() > 0 || getRemovedRoles().size() > 0;
}
}