Skip to main content

Framework para criar bots do Telegram

Project description

Dicgram Dicgram

Dicgram é um Framework simples para criação de bots para o Telegram em Python

Instalação

pip install dicgram ou python setup.py install

O uso dele é bem simples, basta criar um arquivo principal e importar o Dicgram, e criar uma instância do Bot.

Classe Bot

A classe Bot é a classe principal do módulo dicgram.cliente. Ela é responsável por fazer a conexão com o Telegram e gerenciar os eventos.

Parâmetros:

  • token (str) - O token do bot que você recebeu do BotFather.
  • polling (bool, opcional) - Se o bot deve receber atualizações de novas mensagens. Padrão é True.
  • polling_rate (float | int, opcional) - O tempo de espera, em segundos, para receber uma resposta do Telegram. Padrão é 0.5.
  • webhook_url (str, opcional) - A URL do webhook. Padrão é None.
  • webhook_port (int, opcional) - A porta do server para o webhook. Padrão é 8000.

Comandos

Os comandos são criados em um dicionário, onde a chave é o comando e o valor é uma string que será enviada como resposta ao comando enviado pelo usuário.

Exemplo de uso básico

from dicgram import Bot

bot = Bot('<TOKEN>')

# Responde aos comandos no privado
bot.privado = {
    '/start': 'Olá, mundo! Eu sou um bot!',
    '/help': 'Em que posso ajudar? :)',
}

# Responde aos comandos em canais e grupos
bot.publico = {
    '/start': 'Olá, mundo! (publico)',
    '/help': 'Em que posso ajudar, (publico)?',
}

# Usuário privado: /start 
# Bot: Olá, mundo! Eu sou um bot!

# Usuário público: /start
# Bot: Olá, mundo! (publico)

# Usuário privado: /help
# Bot: Em que posso ajudar? :)

# Usuário público: /help
# Bot: Em que posso ajudar, (publico)?

Além disso, é possível criar comandos com parâmetros, que serão passados como argumentos para a função manipuladora.

Exemplo de uso intermediário

from dicgram import Bot

bot = Bot('<TOKEN>')

def soma(mim, msg, args):
    return sum(map(int, args))

bot.privado = {
    '/soma': soma,
}

# Usuário: /soma 1 2 3
# Bot: 6

# Usuário: /soma 1 2 3 4 5 6 7 8 9 10
# Bot: 55

# Usuário: /soma 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
# Bot: 210

Quer tornar seu bot mais dinâmico? Existem dois argumentos de fluxo opcionais para a função manipuladora, mim e msg.

O primeiro é um objeto da classe Bot, que contém informações do seu bot e métodos da API do Telegram para enviar mensagens, arquivos, etc.

O segundo é um objeto da classe Mensagem, que contém informações sobre a mensagem enviada pelo usuário, como o ID do usuário, o nome do usuário, o ID do chat, o tipo do chat, etc.

Exemplo de uso intermediário ||

from dicgram import Bot

bot = Bot('<TOKEN>')

def consultar_cotacao(mim, msg, args):
    if not args:
        mim.send_message(chat_id=msg.from_user.id, text='Você precisa informar o nome da moeda.')
        return 'Uma mensagem foi enviada para você no privado.'

    moeda = args[0].upper()
    if moeda not in ('USD', 'EUR', 'BTC'):
        bot.send_message(chat_id=msg.from_user.id, text='Moeda inválida.')
        return 'Enviei uma mensagem para você no privado.'

    cotacao = {
        'USD': 3.75,
        'EUR': 4.20,
        'BTC': 50000.00,
    }[moeda]

    return f'A cotação do {moeda} é {cotacao}.'


bot.privado['/start'] = 'Olá, mundo! Eu sou um bot!'
bot.publico['/cotacao'] = consultar_cotacao


# Usuário público: /cotacao
# Bot privado: Você precisa informar o nome da moeda.
# Bot público: Uma mensagem foi enviada para você no privado.

# Usuário público: /cotacao usd
# Bot publico: A cotação do USD é 3.75.

# Usuário público: /cotacao xyz
# Bot privado: Moeda inválida.
# Bot público: Enviei uma mensagem para você no privado.

# Usuário privado: /start
# Bot: Olá, mundo! Eu sou um bot!

Tem certos momentos em que você quer que o bot responda a uma mensagem específica, sem que seja necessário um comando. Para isso, você pode usar chaves de eventos para o dicionário de comandos.

No momento, existem três chaves de eventos:

  • @mensagem
  • @edit
  • @chat

A chave @mensagem é usada para responder a eventos de mensagens novas.

A chave @chat é usada para responder a eventos do que acontece no chat, como um novo usuário entrando no grupo, um usuário saindo do grupo, etc.

A chave @edit é usada para responder a eventos de mensagens editadas pelo usuário.

Exemplo de uso avançado

from dicgram import Bot

bot = Bot(token='<TOKEN>')

usuarios = {}
chat = None


def contador_de_mensagens(mim, msg, args):
    global chat
    chat = msg.chat.id

    if msg.from_user.id not in usuarios:
        usuarios[msg.from_user.id] = 1
    else:
        usuarios[msg.from_user.id] += 1


def mostrar_contagem(mim, msg, args):
    if msg.from_user.id in usuarios:
        nome = msg.from_user.first_name
        return f'{nome}, você já mandou {usuarios[msg.from_user.id]} mensagens'
    else:
        return 'Você ainda não mandou nenhuma mensagem'


def desligar_contador(mim, msg, args):
    mim.publico.pop('@mensagem', None)
    usuarios.clear()
    mim.send_message(chat_id=chat,
                    text='Pessoas, o contador de mensagens foi desligado pelo admin')
    return 'Contador de mensagens desligado!'


bot.publico = {
    '@mensagem': contador_de_mensagens,
    '/contagem': mostrar_contagem,
}
bot.privado['/desligar'] = desligar_contador

# Usuário1 público: /contagem
# Bot público: Você ainda não mandou nenhuma mensagem

# Usuário1 público: Olá, mundo!

# Usuário1 público: /contagem
# Bot público: Dev, você já mandou 1 mensagens

# Usuário privdao: /desligar
# Bot privado: Contador de mensagens desligado!
# Bot público: Pessoas, o contador de mensagens foi desligado pelo admin

Os métodos da API do Telegram são acessados através da instância da classe Bot. Por exemplo, o método send_message é acessado através de bot.send_message. O nome dos métodos é o mesmo da API do Telegram, mas em snake_case.

A documentação da API do Telegram pode ser encontrada aqui.

Exemplo de uso de métodos da API do Telegram

from dicgram import Bot


bot = Bot(token='<TOKEN>', update=False)

bot.set_chat_title(chat_id='<ID DO GRUPO>', title='Novo título do grupo')
bot.send_location(chat_id='<ID DO GRUPO>', latitude=-23.5505, longitude=-46.6333)
# etc...

Projeto feito por Marcelo

Licença

MIT License

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

dicgram-2.1.2.tar.gz (11.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

dicgram-2.1.2-py3-none-any.whl (11.1 kB view details)

Uploaded Python 3

File details

Details for the file dicgram-2.1.2.tar.gz.

File metadata

  • Download URL: dicgram-2.1.2.tar.gz
  • Upload date:
  • Size: 11.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.9.18

File hashes

Hashes for dicgram-2.1.2.tar.gz
Algorithm Hash digest
SHA256 59cd934049603bc1d474e789c763b51fa060c8b7bf47b2d205eab41cfb677db9
MD5 8048e80164a2f6a97721e46e3e9093d1
BLAKE2b-256 0f369ffaf23232ee9544d692e6a125814a54ccbd81c1016c6b6291d2c898bf90

See more details on using hashes here.

File details

Details for the file dicgram-2.1.2-py3-none-any.whl.

File metadata

  • Download URL: dicgram-2.1.2-py3-none-any.whl
  • Upload date:
  • Size: 11.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.9.18

File hashes

Hashes for dicgram-2.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 0b3d75732502834638d958af2edb1fa595a203d9991f4516e777158cdb05e513
MD5 a3a5972f24f3ea87f953ed8f7da1c3a4
BLAKE2b-256 d53fc9d7f86ad1fcd2327b67385e238ca1d31c272fae82e2134c17c2f589077a

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page