Crie um bot para Telegram e gerencie a escala de plantonistas
O uso de bots em aplicativos de mensagens como o Telegram tem se tornado cada vez mais comum. Eles podem ser utilizados para as mais diversas finalidades, desde tirar dúvidas até realizar tarefas específicas. Neste artigo, apresentaremos um exemplo de bot para o Telegram que permite o cadastro e consulta de plantonistas.
[ Hits: 2.881 ]
Por: Leonardo Berbert Gomes em 04/04/2023 | Blog: https://www.linkedin.com/in/leoberbert
import logging import sqlite3 from datetime import datetime from telegram.ext import Updater, CommandHandler, MessageHandler, filters # Habilitar logs de erro logging.basicConfig(format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', level=logging.ERROR) # Definir o token de acesso do bot TOKEN = "seu_token_aqui" def plantonista_do_dia(update, context): # Obter a data atual hoje = datetime.today().strftime('%Y-%m-%d') # Conectar ao banco de dados conn = sqlite3.connect('plantao.db') # Consultar o plantonista do dia cursor = conn.execute("SELECT plantonista FROM plantao WHERE data=?", (hoje,)) plantonistas = cursor.fetchall() if len(plantonistas) > 0: # Enviar mensagem com o nome do plantonista plantonista = plantonistas[0][0] context.bot.send_message(chat_id=update.effective_chat.id, text=f"O plantonista de hoje é {plantonista}.") else: # Enviar mensagem informando que não há plantonista cadastrado para hoje context.bot.send_message(chat_id=update.effective_chat.id, text="Não há plantonista cadastrado para hoje.") # Fechar a conexão com o banco de dados conn.close() # Definir o comando de ajuda def ajuda(update, context): # Mensagem de ajuda ajuda_texto = "Comandos disponíveis: /plantonista - Mostrar o plantonista do dia /ajuda - Mostrar esta mensagem de ajuda " # Enviar a mensagem de ajuda para o grupo context.bot.send_message(chat_id=update.effective_chat.id, text=ajuda_texto) # Configurar o bot e os handlers de comandos e mensagens updater = Updater(token=TOKEN, use_context=True) dispatcher = updater.dispatcher dispatcher.add_handler(CommandHandler('plantonista', plantonista_do_dia)) dispatcher.add_handler(CommandHandler('ajuda', ajuda)) # Iniciar o bot updater.start_polling() # Mantém o bot em execução updater.idle() # Termina o bot updater.stop()
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Cadastro de Plantonista - Sucesso</title> <style> /* Adicione aqui o CSS solicitado */ body { background-color: #F5F5F5; font-family: Arial, sans-serif; } .container { width: 80%; margin: 0 auto; text-align: center; margin-top: 50px; } .card { background-color: #FFFFFF; border-radius: 8px; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); padding: 30px; margin-bottom: 20px; text-align: center; } h1 { font-size: 32px; margin-top: 0; } p { font-size: 18px; margin-top: 20px; margin-bottom: 20px; } button { font-size: 18px; padding: 10px 30px; background-color: #008CBA; color: #FFFFFF; border: none; border-radius: 4px; cursor: pointer; } </style> </head> <body> <div class="container"> <div class="card"> <h1>Cadastro realizado com sucesso!</h1> <p>Plantonista {{ plantonista }} cadastrado para a data {{ data }}</p> <a href="{{ url_for('cadastro_plantonista') }}"><button>Voltar</button></a> </div> </div> </body> </html>
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Cadastro de Plantonista</title> <style> body { background-color: #fff; color: #333; font-family: Arial, sans-serif; font-size: 16px; line-height: 1.5; margin: 0; padding: 0; } h1 { color: #0072c6; font-size: 2.5em; margin-top: 70px; margin-bottom: 20px; text-align: center; } form { background-color: #f2f2f2; border-radius: 10px; margin: 20px auto; padding: 20px; max-width: 400px; } label { display: block; font-weight: bold; margin-bottom: 10px; } input[type="text"], input[type="date"] { border: none; border-radius: 5px; font-size: 1em; padding: 10px; width: 100%; } input[type="submit"] { background-color: #0072c6; border: none; border-radius: 5px; color: #fff; cursor: pointer; font-size: 1em; margin-top: 20px; padding: 10px; transition: background-color 0.3s ease; width: 100%; } input[type="submit"]:hover { background-color: #005b9e; } </style> </head> <body> <h1>Cadastro de Plantonista</h1> <form action="/plantao" method="POST"> <label for="plantonista">Plantonista:</label> <input type="text" name="plantonista" id="plantonista"><br><br> <label for="data">Data:</label> <input type="date" name="data" id="data" pattern="d{4}-d{2}-d{2}"><br><br> <input type="submit" value="Cadastrar"> </form> </body> </html>
Monitoramento de Comunicação - Blackbox Exporter(ICMP) + Prometheus + Grafana
Monitorando as conversas do MSN
Instalando Apache, PHP e PostgreSQL no Slackware 12 (compilando)
SuperDNS: Solução definitiva para DNS dinâmico
Solucionando problemas no sistema de arquivos
Varredura de PING Utilizando o Python
Esteganografia e Esteganálise: transmissão e detecção de informações ocultas em imagens digitais
Construindo um portscanner TCP com Python
Python - Enviando Backup para Servidor Secundário
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Como renomear arquivos de letras maiúsculas para minúsculas
Imprimindo no formato livreto no Linux
Vim - incrementando números em substituição
Efeito "livro" em arquivos PDF
Como resolver o erro no CUPS: Unable to get list of printer drivers
Alguma pessoa pode me ajudar com drriver Core i3 7020u (Debian 12)? (2)
Mikrotik não mostra bytes nem packtes (1)
Melhores Práticas de Nomenclatura: Pastas, Arquivos e Código [RESOLVID... (4)
[Python] Automação de scan de vulnerabilidades
[Python] Script para analise de superficie de ataque
[Shell Script] Novo script para redimensionar, rotacionar, converter e espelhar arquivos de imagem
[Shell Script] Iniciador de DOOM (DSDA-DOOM, Doom Retro ou Woof!)
[Shell Script] Script para adicionar bordas às imagens de uma pasta