Olá, para você que como eu gosta de automação.
ObjetivoDesenvolver um Script que vai logo mais fazer parte de algo maior que estou desenvolvendo que integrará o modpack juntamente com um grupo de telegram, enviando arquivos, registros em tempo real do que ocorre dentro da modpack.
Deixo para a comunidade com intuito que possa auxiliar novos desenvolvedores em algum projeto.
Resultados e recomendaçõesDeixo para a comunidade com intuito que possa auxiliar novos desenvolvedores em algum projeto.
No tutorial de hoje trago um Script desenvolvido em PowerShell para enviar arquivos quaisquer que você queira para o Telegram.
O Script funciona obtendo o arquivo e enviando ele via API para o grupo desejado.
Dados interessantes para leitura:
- O arquivo não pode estar vazio;
- É esperado que se demore um pouco no processo de envio;
- https://core.telegram.org/bots/api
- https://telegram-bot-sdk.readme.io/reference/senddocument
- Como fazer o bot para utilizar no Script -> Clique aqui
- Salve o arquivo como PowerShell (Extensão deve ser ps1).
- Execute com o PowerShell ou programe no agendador de tarefas.
- Uso a seu critério, não me responsabilizo com devida utilização.
#Informações do script
#O arquivo tem de possuir dados, arquivo vazio não é enviado.
#Deve gerar um BOT por exemplo no BotFather para poder
# Configurações
$BotToken = '6397064394:AAFqhYc_f8gnVK5g2lSV08CCcJu7K30Tus5'
$ChatID = '-1001948244931'
$FilePath = 'basedados.sql'
# Verifica se o arquivo existe
if (-not (Test-Path $FilePath)) {
Write-Host "Arquivo não encontrado: $FilePath"
exit 1
}
# Lê o conteúdo do arquivo em bytes
$fileBytes = [System.IO.File]::ReadAllBytes($FilePath)
# Monta o corpo da requisição
$boundary = "----WebKitFormBoundary" + [Guid]::NewGuid().ToString()
$Body = "--$boundary`r`n" +
"Content-Disposition: form-data; name=`"chat_id`"`r`n`r`n" +
"$ChatID`r`n" +
"--$boundary`r`n" +
"Content-Disposition: form-data; name=`"document`"; filename=`"$(Split-Path -Leaf $FilePath)`"`r`n" +
"Content-Type: application/octet-stream`r`n`r`n" +
[System.Text.Encoding]::UTF8.GetString($fileBytes) + "`r`n" +
"--$boundary--`r`n"
# URL da API do Telegram
$Uri = "https://api.telegram.org/bot$BotToken/sendDocument"
# Envia a requisição
try {
$response = Invoke-RestMethod -Uri $Uri -Method Post -Body ([System.Text.Encoding]::UTF8.GetBytes($Body)) -ContentType "multipart/form-data; boundary=$boundary"
if ($response.ok) {
Write-Host "[Y] Documento enviado com sucesso!"
} else {
Write-Host "[X] Erro ao enviar: $($response.description)"
}
} catch {
Write-Error "Erro ao enviar o documento: $_"
}
#O arquivo tem de possuir dados, arquivo vazio não é enviado.
#Deve gerar um BOT por exemplo no BotFather para poder
# Configurações
$BotToken = '6397064394:AAFqhYc_f8gnVK5g2lSV08CCcJu7K30Tus5'
$ChatID = '-1001948244931'
$FilePath = 'basedados.sql'
# Verifica se o arquivo existe
if (-not (Test-Path $FilePath)) {
Write-Host "Arquivo não encontrado: $FilePath"
exit 1
}
# Lê o conteúdo do arquivo em bytes
$fileBytes = [System.IO.File]::ReadAllBytes($FilePath)
# Monta o corpo da requisição
$boundary = "----WebKitFormBoundary" + [Guid]::NewGuid().ToString()
$Body = "--$boundary`r`n" +
"Content-Disposition: form-data; name=`"chat_id`"`r`n`r`n" +
"$ChatID`r`n" +
"--$boundary`r`n" +
"Content-Disposition: form-data; name=`"document`"; filename=`"$(Split-Path -Leaf $FilePath)`"`r`n" +
"Content-Type: application/octet-stream`r`n`r`n" +
[System.Text.Encoding]::UTF8.GetString($fileBytes) + "`r`n" +
"--$boundary--`r`n"
# URL da API do Telegram
$Uri = "https://api.telegram.org/bot$BotToken/sendDocument"
# Envia a requisição
try {
$response = Invoke-RestMethod -Uri $Uri -Method Post -Body ([System.Text.Encoding]::UTF8.GetBytes($Body)) -ContentType "multipart/form-data; boundary=$boundary"
if ($response.ok) {
Write-Host "[Y] Documento enviado com sucesso!"
} else {
Write-Host "[X] Erro ao enviar: $($response.description)"
}
} catch {
Write-Error "Erro ao enviar o documento: $_"
}
Trabalho Futuro
Desenvolvimento de uma sequência utilizando macro e PowerShell para enviar informações da conta do jogador como Nivel de Skills atual no momento da leitura.
Visto isso para o jogador ter controle, por exemplo, de qual Nivel que está e está upando ou travado.
Abraços, até breve.