use std::{cell::RefCell, str::FromStr, sync::Mutex}; use crate::{ discord::{self, forward_to_discord}, matrix::{self, forward_to_matrix}, messages::{MessageReference, SentMessage}, }; pub struct Bridgers { pub discord: Mutex>>, pub matrix: Mutex>>, } impl Bridgers { pub fn new() -> Self { Self { discord: Mutex::new(RefCell::new(None)), matrix: Mutex::new(RefCell::new(None)), } } fn get_linked_discord_channel(&self, source: &MessageReference) -> Option { match source { MessageReference::Matrix(_room_id, _event_id) => { // TODO: Look up the linked channel Some(discord::ChannelId(885690775193661463)) } _ => None, } } fn get_linked_matrix_room(&self, source: &MessageReference) -> Option { match source { MessageReference::Discord(_, _) => { // TODO: Look up the linked channel Some(matrix::RoomId::from_str("!SjQatGOikRshcWNcln:matrix.org").unwrap()) } _ => None, } } pub async fn send_message(&self, message: SentMessage) -> Vec { let mut created_messages = Vec::new(); if let Some(discord) = self.discord.lock().unwrap().borrow().as_ref() { if let Some(channel) = self.get_linked_discord_channel(&message.source) { if let Some(m) = forward_to_discord(discord, channel, &message).await { created_messages.push(m); } } } if let Some(matrix) = self.matrix.lock().unwrap().borrow().as_ref() { if let Some(room_id) = self.get_linked_matrix_room(&message.source) { if let Some(m) = forward_to_matrix(matrix, room_id, &message).await { created_messages.push(m); } } } created_messages } }