PyTelegramBotAPI: Python Telegram Bot Api

Blogue

PyTelegramBotAPI: Python Telegram Bot Api

pyTelegramBotAPI

Uma implementação Python simples, mas extensível para o API de bot de telegrama .



Tanto síncrona quanto assíncrona.

Versão suportada da API do bot: 5.7 !



Começando

Esta API é testada com Python 3.6-3.10 e Pypy 3. Há duas maneiras de instalar a biblioteca:

  • Instalação usando pip (um gerenciador de pacotes Python):
|_+_|
  • Instalação da fonte (requer git):
|_+_|

ou:



|_+_|

Geralmente é recomendado usar a primeira opção.

Embora a API esteja pronta para produção, ela ainda está em desenvolvimento e tem atualizações regulares, não se esqueça de atualizá-la regularmente chamando

|_+_|

Escrevendo seu primeiro bot

Pré-requisitos

Presume-se que você obtiveram um token de API com @BotFather . Chamaremos esse token de |_+_|. Além disso, você tem conhecimento básico da linguagem de programação Python e, mais importante, a API do Telegram Bot .

Um bot de eco simples

A classe TeleBot (definida em _ aquecer _.py) encapsula todas as chamadas de API em uma única classe. Ele fornece funções como |_+_| (|_+_|, |_+_| etc.) e várias maneiras de ouvir as mensagens recebidas.

Crie um arquivo chamado |_+_|. Em seguida, abra o arquivo e crie uma instância da classe TeleBot.

|_+_|

Observação: certifique-se de substituir TOKEN pelo seu próprio token de API.

Após essa declaração, precisamos registrar alguns dos chamados manipuladores de mensagens. Os manipuladores de mensagens definem filtros pelos quais uma mensagem deve passar. Se uma mensagem passa pelo filtro, a função decorada é chamada e a mensagem recebida é passada como argumento.

Vamos definir um manipulador de mensagens que trata de |_+_| e |_+_| comandos.

|_+_|

Uma função que é decorada por um manipulador de mensagens pode ter um nome arbitrário, porém, deve ter apenas um parâmetro (a mensagem) .

a moeda gsx é uma boa compra

Vamos adicionar outro manipulador:

|_+_|

Este ecoa todas as mensagens de texto recebidas de volta ao remetente. Ele usa uma função lambda para testar uma mensagem. Se o lambda retornar True, a mensagem será tratada pela função decorada. Como queremos que todas as mensagens sejam tratadas por essa função, simplesmente sempre retornamos True.

Nota: todos os manipuladores são testados na ordem em que foram declarados

Agora temos um bot básico que responde uma mensagem estática aos comandos '/start' e '/help' e que ecoa o restante das mensagens enviadas. Para iniciar o bot, adicione o seguinte ao nosso arquivo de origem:

|_+_|

Pronto, é isso! Nosso arquivo de origem agora se parece com isso:

|_+_|

Para iniciar o bot, basta abrir um terminal e digitar |_+_| para executar o bot! Teste-o enviando comandos ('/start' e '/help') e mensagens de texto arbitrárias.

Documentação geral da API

Tipos

Todos os tipos são definidos em types.py. Todos estão totalmente alinhados com o Definição dos tipos da API do Telegram , exceto para |_+_| da Mensagem campo, que é renomeado para |_+_| (porque |_+_| é um token reservado do Python). Assim, atributos como |_+_| pode ser acessado diretamente com |_+_|. Observe que |_+_| pode ser uma instância de |_+_| ou |_+_| (consulte Como distinguir um usuário e um GroupChat no message.chat?

O objeto Message também possui um atributo |_+_|, que define o tipo da Message. |_+_| pode ser uma das seguintes strings: |_+_|, |_+_|, |_+_|, |_+_|, |_+_|, |_+_|, |_+_|, |_+_|, |_+_|, |_+_|, |_+_|, |_+_|, |_+_|, |_+_|, |_+_|, |_ +_|, |_+_|, |_+_|, |_+_|, |_+_|, |_+_|.

Você pode usar alguns tipos em uma função. Exemplo:

|_+_|

Métodos

Tudo Métodos de API estão localizados na classe TeleBot. Eles são renomeados para seguir as convenções comuns de nomenclatura do Python. Por exemplo. |_+_| é renomeado para |_+_| e |_+_| para |_+_|.

Uso geral da API

Abaixo estão descritos alguns casos de uso geral da API.

Manipuladores de mensagens

Um manipulador de mensagens é uma função decorada com o |_+_| decorador de uma instância TeleBot. Os manipuladores de mensagens consistem em um ou vários filtros. Cada filtro deve retornar True para uma determinada mensagem para que um manipulador de mensagens se torne elegível para lidar com essa mensagem. Um manipulador de mensagens é declarado da seguinte maneira (desde que |_+_| seja uma instância do TeleBot):

|_+_|

|_+_| não está sujeito a nenhuma restrição. Qualquer nome de função é permitido com manipuladores de mensagens. A função deve aceitar no máximo um argumento, que será a mensagem que a função deve manipular. |_+_| é uma lista de argumentos de palavras-chave. Um filtro é declarado da seguinte maneira: |_+_|. Um manipulador pode ter vários filtros. O TeleBot suporta os seguintes filtros:

nomeargumento(s)Doença
content_typeslista de strings (padrão |_+_|)|_+_| se message.content_type estiver na lista de strings.
regexpuma expressão regular como uma string|_+_| se |_+_| retorna |_+_| e |_+_| (Ver Expressões Regulares Python )
comandoslista de cordas|_+_| se |_+_| e |_+_| começa com um comando que está na lista de strings.
chat_typeslista de tipos de bate-papo|_+_| se |_+_| no seu filtro
funçãouma função (lambda ou referência de função)|_+_| se a referência lambda ou função retornar |_+_|

Aqui estão alguns exemplos de uso de filtros e manipuladores de mensagens:

|_+_|

Importante: todos os handlers são testados na ordem em que foram declarados

Manipulador de mensagens editadas

Lidar com mensagens editadas |_+_|

o que é o id de usuário da verizon

Gerenciador de postagem do canal

Lidar com mensagens de postagem do canal |_+_|

Gerenciador de postagem do canal editado

Lidar com mensagens de postagem de canal editadas |_+_|

Manipulador de consulta de retorno de chamada

Lidar com consultas de retorno de chamada

|_+_|

Manipulador de consulta de envio

Lidar com consultas de envio |_+_|

Manipulador de consulta pré-checkout

Lidar com consultas pré-checkout |_+_|

Manipulador de enquete

Lidar com atualizações de enquetes |_+_|

Manipulador de respostas de enquetes

Lidar com as respostas da enquete |_+_|

Gerenciador de membros do meu bate-papo

Lidar com atualizações do status de membro do bot em um bate-papo |_+_|

Manipulador de membro do bate-papo

Lidar com atualizações do status de um membro do chat em um chat |_+_| Nota: as atualizações 'chat_member' não são solicitadas por padrão. Se você deseja permitir todos os tipos de atualização, defina |_+_| dentro |_+_| / |_+_| para |_+_|

Manipulador de solicitação de ingresso no bate-papo

Lide com solicitações de entrada de bate-papo usando: |_+_|

Modo em linha

Mais informações sobre Modo embutido .

Negociações em linha

Agora, você pode usar inline_handler para obter consultas inline no telebot.

|_+_|

Manipulador Inline escolhido

Use choose_inline_handler para obter o resultado escolhido_inline no telebot. Não se esqueça de adicionar o comando /setinlinefeedback para @Botfather.

Mais Informações : coleta de feedback

|_+_|

Responder a consulta em linha

|_+_|

Recursos adicionais da API

Manipuladores de middleware

Um manipulador de middleware é uma função que permite modificar solicitações ou o contexto do bot conforme elas passam pelo Telegram para o bot. Você pode imaginar o middleware como uma cadeia de conexão lógica manipulada antes que qualquer outro manipulador seja executado. O processamento de middleware está desabilitado por padrão, habilite-o configurando |_+_|.

|_+_|

Existem outros exemplos usando o manipulador de middleware no exemplos/middleware diretório.

Middlewares baseados em classe

Existem middlewares baseados em classes. Check-out em exemplos

Filtros personalizados

Além disso, você pode usar filtros personalizados integrados. Ou você pode criar seu próprio filtro.

Exemplo de filtro personalizado

Além disso, temos exemplos sobre eles. Verifique estes links:

Você pode verificar alguns filtros internos na fonte código

Exemplo de filtrando por id

Exemplo de filtrando por texto

Se você quiser adicionar algum filtro interno, você pode adicioná-lo no arquivo custom_filters.py.

Aqui está um exemplo de criação de classe de filtro:

|_+_|

telebot

|_+_|

Marcação de resposta

Todos |_+_| funções do TeleBot recebem um opcional |_+_| argumento. Este argumento deve ser uma instância de |_+_|, |_+_| ou |_+_|, que são definidos em types.py.

|_+_|

O último exemplo produz este resultado:

como recuperar mensagens deletadas do twitter

Marcação do teclado de resposta

|_+_||_+_|

ForçarResposta:

Forçar resposta

Trabalhando com entidades

Este objeto representa uma entidade especial em uma mensagem de texto. Por exemplo, hashtags, nomes de usuário, URLs etc. Atributos:

  • |_+_|
  • |_+_|
  • |_+_|
  • |_+_|
  • |_+_|

Aqui está um Exemplo: |_+_|
Aqui |_+_| é o número da entidade ou ordem da entidade em uma resposta, caso haja várias entidades na resposta/mensagem.
|_+_| retorna uma lista de objetos de entidades.
|_+_| daria o tipo da primeira entidade
Referir Bot Api para detalhes extras

Uso avançado da API

Usando o servidor de API de bot local

Desde a versão 5.0 da API do Bot, você tem a possibilidade de executar seu próprio Servidor de API de bot local . pyTelegramBotAPI também suporta esse recurso.

|_+_|

Importante: como descrito aqui , você precisa desconectar seu bot do servidor Telegram antes de alternar para o servidor de API local. no uso de pyTelegramBotAPI |_+_|

Nota: 4200 é uma porta de exemplo

TeleBot assíncrono

Novo: Há uma implementação assíncrona de telebot. Para habilitar esse comportamento, crie uma instância de AsyncTeleBot em vez de TeleBot.

|_+_|

Agora, cada função que chama a API do Telegram é executada em uma tarefa assíncrona separada. O uso do AsyncTeleBot permite que você faça o seguinte:

|_+_|

Veja mais em exemplos

Enviando mensagens de texto grandes

Às vezes, você deve enviar mensagens com mais de 5.000 caracteres. A API do Telegram não pode lidar com tantos caracteres em uma solicitação, então precisamos dividir a mensagem em múltiplos. Veja como fazer isso usando a API:

|_+_|

Ou você pode usar o novo |_+_| função para obter substrings mais significativas:

|_+_|

Controlando a quantidade de Threads usados ​​pelo TeleBot

O construtor TeleBot recebe os seguintes argumentos opcionais:

  • threaded: True/False (padrão True). Um sinalizador para indicar se o TeleBot deve executar manipuladores de mensagens em seu encadeamento de pesquisa.

O mecanismo do ouvinte

Como alternativa aos manipuladores de mensagens, pode-se também registrar uma função como ouvinte do TeleBot.

AVISO: os manipuladores não desaparecerão! Sua mensagem será processada por manipuladores e ouvintes. Além disso, é impossível prever qual funcionará no início por causa do encadeamento. Se você usar threaded=False, os ouvintes personalizados funcionarão mais cedo, depois deles os manipuladores serão chamados. Exemplo:

|_+_|

Usando ganchos da web

Ao usar webhooks o telegrama envia um Update por chamada, para processá-lo você deve chamar process_new_messages([update.message]) ao recebê-lo.

Existem alguns exemplos usando webhooks no exemplos/webhook_examples diretório.

Exploração madeireira

Você pode usar o logger do módulo Telebot para registrar informações de depuração sobre o Telebot. Usar |_+_| para obter o logger do módulo TeleBot. É possível adicionar manipuladores de log personalizados ao logger. Consulte o Página do módulo de log do Python para mais informações.

|_+_|

Procuração

Você pode usar proxy para solicitação. |_+_| objeto usará por chamada |_+_| argumento de proxies.

|_+_|

Se você quiser usar o proxy socket5, você precisa instalar a dependência |_+_| e verifique se você tem a versão mais recente de |_+_|, |_+_|, |_+_|, |_+_| e |_+_|.

|_+_|

Teste

Você pode desabilitar ou alterar a interação com o servidor real do Telegram usando

|_+_|

parâmetro. Você pode passar para lá sua própria função que será chamada ao invés de request.request .

Por exemplo:

|_+_|

Em seguida, você pode usar a API e prosseguir com as solicitações no código do manipulador.

|_+_|

Resultado será:

|_+_|

Conformidade da API

AsyncTeleBot

Versão assíncrona do telebot

Temos uma versão totalmente assíncrona do TeleBot. Esta classe não é controlada por threads. As tarefas assíncronas são criadas para executar todas as coisas.

EchoBot

Exemplo de Echo Bot no AsyncTeleBot:

|_+_|

Como você pode ver aqui, as palavras-chave são await e async.

Por que devo usar assíncrono?

As tarefas assíncronas dependem do desempenho do processador. Muitas tarefas assíncronas podem ser executadas paralelamente, enquanto as tarefas de encadeamento bloqueiam umas às outras.

Diferenças no AsyncTeleBot

AsyncTeleBot é assíncrono. Ele usa aiohttp em vez do módulo de solicitações.

Exemplos

Veja mais exemplos em nosso exemplos pasta

PERGUNTAS FREQUENTES.

Como posso distinguir um usuário e um GroupChat no message.chat?

A API do Telegram Bot suporta o novo tipo Chat para message.chat.

pandas soltando linhas com valores ausentes
  • Verifique o |_+_| atributo em |_+_| objeto:
|_+_|

Como posso lidar com ConnectionResetErrors recorrentes?

As instâncias de bot que ficaram ociosas por muito tempo podem ser rejeitadas pelo servidor ao enviar uma mensagem devido ao tempo limite da última sessão usada. Adicionar |_+_| à sua inicialização para forçar a recreação após 5 minutos sem qualquer atividade.

O grupo de bate-papo do Telegram

Obter ajuda. Discutir. Bater papo.

Canal de telegrama

Junte-se a Canal de notícias . Aqui postaremos lançamentos e atualizações.

Mais exemplos

Modelo de código

Template é uma pasta pronta que contém a arquitetura do projeto básico. Seguem alguns exemplos de template:

Bots usando esta API

  • Bot SiteAlert ( fonte ) por ilteoood - Monitora sites e envia uma notificação sobre alterações
  • TelegramLoggingBot por aRandomStranger
  • Telegrama LMGTFY_bot por GabrielRF - Deixe-me isso no Google para você.
  • Bot de proxy de telegrama por mrgigabyte
  • RadRetroRobot por Tronikart - Bot de telegrama multifuncional RadRetroRobot.
  • Bot de League of Legends ( fonte ) por i32ropie
  • NeoBot por @NeoRanger
  • ColorCodeBot ( fonte ) - Compartilhe trechos de código como HTML e/ou imagens lindamente realçadas por sintaxe.
  • fonte ) por alexandracq - Telegram bot para consultar o menu do refeitório da Universidad de Granada.
  • proxybot - Bot Proxy Simples para Telegram. por p-hash
  • DonorsMalagaBot - DonantesMalagaBot facilita a informação aos doadores de sangue de Málaga sobre os lugares onde podem doar hoje ou nos próximos dias. Também registra a data da última doação para que os doadores saibam quando poderão doar novamente. - por vfranch
  • DuttyBot por Dmytryi Striletskyi - Calendário para uma universidade em Kiev.
  • que ponte por armado - Envie e receba mensagens de/para WhatsApp através do Telegram
  • fonte ) por jcolladosp - Bot Telegram usando a API Python que obtém classificação de filmes do IMDb e metacritic
  • fonte ) por GabrielRF - Enviar para o serviço Kindle.
  • fonte ) por GabrielRF - Bot usado para rastrear pacotes no Serviço de Correio do Brasil.
  • link ) por EeOneDown - Bot com horários para alunos da SPbU.
  • link ) por 0xVK - Bot de horário do Telegram, para estudantes da Zhytomyr Ivan Franko State University.
  • Aprenda ( link ) - Um Telegram Bot criado para ajudar as pessoas a memorizar o vocabulário de outros idiomas.
  • Bot-Telegram-Shodan por rubenleon
  • VigoBusTelegramBot ( GitHubGenericName ) - Bot que disponibiliza autocarros que chegam a uma determinada paragem e tempo restante para a cidade de Vigo (Galiza - Espanha)
  • kaishnik-bot ( fonte ) por remos - bot que mostra todas as informações necessárias para os alunos KNTRU-KAI.
  • Robbie ( fonte ) por @FacuM - Bot de suporte do Telegram para desenvolvedores e mantenedores.
  • AsadovBotName ( fonte ) por @DesExcile - Сatalog de poemas de Eduard Asadov.
  • thesaurus_com_bot ( fonte ) por @LeoSvalov - palavras e sinônimos de dicionário.com e thesaurus.com no telegrama.
  • InfoBot ( fonte ) por @irevenko - Um bot completo que exibe algumas estatísticas (clima, hora, criptografia etc...)
  • FoodBot ( fonte ) por @Fliego - um bot simples para pedidos de comida
  • Desportivo ( fonte ) por @0xnu - bot do Telegram para exibir as últimas notícias, horários de esportes e atualizações de lesões.
  • Bot do Silenciador do JoinGroup ( fonte ) por Respondendo a @Team_Twitter - Um Telegram Bot para remover as notificações de 'entrar no grupo' e 'removido do grupo'.
  • TasksListsBot ( fonte ) por @Pablo-Davila - Um bot gerenciador de listas (tarefas) para o Telegram.
  • MyElizaPsychologistBot ( fonte ) por @Pablo-Davila - Uma implementação do famoso chatbot da psicóloga Eliza.
  • FrcstbotGenericName ( fonte ) por Sraqd . Um bot do Telegram que sempre terá prazer em mostrar a previsão do tempo.
  • MineGramBot por Fabricações da moda . Este bot pode iniciar, parar e monitorar um servidor minecraft.
  • Tabletop DiceBot por dexpiper . Este bot pode rolar vários dados para jogos do tipo RPG, adicionar modificadores positivos e negativos e mostrar descrições curtas para as jogadas.
  • Nome infantilKon por Aceitar . Este bot cria o link 'Adicionar ao calendário do Google' para seus eventos. Dá informações sobre o evento e link de retorno. Funciona para o calendário Jalali e no horário de Teerã. Código fonte
  • Robô tradutor por Areeg Fahad. Este bot pode ser usado para traduzir textos.
  • Bot de criptomoeda digital por Areeg Fahad. Com este bot, agora você pode monitorar os preços de mais de 12 criptomoedas digitais.
  • Bot antirastreamento por Leon Heess (fonte) . Envie qualquer link e o bot fará o possível para remover todo o rastreamento do link que você enviou.
  • Bot do desenvolvedor por Vishal Singh (Código fonte) Este bot de telegrama pode fazer tarefas como pesquisa e clone do GitHub, fornecer recursos de aprendizado de c++, pesquisa de Stackoverflow, Codeforces (visualizador de perfil, problemas aleatórios)
  • bot oneIPO por Aadithya & Filhos Amol Este bot do Telegram fornece atualizações ao vivo, dados e documentos sobre IPOs atuais e futuros (Ofertas Públicas Iniciais)
  • CoronaGraphsBot ( fonte ) por Trevor Winstral - Obtém dados ao vivo do país COVID, plota e informa o usuário
  • ETHLectureBot ( fonte ) por Trevor Winstral - Notifica os alunos da ETH quando suas palestras foram carregadas
  • Bot localizador de Vlun por Resinaproteína 2333 . Este bot pode ajudá-lo a encontrar as informações de vulnerabilidades CVE.
  • ETHGasFeeTrackerBot ( Fonte por DevAdvikGenericName - Obtenha taxas de gás Ethereum ao vivo no GWEI
  • Bot do Planilhas Google por Joachim Stanislaus . Esse bot pode ajudá-lo a rastrear suas despesas fazendo o upload de suas entradas de bot para sua planilha do Google.
  • Bot do GrandQuiz por Carlosma7 . Este bot é um jogo de trivia que permite que você jogue com pessoas de diferentes idades. Este projeto aborda a utilização de um sistema através de chatbots para a realização de um jogo social e intergeracional como alternativa ao desenvolvimento de jogos tradicionais.
  • Dicionário da RAE ( fonte ) Este bot permite encontrar definições de palavras em espanhol usando Dicionário da RAE . Possui mensagem direta e pesquisa em linha.
  • remoteTelegramShell por Enrique Moran . Controle seu computador LinuxOS através do Telegram.
  • Pyfram-telegram-bot Consulte wolframalpha.com e faça uso de sua API através do Telegram.
  • TranslateThisVideoBot Este Bot pode entender texto falado em vídeos e traduzi-lo para o inglês

Quer ter seu bot listado aqui? Basta fazer um pull request. Apenas bots com código-fonte público são aceitos.


Autor: eternnoir
Código fonte: https://github.com/eternnoir/pyTelegramBotAPI
Licença: Licença GPL-2.0