
Um Bot de Vigilância em Massa do Telegram em Python

Informer (TGInformer) é uma biblioteca de bot que permite que você se passe por vários usuários REAIS no Telegram e espione mais de 500 canais do Telegram por conta. Os detalhes são registrados em um banco de dados MySQL, uma planilha privada do Google e seu próprio canal privado para análise.
Este é um projeto funcional de prova de conceito com bugs conhecidos. Sinta-se à vontade para bifurcar, compartilhar e me dar um toque.



Suporta expressões regulares para filtragem de palavras-chave
SQLAlchemy para persistência de dados agnóstica

Registro de dados contextuais de mensagens e canais em um canal privado e banco de dados
Armazena meta-informações sobre o remetente da mensagem, canal, número de participantes no canal


Persiste a sessão dos canais ingressados
Faça login uma vez, o bot permanece logado para sempre sem precisar de reautenticação 2FA
Entre em até 500 canais por conta

Edite o arquivo informer.env que contém todas as variáveis de ambiente necessárias para o informer
Você pode obter as informações necessárias relacionadas ao Telegram aqui:
https://my.telegram.org/auth para autenticar sua conta fornecendo um número de telefone e o código de confirmação enviado para seu número de telefone (ou Telegram)


Depois de autenticado, clique em "API Development Tools"

Crie um Novo Aplicativo preenchendo o formulário mostrado abaixo

Agora você deve ter os valores de parâmetro necessários para os campos TELEGRAM_API_HASH e TELEGRAM_API_APP_ID do arquivo informer.env

TELEGRAM_ACCOUNT_PHONE_NUMBER e prossiga para a próxima seção
Até agora temos o necessário para o Telethon e o Informer acessarem as APIs do Telegram, em seguida precisamos adquirir os identificadores da conta do seu bot.
userinfobot.


Você deve receber seu nome de usuário do Telegram e seu ID de conta do Telegram. Isso é importante.

informer.env e preencha os valores para TELEGRAM_ACCOUNT_ID que deve ser seu ID de conta do Telegram da etapa anterior e TELEGRAM_ACCOUNT_USER_NAME.Você pode opcionalmente preencher TELEGRAM_NOTIFICATIONS_CHANNEL_ID com seu nome de usuário ou um ID de canal.
TELEGRAM_ACCOUNT_PHONE_NUMBER esteja preenchido, pois isso é fundamental para gerar a sessão. Para criar várias contas, consulte o Burner App abaixo.Certifique-se de estar executando python 3 e simplesmente execute ./quick_start.sh no diretório.
Você deve executar isso primeiro para poder autenticar com o Telegram na primeira execução e gerar um arquivo de sessão local.
Você pode posteriormente copiar os arquivos para as diferentes contas em app/session e montá-los via Docker, se desejar.

Você será solicitado a inserir o código de autenticação que recebeu, seja via Telegram se já tiver feito login antes, ou via SMS.

Pressione Enter e sua sessão deve ser gerada na pasta app/session com o nome do arquivo sendo o número de telefone internacional que você forneceu com a extensão .session.
Continue para a próxima seção onde usamos Docker Compose para configurar um banco de dados.
Esta etapa é opcional, mas se você quiser criar um canal de grupo privado e adquirir o ID do grupo, faça o seguinte:

Defina a URL no arquivo informer.env sob o parâmetro TELEGRAM_NOTIFICATIONS_CHANNEL_URL
Para obter o ID do canal, simplesmente execute python3 bot.py <TELEGRAM_ACCOUNT_ID> no diretório app, onde <TELEGRAM_ACCOUNT_ID> é o ID da conta que você gerou anteriormente.
Quando o script carregar, ele exibirá todos os canais em que você está, simplesmente copie esse valor e coloque-o no parâmetro TELEGRAM_NOTIFICATIONS_CHANNEL_ID do arquivo informer.env e encerre o script. Agora você está pronto para executar o Informer.
Após executar quick_start.sh, você pode executar docker compose com:
./start.sh para construir os contêineres Docker que incluem o banco de dados MySQL
Execute ./stop.sh para parar os contêineres
Execute ./clean.sh para remover contêineres e volumes órfãos. ** NOTA ** isso irá REDEFINIR o banco de dados e você perderá todos os seus dados.
Algumas coisas a serem observadas:
Antes, você era obrigado a executar sua própria instância MySQL e isso criava alguns problemas com compatibilidade de string de conexão e versionamento. Nesta atualização, ela é criada para você e persistida em disco.
Além disso, o Dozzle é fornecido para que você possa visualizar logs no navegador, basta ir a http://localhost:9999 e clicar no contêiner app_informer.
Se você não quiser usar seu próprio número de telefone e quiser executar o bot Informer com algum grau de anonimato, você pode usar o Burner App disponível no iOS e Android.
Instale o aplicativo Burner

Siga os mesmos passos acima fornecendo o novo número de telefone aqui: https://my.telegram.org/auth
Valide com o Burner. Você receberá um código de autenticação via SMS, você precisará fornecê-lo.

Faça login no Telegram
Tente fazer login com o aplicativo executando
python3 bot.py <api_user_id> no diretório app.
Isso foi enviado via mensagem do Telegram ou SMS.
Forneça isso e ele salvará suas credenciais de sessão no arquivo de sessão mencionado abaixo. Você não precisará mais autenticar, desde que tenha o arquivo de sessão salvo.
As sessões são salvas na pasta app/session/ como <telegram_phone_number>.session
Repita até ter todos os arquivos de sessão necessários e simplesmente monte-os no Docker.
Descobrir como escalar contas foi um pouco um pesadelo, pois eu precisava de um processo automatizado. O Telegram exige que você use um número de telefone real que possa receber mensagens de texto de um shortcode.
Infelizmente, serviços com APIs como o Twilio são proibidos de receber SMS de shortcodes nos EUA, Canadá e Reino Unido https://support.twilio.com/hc/en-us/articles/223181668-Can-Twilio-numbers-receive-SMS-from-a-short-code- para fins de fraude. Isso teria sido ideal, que chatice.
Uma noite inteira foi desperdiçada nesse esforço até que lembrei de um ótimo aplicativo que usei no passado: Burner (https://www.burnerapp.com/) — que coincidentemente tem uma API (https://developer.burnerapp.com/api-documentation/incoming-webhooks/). Ou seja, você pode gerar números dinamicamente, instanciar uma nova conta e autenticar tudo via SDK do cliente do Telegram em Python (Telethon: https://docs.telethon.dev/en/latest/).
A melhor parte é que os números do Burner são gratuitos por 14 dias. As contas do Telegram conectadas via API do cliente precisam apenas fazer login uma vez e as sessões são persistidas permanentemente. Eu não integrei com a API do Burner, mas o processo é direto.
O bot é construído sobre o Telethon Python SDK (https://docs.telethon.dev/en/latest/)
Algumas coisas a serem observadas e problemas encontrados ao construir esta prova de conceito:
FloodWaitErrors podem ocorrer quando você está enviando muitas solicitações para a API, seja consultando informações de usuários ou entrando em muitos canais muito rapidamente.
TelegramClient(<session_file_name>, <api_user_id>, <api_user_hash>)
Este arquivo é um banco de dados sqlite ao qual você pode se conectar. Ele funciona como um cache e armazena dados históricos, bem como suas informações de autenticação de sessão, para que você não precise reautenticar com o 2FA do Telegram. Observe que você precisará fazer login pela primeira vez e autenticar quando usar a API pela primeira vez.
Conforme o bot executa e entra em canais, você verá seu cliente atualizar em tempo real e exibir os novos canais que você ingressou.

DICA: TelegramX é de longe o melhor cliente para usar para esses fins, pois suporta múltiplos logins. Baixe aqui:
Nota: A integração com Google Sheets é completamente OPCIONAL. O aplicativo funciona perfeitamente apenas com o banco de dados MySQL.
Se você quiser ativar o registro no Google Sheets:
app/credentials/README.mdVisão geral rápida:
app/credentials/google_credentials.jsonIsso é opcional e o bot funcionará sem ele.
bot.py duas vezes, uma para deixá-lo entrar nos canais e outra para monitorá-los. Estou ciente desse bug grave e corrigirei na próxima revisão.Achou este projeto interessante? Dê uma estrela se sim.
Foi feito em dois dias como prova de conceito para um amigo no espaço de criptomoedas. Se você encontrar aplicações interessantes ou lucrativas, estou sempre feliz em colaborar. Você pode me contatar em:
@paulpierre no Twitter ou hi (arroba) paulpierre (ponto) com
A maioria dos meus projetos interessantes são privados no github, mas sinta-se à vontade para conferi-los: http://www.github.com/paulpierre ou trabalhos anteriores em http://www.paulpierre.com
Copyright (c) 2020 Paul Pierre Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in allcopies or substantial portions of the Software. THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.