autojoin: filter room based on ID
This commit is contained in:
parent
57e783e8a3
commit
813ea9848a
|
@ -3,17 +3,19 @@ use std::time::Duration;
|
||||||
use matrix_sdk::{
|
use matrix_sdk::{
|
||||||
self, async_trait,
|
self, async_trait,
|
||||||
events::{room::member::MemberEventContent, StrippedStateEvent},
|
events::{room::member::MemberEventContent, StrippedStateEvent},
|
||||||
|
identifiers::RoomId,
|
||||||
Client, EventEmitter, RoomState,
|
Client, EventEmitter, RoomState,
|
||||||
};
|
};
|
||||||
use tokio::time::sleep;
|
use tokio::time::sleep;
|
||||||
|
|
||||||
pub struct AutoJoinHandler {
|
pub struct AutoJoinHandler {
|
||||||
client: Client,
|
client: Client,
|
||||||
|
room_id: RoomId,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl AutoJoinHandler {
|
impl AutoJoinHandler {
|
||||||
pub fn new(client: Client) -> Self {
|
pub fn new(client: Client, room_id: RoomId) -> Self {
|
||||||
Self { client }
|
Self { client, room_id }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -30,7 +32,23 @@ impl EventEmitter for AutoJoinHandler {
|
||||||
}
|
}
|
||||||
|
|
||||||
if let RoomState::Invited(room) = room {
|
if let RoomState::Invited(room) = room {
|
||||||
// TODO: only join room if it's the room specified in the configuration
|
let room_id = room.room_id();
|
||||||
|
let room_name = room.display_name().await;
|
||||||
|
println!(
|
||||||
|
"Received invitation for room `{}`: `{}`",
|
||||||
|
room_id, room_name
|
||||||
|
);
|
||||||
|
|
||||||
|
if room_id != &self.room_id {
|
||||||
|
println!(
|
||||||
|
"Bot isn't authorized to join room `{}`, declining invitation",
|
||||||
|
room_id
|
||||||
|
);
|
||||||
|
// leaving a room is equivalent to rejecting the invitation, as per
|
||||||
|
// https://matrix.org/docs/spec/client_server/r0.6.0#post-matrix-client-r0-rooms-roomid-leave
|
||||||
|
self.client.leave_room(room_id).await.unwrap();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
println!("Autojoining room {}", room.room_id());
|
println!("Autojoining room {}", room.room_id());
|
||||||
let mut delay = 2;
|
let mut delay = 2;
|
||||||
|
|
|
@ -32,7 +32,10 @@ impl BadNewsBot {
|
||||||
load_or_init_session(&self).await?;
|
load_or_init_session(&self).await?;
|
||||||
|
|
||||||
self.client
|
self.client
|
||||||
.add_event_emitter(Box::new(AutoJoinHandler::new(self.client.clone())))
|
.add_event_emitter(Box::new(AutoJoinHandler::new(
|
||||||
|
self.client.clone(),
|
||||||
|
self.config.room_id.clone(),
|
||||||
|
)))
|
||||||
.await;
|
.await;
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
|
|
|
@ -5,6 +5,7 @@ use std::{
|
||||||
};
|
};
|
||||||
|
|
||||||
use clap::Clap;
|
use clap::Clap;
|
||||||
|
use matrix_sdk::identifiers::RoomId;
|
||||||
use serde::Deserialize;
|
use serde::Deserialize;
|
||||||
use thiserror::Error;
|
use thiserror::Error;
|
||||||
use url::Url;
|
use url::Url;
|
||||||
|
@ -41,6 +42,9 @@ pub struct Config {
|
||||||
password: String,
|
password: String,
|
||||||
/// Path to a directory where the bot will store Matrix state and current session information.
|
/// Path to a directory where the bot will store Matrix state and current session information.
|
||||||
state_dir: PathBuf,
|
state_dir: PathBuf,
|
||||||
|
/// ID of the Matrix room where the bot should post messages. The bot will only accept
|
||||||
|
/// invitations to this room.
|
||||||
|
room_id: RoomId,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[tokio::main]
|
#[tokio::main]
|
||||||
|
|
Loading…
Reference in a new issue