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: 3.956 ]
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>
Solucionando problemas no sistema de arquivos
Instalando Apache, PHP e PostgreSQL no Slackware 12 (compilando)
Rundeck - Um Poderoso Agendador de Tarefas
Centralizando logs com Promtail + Loki + Grafana
SuperDNS: Solução definitiva para DNS dinâmico
Programe em Python no jogo Minecraft com seu filho ou sozinho
Como criar um keylogger em Python
Trabalhando com permutações em ordem lexicográfica crescente
Criando um leitor de RSS com Python
Como criar um bot para curtir e comentar perfis do Instagram
Gentoo binário em 2026: UEFI, LUKS, Btrfs e Systemd
Trabalhando Nativamente com Logs no Linux
Jogando Daikatana (Steam) com Patch 1.3 via Luxtorpeda no Linux
LazyDocker – Interface de Usuário em Tempo Real para o Docker
Por que sua empresa precisa de uma PKI (e como automatizar EMISSÕES de certificados via Web API)
Instalando NoMachine no Gentoo com Systemd (acesso Remoto em LAN)
Gentoo: Trocando wpa_supplicant pelo iwd no NetworkManager (Systemd)
OCS Inventory NG: Instalação de Agentes Linux e Windows + Autenticação HTTP
O que houve com slackware ??? (7)
Removere linux-image-6... [RESOLVIDO] (2)
Quando vocês pararam de testar distros? (19)









