Test teloxide 0.14

This commit is contained in:
2025-03-29 22:41:18 +01:00
parent e740333239
commit 3ea53b9e07
5 changed files with 237 additions and 526 deletions

View File

@@ -33,7 +33,7 @@ pub async fn start_axum_server(stop_signal: Arc<AtomicBool>) {
Path(token): Path<String>,
input: String,
) -> impl IntoResponse {
let (_, r_tx) = match BOTS_ROUTES.get(&token).await {
let (_, stop_flag, r_tx) = match BOTS_ROUTES.get(&token).await {
Some(tx) => tx,
None => {
let bot_data = match BOTS_DATA.get(&token).await {
@@ -64,23 +64,22 @@ pub async fn start_axum_server(stop_signal: Arc<AtomicBool>) {
};
let tx = match r_tx.get() {
Some(v) => v,
None => {
BOTS_ROUTES.remove(&token).await;
return StatusCode::SERVICE_UNAVAILABLE;
}
Some(v) => v,
};
if stop_flag.is_stopped() {
BOTS_ROUTES.remove(&token).await;
return StatusCode::SERVICE_UNAVAILABLE;
}
match serde_json::from_str::<Update>(&input) {
Ok(mut update) => {
if let UpdateKind::Error(_) = &mut update.kind {
log::warn!(
"Cannot parse an update.\nValue: {}\n\
This is a bug in teloxide-core, please open an issue here: \
https://github.com/teloxide/teloxide/issues.",
input
);
return StatusCode::OK;
if let UpdateKind::Error(value) = &mut update.kind {
*value = serde_json::from_str(&input).unwrap_or_default();
}
if let Err(err) = tx.send(Ok(update)) {
@@ -90,7 +89,7 @@ pub async fn start_axum_server(stop_signal: Arc<AtomicBool>) {
}
}
Err(error) => {
log::warn!(
log::error!(
"Cannot parse an update.\nError: {:?}\nValue: {}\n\
This is a bug in teloxide-core, please open an issue here: \
https://github.com/teloxide/teloxide/issues.",

View File

@@ -102,7 +102,7 @@ pub async fn start_bot(bot_data: &BotData) {
.dependencies(dptree::deps![bot_data.cache])
.build();
let (stop_token, _stop_flag, tx, listener) = get_listener();
let (stop_token, stop_flag, tx, listener) = get_listener();
tokio::spawn(async move {
dispatcher
@@ -114,6 +114,9 @@ pub async fn start_bot(bot_data: &BotData) {
});
BOTS_ROUTES
.insert(token.to_string(), (stop_token, ClosableSender::new(tx)))
.insert(
token.to_string(),
(stop_token, stop_flag, ClosableSender::new(tx)),
)
.await;
}

View File

@@ -7,7 +7,7 @@ pub mod utils;
use once_cell::sync::Lazy;
use smartstring::alias::String as SmartString;
use teloxide::adaptors::throttle::Limits;
use teloxide::stop::StopToken;
use teloxide::stop::{StopFlag, StopToken};
use tokio::task::JoinSet;
use tracing::log;
@@ -58,6 +58,7 @@ pub static WEBHOOK_CHECK_ERRORS_COUNT: Lazy<Cache<u32, u32>> = Lazy::new(|| {
type StopTokenWithSender = (
StopToken,
StopFlag,
ClosableSender<Result<Update, std::convert::Infallible>>,
);
@@ -68,7 +69,7 @@ pub static BOTS_ROUTES: Lazy<Cache<String, StopTokenWithSender>> = Lazy::new(||
.eviction_listener(|token, value: StopTokenWithSender, _cause| {
log::info!("Stop Bot(token={})!", token);
let (stop_token, mut sender) = value;
let (stop_token, _stop_flag, mut sender) = value;
stop_token.stop();
sender.close();
@@ -147,7 +148,7 @@ impl BotsManager {
}
pub async fn stop_all() {
for (_, (stop_token, _)) in BOTS_ROUTES.iter() {
for (_, (stop_token, _, _)) in BOTS_ROUTES.iter() {
stop_token.stop();
}