Parse discord role mentions
This commit is contained in:
parent
ffa8bb6f70
commit
cfed812b0e
27
src/main.rs
27
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<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::*;
|
||||
|
|
Loading…
Reference in a new issue