Date: 2020/03/25 23:45:33 UTC-07:00
Type: Denizen Script
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
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
# ███████████████████████████████████████████████████████████
# ██ [ dDiscord Chat Relay ] ██
# ██ [ ] ██
# ██ [ The config for this file should be ] ██
# ██ [ SEPARATE from this script; you do ] ██
# ██ [ NOT want to keep your bot token in ram, ] ██
# ██ [ keep it separate. Anyone with your ] ██
# ██ [ token has full access to your bot. ] ██
# ██ [ ] ██
# ██ [ Step one: Create a discord bot. If you ] ██
# ██ [ need further instructions, you should ] ██
# ██ [ seek a guide online. ] ██
# ██ [ ] ██
# ██ [ You need to obtain # ID's: ] ██
# ██ [ * Your Bot Token. Can be obtained here: ] ██
# ██ [ https://discordapp.com/developers/applications/ ] ██
# ██ [ * Your Discord Channel ID's. ] ██
# ██ [ Right click the channel > Copy ID ] ██
# ██ [ ] ██
# ██ [ Create a directory in your denizen folder: ] ██
# ██ [ * /plugins/denizen/Data/ ] ██
# ██ [ ] ██
# ██ [ Create the external file inside: ] ██
# ██ [ * Discord_Chat_Relay_Config.yml ] ██
# ██ [ ] ██
# ██ [ Paste the bot's information ] ██
# ██ [ ] ██
# ███████████████████████████████████████████████████████████
# ███ [ Discord chat format ] ███
DiscordRelayChatFormat:
type: format
debug: false
format: "<&3><&l>[<&r><&b>Discord<&3><&l>]<&r><&f><text>"
# ███ [ DiscordBot | Discord Control ] ███
Discord_Relay_Chat_Handler:
type: world
debug: true
events:
# ███ [ Server Startup ] ███
on server start:
- wait 5s
- run Discord_Chat_Relay_Config instantly context:-a
- wait 1s
- discord id:discord_chat_relay message channel:<server.flag[discord.channel.mainchat]> "<&co>white_check_mark<&co> **Server has started**"
# ███ [ Ingame Chat Relay ] ███
on player chats:
- discord id:discord_chat_relay channel:<server.flag[discord.channel.mainchat]> message "**<player.groups.get[1]||[Player]>** **<player.display_name.strip_color>**: <context.message.strip_color>"
#$ Don't have Permission Groups? Remove: <player.groups.get[1]>
# ███ [ Discord Chat Relay ] ███
on discord message received for:discord_chat_relay:
#@ Check if the author is the bot, or if the message received is a webhook.
- if <context.author||Webhook> == <context.bot.self_user>:
- stop
#@ Check if the channel is being sent in the mainchat, if the message is blank
- if <context.channel.id> == <server.flag[discord.channel.mainchat]> && <context.message> != "":
- announce format:DiscordRelayChatFormat " | <context.author.nickname[<context.group>]||<context.author.name>><&r> <&8>»<&f> <context.message.parse_color>"
# ███ [ Discord Player Events ] ███
on player first logs in:
- discord id:discord_chat_relay message channel:<server.flag[discord.channel.mainchat]> "<&co>confetti_ball<&co> **<player.name> has logged in for the first time. Welcome them!** <&co>confetti_ball<&co>"
on player joins:
- discord id:discord_chat_relay message channel:<server.flag[discord.channel.mainchat]> "<&co>heavy_plus_sign<&co> **<player.display_name.strip_color> has logged in.**"
on player quits:
- discord id:discord_chat_relay message channel:<server.flag[discord.channel.mainchat]> "<&co>heavy_multiplication_x<&co> **<player.display_name.strip_color> has left the server.**"
on player dies:
- discord id:discord_chat_relay message channel:<server.flag[discord.channel.mainchat]> "<&co>skull<&co> **<context.message>**"
on shutdown:
- discord id:discord_chat_relay message channel:<server.flag[discord.channel.mainchat]> "<&co>octagonal_sign<&co> **Server is restarting - Please wait**"
- flag server discord.botstatus:!
# ███ [ Discord Player Events | Addons ] ███
on votifier vote:
- discord id:discord_chat_relay message channel:<server.flag[discord.channel.mainchat]> "<&co>diamond_shape_with_a_dot_inside<&co> **<context.username>** voted!"
# ███ [ Discord Channel Command/Update ] ███
Discord_Link_And_Configuration_Command:
type: command
name: discord
debug: false
description: Sends you the discord join link
permission: discord.command
permission message: "You do not have permission"
usage: /discord
aliases:
- disc
tab complete:
- if <player.is_op>:
- define Args <list[reload|message]>
- define messageArgs <server.flag[discord.channels]||>
#@ /discord█
- if <context.args.size> == 0:
- determine <[Args]>
#@ /discord█Arg
- else if <context.args.size> == 1 && !<context.raw_args.ends_with[<&sp>]>:
- determine <[Args].filter[starts_with[<context.args.get[1]>]]>
- if <context.args.get[1]> != Message:
- stop
#@ /discord█Arg█
- if <context.args.size> == 1 && <context.raw_args.ends_with[<&sp>]>:
- determine <[messageArgs]>
#@ /discord█Arg█Arg
- else if <context.args.size> == 2 && !<context.raw_args.ends_with[<&sp>]>:
- determine <[messageArgs].filter[starts_with[<context.args.get[2]>]]>
syntax message:
#@ Message Hint event - inserts /discord
- define Hover0 "<&a>Click to enter<&2>:<&nl><&6>/<&e>Discord"
- define Text0 "<&6>/<&e>discord"
- define Hint0 "discord"
- define ClickEvent0 <&hover[<[Hover0]>]><&click[/<[Hint0]>].type[suggest_command]><[Text0]><&end_click><&end_hover>
#@ Check if Player is Operator for Command Syntax
- if <player.is_op>:
#@ Message Hint event - inserts /discord reload
- define Hover1 "<&a>Click to enter<&2>:<&nl><&6>/<&e>Discord Reload"
- define Text1 "<&6>(<&e>reload<&6>)"
- define Hint1 "discord reload"
- define ClickEvent1 <&hover[<[Hover1]>]><&click[/<[Hint1]>].type[suggest_command]><[Text1]><&end_click><&end_hover>
#@ Message Hint event - inserts /discord reload -a
- define Hover2 "<&a>Click to enter Reload All command!"
- define Text2 "<&6>(<&e>-a<&6>)"
- define Hint2 "discord reload -a"
- define ClickEvent2 <&hover[<[Hover2]>]><&click[/<[Hint2]>].type[suggest_command]><[Text2]><&end_click><&end_hover>
#@ Message Hint event - inserts /discord message
- define Hover3 "<&a>Click to enter Message Channel command!"
- define Text3 "<&6>(<&e>Message ChannelName<&6>)"
- define Hint3 "discord message "
- define ClickEvent3 <&hover[<[Hover3]>]><&click[/<[Hint3]>].type[suggest_command]><[Text3]><&end_click><&end_hover>
#@ Narrate Syntaxes
- narrate "<&e>Syntax<&co> <[ClickEvent0]> <[ClickEvent1]> <[ClickEvent2]>/<[ClickEvent3]><&nl><&3><script.yaml_key[description]> as well as reloads the discord configuration if specified to reload, optionally includes reloading the discord bot token (-a)."
- else:
- narrate "<&e>Syntax<&co> <[ClickEvent0]><&nl><&3><script.yaml_key[description]>"
script:
#@ Check args; "/discord" or "/discord link"
- define Arg1 <context.args.get[1]||null>
- if <context.args.size> == 0 || <[Arg1]> == "link":
- if !<server.has_flag[discord.link]>:
- narrate "<&c>No link has been set up! Contact your server administrator to have them fix this!"
- stop
- define Hover "<&a>Click to follow the discord link!<&nl><&b><&n><server.flag[discord.link]>"
- define Text " <&a>Link<&2>: <&b><&n><server.flag[discord.link]>"
- define URL "<server.flag[discord.link]>"
- narrate format:DiscordRelayChatFormat "<&hover[<[Hover]>]><&click[<[URL]>].type[OPEN_URL]><[Text]><&end_click><&end_hover>"
- stop
#@ Check args; "/discord ARG" requires operator
- else if <context.args.size> > 1 && !<player.is_op>:
- inject locally "syntax message" instantly
- stop
#@ Check args; "/discord reload -a" or "/discord reload"
- else if <[Arg1]> == reload:
- if <list[-a|null].contains[<context.args.get[2]||null>]>:
- run Discord_Chat_Relay_Config instantly context:<context.args.get[2]||null>
- stop
- else:
- inject locally "syntax message" instantly
#@ Check args; "/discord message"
- else if <[Arg1]> == "message":
#@ Check args; did the player only specify "/discord message"?
- if <context.args.size> == 1:
- narrate "<&c>You must specify a channel to message!"
- stop
#@ Check args; did the player only specify "/discord message channelname"?
- else if <context.args.size> == 2:
#@ Does the channel even exist?
- if <server.flag[discord.channels].contains[<context.args.get[2]>]>:
#@ Okay, the channel exists but you still typed it wrong
- narrate "<&c>You must specify a message to send!"
- else:
#@ Not only did you type a bad channel, you didn't even type a message
- narrate "<&6>[<&e><context.args.get[2]><&6>]<&c> is an invalid channel, and you must specify a message to send!"
- stop
- else:
#@ Check if the bot running
- if <server.has_flag[discord.botstatus]>:
- if <server.flag[discord.botstatus]> == running:
#@ Check if the channel exists
- define Channel <context.args.get[2]>
- if <server.flag[discord.channels].contains[<[Channel]>]>:
#@ Send!
- discord id:discord_chat_relay message channel:<server.flag[discord.channel.<[Channel]>]> <context.args.remove[1|2].separated_by[<&sp>].parse_color.strip_color>
- else:
- narrate "<&6>[<&e><[Channel]><&6>]<&c> is an invalid channel!"
- else:
- narrate "<&c>Bot is not running!"
- stop
- else:
- narrate "<&c>Bot is not running!"
- stop
- else:
- narrate "<&6>[<&e><[Arg1]><&6>]<&c> is an invalid Discord Command!"
- stop
# ███ [ DiscordBot | Configuration ] ███
Discord_Chat_Relay_Config:
type: task
debug: false
definitions: Arg2
script:
#@ Check if the Configuration file exists
- if !<server.list_files[data].contains[Discord_Chat_Relay_Config.yml]>:
- announce to_console "<&2>ERROR: CONFIGURATION FILE NOT FOUND.<&nl>For Support, ask in the <&e>Denizen Discord<&6>:<&nl> <&b>https://discord.gg/Q6pZGSR"
- stop
#@ Load the Configuration file
- yaml load:data/Discord_Chat_Relay_Config.yml id:discord_chat_relay_temp
- flag server discord.key:loaded
#@ Check if doing a full reload
- if <[Arg2]> == "-a":
#@ Check if the bot is running; Disconnect if it is
- if <server.flag[discord.botstatus]||false> == "running":
- flag server discord:!
- discord id:discord_chat_relay disconnect
#@ Connect the bot
- discord id:discord_chat_relay connect code:<yaml[discord_chat_relay_temp].read[bots.discord.botToken]>
- flag server discord.botstatus:running
#@ Flag the link and channels
- flag server discord.link:<yaml[discord_chat_relay_temp].read[bots.discord.discordlink]>
- flag server discord.channels:!
- define Channels <yaml[discord_Chat_relay_temp].list_keys[bots.discord.channel]>
- flag server discord.channels:|:<[Channels]>
- foreach <[Channels].exclude[mainchat]> as:Channel:
- flag server discord.channel.<[Channel]>:<yaml[discord_chat_relay_temp].read[bots.discord.channel.<[Channel]>]>
- flag server discord.channel.mainchat:<yaml[discord_chat_relay_temp].read[bots.discord.channel.mainchat]>
- yaml unload id:discord_chat_relay_temp
- flag server discord.key:!