Do not process commands coming from ourselves (help text)
continuous-integration/drone/push Build is passing
Details
continuous-integration/drone/push Build is passing
Details
This commit is contained in:
parent
38a7e50c5c
commit
86df3c5d1f
|
@ -5,11 +5,11 @@ use crate::error::BotError;
|
||||||
use log::{debug, error, info, warn};
|
use log::{debug, error, info, warn};
|
||||||
use matrix_sdk::ruma::events::room::member::RoomMemberEventContent;
|
use matrix_sdk::ruma::events::room::member::RoomMemberEventContent;
|
||||||
use matrix_sdk::ruma::events::{StrippedStateEvent, SyncMessageLikeEvent};
|
use matrix_sdk::ruma::events::{StrippedStateEvent, SyncMessageLikeEvent};
|
||||||
use matrix_sdk::{Client, DisplayName};
|
|
||||||
use matrix_sdk::{self, room::Room, ruma::events::room::message::RoomMessageEventContent};
|
use matrix_sdk::{self, room::Room, ruma::events::room::message::RoomMessageEventContent};
|
||||||
|
use matrix_sdk::{Client, DisplayName};
|
||||||
use std::ops::Sub;
|
use std::ops::Sub;
|
||||||
use std::time::{Duration, SystemTime};
|
|
||||||
use std::time::UNIX_EPOCH;
|
use std::time::UNIX_EPOCH;
|
||||||
|
use std::time::{Duration, SystemTime};
|
||||||
|
|
||||||
/// Check if a message is recent enough to actually process. If the
|
/// Check if a message is recent enough to actually process. If the
|
||||||
/// message is within "oldest_message_age" seconds, this function
|
/// message is within "oldest_message_age" seconds, this function
|
||||||
|
@ -67,7 +67,23 @@ async fn should_process_message<'a>(
|
||||||
.map(str::to_string)
|
.map(str::to_string)
|
||||||
.unwrap_or_else(|| String::new());
|
.unwrap_or_else(|| String::new());
|
||||||
|
|
||||||
let sender_username: String = format!("@{}:{}", event.sender().localpart(), event.sender().server_name());
|
let sender_username: String = format!(
|
||||||
|
"@{}:{}",
|
||||||
|
event.sender().localpart(),
|
||||||
|
event.sender().server_name()
|
||||||
|
);
|
||||||
|
|
||||||
|
// Do not process messages from the bot itself. Otherwise it might
|
||||||
|
// try to execute its own commands.
|
||||||
|
let bot_username = bot
|
||||||
|
.client
|
||||||
|
.user_id()
|
||||||
|
.map(|u| format!("@{}:{}", u.localpart(), u.server_name()))
|
||||||
|
.unwrap_or_default();
|
||||||
|
|
||||||
|
if sender_username == bot_username {
|
||||||
|
return Err(BotError::ShouldNotProcessError);
|
||||||
|
}
|
||||||
|
|
||||||
Ok((msg_body, sender_username))
|
Ok((msg_body, sender_username))
|
||||||
}
|
}
|
||||||
|
@ -100,7 +116,10 @@ pub(super) async fn on_stripped_state_member(
|
||||||
|
|
||||||
info!(
|
info!(
|
||||||
"Autojoining room {}",
|
"Autojoining room {}",
|
||||||
room.display_name().await.ok().unwrap_or_else(|| DisplayName::Named("[error]".to_string()))
|
room.display_name()
|
||||||
|
.await
|
||||||
|
.ok()
|
||||||
|
.unwrap_or_else(|| DisplayName::Named("[error]".to_string()))
|
||||||
);
|
);
|
||||||
|
|
||||||
if let Err(e) = client.join_room_by_id(&room.room_id()).await {
|
if let Err(e) = client.join_room_by_id(&room.room_id()).await {
|
||||||
|
@ -134,6 +153,11 @@ pub(super) async fn on_room_message(
|
||||||
.execute_commands(&room, &sender_username, &msg_body)
|
.execute_commands(&room, &sender_username, &msg_body)
|
||||||
.await;
|
.await;
|
||||||
|
|
||||||
bot.handle_results(&room, &sender_username, event.event_id().to_owned(), results)
|
bot.handle_results(
|
||||||
.await;
|
&room,
|
||||||
|
&sender_username,
|
||||||
|
event.event_id().to_owned(),
|
||||||
|
results,
|
||||||
|
)
|
||||||
|
.await;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue