Prepare for message editing
parent
33e13eb4b0
commit
fee137f947
|
@ -4,7 +4,7 @@ use tokio::sync::mpsc;
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
message_ast::{self, format_discord},
|
message_ast::{self, format_discord},
|
||||||
messages::{MessageAuthor, MessageReference, SentMessage},
|
messages::{MessageAuthor, MessageEvent, MessageReference, SentMessage},
|
||||||
};
|
};
|
||||||
|
|
||||||
pub use serenity::client::Context;
|
pub use serenity::client::Context;
|
||||||
|
@ -18,7 +18,7 @@ impl From<&Message> for MessageReference {
|
||||||
|
|
||||||
struct DiscordHandler {
|
struct DiscordHandler {
|
||||||
ctx_tx: mpsc::UnboundedSender<Context>,
|
ctx_tx: mpsc::UnboundedSender<Context>,
|
||||||
message_tx: mpsc::UnboundedSender<SentMessage>,
|
message_tx: mpsc::UnboundedSender<MessageEvent>,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[async_trait]
|
#[async_trait]
|
||||||
|
@ -40,7 +40,7 @@ impl EventHandler for DiscordHandler {
|
||||||
let content = discord_message_format::parse(&message.content);
|
let content = discord_message_format::parse(&message.content);
|
||||||
let content = message_ast::convert_discord(&content);
|
let content = message_ast::convert_discord(&content);
|
||||||
|
|
||||||
let _ = self.message_tx.send(SentMessage {
|
let _ = self.message_tx.send(MessageEvent::Send(SentMessage {
|
||||||
source: message_ref,
|
source: message_ref,
|
||||||
content,
|
content,
|
||||||
author: MessageAuthor {
|
author: MessageAuthor {
|
||||||
|
@ -49,7 +49,7 @@ impl EventHandler for DiscordHandler {
|
||||||
.await
|
.await
|
||||||
.unwrap_or(message.author.name),
|
.unwrap_or(message.author.name),
|
||||||
},
|
},
|
||||||
});
|
}));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -70,7 +70,7 @@ pub async fn forward_to_discord(
|
||||||
|
|
||||||
pub async fn create_discord_client(
|
pub async fn create_discord_client(
|
||||||
ctx_tx: mpsc::UnboundedSender<Context>,
|
ctx_tx: mpsc::UnboundedSender<Context>,
|
||||||
message_tx: mpsc::UnboundedSender<SentMessage>,
|
message_tx: mpsc::UnboundedSender<MessageEvent>,
|
||||||
token: &str,
|
token: &str,
|
||||||
) -> Client {
|
) -> Client {
|
||||||
let handler = DiscordHandler { ctx_tx, message_tx };
|
let handler = DiscordHandler { ctx_tx, message_tx };
|
||||||
|
|
26
src/main.rs
26
src/main.rs
|
@ -11,13 +11,14 @@ pub mod discord;
|
||||||
pub mod matrix;
|
pub mod matrix;
|
||||||
|
|
||||||
use bridgers::Bridgers;
|
use bridgers::Bridgers;
|
||||||
use messages::SentMessage;
|
|
||||||
use tokio::sync::mpsc;
|
use tokio::sync::mpsc;
|
||||||
|
|
||||||
|
use crate::messages::MessageEvent;
|
||||||
|
|
||||||
async fn setup_discord(
|
async fn setup_discord(
|
||||||
token: String,
|
token: String,
|
||||||
bridgers: Arc<Bridgers>,
|
bridgers: Arc<Bridgers>,
|
||||||
discord_tx: mpsc::UnboundedSender<SentMessage>,
|
discord_tx: mpsc::UnboundedSender<MessageEvent>,
|
||||||
) {
|
) {
|
||||||
let (discord_ctx_tx, mut discord_ctx_rx) = mpsc::unbounded_channel::<discord::Context>();
|
let (discord_ctx_tx, mut discord_ctx_rx) = mpsc::unbounded_channel::<discord::Context>();
|
||||||
tokio::spawn(async move {
|
tokio::spawn(async move {
|
||||||
|
@ -38,9 +39,9 @@ async fn setup_matrix(
|
||||||
username: String,
|
username: String,
|
||||||
password: String,
|
password: String,
|
||||||
bridgers: Arc<Bridgers>,
|
bridgers: Arc<Bridgers>,
|
||||||
message_tx: mpsc::UnboundedSender<SentMessage>,
|
event_tx: mpsc::UnboundedSender<MessageEvent>,
|
||||||
) {
|
) {
|
||||||
let client = create_matrix_client(homeserver_url, username, password, message_tx).await;
|
let client = create_matrix_client(homeserver_url, username, password, event_tx).await;
|
||||||
|
|
||||||
bridgers
|
bridgers
|
||||||
.matrix
|
.matrix
|
||||||
|
@ -60,7 +61,7 @@ async fn main() {
|
||||||
|
|
||||||
let bridgers = Arc::new(Bridgers::new());
|
let bridgers = Arc::new(Bridgers::new());
|
||||||
|
|
||||||
let (message_tx, mut message_rx) = tokio::sync::mpsc::unbounded_channel::<SentMessage>();
|
let (event_tx, mut event_rx) = tokio::sync::mpsc::unbounded_channel::<MessageEvent>();
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
fn get_env_var(key: &str) -> String {
|
fn get_env_var(key: &str) -> String {
|
||||||
|
@ -70,7 +71,7 @@ async fn main() {
|
||||||
setup_discord(
|
setup_discord(
|
||||||
get_env_var("DISCORD_TOKEN"),
|
get_env_var("DISCORD_TOKEN"),
|
||||||
Arc::clone(&bridgers),
|
Arc::clone(&bridgers),
|
||||||
message_tx.clone(),
|
event_tx.clone(),
|
||||||
)
|
)
|
||||||
.await;
|
.await;
|
||||||
|
|
||||||
|
@ -79,11 +80,18 @@ async fn main() {
|
||||||
get_env_var("MATRIX_USERNAME"),
|
get_env_var("MATRIX_USERNAME"),
|
||||||
get_env_var("MATRIX_PASSWORD"),
|
get_env_var("MATRIX_PASSWORD"),
|
||||||
Arc::clone(&bridgers),
|
Arc::clone(&bridgers),
|
||||||
message_tx.clone(),
|
event_tx.clone(),
|
||||||
)
|
)
|
||||||
.await;
|
.await;
|
||||||
|
|
||||||
while let Some(message) = message_rx.recv().await {
|
while let Some(event) = event_rx.recv().await {
|
||||||
let _ = bridgers.send_message(message).await;
|
match event {
|
||||||
|
MessageEvent::Send(sent_message) => {
|
||||||
|
let _ = bridgers.send_message(sent_message).await;
|
||||||
|
}
|
||||||
|
MessageEvent::Edit(edited_message) => {
|
||||||
|
todo!();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,7 +26,7 @@ use crate::{
|
||||||
convert_matrix, convert_plain, format_discord, format_matrix, MessageComponent,
|
convert_matrix, convert_plain, format_discord, format_matrix, MessageComponent,
|
||||||
MessageContent,
|
MessageContent,
|
||||||
},
|
},
|
||||||
messages::{MessageAuthor, MessageReference, SentMessage},
|
messages::{MessageAuthor, MessageEvent, MessageReference, SentMessage},
|
||||||
};
|
};
|
||||||
|
|
||||||
impl From<(&RoomId, &EventId)> for MessageReference {
|
impl From<(&RoomId, &EventId)> for MessageReference {
|
||||||
|
@ -69,7 +69,7 @@ fn _find_content(event: &AnySyncRoomEvent) -> Option<AnyMessageEventContent> {
|
||||||
}
|
}
|
||||||
|
|
||||||
struct MatrixHandler {
|
struct MatrixHandler {
|
||||||
message_tx: mpsc::UnboundedSender<SentMessage>,
|
message_tx: mpsc::UnboundedSender<MessageEvent>,
|
||||||
current_user_id: UserId,
|
current_user_id: UserId,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -122,11 +122,11 @@ impl EventHandler for MatrixHandler {
|
||||||
let content = self.get_content(&text.body, &text.formatted);
|
let content = self.get_content(&text.body, &text.formatted);
|
||||||
|
|
||||||
if let Some(author) = self.get_message_author(&room, &event.sender).await {
|
if let Some(author) = self.get_message_author(&room, &event.sender).await {
|
||||||
let _ = self.message_tx.send(SentMessage {
|
let _ = self.message_tx.send(MessageEvent::Send(SentMessage {
|
||||||
source: message_ref,
|
source: message_ref,
|
||||||
content,
|
content,
|
||||||
author,
|
author,
|
||||||
});
|
}));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -135,11 +135,11 @@ impl EventHandler for MatrixHandler {
|
||||||
content.insert(0, MessageComponent::Plain("* ".to_string()));
|
content.insert(0, MessageComponent::Plain("* ".to_string()));
|
||||||
|
|
||||||
if let Some(author) = self.get_message_author(&room, &event.sender).await {
|
if let Some(author) = self.get_message_author(&room, &event.sender).await {
|
||||||
let _ = self.message_tx.send(SentMessage {
|
let _ = self.message_tx.send(MessageEvent::Send(SentMessage {
|
||||||
source: message_ref,
|
source: message_ref,
|
||||||
content,
|
content,
|
||||||
author,
|
author,
|
||||||
});
|
}));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -179,7 +179,7 @@ pub async fn create_matrix_client(
|
||||||
homeserver_url: String,
|
homeserver_url: String,
|
||||||
username: String,
|
username: String,
|
||||||
password: String,
|
password: String,
|
||||||
message_tx: mpsc::UnboundedSender<SentMessage>,
|
message_tx: mpsc::UnboundedSender<MessageEvent>,
|
||||||
) -> Client {
|
) -> Client {
|
||||||
let client_config = ClientConfig::new().store_path("./data/matrix_state");
|
let client_config = ClientConfig::new().store_path("./data/matrix_state");
|
||||||
|
|
||||||
|
|
|
@ -17,3 +17,14 @@ pub struct SentMessage {
|
||||||
pub content: MessageContent,
|
pub content: MessageContent,
|
||||||
pub author: MessageAuthor,
|
pub author: MessageAuthor,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub struct EditedMessage {
|
||||||
|
pub replacing: MessageReference,
|
||||||
|
pub content: MessageContent,
|
||||||
|
pub author: MessageAuthor,
|
||||||
|
}
|
||||||
|
|
||||||
|
pub enum MessageEvent {
|
||||||
|
Send(SentMessage),
|
||||||
|
Edit(EditedMessage),
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue