Como carregar arquivos por meio de programação no Telegram?

1

Como o Telegram é um serviço de nuvem infinito , eu o uso como um local de backup secundário. Eu gostaria de automatizar isso para que eu não precise me lembrar de fazer isso todos os meses (nos últimos dois anos eu perdi a cada dois backups mensais).
Mas não consigo encontrar uma maneira de automatizar qualquer cliente Telegram sem clicar em macros (gostaria que fosse executado silenciosamente em segundo plano):

  • ./Telegram --help não faz nada exceto abrir o programa.
  • Eu não fui bem sucedido em determinar onde a argvvariável vai do método main , então eu não sei se há argumentos do console.
  • Os bots não podem acessar meu sistema de arquivos (e isso é bom).

Eu posso facilmente automatizar o empacotamento dos arquivos que eu quero em arquivos de 1.5GB usando 7z, mas não tenho idéia sobre como realmente enviá-los. Existe uma maneira de fazer isso sem clicar em macros?

Eu estou no Debian 9.5 e usando o cliente Linux oficial do telegram.org.

Fabian Röling
fonte
Você não pode usar diretamente o libmtproto para escrever um back-end de armazenamento?
Martin Ueding
Eu não sei, já que não conheço esse programa. Além disso, eu teria que saber detalhes sobre como enviar pacotes para os servidores do Telegram. Em algum momento eu só tenho um cliente personalizado. Se você sabe como fazer um programa minimalista para isso ou qualquer que seja sua ideia, isso seria fantástico.
Fabian Röling
Eu não sei os detalhes, mas parece que o TDlib é o que você quer.
Martin Ueding
Parece que há um cliente de linha de comando para o Telegram e ele pode enviar arquivos, mesmo que não esteja na documentação: github.com/vysheng/tg/issues/458 Eu tentarei isso esta noite e, se funcionar, escreva um responda.
Fabian Röling

Respostas:

0

Eu encontrei uma solução! O cliente oficial provavelmente não permite (todos os argumentos de linha de comando conhecidos estão documentados aqui ), mas para Linux e Mac (e provavelmente também subsistema Linux no Windows), existe uma interface de linha de comando não oficial para o Telegram chamada "tg": https://github.com/vysheng/tg
Ele não menciona em sua descrição que ele também pode enviar arquivos, mas em um problema do Github alguém escreveu que existe a send_filefunção. Em geral, não é muito bem documentado, mas chamá-lo --helpe entrar helpdentro do programa dá muita informação, o resto pode ser descoberto brincando com os parâmetros e tentando coisas diferentes.
Esta é a solução que encontrei dessa maneira:

Preparação

  • Instale tg como o arquivo leia-me diz. Não funcionou direito para mim no Debian devido a um bug, mas como dito neste comentário de relatório de bug , a instalação libssl1.0-devé uma solução para esse bug: Execute sudo apt install libssl1.0-deventre ./configuree make.
  • Faça o login com sua conta do Telegram: bin/telegram-clipara iniciar o programa interativo, digite o número de telefone, insira o código de login. Eu digitei meu número de telefone começando +49e que funcionou, talvez seja necessário, eu não sei.
  • Agora use outro cliente Telegram para enviar uma mensagem no chat de destino (ou, alternativamente, receber uma mensagem lá). Isso adiciona o nome do bate-papo à lista de bate-papo interna do programa. Se existirem vários chats com o mesmo nome, parece escolher o mais recentemente adicionado. Não encontrei uma maneira de enviar mensagens para um bate-papo por ID.
    É isso para a configuração, quitsai do programa.

Upload de arquivos programaticamente

Agora os arquivos podem ser enviados dando um send_filecomando ao programa --execute, o que faz com que ele execute esse comando e saia automaticamente:

/path/to/tg/bin/telegram-cli --exec 'send_file <chat> <filename>'

<chat>é o nome do chat.
<filename>é o caminho para o arquivo.
/path/to/tgdeveria ser óbvio.

Exemplo de uso

Usarei algo assim para fazer o upload de um backup da minha pasta do Google Drive para o Telegram depois de criá-lo com o p7zip:

for filename in ~/drive_backup/drive.zip.*; do ~/tg/bin/telegram-cli --exec 'send_file Backup_chat '"$filename"; done

Isto carrega todos os arquivos cujos nomes começam com " drive.zip." (.001, .002 etc.) na pasta ~/drive_backuppara o chat do Telegram "Backup_chat".

Fabian Röling
fonte
-1

Experimentar

telegram-desktop -sendpath <fullpath>

Juan
fonte
Como isso selecionaria um bate-papo?
Fabian Röling
Parece haver um tal comando na verdade. Mas não há documentação para isso. Se você souber mais, por favor comente aqui: github.com/telegramdesktop/tdesktop/issues/2058 Mas tenho certeza que apenas um caminho não é suficiente, como ele saberia para qual chat enviar? Eu poderia realmente tentar colocar um ID de bate-papo antes ou depois do caminho, mas isso é apenas um palpite aleatório.
Fabian Röling
Eu estou correndo. Você pede ajuda, recebe a resposta certa e correta e vota -1? O_o Não conte com a minha ajuda mais
Juan
Bem, como você envia para um bate-papo específico? Não pode simplesmente enviá-lo para um bate-papo aleatório. Preciso de um ID, um nome ou outra coisa? Onde eu coloco esse argumento?
Fabian Röling
Eu tentei agora. É interativo, devo clicar em um bate-papo. Isso não é automático e não pode acontecer em segundo plano. Então este post não responde a minha pergunta.
Fabian Röling