Monitore sua conta na palma da mão.
Problema
Após tanto sofrer com contas que assim que eu saia de casa paravam de upar, decidi criar um projeto que traz receber mensagens em tempo real. Ou a caráter do tempo que achar necessário via mensagens de Telegram (ou quaisquer locais que utilizem API).Problema
Objetivo
Conseguir acompanhar tem tempo real minhas skills de qualquer local, até mesmo do trabalho.Solução
Desenvolver um projeto que integre tanto o Mod macro e um script que processa e envia para um grupo do Telegram, após conversas com o @lomexicano me deu algumas dicas de qual a lógica a ser realizada in-game.Vamos ao que interessa e como funciona?
- Utilizar o mod Macro para coletar a informação das skills, selecionar e dar output em um arquivo.
- Um script em PowerShell que faz o processamento das informações, como encontrar, processar, enviar e por fim fazer um controle do arquivo a cada 20 execuções apaga o conteúdo.
Resultado
Como Usar
Etapa 01 - Instalando os macros dentro do Game.
Como Usar
- Você deve criar no seu modpack os macros abaixo
- $$<telegram_star.txt>
- Adicione um novo arquivo onChat, $$<starTelegramOnChat.txt> lembre-se de não mexer no existente, caso exista -> (Como ter mais de um? Clique aqui)
- Após isto adicione nos arquivos criados os códigos disponíveis abaixo.
- LEMBRE-SE DE ALTERAR NA MACRO $$<telegram_star.txt> o /inspect <nomePlayer> por /stats ou inserir nome do jogador desejado.
$${
if(@telegram_star);
unset(@telegram_star);
ACHIEVEMENTGET("Telegram Star OFF",diamonds);
log(" ");
log("&e&l[&r&fTELEGRAM &2STAR] &c&lOFF&f&r!");
log(" ");
else;
ACHIEVEMENTGET("Telegram STAR ON",diamonds);
CLEARCHAT;
//echo("/stats");
set(@telegram_star;
log(" ");
log("&e&l[&r&fTELEGRAM &2STAR] &a&lON&f&r!");
log(" ");
do;
wait(10);
echo("/inspect <nomePlayer>");
while(@telegram_star == true);
endif;
//Fim da verificação da variavel Setada;
}$$
if(@telegram_star);
unset(@telegram_star);
ACHIEVEMENTGET("Telegram Star OFF",diamonds);
log(" ");
log("&e&l[&r&fTELEGRAM &2STAR] &c&lOFF&f&r!");
log(" ");
else;
ACHIEVEMENTGET("Telegram STAR ON",diamonds);
CLEARCHAT;
//echo("/stats");
set(@telegram_star;
log(" ");
log("&e&l[&r&fTELEGRAM &2STAR] &a&lON&f&r!");
log(" ");
do;
wait(10);
echo("/inspect <nomePlayer>");
while(@telegram_star == true);
endif;
//Fim da verificação da variavel Setada;
}$$
Código macro OnChat mencionada acima.
$${
if(@telegram_star);
ifmatches(%CHATCLEAN%,"Escava.ao: (.*)");
MATCH(%CHATCLEAN%,"Escava.ao: (.*) XP.(.*)/(.*).",{&lvl,&xp1,&xp2});
logto("arquivo.txt","[%DATE%][%TIME%] ==================================");
logto("arquivo.txt","[%DATE%][%TIME%] -=SKILLS DE TRABALHO-=");
logto("arquivo.txt","[%DATE%][%TIME%] Escavacao: %&lvl% XP(%&xp1% / %&xp2%)");
endif;
ifmatches(%CHATCLEAN%,"Pescador: (.*)");
MATCH(%CHATCLEAN%,"Pescador: (.*) XP.(.*)/(.*).",{&lvl,&xp1,&xp2});
logto("arquivo.txt","[%DATE%][%TIME%] Pescador: %&lvl% XP(%&xp1% / %&xp2%)");
endif;
ifmatches(%CHATCLEAN%,"Herbalismo: (.*)");
MATCH(%CHATCLEAN%,"Herbalismo: (.*) XP.(.*)/(.*).",{&lvl,&xp1,&xp2});
logto("arquivo.txt","[%DATE%][%TIME%] Herbalismo: %&lvl% XP(%&xp1% / %&xp2%)");
endif;
ifmatches(%CHATCLEAN%,"Minera..o: (.*)");
MATCH(%CHATCLEAN%,"Minera..o: (.*) XP.(.*)/(.*).",{&lvl,&xp1,&xp2});
logto("arquivo.txt","[%DATE%][%TIME%] Mineracao: %&lvl% XP(%&xp1% / %&xp2%)");
endif;
ifmatches(%CHATCLEAN%,"Lenhador: (.*)");
MATCH(%CHATCLEAN%,"Lenhador: (.*) XP.(.*)/(.*).",{&lvl,&xp1,&xp2});
logto("arquivo.txt","[%DATE%][%TIME%] Lenhador: %&lvl% XP(%&xp1% / %&xp2%)");
endif;
ifmatches(%CHATCLEAN%,"Machado: (.*)");
MATCH(%CHATCLEAN%,"Machado: (.*) XP.(.*)/(.*).",{&lvl,&xp1,&xp2});
logto("arquivo.txt","[%DATE%][%TIME%] -=SKILLS DE COMBATE-=");
logto("arquivo.txt","[%DATE%][%TIME%] Machado: %&lvl% XP(%&xp1% / %&xp2%)");
endif;
ifmatches(%CHATCLEAN%,"Arqueiro: (.*)");
MATCH(%CHATCLEAN%,"Arqueiro: (.*) XP.(.*)/(.*).",{&lvl,&xp1,&xp2});
logto("arquivo.txt","[%DATE%][%TIME%] Arqueiro: %&lvl% XP(%&xp1% / %&xp2%)");
endif;
ifmatches(%CHATCLEAN%,"Espadas: (.*)");
MATCH(%CHATCLEAN%,"Espadas: (.*) XP.(.*)/(.*).",{&lvl,&xp1,&xp2});
logto("arquivo.txt","[%DATE%][%TIME%] Espadas: %&lvl% XP(%&xp1% / %&xp2%)");
endif;
ifmatches(%CHATCLEAN%,"Acrobacia: (.*)");
MATCH(%CHATCLEAN%,"Acrobacia: (.*) XP.(.*)/(.*).",{&lvl,&xp1,&xp2});
logto("arquivo.txt","[%DATE%][%TIME%] -=MISC SKILLS-=");
logto("arquivo.txt","[%DATE%][%TIME%] Acrobacia: %&lvl% XP(%&xp1% / %&xp2%)");
endif;
ifmatches(%CHATCLEAN%,"Repara..o: (.*)");
MATCH(%CHATCLEAN%,"Repara..o: (.*) XP.(.*)/(.*).",{&lvl,&xp1,&xp2});
logto("arquivo.txt","[%DATE%][%TIME%] Reparacao: %&lvl% XP(%&xp1% / %&xp2%)");
endif;
endif;//Fim da macro só executa se a outra macro estiver On.
}$$
if(@telegram_star);
ifmatches(%CHATCLEAN%,"Escava.ao: (.*)");
MATCH(%CHATCLEAN%,"Escava.ao: (.*) XP.(.*)/(.*).",{&lvl,&xp1,&xp2});
logto("arquivo.txt","[%DATE%][%TIME%] ==================================");
logto("arquivo.txt","[%DATE%][%TIME%] -=SKILLS DE TRABALHO-=");
logto("arquivo.txt","[%DATE%][%TIME%] Escavacao: %&lvl% XP(%&xp1% / %&xp2%)");
endif;
ifmatches(%CHATCLEAN%,"Pescador: (.*)");
MATCH(%CHATCLEAN%,"Pescador: (.*) XP.(.*)/(.*).",{&lvl,&xp1,&xp2});
logto("arquivo.txt","[%DATE%][%TIME%] Pescador: %&lvl% XP(%&xp1% / %&xp2%)");
endif;
ifmatches(%CHATCLEAN%,"Herbalismo: (.*)");
MATCH(%CHATCLEAN%,"Herbalismo: (.*) XP.(.*)/(.*).",{&lvl,&xp1,&xp2});
logto("arquivo.txt","[%DATE%][%TIME%] Herbalismo: %&lvl% XP(%&xp1% / %&xp2%)");
endif;
ifmatches(%CHATCLEAN%,"Minera..o: (.*)");
MATCH(%CHATCLEAN%,"Minera..o: (.*) XP.(.*)/(.*).",{&lvl,&xp1,&xp2});
logto("arquivo.txt","[%DATE%][%TIME%] Mineracao: %&lvl% XP(%&xp1% / %&xp2%)");
endif;
ifmatches(%CHATCLEAN%,"Lenhador: (.*)");
MATCH(%CHATCLEAN%,"Lenhador: (.*) XP.(.*)/(.*).",{&lvl,&xp1,&xp2});
logto("arquivo.txt","[%DATE%][%TIME%] Lenhador: %&lvl% XP(%&xp1% / %&xp2%)");
endif;
ifmatches(%CHATCLEAN%,"Machado: (.*)");
MATCH(%CHATCLEAN%,"Machado: (.*) XP.(.*)/(.*).",{&lvl,&xp1,&xp2});
logto("arquivo.txt","[%DATE%][%TIME%] -=SKILLS DE COMBATE-=");
logto("arquivo.txt","[%DATE%][%TIME%] Machado: %&lvl% XP(%&xp1% / %&xp2%)");
endif;
ifmatches(%CHATCLEAN%,"Arqueiro: (.*)");
MATCH(%CHATCLEAN%,"Arqueiro: (.*) XP.(.*)/(.*).",{&lvl,&xp1,&xp2});
logto("arquivo.txt","[%DATE%][%TIME%] Arqueiro: %&lvl% XP(%&xp1% / %&xp2%)");
endif;
ifmatches(%CHATCLEAN%,"Espadas: (.*)");
MATCH(%CHATCLEAN%,"Espadas: (.*) XP.(.*)/(.*).",{&lvl,&xp1,&xp2});
logto("arquivo.txt","[%DATE%][%TIME%] Espadas: %&lvl% XP(%&xp1% / %&xp2%)");
endif;
ifmatches(%CHATCLEAN%,"Acrobacia: (.*)");
MATCH(%CHATCLEAN%,"Acrobacia: (.*) XP.(.*)/(.*).",{&lvl,&xp1,&xp2});
logto("arquivo.txt","[%DATE%][%TIME%] -=MISC SKILLS-=");
logto("arquivo.txt","[%DATE%][%TIME%] Acrobacia: %&lvl% XP(%&xp1% / %&xp2%)");
endif;
ifmatches(%CHATCLEAN%,"Repara..o: (.*)");
MATCH(%CHATCLEAN%,"Repara..o: (.*) XP.(.*)/(.*).",{&lvl,&xp1,&xp2});
logto("arquivo.txt","[%DATE%][%TIME%] Reparacao: %&lvl% XP(%&xp1% / %&xp2%)");
endif;
endif;//Fim da macro só executa se a outra macro estiver On.
}$$
Etapa 02 - Script em PowerShell
Bem nesta etapa é necessário conhecimento básico sobre PowerShell e sobre bots.
Para envio é utilizado uma função API do próprio Telegram feito por intermédio de bots.
Clique abaixo para obter o código do Script PowerShell
Para envio é utilizado uma função API do próprio Telegram feito por intermédio de bots.
- Deve-se criar um BOT usando o BotFather por exemplo -> tutorial outro
- Crie um bot escrevendo /newbot no contato https://t.me/botfather no telegram
- Guarde o token que será gerado
- Descubra o ID da sua conta de Telegram mandando /start para o bot @GetIDsBot no Telegram
- Alterar as variáveis de acordo com seu cenário $botToken, $chatId, $arquivo.
- Se atente para a váriavel $arquivo = "arquivo.txt" ela vai direcionar onde se encontra o arquivo gerado pelas macros.
arquivo.txt deve-se encontra na pasta .minecraft/mods/macros/logs.
A pasta logs por padrão não existe, porém, assim que executado o Macro irá criar.
OBS: deixe o script powershell como mostrado na imagem ou então altere a variável arquivo no script.
A pasta logs por padrão não existe, porém, assim que executado o Macro irá criar.
OBS: deixe o script powershell como mostrado na imagem ou então altere a variável arquivo no script.

Clique abaixo para obter o código do Script PowerShell
# Configurações
$botToken = "6397064394:AAFqhzc_f8gnVK5g2lSV08CCcJu7K30Tuos"
$chatId = "-1001948145831"
# Caminho do arquivo de texto
$arquivo = "arquivo.txt"
#após quantos envios deletar os registros.
$quantApagar = 4
#variaveis não mexer
$condicaoAnterior = 0
$contador = 0
while ($true) {
# Lê o conteúdo do arquivo
$conteudo = Get-Content $arquivo
#Conta quantas vezes tem essa palavra dentro do arquivo;
$condicao = ($conteudo | Select-String -Pattern "Pescador:").Count
#Se a quantidade mudar de uma vez para a outra entra aqui e executa
if ($condicao -gt $condicaoAnterior) {
$selectPesca = ($conteudo | Select-String -Pattern "Pescador:")
$pesca = $selectPesca | Select-Object -Last 1
$pescador = [regex]::Match($pesca, ' (.*)').Value
$selectEscava = ($conteudo | Select-String -Pattern "Escavacao:")
$escava = $selectEscava | Select-Object -Last 1
$escavacao = [regex]::Match($escava, ' (.*)').Value
$selectHerba = ($conteudo | Select-String -Pattern "Herbalismo:")
$herba = $selectHerba | Select-Object -Last 1
$herbalismo = [regex]::Match($herba, ' (.*)').Value
$selectMiner = ($conteudo | Select-String -Pattern "Mineracao:")
$miner = $selectMiner | Select-Object -Last 1
$mineracao = [regex]::Match($miner, ' (.*)').Value
$selectLenha = ($conteudo | Select-String -Pattern "Lenhador:")
$lenha = $selectLenha | Select-Object -Last 1
$lenhador = [regex]::Match($lenha, ' (.*)').Value
#Skills de combate
$selectMachado = ($conteudo | Select-String -Pattern "Machado:")
$machado = $selectMachado | Select-Object -Last 1
$machado = [regex]::Match($machado, ' (.*)').Value
$selectArqueiro = ($conteudo | Select-String -Pattern "Arqueiro:")
$arqueiro = $selectArqueiro| Select-Object -Last 1
$arqueiro = [regex]::Match($arqueiro, ' (.*)').Value
$selectEspadas = ($conteudo | Select-String -Pattern "Espadas:")
$espadas = $selectEspadas| Select-Object -Last 1
$espadas = [regex]::Match($espadas, ' (.*)').Value
#Misc Skills
$selectAcro = ($conteudo | Select-String -Pattern "Acrobacia:")
$acrobacia = $selectAcro| Select-Object -Last 1
$acrobacia = [regex]::Match($acrobacia, ' (.*)').Value
$selectRep = ($conteudo | Select-String -Pattern "Reparacao:")
$reparacao = $selectRep| Select-Object -Last 1
$reparacao = [regex]::Match($reparacao, ' (.*)').Value
#contabiliza os retornos
$condicaoAnterior = $condicao
#contador para delimitar drop do arquivo e não inchar.
$contador++
Write-Host "Registro encontrado numero -> [$contador]"
Write-Host "Registro encontrado numero -> [$contador]"
Write-Host "Registro encontrado numero -> [$contador]"
#após 3 execuções apagamos o arquivo
if ($contador -ge $quantApagar) {
# Lê o conteúdo do arquivo e apaga.
$conteudo = Get-Content $arquivo
# Apagar o conteúdo do arquivo
Set-Content $arquivo ""
Write-Host "Arquivo foi apagado. /[$contador]\ executado."
$condicaoAnterior = 0
$contador = 0;
}
$mensagem = "
Relatorio de Skills
-=-SKILLS DE TRABALHO-=-
$escavacao
$pescador
$herbalismo
$mineracao
$lenhador
-=-SKILLS DE COMBATE-=-
$machado
$arqueiro
$espadas
-=-MISC SKILLS-=-
$acrobacia
$reparacao
"
Invoke-WebRequest "https://api.telegram.org/bot$botToken/sendMessage?chat_id=$chatId&text=$mensagem"
Write-Host "Novo Registro encontrado, enviando para telegram."
}else{
Write-Host "Nada de novo por aqui, volte depois."
}
#Verificação a cada 10 segundos, caso queira alterar, mude o número 10
Start-Sleep -Seconds 10
}
$botToken = "6397064394:AAFqhzc_f8gnVK5g2lSV08CCcJu7K30Tuos"
$chatId = "-1001948145831"
# Caminho do arquivo de texto
$arquivo = "arquivo.txt"
#após quantos envios deletar os registros.
$quantApagar = 4
#variaveis não mexer
$condicaoAnterior = 0
$contador = 0
while ($true) {
# Lê o conteúdo do arquivo
$conteudo = Get-Content $arquivo
#Conta quantas vezes tem essa palavra dentro do arquivo;
$condicao = ($conteudo | Select-String -Pattern "Pescador:").Count
#Se a quantidade mudar de uma vez para a outra entra aqui e executa
if ($condicao -gt $condicaoAnterior) {
$selectPesca = ($conteudo | Select-String -Pattern "Pescador:")
$pesca = $selectPesca | Select-Object -Last 1
$pescador = [regex]::Match($pesca, ' (.*)').Value
$selectEscava = ($conteudo | Select-String -Pattern "Escavacao:")
$escava = $selectEscava | Select-Object -Last 1
$escavacao = [regex]::Match($escava, ' (.*)').Value
$selectHerba = ($conteudo | Select-String -Pattern "Herbalismo:")
$herba = $selectHerba | Select-Object -Last 1
$herbalismo = [regex]::Match($herba, ' (.*)').Value
$selectMiner = ($conteudo | Select-String -Pattern "Mineracao:")
$miner = $selectMiner | Select-Object -Last 1
$mineracao = [regex]::Match($miner, ' (.*)').Value
$selectLenha = ($conteudo | Select-String -Pattern "Lenhador:")
$lenha = $selectLenha | Select-Object -Last 1
$lenhador = [regex]::Match($lenha, ' (.*)').Value
#Skills de combate
$selectMachado = ($conteudo | Select-String -Pattern "Machado:")
$machado = $selectMachado | Select-Object -Last 1
$machado = [regex]::Match($machado, ' (.*)').Value
$selectArqueiro = ($conteudo | Select-String -Pattern "Arqueiro:")
$arqueiro = $selectArqueiro| Select-Object -Last 1
$arqueiro = [regex]::Match($arqueiro, ' (.*)').Value
$selectEspadas = ($conteudo | Select-String -Pattern "Espadas:")
$espadas = $selectEspadas| Select-Object -Last 1
$espadas = [regex]::Match($espadas, ' (.*)').Value
#Misc Skills
$selectAcro = ($conteudo | Select-String -Pattern "Acrobacia:")
$acrobacia = $selectAcro| Select-Object -Last 1
$acrobacia = [regex]::Match($acrobacia, ' (.*)').Value
$selectRep = ($conteudo | Select-String -Pattern "Reparacao:")
$reparacao = $selectRep| Select-Object -Last 1
$reparacao = [regex]::Match($reparacao, ' (.*)').Value
#contabiliza os retornos
$condicaoAnterior = $condicao
#contador para delimitar drop do arquivo e não inchar.
$contador++
Write-Host "Registro encontrado numero -> [$contador]"
Write-Host "Registro encontrado numero -> [$contador]"
Write-Host "Registro encontrado numero -> [$contador]"
#após 3 execuções apagamos o arquivo
if ($contador -ge $quantApagar) {
# Lê o conteúdo do arquivo e apaga.
$conteudo = Get-Content $arquivo
# Apagar o conteúdo do arquivo
Set-Content $arquivo ""
Write-Host "Arquivo foi apagado. /[$contador]\ executado."
$condicaoAnterior = 0
$contador = 0;
}
$mensagem = "
Relatorio de Skills
-=-SKILLS DE TRABALHO-=-
$escavacao
$pescador
$herbalismo
$mineracao
$lenhador
-=-SKILLS DE COMBATE-=-
$machado
$arqueiro
$espadas
-=-MISC SKILLS-=-
$acrobacia
$reparacao
"
Invoke-WebRequest "https://api.telegram.org/bot$botToken/sendMessage?chat_id=$chatId&text=$mensagem"
Write-Host "Novo Registro encontrado, enviando para telegram."
}else{
Write-Host "Nada de novo por aqui, volte depois."
}
#Verificação a cada 10 segundos, caso queira alterar, mude o número 10
Start-Sleep -Seconds 10
}
FAQ - Perguntas e respostas
- Como adicionar macros? -> Clique aqui
- PowerShell não está executando, como fazer? - > Clique aqui
- Não consigo criar um grupo e adicionar o Bot, oque fazer? -> Clique aqui