mirror of
https://github.com/RYGhub/royalnet.git
synced 2024-11-24 20:14:19 +00:00
Run "Reformat code..." IDE feature
This commit is contained in:
parent
b84b70080f
commit
ec3f5daff7
34 changed files with 67626 additions and 67621 deletions
|
@ -51,7 +51,7 @@ impl RoyalnetInstance {
|
|||
fn run_pending_migrations() {
|
||||
if !config::interface_database::DATABASE_AUTOMIGRATE() {
|
||||
log::warn!("Database automigration is disabled.");
|
||||
return
|
||||
return;
|
||||
}
|
||||
|
||||
log::debug!("Automatically applying database migrations...");
|
||||
|
@ -90,13 +90,13 @@ impl RoyalnetInstance {
|
|||
}
|
||||
|
||||
#[cfg(feature = "service_telegram")]
|
||||
fn get_telegram_future(service: &mut crate::services::telegram::TelegramService) -> impl Future<Output = ()> + '_ {
|
||||
fn get_telegram_future(service: &mut crate::services::telegram::TelegramService) -> impl Future<Output=()> + '_ {
|
||||
service.run_loop()
|
||||
}
|
||||
|
||||
#[cfg(not(feature = "service_telegram"))]
|
||||
#[allow(clippy::manual_async_fn)]
|
||||
fn get_telegram_future(_service: &mut ()) -> impl Future<Output = ()> + '_ {
|
||||
fn get_telegram_future(_service: &mut ()) -> impl Future<Output=()> + '_ {
|
||||
async {}
|
||||
}
|
||||
|
||||
|
@ -122,13 +122,13 @@ impl RoyalnetInstance {
|
|||
}
|
||||
|
||||
#[cfg(feature = "service_brooch")]
|
||||
fn get_brooch_future(service: &mut crate::services::brooch::BroochService) -> impl Future<Output = ()> + '_ {
|
||||
fn get_brooch_future(service: &mut crate::services::brooch::BroochService) -> impl Future<Output=()> + '_ {
|
||||
service.run_loop()
|
||||
}
|
||||
|
||||
#[cfg(not(feature = "service_brooch"))]
|
||||
#[allow(clippy::manual_async_fn)]
|
||||
fn get_brooch_future(_service: &mut ()) -> impl Future<Output = ()> + '_ {
|
||||
fn get_brooch_future(_service: &mut ()) -> impl Future<Output=()> + '_ {
|
||||
async {}
|
||||
}
|
||||
}
|
|
@ -63,7 +63,7 @@ pub(crate) mod telegram_ext {
|
|||
text,
|
||||
teloxide::types::InlineKeyboardButtonKind::CallbackData(
|
||||
self.callback_data(matchmaking_id)
|
||||
)
|
||||
),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
@ -355,7 +355,7 @@ pub(crate) mod telegram_ext {
|
|||
pub async fn destroy_and_send_delete(
|
||||
self,
|
||||
database: &mut PgConnection,
|
||||
bot: &teloxide::Bot
|
||||
bot: &teloxide::Bot,
|
||||
)
|
||||
-> AnyResult<()>
|
||||
{
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
// @generated automatically by Diesel CLI.
|
||||
|
||||
pub mod sql_types {
|
||||
#[derive(diesel::query_builder::QueryId, Clone, diesel::sql_types::SqlType)]
|
||||
#[diesel(postgres_type(name = "matchmaking_choice"))]
|
||||
pub struct MatchmakingChoice;
|
||||
#[derive(diesel::query_builder::QueryId, Clone, diesel::sql_types::SqlType)]
|
||||
#[diesel(postgres_type(name = "matchmaking_choice"))]
|
||||
pub struct MatchmakingChoice;
|
||||
}
|
||||
|
||||
diesel::table! {
|
||||
|
|
|
@ -1,37 +1,37 @@
|
|||
query Query($guild_id: Int!) {
|
||||
guild(id: $guild_id) {
|
||||
id
|
||||
matches(take: 10) {
|
||||
id
|
||||
lobbyType
|
||||
gameMode
|
||||
durationSeconds
|
||||
endDateTime
|
||||
players(steamAccountId: null) {
|
||||
isRadiant
|
||||
isVictory
|
||||
imp
|
||||
kills
|
||||
deaths
|
||||
assists
|
||||
lane
|
||||
role
|
||||
hero {
|
||||
displayName
|
||||
}
|
||||
steamAccount {
|
||||
id
|
||||
name
|
||||
}
|
||||
stats {
|
||||
matchPlayerBuffEvent {
|
||||
time
|
||||
itemId
|
||||
abilityId
|
||||
stackCount
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
guild(id: $guild_id) {
|
||||
id
|
||||
matches(take: 10) {
|
||||
id
|
||||
lobbyType
|
||||
gameMode
|
||||
durationSeconds
|
||||
endDateTime
|
||||
players(steamAccountId: null) {
|
||||
isRadiant
|
||||
isVictory
|
||||
imp
|
||||
kills
|
||||
deaths
|
||||
assists
|
||||
lane
|
||||
role
|
||||
hero {
|
||||
displayName
|
||||
}
|
||||
steamAccount {
|
||||
id
|
||||
name
|
||||
}
|
||||
stats {
|
||||
matchPlayerBuffEvent {
|
||||
time
|
||||
itemId
|
||||
abilityId
|
||||
stackCount
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
File diff suppressed because it is too large
Load diff
16
src/main.rs
16
src/main.rs
|
@ -7,15 +7,15 @@ pub(crate) mod utils;
|
|||
|
||||
#[tokio::main]
|
||||
async fn main() {
|
||||
// Logging setup
|
||||
pretty_env_logger::init();
|
||||
log::debug!("Logging initialized successfully!");
|
||||
// Logging setup
|
||||
pretty_env_logger::init();
|
||||
log::debug!("Logging initialized successfully!");
|
||||
|
||||
// Create instance
|
||||
let instance = RoyalnetInstance::new().await;
|
||||
// Create instance
|
||||
let instance = RoyalnetInstance::new().await;
|
||||
|
||||
log::trace!("Starting {instance:?}!");
|
||||
instance.run().await;
|
||||
log::trace!("Starting {instance:?}!");
|
||||
instance.run().await;
|
||||
|
||||
log::error!("No services configured.");
|
||||
log::error!("No services configured.");
|
||||
}
|
||||
|
|
|
@ -40,7 +40,7 @@ impl BroochService {
|
|||
min_players_to_process: usize,
|
||||
telegram_bot_token: String,
|
||||
notification_chat_id: ChatId,
|
||||
max_imp_wait: TimeDelta
|
||||
max_imp_wait: TimeDelta,
|
||||
)
|
||||
-> AnyResult<Self>
|
||||
{
|
||||
|
@ -352,21 +352,21 @@ impl BroochService {
|
|||
side = match (side, player.is_radiant) {
|
||||
(_, None) => {
|
||||
anyhow::bail!("Non è stata ricevuta da STRATZ la squadra di almeno uno dei giocatori.")
|
||||
},
|
||||
}
|
||||
(None, Some(true)) => {
|
||||
Some(Radiant)
|
||||
},
|
||||
}
|
||||
(None, Some(false)) => {
|
||||
Some(Dire)
|
||||
},
|
||||
}
|
||||
(Some(Radiant), Some(true)) |
|
||||
(Some(Dire), Some(false)) => {
|
||||
side
|
||||
},
|
||||
}
|
||||
(Some(Radiant), Some(false)) |
|
||||
(Some(Dire), Some(true)) => {
|
||||
Some(Both)
|
||||
},
|
||||
}
|
||||
(Some(Both), _) => {
|
||||
break
|
||||
}
|
||||
|
@ -391,21 +391,21 @@ impl BroochService {
|
|||
outcome = match (outcome, player.is_victory) {
|
||||
(_, None) => {
|
||||
anyhow::bail!("Non è stata ricevuta da STRATZ la squadra di almeno uno dei giocatori.")
|
||||
},
|
||||
}
|
||||
(None, Some(true)) => {
|
||||
Some(Victory)
|
||||
},
|
||||
}
|
||||
(None, Some(false)) => {
|
||||
Some(Defeat)
|
||||
},
|
||||
}
|
||||
(Some(Victory), Some(true)) |
|
||||
(Some(Defeat), Some(false)) => {
|
||||
outcome
|
||||
},
|
||||
}
|
||||
(Some(Victory), Some(false)) |
|
||||
(Some(Defeat), Some(true)) => {
|
||||
Some(Clash)
|
||||
},
|
||||
}
|
||||
(Some(Clash), _) => {
|
||||
break
|
||||
}
|
||||
|
@ -534,14 +534,14 @@ impl BroochService {
|
|||
use Lane::*;
|
||||
|
||||
match (role, lane) {
|
||||
( Some(CORE), Some(SAFE_LANE)) => 1,
|
||||
( Some(CORE), Some(MID_LANE)) => 2,
|
||||
( Some(CORE), Some(OFF_LANE)) => 3,
|
||||
( _, Some(ROAMING)) => 4,
|
||||
( _, Some(JUNGLE)) => 5,
|
||||
(Some(LIGHT_SUPPORT), _) => 6,
|
||||
( Some(HARD_SUPPORT), _) => 7,
|
||||
( _, _) => 8,
|
||||
(Some(CORE), Some(SAFE_LANE)) => 1,
|
||||
(Some(CORE), Some(MID_LANE)) => 2,
|
||||
(Some(CORE), Some(OFF_LANE)) => 3,
|
||||
(_, Some(ROAMING)) => 4,
|
||||
(_, Some(JUNGLE)) => 5,
|
||||
(Some(LIGHT_SUPPORT), _) => 6,
|
||||
(Some(HARD_SUPPORT), _) => 7,
|
||||
(_, _) => 8,
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -552,14 +552,14 @@ impl BroochService {
|
|||
log::trace!("Stringifying role and lane...");
|
||||
|
||||
match (role, lane) {
|
||||
( CORE, SAFE_LANE) => "1️⃣ Safe Carry",
|
||||
( CORE, MID_LANE) => "2️⃣ Mid Carry",
|
||||
( CORE, OFF_LANE) => "3️⃣ Off Tank",
|
||||
( _, ROAMING) => "🔀 Roaming",
|
||||
( _, JUNGLE) => "⏫ Jungle",
|
||||
(LIGHT_SUPPORT, _) => "4️⃣ Soft Support",
|
||||
( HARD_SUPPORT, _) => "5️⃣ Hard Support",
|
||||
( _, _) => "🆕 Sconosciuto",
|
||||
(CORE, SAFE_LANE) => "1️⃣ Safe Carry",
|
||||
(CORE, MID_LANE) => "2️⃣ Mid Carry",
|
||||
(CORE, OFF_LANE) => "3️⃣ Off Tank",
|
||||
(_, ROAMING) => "🔀 Roaming",
|
||||
(_, JUNGLE) => "⏫ Jungle",
|
||||
(LIGHT_SUPPORT, _) => "4️⃣ Soft Support",
|
||||
(HARD_SUPPORT, _) => "5️⃣ Hard Support",
|
||||
(_, _) => "🆕 Sconosciuto",
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -661,7 +661,7 @@ impl BroochService {
|
|||
|
||||
if !self.should_process_match_exists(database, match_id)? {
|
||||
log::trace!("Skipping match, already parsed.");
|
||||
return Ok((match_id, None))
|
||||
return Ok((match_id, None));
|
||||
}
|
||||
|
||||
let datetime = self.get_match_datetime(&r#match)?;
|
||||
|
@ -675,12 +675,12 @@ impl BroochService {
|
|||
|
||||
if !self.should_process_match_players(&players) {
|
||||
log::trace!("Skipping match, not enough players.");
|
||||
return Ok((match_id, None))
|
||||
return Ok((match_id, None));
|
||||
}
|
||||
|
||||
if !self.should_process_match_imp(&players, &timedelta) {
|
||||
log::trace!("Skipping match, IMP is not ready.");
|
||||
return Ok((match_id, None))
|
||||
return Ok((match_id, None));
|
||||
}
|
||||
|
||||
players.sort_unstable_by_key(|a| Self::numberify_role_lane(&a.role, &a.lane));
|
||||
|
|
|
@ -17,10 +17,10 @@ pub trait RoyalnetService {
|
|||
match result {
|
||||
Err(e) => {
|
||||
log::error!("Service exited with error: {e:?}.")
|
||||
},
|
||||
}
|
||||
_ => {
|
||||
log::debug!("Service exited successfully!")
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
let backoff_secs = backoff.as_secs();
|
||||
|
|
|
@ -12,70 +12,70 @@ use crate::services::telegram::commands::CommandResult;
|
|||
// Se avete un'idea ma metterebbe troppe opzioni in un'unica categoria, mettetela sotto commento.
|
||||
const ANSWERS: [&str; 60] = [
|
||||
// risposte "sì": 20
|
||||
"🔵 Sì.",
|
||||
"🔵 Decisamente sì!",
|
||||
"🔵 Uhm, secondo me sì.",
|
||||
"🔵 Sì! Sì! SÌ!",
|
||||
"🔵 Yup.",
|
||||
"🔵 Direi proprio di sì.",
|
||||
"🔵 Assolutamente sì.",
|
||||
"🔵 Ma certo!",
|
||||
"🔵 Esatto!",
|
||||
"🔵 Senz'altro!",
|
||||
"🔵 Ovviamente.",
|
||||
"🔵 Questa domanda ha risposta affermativa.",
|
||||
"🔵 Hell yeah.",
|
||||
"🔵 YES! YES! YES!",
|
||||
"🔵 yusssssss",
|
||||
"🔵 Non vedo perchè no",
|
||||
"🔵 Ha senso, ha perfettamente senso, nulla da obiettare, ha senso.",
|
||||
"🔵 Yos!",
|
||||
"🔵 Sì, ma tienilo segreto...",
|
||||
"🔵 [RADIO] Affermativo.",
|
||||
"🔵 Sì.",
|
||||
"🔵 Decisamente sì!",
|
||||
"🔵 Uhm, secondo me sì.",
|
||||
"🔵 Sì! Sì! SÌ!",
|
||||
"🔵 Yup.",
|
||||
"🔵 Direi proprio di sì.",
|
||||
"🔵 Assolutamente sì.",
|
||||
"🔵 Ma certo!",
|
||||
"🔵 Esatto!",
|
||||
"🔵 Senz'altro!",
|
||||
"🔵 Ovviamente.",
|
||||
"🔵 Questa domanda ha risposta affermativa.",
|
||||
"🔵 Hell yeah.",
|
||||
"🔵 YES! YES! YES!",
|
||||
"🔵 yusssssss",
|
||||
"🔵 Non vedo perchè no",
|
||||
"🔵 Ha senso, ha perfettamente senso, nulla da obiettare, ha senso.",
|
||||
"🔵 Yos!",
|
||||
"🔵 Sì, ma tienilo segreto...",
|
||||
"🔵 [RADIO] Affermativo.",
|
||||
|
||||
// risposte "no": 20
|
||||
"❌ No.",
|
||||
"❌ Decisamente no!",
|
||||
"❌ Uhm, secondo me sì. No, aspetta, ci ho ripensato. È un no.",
|
||||
"❌ No, no, e ancora NO!",
|
||||
"❌ Nope.",
|
||||
"❌ Direi proprio di no.",
|
||||
"❌ Assolutamente no.",
|
||||
"❌ Certo che no!",
|
||||
"❌ Neanche per idea!",
|
||||
"❌ Neanche per sogno!",
|
||||
"❌ Niente affatto!",
|
||||
"❌ Questa domanda ha risposta negativa.",
|
||||
"❌ Hell no.",
|
||||
"❌ NO! NO! NO!",
|
||||
"❌ lolno",
|
||||
"❌ NEIN NEIN NEIN NEIN",
|
||||
"❌ Delet dis",
|
||||
"❌ Nopety nope!",
|
||||
"❌ No, ma tienilo segreto.",
|
||||
"❌ [RADIO] Negativo.",
|
||||
// risposte "no": 20
|
||||
"❌ No.",
|
||||
"❌ Decisamente no!",
|
||||
"❌ Uhm, secondo me sì. No, aspetta, ci ho ripensato. È un no.",
|
||||
"❌ No, no, e ancora NO!",
|
||||
"❌ Nope.",
|
||||
"❌ Direi proprio di no.",
|
||||
"❌ Assolutamente no.",
|
||||
"❌ Certo che no!",
|
||||
"❌ Neanche per idea!",
|
||||
"❌ Neanche per sogno!",
|
||||
"❌ Niente affatto!",
|
||||
"❌ Questa domanda ha risposta negativa.",
|
||||
"❌ Hell no.",
|
||||
"❌ NO! NO! NO!",
|
||||
"❌ lolno",
|
||||
"❌ NEIN NEIN NEIN NEIN",
|
||||
"❌ Delet dis",
|
||||
"❌ Nopety nope!",
|
||||
"❌ No, ma tienilo segreto.",
|
||||
"❌ [RADIO] Negativo.",
|
||||
|
||||
// risposte "boh": 20
|
||||
"❔ Boh.",
|
||||
"❔ E io che ne so?!",
|
||||
"❔ Non so proprio rispondere.",
|
||||
"❔ Non lo so...",
|
||||
"❔ Mi avvalgo della facoltà di non rispondere.",
|
||||
"❔ Non parlerò senza il mio avvocato!",
|
||||
"❔ Dunno.",
|
||||
"❔ Perché lo chiedi a me?",
|
||||
"❔ Ah, non lo so io!",
|
||||
r#"❔ ¯\_(ツ)_/¯"#,
|
||||
"❔ No idea.",
|
||||
"❔ Dunno.",
|
||||
"❔ Boooooh!",
|
||||
"❔ Non ne ho la più pallida idea.",
|
||||
"❔ No comment.",
|
||||
"❔ maibi",
|
||||
"❔ maibi not",
|
||||
"❔ idk dude",
|
||||
"❔ Non mi è permesso condividere questa informazione.",
|
||||
"❔ [RADIO] Mantengo la posizione.",
|
||||
// risposte "boh": 20
|
||||
"❔ Boh.",
|
||||
"❔ E io che ne so?!",
|
||||
"❔ Non so proprio rispondere.",
|
||||
"❔ Non lo so...",
|
||||
"❔ Mi avvalgo della facoltà di non rispondere.",
|
||||
"❔ Non parlerò senza il mio avvocato!",
|
||||
"❔ Dunno.",
|
||||
"❔ Perché lo chiedi a me?",
|
||||
"❔ Ah, non lo so io!",
|
||||
r#"❔ ¯\_(ツ)_/¯"#,
|
||||
"❔ No idea.",
|
||||
"❔ Dunno.",
|
||||
"❔ Boooooh!",
|
||||
"❔ Non ne ho la più pallida idea.",
|
||||
"❔ No comment.",
|
||||
"❔ maibi",
|
||||
"❔ maibi not",
|
||||
"❔ idk dude",
|
||||
"❔ Non mi è permesso condividere questa informazione.",
|
||||
"❔ [RADIO] Mantengo la posizione.",
|
||||
];
|
||||
|
||||
pub async fn handler(bot: &Bot, message: &Message) -> CommandResult {
|
||||
|
|
|
@ -47,16 +47,16 @@ impl FromStr for DiarioArgs {
|
|||
let context = captures.name("context")
|
||||
.map(|s| s.as_str().to_owned());
|
||||
|
||||
DiarioArgs {warning, quote, quoted, context}
|
||||
},
|
||||
DiarioArgs { warning, quote, quoted, context }
|
||||
}
|
||||
None => {
|
||||
let warning = None;
|
||||
let quote = s.to_string();
|
||||
let quoted = None;
|
||||
let context = None;
|
||||
|
||||
DiarioArgs {warning, quote, quoted, context}
|
||||
},
|
||||
DiarioArgs { warning, quote, quoted, context }
|
||||
}
|
||||
};
|
||||
|
||||
Ok(args)
|
||||
|
@ -65,7 +65,8 @@ impl FromStr for DiarioArgs {
|
|||
|
||||
impl TelegramWrite for Diario {
|
||||
fn write_telegram<T>(&self, f: &mut T) -> Result<(), Error>
|
||||
where T: Write
|
||||
where
|
||||
T: Write,
|
||||
{
|
||||
// Diario ID
|
||||
write!(f, "<code>#{}</code>", self.id)?;
|
||||
|
|
|
@ -174,14 +174,14 @@ const FORTUNES: [&str; 164] = [
|
|||
"🍻 Oggi una birra ti ridarà una vita!",
|
||||
"🎶 Oggi Hatsune Miku si nasconderà nella tua Wi-Fi!",
|
||||
"🚽 Oggi delle telecamere combatteranno contro dei gabinetti!",
|
||||
"🌟 Oggi verrà scoperta una galassia grande quanto qualcuno della tua famiglia!",
|
||||
"🎶 Oggi Rick non rinuncerà mai a te!",
|
||||
"🏚 Oggi ristrutturerai una villa completando dei minigiochi match-3!",
|
||||
"🌟 Oggi verrà scoperta una galassia grande quanto qualcuno della tua famiglia!",
|
||||
"🎶 Oggi Rick non rinuncerà mai a te!",
|
||||
"🏚 Oggi ristrutturerai una villa completando dei minigiochi match-3!",
|
||||
];
|
||||
|
||||
struct FortuneKey {
|
||||
today: chrono::NaiveDate,
|
||||
author_id: teloxide::types::UserId
|
||||
author_id: teloxide::types::UserId,
|
||||
}
|
||||
|
||||
impl Hash for FortuneKey {
|
||||
|
@ -201,7 +201,7 @@ pub async fn handler(bot: &Bot, message: &Message) -> CommandResult {
|
|||
.context("Non è stato possibile determinare chi ha inviato questo comando.")?;
|
||||
let author_id = author.id;
|
||||
|
||||
let key = FortuneKey {today, author_id};
|
||||
let key = FortuneKey { today, author_id };
|
||||
|
||||
let mut hasher = std::hash::DefaultHasher::new();
|
||||
key.hash(&mut hasher);
|
||||
|
|
|
@ -34,7 +34,9 @@ type CommandResult = AnyResult<()>;
|
|||
pub enum Command {
|
||||
#[command(description = "Invia messaggio di introduzione.")]
|
||||
Start,
|
||||
#[command(description = "Visualizza l'elenco dei comandi disponibili, o mostra informazioni su uno specifico comando.")]
|
||||
#[command(
|
||||
description = "Visualizza l'elenco dei comandi disponibili, o mostra informazioni su uno specifico comando."
|
||||
)]
|
||||
Help(String),
|
||||
#[command(description = "Mostra il tuo oroscopo di oggi.")]
|
||||
Fortune,
|
||||
|
|
|
@ -9,19 +9,19 @@ use teloxide::types::ReplyParameters;
|
|||
use crate::services::telegram::commands::CommandResult;
|
||||
|
||||
pub async fn handler(bot: &Bot, message: &Message, roll: &str) -> CommandResult {
|
||||
let mut rng = rand::rngs::SmallRng::from_entropy();
|
||||
let mut rng = rand::rngs::SmallRng::from_entropy();
|
||||
|
||||
if rng.gen_range(1..1001) == 1 {
|
||||
let _reply = bot
|
||||
if rng.gen_range(1..1001) == 1 {
|
||||
let _reply = bot
|
||||
.send_message(message.chat.id, "🎶 Roll? Rick roll! https://www.youtube.com/watch?v=dQw4w9WgXcQ")
|
||||
.reply_parameters(ReplyParameters::new(message.id))
|
||||
.await
|
||||
.context("Non è stato possibile inviare la risposta.")?;
|
||||
|
||||
return Ok(())
|
||||
}
|
||||
return Ok(());
|
||||
}
|
||||
|
||||
let re = Regex::new(r#"(?P<qty>[0-9]*)?d(?P<die>[0-9]+)(?P<modifier>[+-]+[0-9]+)?"#).unwrap();
|
||||
let re = Regex::new(r#"(?P<qty>[0-9]*)?d(?P<die>[0-9]+)(?P<modifier>[+-]+[0-9]+)?"#).unwrap();
|
||||
|
||||
let captures = re.captures(roll)
|
||||
.context("Sintassi dei dadi non corretta.")?;
|
||||
|
@ -44,20 +44,20 @@ pub async fn handler(bot: &Bot, message: &Message, roll: &str) -> CommandResult
|
|||
.unwrap_or(Ok(0))
|
||||
.context("Il modificatore dei dadi lanciati deve essere un numero intero.")?;
|
||||
|
||||
if die == 0 {
|
||||
if die == 0 {
|
||||
anyhow::bail!("Non è stato specificato nessun dado.")
|
||||
}
|
||||
}
|
||||
|
||||
if qty < 1 {
|
||||
anyhow::bail!("La quantità di dadi specificata deve essere un intero positivo.")
|
||||
}
|
||||
if qty < 1 {
|
||||
anyhow::bail!("La quantità di dadi specificata deve essere un intero positivo.")
|
||||
}
|
||||
|
||||
let mut nums_rolled = Vec::<u32>::new();
|
||||
for _ in 0..qty {
|
||||
nums_rolled.push(
|
||||
let mut nums_rolled = Vec::<u32>::new();
|
||||
for _ in 0..qty {
|
||||
nums_rolled.push(
|
||||
rng.gen_range(1..=die)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
let roll_string = nums_rolled
|
||||
.iter()
|
||||
|
@ -65,18 +65,18 @@ pub async fn handler(bot: &Bot, message: &Message, roll: &str) -> CommandResult
|
|||
.collect::<Vec<String>>()
|
||||
.join("\n");
|
||||
|
||||
let mut answer = format!("🎲 [{roll_string}]");
|
||||
let mut answer = format!("🎲 [{roll_string}]");
|
||||
|
||||
if modifier != 0 {
|
||||
if modifier != 0 {
|
||||
answer.push_str(&format!("{modifier:+}"))
|
||||
}
|
||||
}
|
||||
|
||||
answer.push_str(" = ");
|
||||
answer.push_str(" = ");
|
||||
|
||||
let sum: u32 = nums_rolled.iter().sum();
|
||||
let sum: i32 = sum as i32 + modifier;
|
||||
let sum: u32 = nums_rolled.iter().sum();
|
||||
let sum: i32 = sum as i32 + modifier;
|
||||
|
||||
answer.push_str(&sum.to_string());
|
||||
answer.push_str(&sum.to_string());
|
||||
|
||||
let _reply = bot
|
||||
.send_message(message.chat.id, answer)
|
||||
|
|
|
@ -13,10 +13,10 @@ pub async fn handler(bot: &Bot, message: &Message) -> CommandResult {
|
|||
let author_username = match author.username.as_ref() {
|
||||
None => {
|
||||
author.first_name.clone()
|
||||
},
|
||||
}
|
||||
Some(username) => {
|
||||
format!("@{}", &username)
|
||||
},
|
||||
}
|
||||
};
|
||||
|
||||
let me = bot
|
||||
|
|
|
@ -36,7 +36,7 @@ impl FromStr for KeyboardCallback {
|
|||
.parse()
|
||||
.map(|c| Self::Matchmaking(id, c))
|
||||
.context("Impossibile processare i dati.")
|
||||
},
|
||||
}
|
||||
x => {
|
||||
anyhow::bail!("Keyword sconosciuta: {x:?}")
|
||||
}
|
||||
|
|
|
@ -46,7 +46,7 @@ impl TelegramService {
|
|||
database_url,
|
||||
bot,
|
||||
me,
|
||||
notification_chat_id
|
||||
notification_chat_id,
|
||||
};
|
||||
|
||||
log::trace!("Created service: {service:#?}");
|
||||
|
@ -152,8 +152,8 @@ impl TelegramService {
|
|||
.endpoint(KeyboardCallback::handle_self)
|
||||
)
|
||||
.endpoint(KeyboardCallback::handle_unknown)
|
||||
)
|
||||
)
|
||||
),
|
||||
)
|
||||
.dependencies(
|
||||
dptree::deps![
|
||||
database
|
||||
|
|
|
@ -2,7 +2,8 @@ use std::fmt::{Error, Write};
|
|||
|
||||
pub trait TelegramWrite {
|
||||
fn write_telegram<T>(&self, f: &mut T) -> Result<(), Error>
|
||||
where T: Write;
|
||||
where
|
||||
T: Write;
|
||||
|
||||
fn to_string_telegram(&self) -> String {
|
||||
let mut result = String::new();
|
||||
|
@ -16,7 +17,8 @@ pub trait TelegramEscape {
|
|||
}
|
||||
|
||||
impl<T> TelegramEscape for T
|
||||
where String: From<T>
|
||||
where
|
||||
String: From<T>,
|
||||
{
|
||||
fn escape_telegram_html(self) -> String {
|
||||
String::from(self)
|
||||
|
|
Loading…
Reference in a new issue