From cfed812b0e4cb0180e66c528601202429ab41bff Mon Sep 17 00:00:00 2001 From: Yash Karandikar Date: Sun, 23 Jan 2022 19:08:07 -0600 Subject: [PATCH] Parse discord role mentions --- src/main.rs | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/src/main.rs b/src/main.rs index 763a547..21afffa 100644 --- a/src/main.rs +++ b/src/main.rs @@ -7,7 +7,7 @@ use serenity::{ model::{ channel::Message, guild::Member, - id::{ChannelId, GuildId, UserId}, + id::{ChannelId, GuildId, RoleId, UserId}, prelude::Ready, webhook::Webhook, }, @@ -120,8 +120,20 @@ impl EventHandler for Handler { static ref PING_RE_2: Regex = Regex::new(r"<@![0-9]+>").unwrap(); static ref EMOJI_RE: Regex = Regex::new(r"<:\w+:[0-9]+>").unwrap(); static ref CHANNEL_RE: Regex = Regex::new(r"<#[0-9]+>").unwrap(); + static ref ROLE_RE: Regex = Regex::new(r"<@&[0-9]+>").unwrap(); } + let roles = channel_id + .to_channel(&ctx) + .await + .unwrap() + .guild() + .unwrap() + .guild_id + .roles(&ctx) + .await + .unwrap(); + let mut id_cache: HashMap = HashMap::new(); if PING_RE_1.is_match(&msg.content) { @@ -231,6 +243,19 @@ impl EventHandler for Handler { } } + for mat in ROLE_RE.find_iter(&msg.content) { + let slice = &msg.content[mat.start() + 3..mat.end() - 1]; + let parsed: u64 = slice.parse().unwrap(); + + let pinged_id = RoleId(parsed); + + if let Some(role) = roles.get(&pinged_id) { + replaced = ROLE_RE + .replace(&replaced, format!("@{}", role.name)) + .to_string(); + } + } + { use pulldown_cmark::Event::*; use pulldown_cmark::Tag::*;