Paste #47828: I overdevelop things sometimes

Date: 2018/06/11 17:43:45 UTC-07:00
Type: Denizen Script

View Raw Paste Download This Paste
Copy Link


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[']>```"