|
| 1 | +## Perguntas Frequentes |
| 2 | + |
| 3 | +Este documento de perguntas frequentes tem o objetivo de ajudar as pessoas com informações básicas. |
| 4 | + |
| 5 | +## Como ocultar erros? |
| 6 | + |
| 7 | +Para ocultar erros, você pode adicionar a opção `hideErrors: true` nas configurações ao criar o bot. Também é possível usar os seguintes eventos: |
| 8 | + |
| 9 | +```js |
| 10 | +client.on('error', () => {}) |
| 11 | +client.on('end', () => {}) |
| 12 | +``` |
| 13 | + |
| 14 | +## Meu evento de chat não está sendo emitido em um servidor personalizado. Como posso resolver isso? |
| 15 | + |
| 16 | +Alguns servidores Spigot, em particular certos plugins, utilizam formatos personalizados de chat. Nesse caso, é necessário analisar esses formatos com expressões regulares personalizadas. Recomenda-se ler e modificar o arquivo [chat_parsing.js](https://github.com/PrismarineJS/mineflayer/blob/master/examples/chat_parsing.js) para que funcione com o plugin de chat específico do seu servidor. Você também pode consultar http://prismarinejs.github.io/mineflayer/#/tutorial?id=custom-chat para obter mais informações. |
| 17 | + |
| 18 | +## Como posso coletar informações de um plugin de chat personalizado? |
| 19 | + |
| 20 | +A maioria dos servidores de Minecraft possui plugins que enviam mensagens ao chat quando ocorrem eventos. Se a informação enviada for simples, você pode utilizar a solução mencionada anteriormente. No entanto, se as mensagens contêm muita informação em um único bloco de texto, outra opção é utilizar o evento `"messagestr"`, que permite analisar as mensagens de forma mais fácil. |
| 21 | + |
| 22 | +**Exemplo:** |
| 23 | + |
| 24 | +Suponha que a mensagem seja semelhante a esta: |
| 25 | + |
| 26 | +``` |
| 27 | +(!) U9G ganhou o /jackpot e recebeu |
| 28 | +$26,418,402,450! Eles compraram 2,350,000 (76.32%) bilhetes |
| 29 | +de um total de 3,079,185 bilhetes vendidos! |
| 30 | +``` |
| 31 | + |
| 32 | +```js |
| 33 | +const regex = { |
| 34 | + first: /\(!\) (.+) ganhou o \/jackpot e recebeu +/, |
| 35 | + second: /\$(.+)! Eles compraram (.+) \((.+)%\) bilhetes do total de /, |
| 36 | + third: /(.+) bilhetes vendidos!/ |
| 37 | +} |
| 38 | + |
| 39 | +let jackpot = {} |
| 40 | +bot.on('messagestr', msg => { |
| 41 | + if (regex.first.test(msg)) { |
| 42 | + const username = msg.match(regex.first)[1] |
| 43 | + jackpot.username = username |
| 44 | + } else if (regex.second.test(msg)) { |
| 45 | + const [, moneyWon, boughtTickets, winPercent] = msg.match(regex.second) |
| 46 | + jackpot.moneyWon = parseInt(moneyWon.replace(/,/g, '')) |
| 47 | + jackpot.boughtTickets = parseInt(boughtTickets.replace(/,/g, '')) |
| 48 | + jackpot.winPercent = parseFloat(winPercent) |
| 49 | + } else if (regex.third.test(msg)) { |
| 50 | + const totalTickets = msg.match(regex.third)[1] |
| 51 | + jackpot.totalTickets = parseInt(totalTickets.replace(/,/g, '')) |
| 52 | + onDone(jackpot) |
| 53 | + jackpot = {} |
| 54 | + } |
| 55 | +}) |
| 56 | +``` |
| 57 | + |
| 58 | +## Como posso enviar um comando? |
| 59 | + |
| 60 | +Usando `bot.chat()`. |
| 61 | + |
| 62 | +**Exmemplo:** |
| 63 | +```js |
| 64 | +bot.chat('/give @p diamond') |
| 65 | +``` |
| 66 | + |
| 67 | +### É possível criar vários bots e controlá-los separadamente? |
| 68 | + |
| 69 | +Você pode criar bots diferentes com a função `createBot` e executar ações diferentes para cada um deles. Dê uma olhada no arquivo `multiple.js` para mais informações. |
| 70 | + |
| 71 | +### Como faço para o bot largar todo o seu inventário? |
| 72 | + |
| 73 | +Você pode usar a função `bot.inventory.items()` para obter uma matriz dos itens no inventário do bot. Você pode criar uma função recursiva para largar cada item usando `bot.toss()`. Veja um exemplo [aqui](https://gist.github.com/dada513/3d88f772be4224b40f9e5d1787bd63e9). |
| 74 | + |
| 75 | +### Como vejo os pacotes que foram enviados/recebidos? |
| 76 | + |
| 77 | +Você pode ativar o modo de depuração. Para obter mais informações, consulte [este link](https://github.com/PrismarineJS/mineflayer/blob/master/docs/br/README_BR.md#depuraci%C3%B3n). |
| 78 | + |
| 79 | +### Quero evitar desconexões devido a lag no servidor, como posso fazer isso? |
| 80 | + |
| 81 | +Uma maneira de evitar desconexões devido à latência no servidor é aumentar o valor na opção `checkTimeoutInterval` (por exemplo, `300*1000`, que representa 5 minutos, em vez do valor padrão, que é 30 segundos). Se mesmo assim você continuar sendo desconectado do servidor, você pode se reconectar automaticamente usando este exemplo [aqui](https://github.com/PrismarineJS/mineflayer/blob/master/examples/reconnector.js). |
| 82 | + |
| 83 | +### Como posso obter a descrição/texto de um item? |
| 84 | + |
| 85 | +Você pode usar a propriedade `item.nbt`. É recomendável utilizar a biblioteca `prismarine-nbt`. O método `nbt.simplify()` pode ser útil para simplificar a obtenção da descrição de um item. |
| 86 | + |
| 87 | +**Exemplo:** |
| 88 | +```js |
| 89 | +function getLore (item) { |
| 90 | + let message = '' |
| 91 | + if (item.nbt == null) return message |
| 92 | + |
| 93 | + const nbt = require('prismarine-nbt') |
| 94 | + const ChatMessage = require('prismarine-chat')(bot.version) |
| 95 | + |
| 96 | + const data = nbt.simplify(item.nbt) |
| 97 | + const display = data.display |
| 98 | + if (display == null) return message |
| 99 | + |
| 100 | + const lore = display.Lore |
| 101 | + if (lore == null) return message |
| 102 | + for (const line of lore) { |
| 103 | + message += new ChatMessage(line).toString() |
| 104 | + message += '\n' |
| 105 | + } |
| 106 | + |
| 107 | + return message |
| 108 | +} |
| 109 | +``` |
| 110 | + |
| 111 | +### Como posso enviar uma mensagem do console para o servidor? |
| 112 | + |
| 113 | +Você pode usar uma biblioteca como `repl` para ler o que você escreve no console e usar `bot.chat()` para enviá-lo para o servidor. Você pode encontrar um exemplo [aqui](https://github.com/PrismarineJS/mineflayer/blob/master/examples/repl.js). |
| 114 | + |
| 115 | +### Ao criar um plugin, como posso especificar outro plugin como dependência? |
| 116 | + |
| 117 | +Na função `inject()` do seu plugin, você pode executar a função `bot.loadPlugin()` para carregar esse plugin. Se o plugin já estiver carregado anteriormente, nada acontecerá. |
| 118 | + |
| 119 | +Nota: a ordem em que os plugins são carregados é dinâmica; você nunca deve chamar outro plugin em sua função `inject()`. |
| 120 | + |
| 121 | +### Como posso usar um proxy SOCKS5? |
| 122 | + |
| 123 | +Nas opções de `mineflayer.createBot(opções)`, remova o seu `host` das opções e coloque as informações necessárias nas variáveis `PROXY_IP`, `PROXY_PORT`, `PROXY_USERNAME`, `PROXY_PASSWORD`, `MC_SERVER_IP` e `MC_SERVER_PORT`. Em seguida, adicione o seguinte ao seu objeto de opções: |
| 124 | + |
| 125 | +```js |
| 126 | +connect: (client) => { |
| 127 | + socks.createConnection({ |
| 128 | + proxy: { |
| 129 | + host: PROXY_IP, |
| 130 | + port: PROXY_PORT, |
| 131 | + type: 5, |
| 132 | + userId: PROXY_USERNAME, |
| 133 | + password: PROXY_PASSWORD |
| 134 | + }, |
| 135 | + command: 'connect', |
| 136 | + destination: { |
| 137 | + host: MC_SERVER_IP, |
| 138 | + port: MC_SERVER_PORT |
| 139 | + } |
| 140 | + }, (err, info) => { |
| 141 | + if (err) { |
| 142 | + console.log(err) |
| 143 | + return |
| 144 | + } |
| 145 | + client.setSocket(info.socket) |
| 146 | + client.emit('connect') |
| 147 | + }) |
| 148 | +} |
| 149 | +``` |
| 150 | + |
| 151 | +# Erros Comuns |
| 152 | + |
| 153 | +### `UnhandledPromiseRejectionWarning: Error: Failed to read asymmetric key` |
| 154 | + |
| 155 | +Isso ocorre quando você fornece uma versão incorreta ao mineflayer, ou o mineflayer detecta a versão errada. |
| 156 | + |
| 157 | +### `TypeError: Cannot read property '?' of undefined` |
| 158 | + |
| 159 | +Você pode estar tentando acessar uma propriedade do bot que ainda não existe; tente acessar a propriedade após o evento `spawn`. |
| 160 | + |
| 161 | +### `SyntaxError: Unexpected token '?'` |
| 162 | + |
| 163 | +Atualize a versão do seu Node.js. |
| 164 | + |
| 165 | +### O bot não consegue quebrar/colocar blocos ou abrir baús |
| 166 | + |
| 167 | +Verifique se a proteção do spawn não está impedindo o bot de realizar a ação. |
| 168 | + |
| 169 | +Esta documentação não é oficial. Para as informações mais atualizadas, consulte a documentação original: [FAQ](../FAQ.md). |
0 commit comments