Split handling of comand results from execution.
continuous-integration/drone/push Build is passing
Details
continuous-integration/drone/push Build is passing
Details
This commit is contained in:
parent
d30d39ff1e
commit
85557c0382
29
src/bot.rs
29
src/bot.rs
|
@ -69,14 +69,14 @@ async fn handle_single_result(
|
||||||
/// out how many commands succeeded and failed (if any failed).
|
/// out how many commands succeeded and failed (if any failed).
|
||||||
async fn handle_multiple_results(
|
async fn handle_multiple_results(
|
||||||
client: &Client,
|
client: &Client,
|
||||||
results: &[(&str, ExecutionResult)],
|
results: &[(String, ExecutionResult)],
|
||||||
respond_to: &str,
|
respond_to: &str,
|
||||||
room: &Joined,
|
room: &Joined,
|
||||||
) {
|
) {
|
||||||
let errors: Vec<(&str, &ExecutionError)> = results
|
let errors: Vec<(&str, &ExecutionError)> = results
|
||||||
.into_iter()
|
.into_iter()
|
||||||
.filter_map(|(cmd, result)| match result {
|
.filter_map(|(cmd, result)| match result {
|
||||||
Err(e) => Some((*cmd, e)),
|
Err(e) => Some((cmd.as_ref(), e)),
|
||||||
_ => None,
|
_ => None,
|
||||||
})
|
})
|
||||||
.collect();
|
.collect();
|
||||||
|
@ -182,8 +182,7 @@ impl DiceBot {
|
||||||
room: &Joined,
|
room: &Joined,
|
||||||
sender_username: &str,
|
sender_username: &str,
|
||||||
msg_body: &str,
|
msg_body: &str,
|
||||||
event_id: EventId,
|
) -> Vec<(String, ExecutionResult)> {
|
||||||
) {
|
|
||||||
let room_name: &str = &room.display_name().await.ok().unwrap_or_default();
|
let room_name: &str = &room.display_name().await.ok().unwrap_or_default();
|
||||||
|
|
||||||
let commands: Vec<&str> = msg_body
|
let commands: Vec<&str> = msg_body
|
||||||
|
@ -193,7 +192,7 @@ impl DiceBot {
|
||||||
.collect();
|
.collect();
|
||||||
|
|
||||||
//Up to 50 commands allowed, otherwise we send back an error.
|
//Up to 50 commands allowed, otherwise we send back an error.
|
||||||
let results: Vec<(&str, ExecutionResult)> = if commands.len() < MAX_COMMANDS_PER_MESSAGE {
|
let results: Vec<(String, ExecutionResult)> = if commands.len() < MAX_COMMANDS_PER_MESSAGE {
|
||||||
stream::iter(commands)
|
stream::iter(commands)
|
||||||
.then(|command| async move {
|
.then(|command| async move {
|
||||||
let ctx = Context {
|
let ctx = Context {
|
||||||
|
@ -205,14 +204,28 @@ impl DiceBot {
|
||||||
};
|
};
|
||||||
|
|
||||||
let cmd_result = execute_command(&ctx).await;
|
let cmd_result = execute_command(&ctx).await;
|
||||||
(command, cmd_result)
|
info!("[{}] {} executed: {}", room_name, sender_username, command);
|
||||||
|
(command.to_owned(), cmd_result)
|
||||||
})
|
})
|
||||||
.collect()
|
.collect()
|
||||||
.await
|
.await
|
||||||
} else {
|
} else {
|
||||||
vec![("", Err(ExecutionError(BotError::MessageTooLarge)))]
|
vec![(
|
||||||
|
"".to_owned(),
|
||||||
|
Err(ExecutionError(BotError::MessageTooLarge)),
|
||||||
|
)]
|
||||||
};
|
};
|
||||||
|
|
||||||
|
results
|
||||||
|
}
|
||||||
|
|
||||||
|
pub async fn handle_results(
|
||||||
|
&self,
|
||||||
|
room: &Joined,
|
||||||
|
sender_username: &str,
|
||||||
|
event_id: EventId,
|
||||||
|
results: Vec<(String, ExecutionResult)>,
|
||||||
|
) {
|
||||||
if results.len() >= 1 {
|
if results.len() >= 1 {
|
||||||
if results.len() == 1 {
|
if results.len() == 1 {
|
||||||
handle_single_result(
|
handle_single_result(
|
||||||
|
@ -226,8 +239,6 @@ impl DiceBot {
|
||||||
} else if results.len() > 1 {
|
} else if results.len() > 1 {
|
||||||
handle_multiple_results(&self.client, &results, sender_username, &room).await;
|
handle_multiple_results(&self.client, &results, sender_username, &room).await;
|
||||||
}
|
}
|
||||||
|
|
||||||
info!("[{}] {} executed: {}", room_name, sender_username, msg_body);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,7 +11,6 @@ use matrix_sdk::{
|
||||||
room::message::{MessageEventContent, MessageType, TextMessageEventContent},
|
room::message::{MessageEventContent, MessageType, TextMessageEventContent},
|
||||||
StrippedStateEvent, SyncMessageEvent, SyncStateEvent,
|
StrippedStateEvent, SyncMessageEvent, SyncStateEvent,
|
||||||
},
|
},
|
||||||
identifiers::RoomId,
|
|
||||||
room::{Common, Invited, Joined},
|
room::{Common, Invited, Joined},
|
||||||
EventHandler, Room,
|
EventHandler, Room,
|
||||||
};
|
};
|
||||||
|
@ -209,7 +208,11 @@ impl EventHandler for DiceBot {
|
||||||
return;
|
return;
|
||||||
};
|
};
|
||||||
|
|
||||||
self.execute_commands(&room, &sender_username, &msg_body, event.event_id.clone())
|
let results = self
|
||||||
|
.execute_commands(&room, &sender_username, &msg_body)
|
||||||
|
.await;
|
||||||
|
|
||||||
|
self.handle_results(&room, &sender_username, event.event_id.clone(), results)
|
||||||
.await;
|
.await;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue