-
Notifications
You must be signed in to change notification settings - Fork 13
/
DiscordMessageModifiedScriptEvent.java
129 lines (121 loc) · 5.17 KB
/
DiscordMessageModifiedScriptEvent.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
package com.denizenscript.ddiscordbot.events;
import com.denizenscript.ddiscordbot.DenizenDiscordBot;
import com.denizenscript.ddiscordbot.DiscordScriptEvent;
import com.denizenscript.ddiscordbot.objects.DiscordChannelTag;
import com.denizenscript.ddiscordbot.objects.DiscordGroupTag;
import com.denizenscript.ddiscordbot.objects.DiscordMessageTag;
import com.denizenscript.ddiscordbot.objects.DiscordUserTag;
import com.denizenscript.denizencore.objects.core.ElementTag;
import com.denizenscript.denizencore.objects.core.ListTag;
import com.denizenscript.denizencore.objects.ObjectTag;
import com.denizenscript.denizencore.tags.TagContext;
import net.dv8tion.jda.api.entities.PrivateChannel;
import net.dv8tion.jda.api.entities.User;
import net.dv8tion.jda.api.events.message.MessageUpdateEvent;
public class DiscordMessageModifiedScriptEvent extends DiscordScriptEvent {
public static DiscordMessageModifiedScriptEvent instance;
// <--[event]
// @Events
// discord message modified
//
// @Regex ^on discord message modified$
//
// @Switch for:<bot> to only process the event for a specified Discord bot.
// @Switch channel:<channel_id> to only process the event when it occurs in a specified Discord channel.
// @Switch group:<group_id> to only process the event for a specified Discord group.
//
// @Triggers when a Discord user modified a message.
//
// @Plugin dDiscordBot
//
// @Context
// <context.bot> returns the relevant Discord bot object.
// <context.channel> returns the channel.
// <context.group> returns the group.
// <context.new_message> returns the message as it now exists, as a DiscordMessageTag.
//
// -->
public MessageUpdateEvent getEvent() {
return (MessageUpdateEvent) event;
}
@Override
public boolean couldMatch(ScriptPath path) {
return path.eventLower.startsWith("discord message modified");
}
@Override
public boolean matches(ScriptPath path) {
if (!path.checkSwitch("channel", getEvent().getChannel().getId())) {
return false;
}
if (getEvent().isFromGuild() && !path.checkSwitch("group", getEvent().getGuild().getId())) {
return false;
}
return super.matches(path);
}
@Override
public ObjectTag getContext(String name) {
if (name.equals("channel")) {
return new DiscordChannelTag(botID, getEvent().getChannel());
}
else if (name.equals("group")) {
if (getEvent().isFromGuild()) {
return new DiscordGroupTag(botID, getEvent().getGuild());
}
}
else if (name.equals("new_message")) {
return new DiscordMessageTag(botID, getEvent().getMessage());
}
// TODO: Message cache
else if (name.equals("old_message_valid")) {
return new ElementTag(false);
}
else if (name.equals("old_message")) {
return null;
}
else if (name.equals("old_no_mention_message")) {
DenizenDiscordBot.oldMessageContexts.warn((TagContext) null);
return null;
}
else if (name.equals("old_formatted_message")) {
DenizenDiscordBot.oldMessageContexts.warn((TagContext) null);
return null;
}
else if (name.equals("message")) {
DenizenDiscordBot.oldMessageContexts.warn((TagContext) null);
return new ElementTag(getEvent().getMessage().getContentRaw());
}
else if (name.equals("message_id")) {
DenizenDiscordBot.oldMessageContexts.warn((TagContext) null);
return new ElementTag(getEvent().getMessage().getId());
}
else if (name.equals("no_mention_message")) {
DenizenDiscordBot.oldMessageContexts.warn((TagContext) null);
return new ElementTag(stripMentions(getEvent().getMessage().getContentRaw(), getEvent().getMessage().getMentionedUsers()));
}
else if (name.equals("formatted_message")) {
DenizenDiscordBot.oldMessageContexts.warn((TagContext) null);
return new ElementTag(getEvent().getMessage().getContentDisplay());
}
else if (name.equals("author")) {
DenizenDiscordBot.oldMessageContexts.warn((TagContext) null);
return new DiscordUserTag(botID, getEvent().getMessage().getAuthor());
}
else if (name.equals("mentions")) {
DenizenDiscordBot.oldMessageContexts.warn((TagContext) null);
ListTag list = new ListTag();
for (User user : getEvent().getMessage().getMentionedUsers()) {
list.addObject(new DiscordUserTag(botID, user));
}
return list;
}
else if (name.equals("is_direct")) {
DenizenDiscordBot.oldMessageContexts.warn((TagContext) null);
return new ElementTag(getEvent().getChannel() instanceof PrivateChannel);
}
return super.getContext(name);
}
@Override
public String getName() {
return "DiscordModifiedMessage";
}
}