diff --git a/src/main.rs b/src/main.rs index 0d0897c..61d4f28 100644 --- a/src/main.rs +++ b/src/main.rs @@ -7,7 +7,7 @@ use serenity::{ model::{ channel::Message, id::{ChannelId, UserId}, - prelude::Ready, + prelude::Ready, webhook::Webhook, }, prelude::*, Client as DiscordClient, @@ -90,6 +90,7 @@ async fn main() -> anyhow::Result<()> { let value = data.parse::()?; let token = value["token"].as_str().expect("No token provided!").to_string(); + let webhook = value["webhook"].as_str().map(|s| s.to_string()); let mut discord_client = DiscordClient::builder(&token) .event_handler(Handler) @@ -116,6 +117,8 @@ async fn main() -> anyhow::Result<()> { data.insert::(irc_client.sender()); } + let webhook = parse_webhook_url(http.clone(), webhook).await; + tokio::spawn(async move { irc_loop(irc_client, http, channel_id).await.unwrap(); }); @@ -147,3 +150,16 @@ async fn irc_loop( } Ok(()) } + +async fn parse_webhook_url(http: Arc, url: Option) -> Option { + if let Some(url) = url { + let url = url.trim_start_matches("https://discord.com/api/webhooks/"); + let split = url.split("/").collect::>(); + let id = split[0].parse::().expect("Invalid webhook URL"); + let token = split[1].to_string(); + let webhook = http.get_webhook_with_token(id, &token).await.expect("Invalid webhook URL"); + Some(webhook) + } else { + None + } +} \ No newline at end of file