Compare commits
No commits in common. "5af13e5a07cbec5b96318e2798bfe2d79e5ce1e4" and "1bbd542b9db3af4a1061fd41bb7efa692945b924" have entirely different histories.
5af13e5a07
...
1bbd542b9d
3 changed files with 38 additions and 34 deletions
26
Cargo.toml
26
Cargo.toml
|
@ -8,16 +8,16 @@ lto = "fat"
|
||||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
matrix-sdk = {version = "0.7.1", features = ["anyhow", "e2e-encryption", "socks"]}
|
matrix-sdk = {version = "0.6.2", features = ["anyhow", "e2e-encryption", "socks"]}
|
||||||
anyhow = "1.0.86"
|
anyhow = "1.0.75"
|
||||||
clap = "4.5.8"
|
clap = "4.4.6"
|
||||||
toml = "0.8.14"
|
toml = "0.8.2"
|
||||||
log = "0.4.22"
|
log = "0.4.20"
|
||||||
env_logger = "0.11.3"
|
env_logger = "0.10.0"
|
||||||
tokio = {version = "1.38.0", features = ["parking_lot", "rt-multi-thread", "macros"]}
|
tokio = {version = "1.32.0", features = ["parking_lot", "rt-multi-thread", "macros"]}
|
||||||
serde = {version = "1.0.204", features = ["derive"]}
|
serde = {version = "1.0.188", features = ["derive"]}
|
||||||
tracing-subscriber = "0.3.18"
|
tracing-subscriber = "0.3.17"
|
||||||
scraper = "0.19.0"
|
scraper = "0.17.1"
|
||||||
reqwest = "0.12.5"
|
reqwest = "0.11.22"
|
||||||
regex = "1.10.5"
|
regex = "1.9.6"
|
||||||
lazy_static = "1.5.0"
|
lazy_static = "1.4.0"
|
||||||
|
|
|
@ -5,10 +5,9 @@
|
||||||
use lazy_static::lazy_static;
|
use lazy_static::lazy_static;
|
||||||
use log::warn;
|
use log::warn;
|
||||||
use matrix_sdk::{
|
use matrix_sdk::{
|
||||||
RoomState,
|
|
||||||
room::Room,
|
room::Room,
|
||||||
ruma::events::room::message::{
|
ruma::events::room::message::{
|
||||||
MessageType, OriginalSyncRoomMessageEvent, Relation, ForwardThread, AddMentions, RoomMessageEventContent,
|
MessageType, OriginalSyncRoomMessageEvent, Relation, RoomMessageEventContent,
|
||||||
},
|
},
|
||||||
Client,
|
Client,
|
||||||
};
|
};
|
||||||
|
@ -98,7 +97,7 @@ fn get_urls_from_message(message: &str) -> Vec<&str> {
|
||||||
pub async fn embed_handler(event: OriginalSyncRoomMessageEvent, room: Room, client: Client) {
|
pub async fn embed_handler(event: OriginalSyncRoomMessageEvent, room: Room, client: Client) {
|
||||||
let fn_start = Instant::now();
|
let fn_start = Instant::now();
|
||||||
|
|
||||||
if room.state() == RoomState::Joined {
|
if let Room::Joined(room) = room {
|
||||||
let full_reply_event = event.clone().into_full_event(room.room_id().to_owned());
|
let full_reply_event = event.clone().into_full_event(room.room_id().to_owned());
|
||||||
|
|
||||||
// If the sender ID matches our client, ignore the message
|
// If the sender ID matches our client, ignore the message
|
||||||
|
@ -143,11 +142,11 @@ pub async fn embed_handler(event: OriginalSyncRoomMessageEvent, room: Room, clie
|
||||||
&embed.title, &embed.description
|
&embed.title, &embed.description
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
.make_reply_to(&full_reply_event, ForwardThread::Yes, AddMentions::Yes);
|
.make_reply_to(&full_reply_event);
|
||||||
|
|
||||||
// Finally send the reply to the room
|
// Finally send the reply to the room
|
||||||
warn!("Sending embed for URL: '{}'", &url);
|
warn!("Sending embed for URL: '{}'", &url);
|
||||||
if room.send(bot_reply).await.is_err() {
|
if room.send(bot_reply, None).await.is_err() {
|
||||||
warn!("Failed to send embed for URL: '{}'", &url);
|
warn!("Failed to send embed for URL: '{}'", &url);
|
||||||
}
|
}
|
||||||
warn!("Ran fn room.send after: '{:#?}'", fn_start.elapsed());
|
warn!("Ran fn room.send after: '{:#?}'", fn_start.elapsed());
|
||||||
|
@ -157,10 +156,10 @@ pub async fn embed_handler(event: OriginalSyncRoomMessageEvent, room: Room, clie
|
||||||
"Couldn't parse metadata for URL",
|
"Couldn't parse metadata for URL",
|
||||||
"<blockquote><h5>Couldn't parse metadata for URL</h5></blockquote>",
|
"<blockquote><h5>Couldn't parse metadata for URL</h5></blockquote>",
|
||||||
)
|
)
|
||||||
.make_reply_to(&full_reply_event, ForwardThread::Yes, AddMentions::Yes);
|
.make_reply_to(&full_reply_event);
|
||||||
// Send the reply to the room
|
// Send the reply to the room
|
||||||
warn!("Sending 'No metadata' embed for URL: '{}'", &url);
|
warn!("Sending 'No metadata' embed for URL: '{}'", &url);
|
||||||
if room.send(bot_reply).await.is_err() {
|
if room.send(bot_reply, None).await.is_err() {
|
||||||
warn!("Failed to send embed for URL: '{}'", &url);
|
warn!("Failed to send embed for URL: '{}'", &url);
|
||||||
}
|
}
|
||||||
warn!("Ran fn room.send after: '{:#?}'", fn_start.elapsed());
|
warn!("Ran fn room.send after: '{:#?}'", fn_start.elapsed());
|
||||||
|
|
33
src/lib.rs
33
src/lib.rs
|
@ -2,10 +2,9 @@
|
||||||
#![deny(missing_docs)]
|
#![deny(missing_docs)]
|
||||||
pub mod embeds;
|
pub mod embeds;
|
||||||
|
|
||||||
use log::warn;
|
use log::{error, warn};
|
||||||
use matrix_sdk::{
|
use matrix_sdk::{
|
||||||
config::SyncSettings,
|
config::SyncSettings,
|
||||||
RoomState,
|
|
||||||
room::Room,
|
room::Room,
|
||||||
ruma::{
|
ruma::{
|
||||||
api::client::uiaa, events::room::member::StrippedRoomMemberEvent, OwnedDeviceId,
|
api::client::uiaa, events::room::member::StrippedRoomMemberEvent, OwnedDeviceId,
|
||||||
|
@ -71,12 +70,12 @@ pub async fn delete_old_encryption_devices(client: &Client, config: &Config) ->
|
||||||
// Deleting these devices needs "user interaction" or something, so we just send password again
|
// Deleting these devices needs "user interaction" or something, so we just send password again
|
||||||
// and it works :D
|
// and it works :D
|
||||||
if let Err(e) = client.delete_devices(&old_devices, None).await {
|
if let Err(e) = client.delete_devices(&old_devices, None).await {
|
||||||
if let Some(info) = e.as_uiaa_response() {
|
if let Some(info) = e.uiaa_response() {
|
||||||
let mut password = uiaa::Password::new(
|
let mut password = uiaa::Password::new(
|
||||||
uiaa::UserIdentifier::UserIdOrLocalpart(config.username.clone()),
|
uiaa::UserIdentifier::UserIdOrLocalpart(&config.username),
|
||||||
config.password.clone(),
|
&config.password,
|
||||||
);
|
);
|
||||||
password.session = info.session.clone();
|
password.session = info.session.as_deref();
|
||||||
client
|
client
|
||||||
.delete_devices(&old_devices, Some(uiaa::AuthData::Password(password)))
|
.delete_devices(&old_devices, Some(uiaa::AuthData::Password(password)))
|
||||||
.await?;
|
.await?;
|
||||||
|
@ -95,17 +94,24 @@ pub async fn reject_stale_invites(client: &Client, config: &Config) {
|
||||||
for room in client.invited_rooms() {
|
for room in client.invited_rooms() {
|
||||||
let room_name = room.name().unwrap_or_default();
|
let room_name = room.name().unwrap_or_default();
|
||||||
if !room.is_space()
|
if !room.is_space()
|
||||||
&& !room.is_direct().await.expect("Failed to check if room is DM")
|
&& !room.is_direct()
|
||||||
&& config.room_ids.iter().any(|r| *r == room.room_id())
|
&& config.room_ids.iter().any(|r| *r == room.room_id())
|
||||||
{
|
{
|
||||||
warn!("Got invite to room: '{}'", room_name);
|
warn!("Got invite to room: '{}'", room_name);
|
||||||
room.join()
|
room.accept_invitation()
|
||||||
.await
|
.await
|
||||||
.expect("Failed to accept invite");
|
.expect("Failed to accept invite");
|
||||||
warn!("Joined room: '{}'!", room_name);
|
warn!("Joining room!");
|
||||||
|
if let Err(e) = client.join_room_by_id(room.room_id()).await {
|
||||||
|
error!(
|
||||||
|
"Failed to join room with id: {} and error: {}",
|
||||||
|
room.room_id(),
|
||||||
|
e
|
||||||
|
);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
warn!("Rejecting invite to room: '{}'", room_name);
|
warn!("Rejecting invite to room: '{}'", room_name);
|
||||||
room.leave().await.unwrap_or_default();
|
room.reject_invitation().await.unwrap_or_default();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
warn!("Finished checking old invites");
|
warn!("Finished checking old invites");
|
||||||
|
@ -129,7 +135,6 @@ pub async fn run(config: Config) -> anyhow::Result<()> {
|
||||||
|
|
||||||
// Attempt to log into the server
|
// Attempt to log into the server
|
||||||
client
|
client
|
||||||
.matrix_auth()
|
|
||||||
.login_username(&config.username, &config.password)
|
.login_username(&config.username, &config.password)
|
||||||
.initial_device_display_name(&config.display_name)
|
.initial_device_display_name(&config.display_name)
|
||||||
.send()
|
.send()
|
||||||
|
@ -160,13 +165,13 @@ pub async fn run(config: Config) -> anyhow::Result<()> {
|
||||||
|
|
||||||
// Add handler to log new room invites as they're recieved
|
// Add handler to log new room invites as they're recieved
|
||||||
client.add_event_handler(|ev: StrippedRoomMemberEvent, room: Room| async move {
|
client.add_event_handler(|ev: StrippedRoomMemberEvent, room: Room| async move {
|
||||||
if room.state() == RoomState::Invited {
|
if let Room::Invited(invited_room) = room {
|
||||||
warn!(
|
warn!(
|
||||||
"Got invite to room: '{}' sent by '{}'",
|
"Got invite to room: '{}' sent by '{}'",
|
||||||
room.name().unwrap_or_default(),
|
invited_room.name().unwrap_or_default(),
|
||||||
ev.sender
|
ev.sender
|
||||||
);
|
);
|
||||||
};
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
// Add handler to detect and create embeds for HTTP links in chat
|
// Add handler to detect and create embeds for HTTP links in chat
|
||||||
|
|
Loading…
Reference in a new issue