Um bot para Telegram que interage com o qBittorrent para adicionar torrents via links magnet e fornecer atualizações de status.
O projeto foi modularizado para facilitar a manutenção e a extensão:
main.py: ponto de entrada do bot, responsável por orquestrar as chamadas entre os módulos.qbittorrent_api.py: funções para autenticação e interação com o qBittorrent.telegram_utils.py: utilitários para envio e processamento de mensagens no Telegram.torrent_monitor.py: monitoramento de torrents e notificações automáticas de status/conclusão.jellyfin_consolidated.py: integração consolidada com o Jellyfin para gerenciamento de mídia e comandos via Telegram.
- Clone este repositório.
- Instale as dependências:
pip install -r requirements.txt
- Crie um arquivo
.envna raiz do projeto com as seguintes variáveis:QB_URL=http://localhost:8080 # URL do seu qBittorrent WebUI QB_USER=seu_usuario QB_PASS=sua_senha TELEGRAM_BOT_TOKEN=seu_token_do_bot_telegram TELEGRAM_CHAT_ID=seu_chat_id_do_telegram # O ID do chat onde o bot enviará mensagens INTERVALO=60 # Intervalo em segundos entre as verificações de status (opcional, padrão é 60) AUTHORIZED_USERS=123456789,987654321 # (Opcional) IDs dos usuários autorizados a executar comandos críticos, separados por vírgula. Se não definido, qualquer usuário pode executar comandos.
- Obtenha seu
TG_CHAT_IDenviando uma mensagem para o seu bot e acessandohttps://api.telegram.org/botSEU_TOKEN/getUpdates.
O projeto também pode ser executado em contêineres Docker, facilitando a implantação e isolando as dependências.
Crie um arquivo Dockerfile na raiz do projeto com o seguinte conteúdo:
# Use uma imagem base oficial do Python
FROM python:3.9-slim
# Defina o diretório de trabalho dentro do contêiner
WORKDIR /app
# Copie o arquivo de requisitos e instale as dependências
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
# Copie o restante do código da aplicação para o contêiner
COPY . .
# O arquivo .env não deve ser copiado diretamente para a imagem por questões de segurança.
# Considere montar o arquivo .env como um volume ou passá-lo como variáveis de ambiente ao executar o contêiner.
# Comando para executar o script principal quando o contêiner iniciar
CMD ["python", "main.py"]Se você está em um sistema Linux (Armbian, Debian, Ubuntu, Orange Pi, Raspberry Pi, etc) e não quer ou não pode usar Docker, siga estes passos para rodar o bot em um ambiente isolado:
sudo apt update
sudo apt install python3 python3-venv python3-pip -ycd /caminho/para/telegram_torrent
python3 -m venv venvsource venv/bin/activatepip install --upgrade pip
pip install -r requirements.txt
pip install -r requirements_youtube.txtCrie ou edite o arquivo .env com seus dados do Telegram e qBittorrent.
python main.pynohup python main.py &Caso desejar verificar o log de todos os nohup utilizados (em execução e finalizados), utilize o comando:
ps aux | grep "nome_do_arquivo.py"
Se você quiser parar ou matar o processo em execução, use o killcomando seguido do ID do processo:
kill 2565
- Sempre que quiser rodar o bot, ative o ambiente virtual:
cd /caminho/para/telegram_torrent source venv/bin/activate python main.py
- Para sair do ambiente virtual, use
deactivate. - O ambiente virtual mantém as dependências isoladas do sistema.
Copie o arquivo docker-compose.yml na raiz do projeto:
#### Utilizando Docker
Depois de criar os arquivos, execute os seguintes comandos para construir e iniciar os contêineres:
1. Construir e iniciar os contêineres em segundo plano:
```bash
docker compose up -d
-
Verificar os logs da aplicação:
docker compose logs -f telegram-torrent
-
Parar os contêineres:
docker compose down
-
Para reconstruir a imagem após alterações no código:
docker compose build telegram-torrent ou docker compose build --no-cache telegram-torrent docker compose up -d
Nota: Certifique-se de que o arquivo
.envesteja configurado corretamente antes de iniciar os contêineres.
Execute o script principal:
python main.pyO bot irá iniciar, conectar-se ao qBittorrent e começar a processar mensagens do Telegram e enviar atualizações de status.
O bot inclui um teclado personalizado que aparece na parte inferior do chat, fornecendo acesso rápido aos comandos mais usados. O teclado é ativado automaticamente após o comando /start.
- 📊 Status do Servidor: Verifica o status do servidor Jellyfin
- 📦 Listar Torrents: Mostra a lista de torrents ativos
- 💾 Espaço em Disco: Exibe o espaço em disco disponível
- 🎬 Itens Recentes: Lista os itens adicionados recentemente ao Jellyfin (comando:
/recent) - 🎭 Recentes Detalhado: Exibe informações detalhadas dos itens recentes (comando:
/recentes) - 📚 Bibliotecas: Mostra as bibliotecas disponíveis no Jellyfin
- ❓ Ajuda: Exibe a mensagem de ajuda com todos os comandos
/start: Inicia a interação com o bot e exibe mensagem de boas-vindas com o teclado personalizado/helpou clique em ❓ Ajuda: Exibe a lista completa de comandos disponíveis e suas descrições
/qtorrents: Lista todos os torrents ativos, pausados, finalizados e parados (requer autorização).- Exibe nome, progresso, velocidade e status de cada torrent.
- Permite visualizar detalhes específicos de cada download.
- Links Magnet: Envie qualquer link magnet válido para iniciar o download (requer autorização).
- Formato:
magnet:?xt=urn:btih:... - O bot confirmará o recebimento e iniciará o download automaticamente.
- Formato:
/qespaco: Mostra o espaço em disco disponível no servidor do qBittorrent.- Em versões recentes: Exibe Total, Usado e Livre (via API
/api/v2/app/drive_info). - Em versões antigas: Fallback para
/api/v2/sync/maindatamostrando espaço livre.
- Em versões recentes: Exibe Total, Usado e Livre (via API
-
/recentes: Lista os itens recentemente adicionados ao Jellyfin com informações detalhadas- Exibe até 8 itens recentes com informações completas
- Mostra título, ano, tipo de mídia, gêneros e avaliação
- Inclui sinopse resumida (até 150 caracteres)
- Data de adição ao servidor
- Link direto para visualização no Jellyfin
- Formatação em Markdown para melhor legibilidade
-
/recent: Lista os itens mais recentes adicionados ao Jellyfin (versão simplificada)- Exibe informações básicas dos itens recentes
- Formato mais compacto e rápido
-
/libraries: Lista todas as bibliotecas disponíveis no servidor Jellyfin- Mostra o nome e tipo de cada biblioteca
- Útil para verificar acessos e organizações de mídia
-
/status: Exibe o status atual do servidor Jellyfin- Mostra informações de conexão
- Exibe contagem de bibliotecas
- Último item adicionado
- Status da conexão
Em breve: Busca avançada na bibliotecaPlanejado: Controle de permissõesFuturo: Notificações automáticas de novos conteúdos
ℹ️ Acompanhe nosso ROADMAP.md para atualizações sobre o cronograma de lançamento e recursos planejados.
O bot enviará automaticamente notificações para:
- Conclusão de downloads de torrents
- Erros durante o download
- Novos conteúdos adicionados ao Jellyfin
- Alertas de espaço em disco baixo
- Atualizações de status do servidor Jellyfin
- Sessões iniciadas ou finalizadas no Jellyfin
Para habilitar os comandos do Jellyfin, adicione as seguintes variáveis ao seu arquivo .env:
# Configurações do Jellyfin
JELLYFIN_URL=http://seu-servidor-jellyfin:8096
JELLYFIN_USERNAME=seu_usuario
JELLYFIN_PASSWORD=sua_senhaCertifique-se de que o usuário tenha permissões adequadas no servidor Jellyfin para acessar as bibliotecas e informações do sistema.
Este projeto segue o Versionamento Semântico (SemVer) e utiliza commits padronizados em Português do Brasil. O changelog é mantido no arquivo versao.md.
Consulte o arquivo versao.md para o histórico de mudanças.
https://www.digitalocean.com/community/tutorials/nohup-command-in-linux
Este projeto é desenvolvido apenas para fins educacionais e de uso pessoal. Não incentivamos ou apoiamos qualquer forma de pirataria ou uso ilegal. Os usuários são responsáveis por garantir que suas ações estejam em conformidade com todas as leis de direitos autorais e propriedade intelectual aplicáveis.