[{"id":"41af8772fd66b4d6","type":"subflow","name":"Frases aleatórias","info":"# Gerador de frases aleatórias\n\nEste nó sorteia aleatóriamente uma frase, dentro de um banco de frases.\n\n - Para ver as categorias de frases disponíveis, [clique aqui](https://github.com/mendoncart/alexa-frases-aleatorias/tree/main/frases).\n - Para ver as sub-categorias, abra e veja o conteúdo do arquivo de frases da categoria desejada.\n\n**Para mais detalhes sobre o uso, [visite a página do projeto](https://github.com/mendoncart/alexa-frases-aleatorias)**.\n\n---\n## Instruções de uso\n\n* Configure o nó da seguinte forma:\n * Preencha a categoria, usando o nome da [categoria](https://github.com/mendoncart/alexa-frases-aleatorias/tree/main/frases) desejada.\n * Se desejar remover sub-categorias, basta preencher a sub-categoria indesejada. Se houver mais de uma separar por vírgulas.\n* Após a excução do nó, este fornecerá a frase sorteada em *msg.payload*.\n\n---\n**Créditos:**\n- Ruytter Mendonça\n- [Rafael Meirim](https://t.me/rafaelmeirim)\n- [Lucas Eduardo](https://www.lucaseduardo.io/)\n","category":"","in":[{"x":160,"y":220,"wires":[{"id":"be4685aab0221739"}]}],"out":[{"x":1360,"y":340,"wires":[{"id":"e4f3d5f75ca6358a","port":0},{"id":"fdc8f77ef6437f4b","port":0}]}],"env":[{"name":"categoria","type":"str","value":"","ui":{"icon":"font-awesome/fa-asterisk","label":{"en-US":"Categoria"},"type":"input","opts":{"types":["str"]}}},{"name":"not_subcat","type":"str","value":"","ui":{"icon":"font-awesome/fa-ban","label":{"en-US":"Remover Sub-Categoria"},"type":"input","opts":{"types":["str"]}}}],"meta":{"module":"Frases Aleatórias","version":"1.0.0","desc":"Sorteia uma frase aleatoriamente de um banco de frases."},"color":"#3FADB5","icon":"node-red/alert.svg","status":{"x":1160,"y":420,"wires":[{"id":"8a1f93561921270d","port":0},{"id":"0e1d2aa89fafcc5d","port":0}]}},{"id":"2c8f0ef52fd8aa80","type":"http request","z":"41af8772fd66b4d6","name":"Pega lista de frases","method":"GET","ret":"obj","paytoqs":"ignore","url":"","tls":"","persist":false,"proxy":"","authType":"","senderr":false,"x":390,"y":340,"wires":[["89c9ad0c11ea2a3b"]]},{"id":"be4685aab0221739","type":"change","z":"41af8772fd66b4d6","name":"Define URL / File Name","rules":[{"t":"set","p":"url","pt":"msg","to":"\"https://raw.githubusercontent.com/mendoncart/alexa-frases-aleatorias/main/frases/\" & $env('categoria')","tot":"jsonata"},{"t":"set","p":"filename","pt":"msg","to":"\"/frases_aleatorias/\" & $env('categoria') & \".txt\"","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":350,"y":220,"wires":[["bf850e5822e6887f"]]},{"id":"89c9ad0c11ea2a3b","type":"function","z":"41af8772fd66b4d6","name":"Filtra e sorteia a frase","func":"const messages = msg.payload\nconst messageHistory = String(msg.cache)\nconst removeCategory = env.get('not_subcat')\n\nconst randomIntFromInterval = (min, max) => {\n return Math.floor(Math.random() * (max - min + 1) + min)\n}\n\nconst handleCategory = (categoryToBeRemoved, listCategory) => {\n const categoryToBeRemovedToArray = categoryToBeRemoved.split(', ').map(item => item.trim())\n const categoriesKey = Object.keys(listCategory)\n const filterCategories = categoriesKey.filter(category => !categoryToBeRemovedToArray.includes(category))\n\n var NewArr = []\n\n filterCategories.forEach(function(nome, i) {\n NewArr = NewArr.concat(listCategory[filterCategories[i]])\n })\n \n return NewArr\n}\n\nconst filterMessage = (messagesHistory, listMessages) => {\n if (!!messagesHistory) {\n const convertMessagesInArray = messagesHistory.split(/[\\n\\t]/).map((item) => item.trim())\n convertMessagesInArray.pop()\n const filterMessages = listMessages.filter(message => !convertMessagesInArray.includes(message))\n\n return filterMessages\n }\n\n return listMessages\n}\n\nconst listMessage = handleCategory(removeCategory, messages)\nconst filteredMessages = filterMessage(messageHistory, listMessage)\nconst indexChosenMessage = randomIntFromInterval(0, filteredMessages.length - 1)\n\nif(filteredMessages[indexChosenMessage].length < 2){\n msg.payload = 'Erro! Verifique se a categoria ' + env.get('categoria').toUpperCase() + ' realmente existe no repositório github, e se o nome está idêntico.'\n msg.remaining = ''\n node.status({fill:\"red\",shape:\"ring\",text:\"Dados não retornados\"})\n } \n else {\n msg.payload = filteredMessages[indexChosenMessage]\n msg.remaining = filteredMessages.length-1\n msg.status = filteredMessages[indexChosenMessage] + ' Restam: ' + (filteredMessages.length-1)\n node.status({fill:\"yellow\",shape:\"ring\",text:\"Sorteando\"})\n }\n\nreturn msg","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":640,"y":340,"wires":[["4e5473129b1a11ec","e0c337143022667e"]]},{"id":"e4f3d5f75ca6358a","type":"file","z":"41af8772fd66b4d6","name":"Salva repostas já obtidas (Inclusão)","filename":"","appendNewline":true,"createDir":true,"overwriteFile":"false","encoding":"none","x":1140,"y":320,"wires":[[]]},{"id":"bf850e5822e6887f","type":"file in","z":"41af8772fd66b4d6","name":"Lê respostas anteriores","filename":"","format":"utf8","chunk":false,"sendError":false,"encoding":"none","allProps":false,"x":630,"y":220,"wires":[["c8f357a8bbdd4eb8"]]},{"id":"c8f357a8bbdd4eb8","type":"change","z":"41af8772fd66b4d6","name":"Muda propriedade da msg","rules":[{"t":"set","p":"cache","pt":"msg","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":910,"y":220,"wires":[["2c8f0ef52fd8aa80"]]},{"id":"88cf688a0e3a7f2f","type":"catch","z":"41af8772fd66b4d6","name":"Se não houver histórico","scope":["bf850e5822e6887f"],"uncaught":false,"x":640,"y":180,"wires":[["c8f357a8bbdd4eb8"]]},{"id":"fdc8f77ef6437f4b","type":"file","z":"41af8772fd66b4d6","name":"Salva repostas já obtidas (Reset)","filename":"","appendNewline":true,"createDir":true,"overwriteFile":"true","encoding":"none","x":1140,"y":360,"wires":[[]]},{"id":"4e5473129b1a11ec","type":"switch","z":"41af8772fd66b4d6","name":"Resetar?","property":"remaining","propertyType":"msg","rules":[{"t":"gt","v":"0","vt":"num"},{"t":"else"}],"checkall":"true","repair":false,"outputs":2,"x":880,"y":340,"wires":[["e4f3d5f75ca6358a"],["fdc8f77ef6437f4b"]]},{"id":"0e1d2aa89fafcc5d","type":"change","z":"41af8772fd66b4d6","name":"Status","rules":[{"t":"set","p":"payload","pt":"msg","to":"status","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":1010,"y":420,"wires":[[]]},{"id":"8a1f93561921270d","type":"status","z":"41af8772fd66b4d6","name":"","scope":["89c9ad0c11ea2a3b","0e1d2aa89fafcc5d","2c8f0ef52fd8aa80"],"x":1000,"y":460,"wires":[[]]},{"id":"e0c337143022667e","type":"delay","z":"41af8772fd66b4d6","name":"","pauseType":"delay","timeout":"250","timeoutUnits":"milliseconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"allowrate":false,"outputs":1,"x":870,"y":420,"wires":[["0e1d2aa89fafcc5d"]]},{"id":"06ef5bd9c4b61f88","type":"api-call-service","z":"081e7c71fb82bb9b","name":"TTS","server":"2fbf36d0.ab572a","version":5,"debugenabled":false,"domain":"notify","service":"alexa_media","areaId":[],"deviceId":[],"entityId":[],"data":"","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":2070,"y":1640,"wires":[[]]},{"id":"11bc5ce5ecf38d00","type":"subflow:41af8772fd66b4d6","z":"081e7c71fb82bb9b","name":"","env":[{"name":"categoria","value":"boanoite","type":"str"},{"name":"not_subcat","value":"Normais-Singular, Engraçadas-Singular","type":"str"},{"name":"text","value":"aaabbbabababa {{payload}}","type":"str"}],"x":1630,"y":1520,"wires":[["383ae7f4dd9ced55","75541fede8165d76"]]},{"id":"270073a5eae838e9","type":"inject","z":"081e7c71fb82bb9b","name":"","props":[{"p":"payload"},{"p":"player_state","v":"playing","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":1440,"y":1520,"wires":[["11bc5ce5ecf38d00"]]},{"id":"75541fede8165d76","type":"template","z":"081e7c71fb82bb9b","name":"formata svc","field":"payload","fieldType":"msg","format":"handlebars","syntax":"mustache","template":"{\n \"data\":{\n \"message\": \"Alarme ativado. {{{payload}}}\",\n \"target\": \"media_player.sala\",\n \"data\": {\n \"type\": \"tts\"\n }\n }\n}","output":"json","x":1890,"y":1640,"wires":[["06ef5bd9c4b61f88"]],"icon":"node-red/alert.svg"},{"id":"383ae7f4dd9ced55","type":"template","z":"081e7c71fb82bb9b","name":"formata msg","field":"payload","fieldType":"msg","format":"handlebars","syntax":"mustache","template":"Alarme ativado. {{payload}}","output":"str","x":1890,"y":1460,"wires":[["d6b3353dc27e9f9c"]],"icon":"node-red/alert.svg"},{"id":"d6b3353dc27e9f9c","type":"debug","z":"081e7c71fb82bb9b","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":2090,"y":1460,"wires":[]},{"id":"1d16a448717388fc","type":"comment","z":"081e7c71fb82bb9b","name":"Ex Opção 1","info":"Vai gerar um payload com a frase desejada + frase aleatória. Editar o texto desejado no nó **formata msg**","x":1890,"y":1420,"wires":[]},{"id":"44f03408ea0b8007","type":"comment","z":"081e7c71fb82bb9b","name":"Ex Opção 2","info":"Vai vai fazer sua echo falar a frase desejada + frase aleatória. Editar o texto desejado e a entidade da echo no nó **formata svc**","x":1890,"y":1600,"wires":[]},{"id":"25a7361fed7ea758","type":"comment","z":"081e7c71fb82bb9b","name":"Leia-me","info":"Edite/preencha as configs do nó Frases Aleatórias.\nOs itens com * são obrigatórios.\n\nEste flow já vem com 2 opções de exemplo para que você edite de acordo com o seu gosto.\n\nMais detalhes sobre o uso podem ser lidos em:\nhttps://github.com/mendoncart/alexa-frases-aleatorias","x":1600,"y":1480,"wires":[]}]