-
Notifications
You must be signed in to change notification settings - Fork 13
/
DiscordMessageReceivedScriptEvent.java
119 lines (110 loc) · 5 KB
/
DiscordMessageReceivedScriptEvent.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
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.MessageReceivedEvent;
public class DiscordMessageReceivedScriptEvent extends DiscordScriptEvent {
public static DiscordMessageReceivedScriptEvent instance;
// <--[event]
// @Events
// discord message received
//
// @Regex ^on discord message received$
//
// @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.
// @Switch message:<message> to only process the event if the message matches some matcher text, like 'message:*hello*' to match any message that contains the word 'hello'.
//
// @Triggers when a Discord bot receives a message.
//
// @Plugin dDiscordBot
//
// @Group Discord
//
// @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 received, as a DiscordMessageTag.
//
// -->
public MessageReceivedEvent getEvent() {
return (MessageReceivedEvent) event;
}
@Override
public boolean couldMatch(ScriptPath path) {
return path.eventLower.startsWith("discord message received");
}
@Override
public boolean matches(ScriptPath path) {
if (!path.checkSwitch("channel", getEvent().getChannel().getId())) {
return false;
}
if (path.switches.containsKey("group")) {
if (!getEvent().isFromGuild()) {
return false;
}
if (!path.checkSwitch("group", getEvent().getGuild().getId())) {
return false;
}
}
if (!runGenericSwitchCheck(path, "message", getEvent().getMessage().getContentRaw())) {
return false;
}
return super.matches(path);
}
@Override
public ObjectTag getContext(String name) {
switch (name) {
case "channel":
return new DiscordChannelTag(botID, getEvent().getChannel());
case "group":
if (getEvent().isFromGuild()) {
return new DiscordGroupTag(botID, getEvent().getGuild());
}
break;
case "new_message":
return new DiscordMessageTag(botID, getEvent().getMessage());
case "message":
DenizenDiscordBot.oldMessageContexts.warn((TagContext) null);
return new ElementTag(getEvent().getMessage().getContentRaw());
case "message_id":
DenizenDiscordBot.oldMessageContexts.warn((TagContext) null);
return new ElementTag(getEvent().getMessage().getId());
case "no_mention_message":
DenizenDiscordBot.oldMessageContexts.warn((TagContext) null);
return new ElementTag(DiscordMessageTag.stripMentions(getEvent().getMessage().getContentRaw(), getEvent().getMessage().getMentionedUsers()));
case "formatted_message":
DenizenDiscordBot.oldMessageContexts.warn((TagContext) null);
return new ElementTag(getEvent().getMessage().getContentDisplay());
case "author":
DenizenDiscordBot.oldMessageContexts.warn((TagContext) null);
return new DiscordUserTag(botID, getEvent().getMessage().getAuthor());
case "mentions":
DenizenDiscordBot.oldMessageContexts.warn((TagContext) null);
ListTag list = new ListTag();
for (User user : getEvent().getMessage().getMentionedUsers()) {
list.addObject(new DiscordUserTag(botID, user));
}
return list;
case "is_direct":
DenizenDiscordBot.oldMessageContexts.warn((TagContext) null);
return new ElementTag(getEvent().getChannel() instanceof PrivateChannel);
}
return super.getContext(name);
}
@Override
public String getName() {
return "DiscordMessageReceived";
}
}