initial commit
This commit is contained in:
commit
3efebedb5e
16
Cargo.toml
Normal file
16
Cargo.toml
Normal 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
3
README.md
Normal 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
99
src/main.rs
Normal 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;
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user