rearrange mod file structure
This commit is contained in:
parent
e8245413ab
commit
b70bdde318
7 changed files with 60 additions and 39 deletions
2
build.rs
2
build.rs
|
|
@ -2,4 +2,4 @@
|
||||||
fn main() {
|
fn main() {
|
||||||
// trigger recompilation when a new migration is added
|
// trigger recompilation when a new migration is added
|
||||||
println!("cargo:rerun-if-changed=migrations");
|
println!("cargo:rerun-if-changed=migrations");
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,2 @@
|
||||||
pub mod bot;
|
pub mod bot;
|
||||||
pub mod log;
|
|
||||||
pub mod sanitize;
|
pub mod sanitize;
|
||||||
pub mod util;
|
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,5 @@
|
||||||
use anyhow;
|
use anyhow;
|
||||||
use sqlx::migrate::MigrateDatabase;
|
use sqlx::SqlitePool;
|
||||||
use sqlx::{Sqlite, SqlitePool};
|
|
||||||
use std::env;
|
use std::env;
|
||||||
use std::fmt;
|
use std::fmt;
|
||||||
use std::str;
|
use std::str;
|
||||||
|
|
@ -13,9 +12,6 @@ use teloxide::types::InputFile;
|
||||||
use teloxide::{prelude::*, update_listeners::Polling, utils::command::BotCommands};
|
use teloxide::{prelude::*, update_listeners::Polling, utils::command::BotCommands};
|
||||||
use tracing::{event, Level};
|
use tracing::{event, Level};
|
||||||
|
|
||||||
use super::log::log_init;
|
|
||||||
use super::util::make_database_url;
|
|
||||||
|
|
||||||
use crate::dl::delete_if_exists;
|
use crate::dl::delete_if_exists;
|
||||||
use crate::dl::download;
|
use crate::dl::download;
|
||||||
|
|
||||||
|
|
@ -38,19 +34,10 @@ where
|
||||||
.expect(format!("env '{}' parse error", name).as_str())
|
.expect(format!("env '{}' parse error", name).as_str())
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn bot_main() -> anyhow::Result<()> {
|
pub async fn bot_main(db: SqlitePool) -> anyhow::Result<()> {
|
||||||
log_init();
|
|
||||||
event!(Level::INFO, "start");
|
event!(Level::INFO, "start");
|
||||||
|
|
||||||
let db_url = make_database_url();
|
// db_init
|
||||||
if !Sqlite::database_exists(&db_url).await.unwrap_or(false) {
|
|
||||||
Sqlite::create_database(&db_url)
|
|
||||||
.await
|
|
||||||
.expect("failed to create database");
|
|
||||||
}
|
|
||||||
|
|
||||||
let db = SqlitePool::connect(&db_url).await?;
|
|
||||||
sqlx::migrate!().run(&db).await?;
|
|
||||||
|
|
||||||
let bot = Bot::new(env::var("BOT_TOKEN")?);
|
let bot = Bot::new(env::var("BOT_TOKEN")?);
|
||||||
let listener = Polling::builder(bot.clone())
|
let listener = Polling::builder(bot.clone())
|
||||||
|
|
@ -104,29 +91,33 @@ struct DbUser {
|
||||||
pub first_name: String,
|
pub first_name: String,
|
||||||
pub last_name: Option<String>,
|
pub last_name: Option<String>,
|
||||||
pub can_download: i64,
|
pub can_download: i64,
|
||||||
pub is_admin: i64
|
pub is_admin: i64,
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn cmd_test(bot: Bot, msg: Message, db: SqlitePool) -> HandlerResult {
|
async fn cmd_test(bot: Bot, msg: Message, db: SqlitePool) -> HandlerResult {
|
||||||
bot.send_message(msg.chat.id, "test response").await?;
|
bot.send_message(msg.chat.id, "test response").await?;
|
||||||
|
|
||||||
let user = msg.from().unwrap();
|
let user = msg.from().unwrap();
|
||||||
|
|
||||||
let conn = db.acquire().await?;
|
|
||||||
sqlx::query("INSERT OR IGNORE user
|
|
||||||
(tg_id, user_name, first_name, last_name, can_download, is_admin)
|
|
||||||
VALUES ($1, $2, $3, $4, $5, $6);")
|
|
||||||
.bind(user.id.0 as i64)
|
|
||||||
.bind(&user.username)
|
|
||||||
.bind(&user.first_name)
|
|
||||||
.bind(&user.last_name)
|
|
||||||
.bind(0)
|
|
||||||
.bind(0)
|
|
||||||
.execute(&db).await.expect("insert");
|
|
||||||
|
|
||||||
let db_user = sqlx::query_as!(DbUser,
|
sqlx::query(
|
||||||
"SELECT * FROM user WHERE id = 1 LIMIT 1;")
|
"INSERT OR IGNORE INTO user
|
||||||
.fetch_one(&db).await.expect("fetch_one");
|
(tg_id, username, first_name, last_name, can_download, is_admin)
|
||||||
|
VALUES ($1, $2, $3, $4, $5, $6);",
|
||||||
|
)
|
||||||
|
.bind(user.id.0 as i64)
|
||||||
|
.bind(&user.username)
|
||||||
|
.bind(&user.first_name)
|
||||||
|
.bind(&user.last_name)
|
||||||
|
.bind(0)
|
||||||
|
.bind(0)
|
||||||
|
.execute(&db)
|
||||||
|
.await
|
||||||
|
.expect("insert");
|
||||||
|
|
||||||
|
let db_user = sqlx::query_as!(DbUser, "SELECT * FROM user WHERE id = 1 LIMIT 1;")
|
||||||
|
.fetch_one(&db)
|
||||||
|
.await
|
||||||
|
.expect("fetch_one");
|
||||||
dbg!(db_user);
|
dbg!(db_user);
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
|
||||||
18
src/db.rs
Normal file
18
src/db.rs
Normal file
|
|
@ -0,0 +1,18 @@
|
||||||
|
use sqlx::migrate::MigrateDatabase;
|
||||||
|
use sqlx::{Sqlite, SqlitePool};
|
||||||
|
|
||||||
|
use super::util::make_database_url;
|
||||||
|
|
||||||
|
pub async fn db_init() -> SqlitePool {
|
||||||
|
let db_url = make_database_url();
|
||||||
|
if !Sqlite::database_exists(&db_url).await.unwrap_or(false) {
|
||||||
|
Sqlite::create_database(&db_url)
|
||||||
|
.await
|
||||||
|
.expect("failed to create database");
|
||||||
|
}
|
||||||
|
|
||||||
|
let db = SqlitePool::connect(&db_url).await.unwrap();
|
||||||
|
sqlx::migrate!().run(&db).await.unwrap();
|
||||||
|
|
||||||
|
db
|
||||||
|
}
|
||||||
|
|
@ -1,14 +1,18 @@
|
||||||
use std::io;
|
use std::io;
|
||||||
use tracing::{level_filters::LevelFilter, Subscriber};
|
use tracing::{level_filters::LevelFilter, Subscriber};
|
||||||
//use tracing_appender::rolling::{RollingFileAppender, Rotation};
|
//use tracing_appender::rolling::{RollingFileAppender, Rotation};
|
||||||
use tracing_subscriber::{fmt, layer::SubscriberExt, layer::Filter, prelude::*};
|
use tracing_subscriber::{fmt, layer::Filter, layer::SubscriberExt, prelude::*};
|
||||||
|
|
||||||
//use super::util::VAR_LOG;
|
//use super::util::VAR_LOG;
|
||||||
|
|
||||||
// A layer filter to prevent polling timeout errors from clogging logs
|
// A layer filter to prevent polling timeout errors from clogging logs
|
||||||
struct TeloxideNoiseFilter {}
|
struct TeloxideNoiseFilter {}
|
||||||
impl<S: Subscriber> Filter<S> for TeloxideNoiseFilter {
|
impl<S: Subscriber> Filter<S> for TeloxideNoiseFilter {
|
||||||
fn enabled(&self, meta: &tracing::Metadata<'_>, _: &tracing_subscriber::layer::Context<'_,S>) -> bool {
|
fn enabled(
|
||||||
|
&self,
|
||||||
|
meta: &tracing::Metadata<'_>,
|
||||||
|
_: &tracing_subscriber::layer::Context<'_, S>,
|
||||||
|
) -> bool {
|
||||||
if let Some(module_path) = meta.module_path() {
|
if let Some(module_path) = meta.module_path() {
|
||||||
if module_path == "teloxide::error_handlers" {
|
if module_path == "teloxide::error_handlers" {
|
||||||
false
|
false
|
||||||
|
|
@ -21,7 +25,6 @@ impl<S: Subscriber> Filter<S> for TeloxideNoiseFilter {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#[cfg(debug_assertions)]
|
#[cfg(debug_assertions)]
|
||||||
const LOG_LEVEL: LevelFilter = LevelFilter::DEBUG;
|
const LOG_LEVEL: LevelFilter = LevelFilter::DEBUG;
|
||||||
|
|
||||||
13
src/main.rs
13
src/main.rs
|
|
@ -5,10 +5,21 @@ use bot::bot::bot_main;
|
||||||
|
|
||||||
mod dl;
|
mod dl;
|
||||||
|
|
||||||
|
mod util;
|
||||||
|
|
||||||
|
mod log;
|
||||||
|
use log::log_init;
|
||||||
|
|
||||||
|
mod db;
|
||||||
|
use db::db_init;
|
||||||
|
|
||||||
#[tokio::main]
|
#[tokio::main]
|
||||||
async fn main() -> anyhow::Result<()> {
|
async fn main() -> anyhow::Result<()> {
|
||||||
dotenv().ok();
|
dotenv().ok();
|
||||||
|
|
||||||
bot_main().await?;
|
log_init();
|
||||||
|
let db = db_init().await;
|
||||||
|
|
||||||
|
bot_main(db).await?;
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue