initial commit

This commit is contained in:
Kevin Muñoz 2024-11-04 15:34:38 -05:00
commit 3efebedb5e
Signed by: mrhacker
GPG Key ID: E5616555DD4EDAAE
3 changed files with 118 additions and 0 deletions

16
Cargo.toml Normal file
View File

@ -0,0 +1,16 @@
[package]
name = "bot-reservas-rust"
version = "0.1.0"
edition = "2021"
rust-version = "1.77.2"
authors = ["Kevin Muñoz <kmunoz@condorbs.net>", "Kevin Muñoz <kevin.munoz.m@uniminuto.edu>"]
description = "Reserva tus espacion de uniminuto con este bot de telegram reescrito en rust"
repository = "https://condorcs.net/mrhacker/bot-reservas-rust"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
teloxide = "*"
mysql = "*"
dotenv = "*"
chrono = "*"

3
README.md Normal file
View File

@ -0,0 +1,3 @@
# bot-reservas-rust
Repositorio fuente del código en Rust para el bot de Telegram para realizar reservas en Uniminuto

99
src/main.rs Normal file
View File

@ -0,0 +1,99 @@
use teloxide::{prelude::*, types::{InlineKeyboardButton, InlineKeyboardMarkup, BotCommand, ParseMode}, utils::command::BotCommands};
use mysql::*;
use mysql::prelude::*;
use dotenv::dotenv;
use std::env;
use chrono::NaiveDate;
use std::collections::HashMap;
#[derive(BotCommands, Clone)]
#[command(rename = "lowercase", description = "Comandos disponibles:")]
enum Command {
#[command(description = "Iniciar el bot.")]
Start,
#[command(description = "Mostrar ayuda.")]
Help,
#[command(description = "Reservar un espacio.")]
Reservar,
#[command(description = "Cancelar una reserva.")]
Cancelar,
#[command(description = "Consultar detalles de una reserva.")]
Consultar,
}
// Estructura de categorías y espacios
fn espacios() -> HashMap<&'static str, Vec<&'static str>> {
let mut espacios: HashMap<&'static str, Vec<&'static str>> = HashMap::new();
espacios.insert("Auditorio", vec![
"Auditorio B205-C202",
"Auditorio Escalonado Grande",
"Auditorio Escalonado Pequeño"
]);
espacios.insert("Plazoleta", vec![
"Plazoleta Jesus y Maria",
"Plazoleta RGH",
"Plazoleta de la Cruz",
"Plazoleta Verde",
"Plazoleta R Piso 9",
"Hall Torre B-C"
]);
espacios.insert("Sala de Juntas", vec![
"Sala de Juntas", "Sala de Juntas RGH", "Sala de Juntas FCC", "Sala de Juntas FCE",
"Sala de Juntas FING", "Sala de Juntas FEDU", "Sala de Juntas I+D", "Sala de Juntas FCHS",
"Coworking 1", "Coworking 2"
]);
espacios
}
// Conexión a la base de datos
fn connect_db() -> PooledConn {
dotenv().ok();
let db_host = env::var("DB_HOST").unwrap();
let db_user = env::var("DB_USER").unwrap();
let db_passwd = env::var("DB_PASSWD").unwrap();
let db_db = env::var("DB_DB").unwrap();
let url = format!("mysql://{}:{}@{}/{}", db_user, db_passwd, db_host, db_db);
let pool = Pool::new(url).unwrap();
pool.get_conn().unwrap()
}
#[tokio::main]
async fn main() {
dotenv().ok();
let bot_token = env::var("BOT_TOKEN").expect("Token de bot no encontrado.");
let bot = Bot::new(bot_token).auto_send();
teloxide::commands_repl(bot.clone(), Command::ty(), move |cx, command| async move {
match command {
Command::Start => {
cx.answer("¡Hola! Soy Recon, tu asistente de reservas en UNIMINUTO. Usa /reservar para comenzar.")
.await?;
}
Command::Help => {
cx.answer("Comandos disponibles:\n/reservar - Para hacer una reserva\n/cancelar - Para cancelar una reserva\n/consultar - Para consultar una reserva.")
.await?;
}
Command::Reservar => {
// Lógica para comenzar una reserva
cx.answer("Por favor, proporciona tu nombre:").await?;
// Aquí continúa la interacción paso a paso con el usuario
}
Command::Cancelar => {
// Lógica para cancelar una reserva
cx.answer("Funcionalidad de cancelación en desarrollo...").await?;
}
Command::Consultar => {
// Lógica para consultar reservas
cx.answer("Funcionalidad de consulta en desarrollo...").await?;
}
}
Ok::<(), Box<dyn std::error::Error>>(())
})
.await;
}