Parse discord role mentions

This commit is contained in:
Yash Karandikar 2022-01-23 19:08:07 -06:00
parent ffa8bb6f70
commit cfed812b0e
Signed by: karx
GPG key ID: A794DA2529474BA5

View file

@ -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<u64, String> = 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::*;