#![feature(new_uninit, once_cell, trait_alias)]

mod bot;
mod cmd;
mod config;
mod utils;

use crate::bot::Bot;
use crate::cmd::Cmd;
use matrix_sdk;
use std::env;

#[tokio::main]
async fn main() -> matrix_sdk::Result<()> {
    config::setup_logging();
    config::check_argument_or_abort(true);

    let basic_cmds = vec![
        Cmd::new_simple(format!("ping"), 0, |_x| true),
        Cmd::new_echo(format!("bot_name"), 0, |_x| format!("toto")),
    ];

    let mut bot = Bot::new(env::args().last().unwrap());
    Bot::add_package(bot.get_configuration(), format!("basic"), basic_cmds);
    bot.connect().await?.listen().await
}