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[tag_parser_temp]>:
- debug error "Load failed."
- stop
- 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]>
- flag server tag_parser_link:<yaml[tag_parser_temp].read[script.link]>
- define link <server.flag[tag_parser_link]>
- define samples "li@link/<[link].escaped>|sample_bool/true|sample_0/0|sample_1/1|sample_10/10|sample_0p5/0.5"
- define samples "<[samples]>|sample_text/Hello, world!|help/try typing 'help' to the bot!"
- define samples "<[samples]>|version/<server.version.escaped>|denizen_version/<server.denizen_version.escaped>"
- flag server tag_parser_samples:!
- flag server tag_parser_samples:|:<[samples]>
- 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> [<[name]>] in [<[origin]>] wants to process tag <[tag]>" file:<server.flag[tag_parser_logpath]>
- flag server tag_parser_result_temp:!
- run locally script_paths.tag_run_path instantly def:<[tag]>
- define result <server.flag[tag_parser_result_temp]||FAILED=FLAG_MISSING;>
- flag server tag_parser_result_temp:!
- log "<util.date.time> [<[name]>] in [<[origin]>] got result <[result]>" file:<server.flag[tag_parser_logpath]>
crunch_result:
- define final_result <empty>
- foreach <[result].split[;]>:
- if <[value].starts_with[VALID=]>:
- define final_result "<[final_result]><[value].after[VALID=].replace[&sc].with[;]><n>"
- foreach <[result].split[;]>:
- if <[value].starts_with[FAILED=ERROR/]>:
- define final_result "<[final_result]>Had error: <[value].after[FAILED=ERROR/].replace[&sc].with[;]><n>"
- else if <[value].starts_with[FAILED=EXCEPTION/]>:
- define final_result "<[final_result]>Had internal exception: <[value].after[FAILED=EXCEPTION/].replace[&sc].with[;]><n>"
- else if <[value].starts_with[FAILED=]>:
- define fail_reason <[value].after[FAILED=]>
- if <[fail_reason]> == FLAG_MISSING:
- define final_result "<[final_result]>Got no result value.<n>"
- else:
- define final_result "<[final_result]>Got failure '<[fail_reason]>'.<n>"
- if <[final_result].trim.length> == 0:
- define final_result <empty>
- if <[final_result].length> > 1000 || <[tag].length.add[<[final_result].length>]> > 1500:
- define tag "(Spam)"
- define final_result "Input too long, refused."
- if <[final_result].to_list.filter[is[==].to[<n>]].size> > 10:
- define final_result "Newline spam, refused."
tag_run_path:
- define samples <server.flag[tag_parser_samples]>|sample_player/<player>|sample_npc/<npc>
- foreach <[samples]>:
- define <[value].before[/]> <[value].after[/].unescaped>
- define help "Tell me any valid Denizen (Bukkit) tags, like <<>player.name<>> and I'll parse them for you! Alternately, tell me a valid definition name (like 'samples') and I'll tell you its contents."
- if !<[1].unescaped.contains[<<>]> && <[<[1].unescaped>].exists>:
- flag server tag_parser_result_temp:VALID=<[<[1].unescaped>].escaped.replace[;].with[&sc]>;<server.flag[tag_parser_result_temp]||>
- else:
- run instantly tag_run_task def:<[1]>
events:
on server start:
- wait 5s
- flag server tag_parser_bot_running:!
- 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 for: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! [<[name]>] in [<[origin]>] saying <context.message> and mentioning <context.mentions>"
- - if !<context.mentions.contains[<context.self>]>:
+ - if !<context.mentions.contains[<context.bot.self_user>]>:
- stop
- if !<server.flag[tag_parser_validchannels].contains[<context.channel>]>:
- define found <server.flag[tag_parser_barredchannels].find[<context.channel>]>
- if <[found]> > 0:
- discord id:tag_parser message channel:<context.channel> "Cannot parse that in this channel! <server.flag[tag_parser_barredchannelmessages].get[<[found]>]>"
- stop
- define tag <context.no_mention_message.replace[<n>].with[<&sp>].trim.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 `<[tag].unescaped.replace[`].with[']>`<&co><n>```<n><[final_result].unescaped.replace[`].with[']>```"
tag_run_task:
type: task
definitions: tag
script:
- flag server tag_parser_result_temp:VALID=<[tag].unescaped.parsed.escaped.replace[;].with[&sc]>;<server.flag[tag_parser_result_temp]||>
-
-