Hey everyone! As usual the previous relevant post is here :)
What will we be covering?
Well....I got the code working!! So this blog will go into the code I needed to get this PR done. Honestly it was quite easy but I will get into why in the next blog of my final thoughts. Lets stick to the good stuff in this one :)
Code
So as I said in the previous blog I had to find a way to check if the server where the command request is sent has the DJ role. To do this I have this code
let guild = msg.guild(&ctx.cache).await.unwrap();
let mut roleid = RoleId::default();
for (_, role) in guild.roles {
if role.name == "DJ" {
roleid = role.id;
}
}
We need the Role
id to check if the user has the DJ role. This is how we do that
let user = &msg.author;
user.has_role(&ctx.http, guild.id, roleid).await.unwrap()
Now lets discuss the 2 strange variables in there. ctx
and msg
. ctx
is the context of the event fired. This is used when the user tries to use a command to get guild information. msg
is the message sent in the discord chat so you can find who sent it and their info.
What I did is then put this code into a utility function so it can be called to conditionally run a command if the user has the required role.
pub async fn author_is_dj(ctx: &Context, msg: &Message) -> bool {
let guild = msg.guild(&ctx.cache).await.unwrap();
let mut roleid = RoleId::default();
for (_, role) in guild.roles {
if role.name == "DJ" {
roleid = role.id;
}
}
let user = &msg.author;
user.has_role(&ctx.http, guild.id, roleid).await.unwrap()
}
It is then used like this in code
if !author_is_dj(ctx, msg).await {
//Inform user they do not have the required role
//return
} else {
//Run command
}
What's next?
Well that was all for this blog! Hope you enjoyed it :) The next blog will be my final thoughts on this experience :)
Top comments (0)