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