diff --git a/CHANGELOG.md b/CHANGELOG.md
index df79bd4..34feb07 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,6 +1,7 @@
# Changelog
- [Changelog](#changelog)
+ - [0.4.0](#040)
- [0.3.4](#034)
- [0.3.3](#033)
- [0.3.2](#032)
@@ -14,6 +15,13 @@
---
+## 0.4.0
+
+Released on 31/08/2022
+
+- From now on courses and aphorisms are read from `parameters.json`. RELOAD REQUIRES A BOT RESTART.
+- Added `PARAMETERS_PATH` to environment parameters
+
## 0.3.4
Released on 29/08/2022
diff --git a/Cargo.toml b/Cargo.toml
index 6160eb8..6f02abd 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -27,6 +27,7 @@ rand = "0.8.5"
redis = { version = "^0.21.6", features = ["tokio-comp"] }
reqwest = { version = "^0.11", features = [ "rustls-tls" ] }
serde = { version = "^1.0.0", features = [ "derive" ] }
+serde_json = "^1.0.0"
sqlx = { version = "^0.6", features = [ "runtime-tokio-rustls", "sqlite" ] }
teloxide = { version = "^0.10", features = ["macros", "auto-send", "rustls", "webhooks", "webhooks-axum"] }
thiserror = "^1.0"
diff --git a/README.md b/README.md
index 4c3bd92..f551aef 100644
--- a/README.md
+++ b/README.md
@@ -7,7 +7,7 @@
~ Le perle e le news del papi su Telegram in ogni momento ~
Developed by @veeso
-Current version: 0.3.4 (29/08/2022)
+Current version: 0.4.0 (31/08/2022)
&'static str {
+ pub fn get_random() -> String {
let mut rng = rand::thread_rng();
- PAPI_APHORISM[rng.gen_range(0..PAPI_APHORISM.len())]
+ let aphorisms = PARAMETERS.get().unwrap().aphorisms.as_slice();
+ aphorisms[rng.gen_range(0..aphorisms.len())].clone()
}
}
-const PAPI_APHORISM: &[&str] = &[
- "La parola più importante che puoi imparare a dire? NO!",
- "Per fare la grana devi svegliarti presto.",
- "Lazzarone, alzati e lucra!",
- "Il vero complotto è stato fatto al danno dei giovani.",
- "Rispondi male ai tuoi clienti e fai montagne di soldi.",
- "Non fate i barboni per due lire.",
- "Perfezionista? Allora sei povero in canna.",
- r#"Chi ti dice "Sì, ma con calma che sei giovane" quando hai 18 anni... è lo stesso che a 30 anni ti diceva "eh, ma dovevi pensarci prima"."#,
- "Io potrei tranquillamente non fare niente, ma non voglio.",
- "Smetto di lavorare e vivo di rendita.",
- "Vuoi diventare ricco? Non hai tutto il tempo del mondo.",
- "Dovete avere 10 mesi di stile di vita in banca.",
- "Se dovete imparare come fare un'azienda, non potete più andare al pub con i vostri amici sfigati a bere la birra.",
- "Moltissimi \"imprenditori\" non mostrano i prezzi per paura che la concorrenza li copi. Ma stiamo scherzando?",
- "Quando ti diranno che parli sempre della stessa cosa vuol dire che stai andando bene.",
- "A.A.A. Cercasi mastino aziendale",
- "All'inizio dovete convertire chi è già in target. Non potete andare su un target più freddo",
- "Meno di 7 ore e addio profitti stellare con il tuo infobusiness",
- "Dovete avere una reale competenza. Se non avete una reale competenza, siete nei casini.",
- "Non potete copiare gli altri. Gli altri brancolano nel buio. Non lo hanno mai saputo e non lo sapranno mai",
- "Sto per farti esplodere il cervello!",
- "Una persona che guadagna 30 mila euro al mese e ne spende 30 mila è più povera di uno che ne guadagna 3 mile e se ne mette via 2 mila.",
- "Tutto il tuo marketing, la comunicazione e il tuo ecosistema deve essere fatto per vendere a prezzi alti.",
- "Io ho risultati, loro NO.",
- "L'essere grigio ti farà andare d'accordo con tutti, ma non ti posizionerà mai come un leader.",
- "Per avere dei soldi dovete vendere qualcosa a qualcuno che valuti quella cosa più di quello che sta pagando.",
- "Verità messianiche: l'impiegato non riesce a capire perché viene pagato.",
- "A volte anche solo avere le palle di chiedere più soldi funziona a priori.",
- "Il conto risparmio non si tocca. Ci morirete con quel conto. Più cresce e più sarete potenti.",
- "Ce l'ho duro come la coda del canguro!",
- "Se sei povero non puoi uscire fuori a mangiare. Le vacanze ti sono precluse.",
- "Marketing online è: come organizziamo un ecosistema che faccia uso di diversi strumenti per vendere in modo organizzato prodotti e servizi ad un mercato di riferimento.",
- "Perché i guru sulle Lamborghini con le fighe tirano così tanto? Perché diciamo che ad un uomo non gli farebbe proprio schifo come situazione.",
- "Dei tuoi titoli ufficiali non frega niente a nessuno. La gente non compra da te perché hai 10 lauree.",
- "Se tu dici: \"perdi peso così sei più in forma\" fallisci. La gente vuole dimagrire per scopare di più.",
- "Sei anche tu bloccato dalla paralisi da analisi e dalle troppe informazioni?",
- "La gente non vuole acquisire competenze. Tu gli devi vendere il risultato che otterranno dopo aver acquisito le competenze che gli stai vendendo.",
- "Crea la community, i likes e gli iscritti... e poi non si capisce come questa cosa vada monetizzata.",
- "Molte persone pensano di diventare ricche producendo tanti soldi quando invece la ricchezza è come gestiamo i soldi.",
- "Ho sempre invidiato chi andava dalle scuole internazionali e sapeva 5 lingue diverse. Questi sono i vantaggi dei soldi.",
- "Dovete arrivare ad avere almeno 10 mesi di stile di vita in banca. Ed è solo l'inizio.",
- "Questa volta lucro IO!",
- "Se avete degli obiettivi, non potete uscire con quelli che dicono YOLO.",
- "Nelle case dei ricchi al 99% la televisione non c'è.",
- "Il tuo mutuo o l'affitto non può costare più del 25% di quello che guadagni.",
- "Chi è uno sfigato? Uno che non ha obiettivi e si ritrova a 50 anni a dire \"boh\".",
- "Ci siamo, è il momento di lucrare!",
- "Per farvi pagare di più dovete rendervi insostitutibili.",
- "Tutti gli atleti e gli attori che finiscono in bancarotta è perché fanno un mucchio di soldi e oltre a sputtanarseli li danno in gestioni a manager che li derubano.",
- "I vostri amici col SUV al 99% stanno facendo finta e quindi sono bugiardi. Perché frequentate dei bugiardi?",
- "Tutte le persone ricche e di successo non guardano la TV.",
- "Quando si vende ai ricchi si hanno molti meno problemi.",
- "Non si arriva a questo essendo grigi. Bisogna essere polarizzanti.",
- "Dalla mediocrità si esce in modo fanatico, verticale ed in aggressività.",
- "Il pirla che ha cominciato con quel prezzo da fame, ha fatto praticamente morire di fame tutti gli altri che l'hanno copiato.",
- "Vendere ai poveri è un pessimo modello di business.",
- "Basta poco per giustificare l'aumento dei prezzi. Prendete Nusret, dove paghi la carne centinaia di dollari solo perché lui o chi per lui ti mette il sale con un movimento scenico.",
- "Se avete capito l'effetto composto pensate che avete 16 anni e mettete 200$ al mese nella borsa. È bellissimo.",
- "La normalità dovrebbe essere andare in tutti i ristoranti che volete senza guardare il prezzo.",
- "Non esiste nessuna azienda che prosperi con margini bassi.",
- "Io ho amici decamilionari, a cui avrei regalato i miei corsi, che li comprano senza dirmelo, perché sono persone con un'altra mentalità, non da poveri.",
- "Se io faccio pagare una pizza 15€ e me la pagano... è tutto a posto.",
- "Uno degli errori è guardare la concorrenza e copiargli il prezzo o addirittura abbassarlo.",
- "Non è più difficile vendere a prezzi alti. Lo è se provate a vendere a prezzi alti ai poveri.",
- "Non è vero che è più facile vendere low ticket invece che high ticket.",
- "Arrivati ad un certo livello ragazzi non è più il marketing a fare la differenza...",
- "Ci sono persone di successo che NON si alzano alle 5-6-7 di mattino.",
- "Urge privatino!",
- "Chi è povero non capisce i ricchi, sono come alieni.",
- "Le persone sono pericolose, voi dovete essere terrorizzati dalle persone",
- "La vostra vita è una merda, perché siete circondati dalle persone tossiche. Dovete isolarvi.",
- "Le notifiche sono il MALE assoluto.",
- "Se siete delle persone ambiziose e volete di più dalla vita dovete ISOLARVI.",
- r#"Nota del papi:
-Signori davvero...
-Chiunque abbia un infobusiness, venda videocorsi, consulenza o servizi done-for-you...
-NON può fare a meno di queste informazioni.
-E lo confermano i risultati e le testimonianze degli studenti che grazie alle stesse sono stati in grado di RADDOPPIARE, TRIPLICARE o addirittura DECUPLICARE i propri profitti netti nel giro di pochi mesi.
-Inoltre, lo dico chiaro e tondo...
-
-CHIUNQUE non abbia accesso a queste informazioni nel 2022 semplicemente ha un HANDICAP...
-Ed è destinato a farsi ECLISSARE dai propri competitor."#,
- "Le persone normali non hanno obiettivi, non avendo obiettivi non possono sprecare il tempo.",
- "Le persone vi stanno rovinando la vita.",
- "La povertà è una malattia mentale",
- "È giusto lucrare su ogni opportunità.",
- "Noleggiare i costi, acquisire i ricavi.",
- "Ci sarà il link da qualche parte...",
- "Dove c'è aggregazione c'è mediocrità.",
- "Povero ma dignitoso, sta minchia.",
- "Il papi sono IO.",
- "Apprpinquatevi signori.",
- "Non vogliono solo 5 minuti del vostro tempo, questi vogliono vedervi fallire.",
- "Il sottobosco è il vero bosco.",
- "Fare marketing non è 'i facebook ADS'",
- "I soldi sono la libertà.",
- "Le persone mentono e rubane se ne hanno la possibilitò.",
- "La media è il popolume che il gira il mondo nutrendosi di banane."
-];
-
#[cfg(test)]
mod test {
use super::*;
+ use crate::big_luca::Parameters;
+ use std::path::Path;
#[test]
- fn should_get_papi_aphorism() {
+ fn should_get_random_aphorism() {
+ assert!(PARAMETERS
+ .set(Parameters::try_from_path(Path::new("config/parameters.json")).unwrap())
+ .is_ok());
assert!(!Aphorism::get_random().is_empty());
+ assert!(PARAMETERS
+ .get()
+ .unwrap()
+ .aphorisms
+ .contains(&Aphorism::get_random()))
}
}
diff --git a/src/big_luca/config.rs b/src/big_luca/config.rs
index e71aae8..ba14b6d 100644
--- a/src/big_luca/config.rs
+++ b/src/big_luca/config.rs
@@ -2,10 +2,13 @@
//!
//! big-luca-bot configuration
+use std::path::PathBuf;
+
#[derive(Debug, Deserialize, Serialize)]
/// Application config
pub struct Config {
pub database_url: String,
+ pub parameters_path: PathBuf,
pub redis_url: String,
pub rsshub_url: String,
pub teloxide_token: String,
diff --git a/src/big_luca/mod.rs b/src/big_luca/mod.rs
index 6345f74..0b1db3b 100644
--- a/src/big_luca/mod.rs
+++ b/src/big_luca/mod.rs
@@ -7,6 +7,7 @@ mod aphorism;
mod automatize;
mod commands;
mod config;
+mod parameters;
mod redis;
mod repository;
mod rsshub;
@@ -22,9 +23,11 @@ use automatize::Automatizer;
use commands::Command;
pub use config::Config;
use once_cell::sync::OnceCell;
+pub use parameters::Parameters;
use stickers::Stickers;
pub static AUTOMATIZER: OnceCell = OnceCell::new();
+pub static PARAMETERS: OnceCell = OnceCell::new();
/// Big luca bot application
pub struct BigLuca {
@@ -35,15 +38,21 @@ impl BigLuca {
/// Initialize big luca
pub async fn init() -> anyhow::Result {
// parse configuration
+ let config = Config::try_from_env()?;
if let Err(err) = Config::try_from_env() {
return Err(err);
}
let automatizer = Automatizer::start()
.await
.map_err(|e| anyhow::anyhow!("failed to start automatizer: {}", e))?;
+ // read parameters
if AUTOMATIZER.set(automatizer).is_err() {
anyhow::bail!("failed to set automatizer");
};
+ let parameters = Parameters::try_from_path(&config.parameters_path)?;
+ if PARAMETERS.set(parameters).is_err() {
+ anyhow::bail!("failed to set parameters");
+ }
let bot = Bot::from_env().auto_send();
Ok(Self { bot })
}
@@ -121,7 +130,7 @@ La lista di attesa può durare mesi e solo in pochi dopo una rigida selezione ri
fn get_release() -> Answer {
Answer::simple_text(format!(
- "big-luca-bot {}. Sviluppato da @veeso97. Sostieni il mio progetto su Ko-Fi https://ko-fi.com/veeso",
+ "big-luca-bot {}. Sviluppato da @veeso97. Contribuisci al progetto su Github https://github.com/veeso/big-luca-bot. Sostieni il mio progetto su Ko-Fi https://ko-fi.com/veeso",
env!("CARGO_PKG_VERSION")
))
}
@@ -189,10 +198,11 @@ La lista di attesa può durare mesi e solo in pochi dopo una rigida selezione ri
/// Get latest active courses
fn active_courses() -> Answer {
- AnswerBuilder::default()
- .text(
- r#"È uscito il nuovo libro del Papi "Alzati (tardi) e lucra!", solo fino al 26 agosto 👉 https://bit.ly/alzatielucra"#,
- ).finalize()
+ let mut builder = AnswerBuilder::default();
+ for course in PARAMETERS.get().unwrap().courses.iter() {
+ builder = builder.text(course);
+ }
+ builder.finalize()
}
/// Subscribe chat to the automatizer
diff --git a/src/big_luca/parameters.rs b/src/big_luca/parameters.rs
new file mode 100644
index 0000000..f109329
--- /dev/null
+++ b/src/big_luca/parameters.rs
@@ -0,0 +1,37 @@
+//! # Parameters
+//!
+//! This file contains all the values required to collect aphorisms and the courses
+
+use std::fs::File;
+use std::io::BufReader;
+use std::path::Path;
+
+#[derive(Debug, Deserialize, Serialize, Clone)]
+#[serde(rename_all = "camelCase")]
+pub struct Parameters {
+ pub aphorisms: Vec,
+ pub courses: Vec,
+}
+
+impl Parameters {
+ /// Try to parse parameters from file path
+ pub fn try_from_path(p: &Path) -> anyhow::Result {
+ let mut file = BufReader::new(
+ File::open(p)
+ .map_err(|e| anyhow::anyhow!("could not open file {}: {}", p.display(), e))?,
+ );
+ serde_json::from_reader(&mut file)
+ .map_err(|e| anyhow::anyhow!("failed to parse parameters: {}", e))
+ }
+}
+
+#[cfg(test)]
+mod test {
+
+ use super::*;
+
+ #[test]
+ fn should_parse_from_default_parameters() {
+ assert!(Parameters::try_from_path(Path::new("config/parameters.json")).is_ok());
+ }
+}