2 Commits
Author SHA1 Message Date
s3rius 60a8af1c2d Fixed notify all.
/ docker_build (push) Failing after 2m16s
/ deploy_helm (push) Has been skipped
release.yaml / docker_build (push) Successful in 9m40s
release.yaml / deploy_helm (push) Successful in 34s
Signed-off-by: Pavel Kirilin <s3riussan@gmail.com>
2026-09-18 11:36:02 +02:00
s3rius 1dd6c21ce4 Updated converted again.
/ docker_build (push) Successful in 3m52s
/ deploy_helm (push) Successful in 14s
Signed-off-by: Pavel Kirilin <s3riussan@gmail.com>
2026-07-17 15:08:51 +02:00
3 changed files with 41 additions and 22 deletions
+33 -19
View File
@@ -38,7 +38,8 @@ lazy_static::lazy_static! {
"TRY",
"AMD",
"RSD",
"THB"
"THB",
"GEL",
];
static ref CONVERTION_ALIASES: HashMap<&'static str, &'static str> = HashMap::from(
@@ -79,6 +80,8 @@ lazy_static::lazy_static! {
("динар", "RSD"),
// THB
("бат", "THB"),
// GEL
("лари", "GEL"),
]
);
@@ -89,7 +92,7 @@ lazy_static::lazy_static! {
.chain(SUPPORTED_CURS.iter().copied())
.collect::<Vec<_>>()
.join("|");
Regex::new(format!(r"\s*(?P<cur_value>\d+([\.,]\d+)?)\s+((?P<cur_name>{a})[\p{{L}}]*)(\s+(в|to|in)\s+(?P<target>{a})[\p{{L}}]*)?").as_str()).unwrap()
Regex::new(format!(r"(?i)\s*(?P<cur_value>\d+([\.,]\d+)?)\s+((?P<cur_name>{a})[\p{{L}}]*)(\s+(в|to|in)\s+(?P<target>{a})[\p{{L}}]*)?").as_str()).unwrap()
};
}
@@ -173,7 +176,6 @@ impl Handler for CurrencyConverter {
let mut mapped = HashSet::new();
for capture in CUR_REGEX.captures_iter(message.text()) {
log::warn!("Captured: {:?}", capture);
// We parse supplied value from message
let Some(num_value) = capture
.name("cur_value")
@@ -184,19 +186,24 @@ impl Handler for CurrencyConverter {
else {
continue;
};
let cur_name = capture.name("cur_name").map(|mtch| mtch.as_str());
let Some(cur_name) = cur_name
// We check if the value is an alias.
.and_then(|val| CONVERTION_ALIASES.get(val).copied())
// get previous value if not.
.or(cur_name)
else {
continue;
let cur_name_raw = capture.name("cur_name").map(|mtch| mtch.as_str());
let cur_name: String = if let Some(val) = cur_name_raw {
let lower = val.to_lowercase();
if let Some(alias) = CONVERTION_ALIASES.get(lower.as_str()) {
alias.to_string()
} else {
val.to_uppercase().to_string()
}
} else {
String::new()
};
if cur_name.is_empty() {
continue;
}
// Now we want to know current nominal for this value.
let Some(nominal) = valutes
// We search for it using cur_name.
.get(cur_name)
.get(cur_name.as_str())
.and_then(|info| info.get("Nominal"))
.map(ToString::to_string)
.and_then(|value| value.as_str().parse::<f64>().ok())
@@ -207,7 +214,7 @@ impl Handler for CurrencyConverter {
// Now we want to know multiplier.
let Some(multiplier) = valutes
.get(cur_name)
.get(cur_name.as_str())
.and_then(|info| info.get("Value"))
.map(ToString::to_string)
.and_then(|value| value.as_str().parse::<f64>().ok())
@@ -219,15 +226,22 @@ impl Handler for CurrencyConverter {
let mut target_name = String::from("RUB");
let target_cur_name = capture.name("target").map(|mtch| mtch.as_str());
let target_cur_name = target_cur_name
.and_then(|val| CONVERTION_ALIASES.get(val).copied())
.or(target_cur_name);
let target_cur_name: String = if let Some(val) = target_cur_name {
let lower = val.to_lowercase();
if let Some(alias) = CONVERTION_ALIASES.get(lower.as_str()) {
alias.to_string()
} else {
val.to_uppercase().to_string()
}
} else {
String::new()
};
if let Some(target_cur) = target_cur_name {
if target_cur == cur_name {
if !target_cur_name.is_empty() {
if target_cur_name == cur_name {
continue;
}
if let Some(info) = valutes.get(target_cur) {
if let Some(info) = valutes.get(target_cur_name.as_str()) {
let Some(target_nominal) = info
.get("Nominal")
.map(ToString::to_string)
+4 -2
View File
@@ -1,4 +1,4 @@
use grammers_client::{types::Chat, Client, Update};
use grammers_client::{types::Chat, Client, InputMessage, Update};
use crate::{bot::handlers::Handler, utils::messages::get_message};
@@ -24,7 +24,9 @@ impl Handler for NotifyAll {
response.push_str(format!("@{username} ").as_str());
}
}
message.reply(response).await?;
message
.reply(InputMessage::from(response).silent(true))
.await?;
Ok(())
}
}
+4 -1
View File
@@ -184,7 +184,10 @@ async fn run(args: BotConfig, client: Client) -> anyhow::Result<()> {
.add_filter(ExcludedChatsFilter(args.excluded_chats.clone()))
.add_filter(UpdateTypeFilter(&[UpdateType::New]))
.add_filter(SilentFilter)
.add_filter(TextFilter(&["@all"], TextMatchMethod::Contains))
.add_filter(TextFilter(
&["@all ", "@all,", "@all."],
TextMatchMethod::Contains,
))
.add_middleware::<MembersCount<100>>(),
// Time conversion utils
FilteredHandler::new(TimeConverter)