Date: 2018/06/11 17:43:45 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
tag_parser_bot:
type: world
debug: false
script_paths:
stop_bot:
- if <server.has_flag[tag_parser_bot_running]> {
- discord id:tag_parser disconnect
- flag server tag_parser_bot_running:!
}
start_bot:
- inject locally script_paths.stop_bot
- yaml load:data/tag_parser.yml id:tag_parser_temp
- if !<yaml.list.contains_text[tag_parser_temp]> {
- debug error "Load failed."
- queue clear
}
- flag server tag_parser_logpath:<yaml[tag_parser_temp].read[bot.discord.log_path]>
- flag server tag_parser_validchannels:!
- flag server tag_parser_validchannels:|:<yaml[tag_parser_temp].read[bot.discord.valid_channels]>
- flag server tag_parser_barredchannels:!
- flag server tag_parser_barredchannels:|:<yaml[tag_parser_temp].read[bot.discord.barred_channels]>
- flag server tag_parser_barredchannelmessages:!
- flag server tag_parser_barredchannelmessages:|:<yaml[tag_parser_temp].read[bot.discord.barred_channel_messages]>
- discord id:tag_parser connect code:<yaml[tag_parser_temp].read[bot.discord.token]>
- yaml unload id:tag_parser_temp
- flag server tag_parser_bot_running
process_tag:
- log "<util.date.time> [<def[name]>] in [<def[origin]>] wants to process tag <def[tag]>" file:<server.flag[tag_parser_logpath]>
- flag server tag_parser_result_temp:!
- run locally script_paths.tag_run_path instantly def:<def[tag]>
- define result <server.flag[tag_parser_result_temp]||FAILED=FLAG_MISSING;>
- flag server tag_parser_result_temp:!
- log "<util.date.time> [<def[name]>] in [<def[origin]>] got result <def[result]>" file:<server.flag[tag_parser_logpath]>
crunch_result:
- define final_result ""
- foreach <def[result].split[;]> {
- if <def[value].starts_with[VALID=]> {
- define final_result "<def[final_result]><def[value].after[VALID=].replace[&sc].with[;].unescaped><n>"
}
}
- foreach <def[result].split[;]> {
- if <def[value].starts_with[FAILED=ERROR/]> {
- define final_result "<def[final_result]>Had error: <def[value].after[FAILED=ERROR/].replace[&sc].with[;].unescaped><n>"
}
else if <def[value].starts_with[FAILED=EXCEPTION/]> {
- define final_result "<def[final_result]>Had internal exception: <def[value].after[FAILED=EXCEPTION/].replace[&sc].with[;].unescaped><n>"
}
else if <def[value].starts_with[FAILED=]> {
- define fail_reason <def[value].after[FAILED=]>
- if <def[fail_reason]> == FLAG_MISSING {
- define final_result "<def[final_result]>Got no result value.<n>"
}
else {
- define final_result "<def[final_result]>Got failure '<def[fail_reason]>'.<n>"
}
}
}
- if <def[final_result].trim.length> == 0 {
- define final_result ""
}
- if <def[final_result].length> > 1000 || <def[tag].length.add[<def[final_result]>]> > 1500 {
- define tag "(Spam)"
- define final_result "Input too long, refused."
}
- if <def[final_result].to_list.filter[is[==].to[<n>]].size> > 10 {
- define final_result "Newline spam, refused."
}
tag_run_path:
- flag server tag_parser_result_temp:VALID=<parse.escaped.replace[;].with[&sc]:<def[1].unescaped>>;<server.flag[tag_parser_result_temp]||>
events:
on server start:
- wait 5s
- inject locally script_paths.start_bot
on script generates error:
- flag server tag_parser_result_temp:FAILED=ERROR/<context.message.escaped.replace[;].with[&sc]>;<server.flag[tag_parser_result_temp]||>
on script generates exception:
- flag server tag_parser_result_temp:FAILED=EXCEPTION/<context.type.escaped.replace[;].with[&sc]>-<context.message.escaped.replace[;].with[&sc]>;<server.flag[tag_parser_result_temp]||>
on discord message received by tag_parser:
- flag server tag_parser_bot_running
- if <yaml.list.contains_text[tag_parser_temp]> {
- yaml unload id:tag_parser_temp
}
- define name <context.author_id>/<context.author_name.escaped>
- define origin <context.group>/<context.channel>/<context.group_name.escaped>/<context.channel_name.escaped>
- announce to_console "Discord chatter! [<def[name]>] in [<def[origin]>] saying <context.message>"
- if !<server.flag[tag_parser_validchannels].as_list.contains[<context.channel>]> {
- define found <server.flag[tag_parser_barredchannels].as_list.find[<context.channel>]>
- if <def[found]> > 0 {
- discord id:tag_parser message channel:<context.channel> "Cannot parse that in this channel! <server.flag[tag_parser_barredchannelmessages].as_list.get[<def[found]>]>"
}
- queue clear
}
- if !<context.mentions.contains[<context.self>]> {
- queue clear
}
- define tag <context.no_mention_message.replace[<n>].with[<&sp>].escaped>
- inject locally script_paths.process_tag player:<server.list_players.get[1]> npc:<server.list_npcs.get[1]>
- inject locally script_paths.crunch_result
- discord id:tag_parser message channel:<context.channel> "Tag parse results for `<def[tag].unescaped.replace[`].with[']>`<&co><n>```<n><def[final_result].unescaped.replace[`].with[']>```"