Update deps
This commit is contained in:
parent
48b37a1ee3
commit
a957455a97
File diff suppressed because it is too large
Load Diff
|
@ -11,7 +11,7 @@ default-run = "rusty_bot"
|
||||||
music = ["serenity/voice", "songbird"]
|
music = ["serenity/voice", "songbird"]
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
serenity = { version = "0.10.10", features = ["unstable_discord_api"] }
|
serenity = { version = "0.11", features = ["unstable_discord_api"] }
|
||||||
toml = "0.5"
|
toml = "0.5"
|
||||||
serde = { version = "1.0", features = ["derive"] }
|
serde = { version = "1.0", features = ["derive"] }
|
||||||
reqwest = "0.11"
|
reqwest = "0.11"
|
||||||
|
@ -25,6 +25,6 @@ serde_json = "1.0"
|
||||||
log = "0.4"
|
log = "0.4"
|
||||||
log4rs = "1.0"
|
log4rs = "1.0"
|
||||||
ctrlc = "3.1"
|
ctrlc = "3.1"
|
||||||
songbird = { version = "0.2", features = ["driver", "builtin-queue", "yt-dlp"], optional = true }
|
songbird = { version = "0.3", features = ["driver", "builtin-queue", "yt-dlp"], optional = true }
|
||||||
rusty-bot-database = { path = "../rusty-bot-database" }
|
rusty-bot-database = { path = "../rusty-bot-database" }
|
||||||
anyhow = "1.0.56"
|
anyhow = "1.0.56"
|
|
@ -20,10 +20,10 @@ async fn kick(ctx: &Context, msg: &Message) -> CommandResult {
|
||||||
// TODO CACHE ? + error message
|
// TODO CACHE ? + error message
|
||||||
if let Ok(sender_member) = msg.member(ctx).await {
|
if let Ok(sender_member) = msg.member(ctx).await {
|
||||||
for user in &msg.mentions {
|
for user in &msg.mentions {
|
||||||
if let Some(member) = ctx.cache.member(msg.guild_id.unwrap(), user.id).await {
|
if let Some(member) = ctx.cache.member(msg.guild_id.unwrap(), user.id) {
|
||||||
debug!("Kicking {:?}", user);
|
debug!("Kicking {:?}", user);
|
||||||
let kick = if let Some(role_member) = sender_member.highest_role_info(ctx).await {
|
let kick = if let Some(role_member) = sender_member.highest_role_info(ctx) {
|
||||||
if let Some(role) = member.highest_role_info(ctx).await {
|
if let Some(role) = member.highest_role_info(ctx) {
|
||||||
role_member.1 > role.1
|
role_member.1 > role.1
|
||||||
} else {
|
} else {
|
||||||
true
|
true
|
||||||
|
@ -62,10 +62,10 @@ async fn ban(ctx: &Context, msg: &Message) -> CommandResult {
|
||||||
// TODO CACHE ? + Error message
|
// TODO CACHE ? + Error message
|
||||||
if let Ok(sender_member) = msg.member(ctx).await {
|
if let Ok(sender_member) = msg.member(ctx).await {
|
||||||
for user in &msg.mentions {
|
for user in &msg.mentions {
|
||||||
if let Some(member) = ctx.cache.member(msg.guild_id.unwrap(), user.id).await {
|
if let Some(member) = ctx.cache.member(msg.guild_id.unwrap(), user.id) {
|
||||||
debug!("Kicking {:?}", user);
|
debug!("Kicking {:?}", user);
|
||||||
let kick = if let Some(role_member) = sender_member.highest_role_info(ctx).await {
|
let kick = if let Some(role_member) = sender_member.highest_role_info(ctx) {
|
||||||
if let Some(role) = member.highest_role_info(ctx).await {
|
if let Some(role) = member.highest_role_info(ctx) {
|
||||||
role_member.1 > role.1
|
role_member.1 > role.1
|
||||||
} else {
|
} else {
|
||||||
true
|
true
|
||||||
|
|
|
@ -303,7 +303,7 @@ async fn random_mute(ctx: &Context, msg: &Message) -> CommandResult {
|
||||||
let mut members = guild.members(&ctx, Some(1000), None).await?;
|
let mut members = guild.members(&ctx, Some(1000), None).await?;
|
||||||
|
|
||||||
let mut m: usize = rand::random::<usize>() % members.len();
|
let mut m: usize = rand::random::<usize>() % members.len();
|
||||||
while members[m].permissions(&ctx).await.unwrap().administrator() || members[m].user.bot {
|
while members[m].permissions(&ctx).unwrap().administrator() || members[m].user.bot {
|
||||||
m = rand::random::<usize>() % members.len();
|
m = rand::random::<usize>() % members.len();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -46,7 +46,7 @@ async fn command(
|
||||||
let permissions = Permissions::from_bits_truncate(
|
let permissions = Permissions::from_bits_truncate(
|
||||||
author
|
author
|
||||||
.permissions
|
.permissions
|
||||||
.map(|v| v.bits)
|
.map(|v| v.bits())
|
||||||
.ok_or("Failed to get permission")?,
|
.ok_or("Failed to get permission")?,
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -60,7 +60,7 @@ async fn command(
|
||||||
response
|
response
|
||||||
.kind(InteractionResponseType::ChannelMessageWithSource)
|
.kind(InteractionResponseType::ChannelMessageWithSource)
|
||||||
.interaction_response_data(|message| {
|
.interaction_response_data(|message| {
|
||||||
message.create_embed(|e| {
|
message.embed(|e| {
|
||||||
embed_author(e, Some(author))
|
embed_author(e, Some(author))
|
||||||
.title("Error")
|
.title("Error")
|
||||||
.description("You don't have the right to do that")
|
.description("You don't have the right to do that")
|
||||||
|
@ -108,7 +108,6 @@ async fn goulag(
|
||||||
let mut member = ctx
|
let mut member = ctx
|
||||||
.cache
|
.cache
|
||||||
.guild(guild_id)
|
.guild(guild_id)
|
||||||
.await
|
|
||||||
.ok_or("Failed to get guild")?
|
.ok_or("Failed to get guild")?
|
||||||
.member(&ctx.http, user_id)
|
.member(&ctx.http, user_id)
|
||||||
.await?;
|
.await?;
|
||||||
|
@ -120,7 +119,7 @@ async fn goulag(
|
||||||
response
|
response
|
||||||
.kind(InteractionResponseType::ChannelMessageWithSource)
|
.kind(InteractionResponseType::ChannelMessageWithSource)
|
||||||
.interaction_response_data(|message| {
|
.interaction_response_data(|message| {
|
||||||
message.create_embed(|e| {
|
message.embed(|e| {
|
||||||
embed_author(e, Some(author))
|
embed_author(e, Some(author))
|
||||||
.title("Mute")
|
.title("Mute")
|
||||||
.description(format!("{} was muted", member.display_name()))
|
.description(format!("{} was muted", member.display_name()))
|
||||||
|
@ -138,7 +137,7 @@ async fn goulag(
|
||||||
response
|
response
|
||||||
.kind(InteractionResponseType::ChannelMessageWithSource)
|
.kind(InteractionResponseType::ChannelMessageWithSource)
|
||||||
.interaction_response_data(|message| {
|
.interaction_response_data(|message| {
|
||||||
message.create_embed(|e| {
|
message.embed(|e| {
|
||||||
embed_author(e, Some(author))
|
embed_author(e, Some(author))
|
||||||
.title("Error")
|
.title("Error")
|
||||||
.description("Unknown mute role")
|
.description("Unknown mute role")
|
||||||
|
@ -167,7 +166,6 @@ async fn message_interact(
|
||||||
let role = match ctx
|
let role = match ctx
|
||||||
.cache
|
.cache
|
||||||
.guild(guild_id)
|
.guild(guild_id)
|
||||||
.await
|
|
||||||
.unwrap()
|
.unwrap()
|
||||||
.role_by_name("mute")
|
.role_by_name("mute")
|
||||||
{
|
{
|
||||||
|
|
|
@ -10,7 +10,7 @@ use serenity::{
|
||||||
Args, CommandResult,
|
Args, CommandResult,
|
||||||
},
|
},
|
||||||
http::Http,
|
http::Http,
|
||||||
model::{channel::Message, id::ChannelId, misc::Mentionable, permissions::Permissions},
|
model::{channel::Message, id::ChannelId, permissions::Permissions}, prelude::Mentionable,
|
||||||
};
|
};
|
||||||
use songbird::{Call, Event, EventContext, TrackEvent};
|
use songbird::{Call, Event, EventContext, TrackEvent};
|
||||||
|
|
||||||
|
@ -66,7 +66,7 @@ struct Music;
|
||||||
#[description("Join the channel you are connected")]
|
#[description("Join the channel you are connected")]
|
||||||
#[aliases("j")]
|
#[aliases("j")]
|
||||||
async fn join(ctx: &Context, msg: &Message) -> CommandResult {
|
async fn join(ctx: &Context, msg: &Message) -> CommandResult {
|
||||||
let guild = match msg.guild(&ctx.cache).await {
|
let guild = match msg.guild(&ctx.cache) {
|
||||||
Some(guild) => guild,
|
Some(guild) => guild,
|
||||||
None => {
|
None => {
|
||||||
msg.channel_id.say(&ctx.http, "DMs not supported").await?;
|
msg.channel_id.say(&ctx.http, "DMs not supported").await?;
|
||||||
|
@ -76,7 +76,7 @@ async fn join(ctx: &Context, msg: &Message) -> CommandResult {
|
||||||
};
|
};
|
||||||
|
|
||||||
let member = msg.member(&ctx.http).await?;
|
let member = msg.member(&ctx.http).await?;
|
||||||
let can_manage_guild = has_permission(ctx, &member, &[Permissions::MANAGE_GUILD]).await?;
|
let can_manage_guild = has_permission(ctx, &member, &[Permissions::MANAGE_GUILD])?;
|
||||||
if if let Some(member) = &msg.member {
|
if if let Some(member) = &msg.member {
|
||||||
is_mute(ctx, member, guild.id).await.unwrap_or(false) && !can_manage_guild
|
is_mute(ctx, member, guild.id).await.unwrap_or(false) && !can_manage_guild
|
||||||
} else {
|
} else {
|
||||||
|
@ -184,7 +184,6 @@ async fn leave(ctx: &Context, msg: &Message) -> CommandResult {
|
||||||
let guild_id = match ctx
|
let guild_id = match ctx
|
||||||
.cache
|
.cache
|
||||||
.guild_channel_field(msg.channel_id, |channel| channel.guild_id)
|
.guild_channel_field(msg.channel_id, |channel| channel.guild_id)
|
||||||
.await
|
|
||||||
{
|
{
|
||||||
Some(id) => id,
|
Some(id) => id,
|
||||||
None => {
|
None => {
|
||||||
|
@ -240,7 +239,7 @@ async fn leave(ctx: &Context, msg: &Message) -> CommandResult {
|
||||||
#[description("Play a music (require an url)")]
|
#[description("Play a music (require an url)")]
|
||||||
#[aliases("p")]
|
#[aliases("p")]
|
||||||
async fn play(ctx: &Context, msg: &Message, mut args: Args) -> CommandResult {
|
async fn play(ctx: &Context, msg: &Message, mut args: Args) -> CommandResult {
|
||||||
let guild_id = match ctx.cache.guild_channel(msg.channel_id).await {
|
let guild_id = match ctx.cache.guild_channel(msg.channel_id) {
|
||||||
Some(channel) => channel.guild_id,
|
Some(channel) => channel.guild_id,
|
||||||
None => {
|
None => {
|
||||||
msg.channel_id
|
msg.channel_id
|
||||||
|
@ -274,7 +273,7 @@ async fn play(ctx: &Context, msg: &Message, mut args: Args) -> CommandResult {
|
||||||
Ok(c) => match c.as_str() {
|
Ok(c) => match c.as_str() {
|
||||||
"clear" => {
|
"clear" => {
|
||||||
let member = &msg.member(ctx).await.unwrap();
|
let member = &msg.member(ctx).await.unwrap();
|
||||||
has_permission(ctx, member, &[Permissions::MANAGE_GUILD]).await?
|
has_permission(ctx, member, &[Permissions::MANAGE_GUILD])?
|
||||||
}
|
}
|
||||||
_ => false,
|
_ => false,
|
||||||
},
|
},
|
||||||
|
@ -471,7 +470,7 @@ async fn play(ctx: &Context, msg: &Message, mut args: Args) -> CommandResult {
|
||||||
#[command]
|
#[command]
|
||||||
#[description("Next music")]
|
#[description("Next music")]
|
||||||
async fn next(ctx: &Context, msg: &Message) -> CommandResult {
|
async fn next(ctx: &Context, msg: &Message) -> CommandResult {
|
||||||
let guild_id = match ctx.cache.guild_channel(msg.channel_id).await {
|
let guild_id = match ctx.cache.guild_channel(msg.channel_id){
|
||||||
Some(channel) => channel.guild_id,
|
Some(channel) => channel.guild_id,
|
||||||
None => {
|
None => {
|
||||||
msg.channel_id
|
msg.channel_id
|
||||||
|
@ -517,7 +516,7 @@ async fn next(ctx: &Context, msg: &Message) -> CommandResult {
|
||||||
#[command]
|
#[command]
|
||||||
#[description("Stop the music")]
|
#[description("Stop the music")]
|
||||||
async fn stop(ctx: &Context, msg: &Message) -> CommandResult {
|
async fn stop(ctx: &Context, msg: &Message) -> CommandResult {
|
||||||
let guild_id = match ctx.cache.guild_channel(msg.channel_id).await {
|
let guild_id = match ctx.cache.guild_channel(msg.channel_id) {
|
||||||
Some(channel) => channel.guild_id,
|
Some(channel) => channel.guild_id,
|
||||||
None => {
|
None => {
|
||||||
msg.channel_id
|
msg.channel_id
|
||||||
|
@ -567,7 +566,7 @@ async fn stop(ctx: &Context, msg: &Message) -> CommandResult {
|
||||||
#[command]
|
#[command]
|
||||||
#[description("Pause the music")]
|
#[description("Pause the music")]
|
||||||
async fn pause(ctx: &Context, msg: &Message) -> CommandResult {
|
async fn pause(ctx: &Context, msg: &Message) -> CommandResult {
|
||||||
let guild_id = match ctx.cache.guild_channel(msg.channel_id).await {
|
let guild_id = match ctx.cache.guild_channel(msg.channel_id) {
|
||||||
Some(channel) => channel.guild_id,
|
Some(channel) => channel.guild_id,
|
||||||
None => {
|
None => {
|
||||||
msg.channel_id
|
msg.channel_id
|
||||||
|
@ -617,7 +616,7 @@ async fn pause(ctx: &Context, msg: &Message) -> CommandResult {
|
||||||
#[command]
|
#[command]
|
||||||
#[description("Resume the music")]
|
#[description("Resume the music")]
|
||||||
async fn resume(ctx: &Context, msg: &Message) -> CommandResult {
|
async fn resume(ctx: &Context, msg: &Message) -> CommandResult {
|
||||||
let guild_id = match ctx.cache.guild_channel(msg.channel_id).await {
|
let guild_id = match ctx.cache.guild_channel(msg.channel_id) {
|
||||||
Some(channel) => channel.guild_id,
|
Some(channel) => channel.guild_id,
|
||||||
None => {
|
None => {
|
||||||
msg.channel_id
|
msg.channel_id
|
||||||
|
@ -660,7 +659,7 @@ async fn resume(ctx: &Context, msg: &Message) -> CommandResult {
|
||||||
#[command]
|
#[command]
|
||||||
#[description("Remove a song from the track")]
|
#[description("Remove a song from the track")]
|
||||||
async fn remove(ctx: &Context, msg: &Message, mut args: Args) -> CommandResult {
|
async fn remove(ctx: &Context, msg: &Message, mut args: Args) -> CommandResult {
|
||||||
let guild_id = match ctx.cache.guild_channel(msg.channel_id).await {
|
let guild_id = match ctx.cache.guild_channel(msg.channel_id) {
|
||||||
Some(channel) => channel.guild_id,
|
Some(channel) => channel.guild_id,
|
||||||
None => {
|
None => {
|
||||||
msg.channel_id
|
msg.channel_id
|
||||||
|
@ -763,7 +762,7 @@ async fn remove(ctx: &Context, msg: &Message, mut args: Args) -> CommandResult {
|
||||||
#[command]
|
#[command]
|
||||||
#[description("Get the queue")]
|
#[description("Get the queue")]
|
||||||
async fn queue(ctx: &Context, msg: &Message) -> CommandResult<()> {
|
async fn queue(ctx: &Context, msg: &Message) -> CommandResult<()> {
|
||||||
let guild_id = match ctx.cache.guild_channel(msg.channel_id).await {
|
let guild_id = match ctx.cache.guild_channel(msg.channel_id) {
|
||||||
Some(channel) => channel.guild_id,
|
Some(channel) => channel.guild_id,
|
||||||
None => {
|
None => {
|
||||||
msg.channel_id
|
msg.channel_id
|
||||||
|
|
|
@ -43,11 +43,11 @@ pub(crate) async fn can_use_voice_command(
|
||||||
msg: &Message,
|
msg: &Message,
|
||||||
member: &Member,
|
member: &Member,
|
||||||
) -> Result<(), UseVoiceError> {
|
) -> Result<(), UseVoiceError> {
|
||||||
if has_permission(ctx, member, &[Permissions::MANAGE_GUILD]).await? {
|
if has_permission(ctx, member, &[Permissions::MANAGE_GUILD])? {
|
||||||
return Ok(());
|
return Ok(());
|
||||||
}
|
}
|
||||||
|
|
||||||
let guild = match msg.guild(&ctx.cache).await {
|
let guild = match msg.guild(&ctx.cache) {
|
||||||
Some(guild) => guild,
|
Some(guild) => guild,
|
||||||
None => return Err(UseVoiceError::NotInGuild),
|
None => return Err(UseVoiceError::NotInGuild),
|
||||||
};
|
};
|
||||||
|
|
|
@ -58,7 +58,7 @@ async fn muterole(ctx: &Context, msg: &Message, mut args: Args) -> CommandResult
|
||||||
if let Some(role_id) = role_id {
|
if let Some(role_id) = role_id {
|
||||||
format!(
|
format!(
|
||||||
"Mute role is @{}",
|
"Mute role is @{}",
|
||||||
RoleId(role_id).to_role_cached(&ctx).await.unwrap().name
|
RoleId(role_id).to_role_cached(&ctx).unwrap().name
|
||||||
)
|
)
|
||||||
} else {
|
} else {
|
||||||
"Mute role is None".to_string()
|
"Mute role is None".to_string()
|
||||||
|
|
|
@ -84,7 +84,7 @@ async fn main() -> anyhow::Result<()> {
|
||||||
|
|
||||||
let conn = Arc::new(Mutex::new(establish_connection(&conf.bot.database_url)?));
|
let conn = Arc::new(Mutex::new(establish_connection(&conf.bot.database_url)?));
|
||||||
|
|
||||||
let http = Http::new_with_token(&token);
|
let http = Http::new(&token);
|
||||||
|
|
||||||
// We will fetch your bot's owners and id
|
// We will fetch your bot's owners and id
|
||||||
let (owners, bot_id) = match http.get_current_application_info().await {
|
let (owners, bot_id) = match http.get_current_application_info().await {
|
||||||
|
@ -102,7 +102,7 @@ async fn main() -> anyhow::Result<()> {
|
||||||
let mut framework = StandardFramework::new()
|
let mut framework = StandardFramework::new()
|
||||||
.configure(|c| {
|
.configure(|c| {
|
||||||
c.with_whitespace(true)
|
c.with_whitespace(true)
|
||||||
.on_mention(Some(bot_id))
|
.on_mention(Some(serenity::model::id::UserId(bot_id.0)))
|
||||||
.prefix(PREFIX)
|
.prefix(PREFIX)
|
||||||
// In this case, if "," would be first, a message would never
|
// In this case, if "," would be first, a message would never
|
||||||
// be delimited at ", ", forcing you to trim your arguments if you
|
// be delimited at ", ", forcing you to trim your arguments if you
|
||||||
|
@ -138,7 +138,7 @@ async fn main() -> anyhow::Result<()> {
|
||||||
.unrecognised_command(unknown_command)
|
.unrecognised_command(unknown_command)
|
||||||
}
|
}
|
||||||
|
|
||||||
let mut client = Client::builder(&token)
|
let mut client = Client::builder(&token, GatewayIntents::default())
|
||||||
.application_id(conf.bot.application_id)
|
.application_id(conf.bot.application_id)
|
||||||
.event_handler(Messages {})
|
.event_handler(Messages {})
|
||||||
.framework(framework);
|
.framework(framework);
|
||||||
|
@ -191,7 +191,7 @@ impl EventHandler for Messages {
|
||||||
info!("{} connected to discord", ready.user.name);
|
info!("{} connected to discord", ready.user.name);
|
||||||
|
|
||||||
if let Some(cache) = ctx.cache() {
|
if let Some(cache) = ctx.cache() {
|
||||||
cache.set_max_messages(10).await; // TODO CONFIG
|
cache.set_max_messages(10); // TODO CONFIG
|
||||||
}
|
}
|
||||||
|
|
||||||
ctx.set_presence(Some(Activity::listening("?")), OnlineStatus::Online)
|
ctx.set_presence(Some(Activity::listening("?")), OnlineStatus::Online)
|
||||||
|
@ -239,8 +239,7 @@ async fn log_mentions(ctx: Context, new_message: &Message) -> CommandResult {
|
||||||
&ctx,
|
&ctx,
|
||||||
&new_message.member(&ctx).await?,
|
&new_message.member(&ctx).await?,
|
||||||
&[Permissions::ADMINISTRATOR],
|
&[Permissions::ADMINISTRATOR],
|
||||||
)
|
)?
|
||||||
.await?
|
|
||||||
{
|
{
|
||||||
return Ok(());
|
return Ok(());
|
||||||
}
|
}
|
||||||
|
@ -252,7 +251,7 @@ async fn log_mentions(ctx: Context, new_message: &Message) -> CommandResult {
|
||||||
} else {
|
} else {
|
||||||
let mut user_mentioned: HashSet<u64> = HashSet::with_capacity(MINIMUM_MENTIONS); // TODO IN GUILD OPTIONS
|
let mut user_mentioned: HashSet<u64> = HashSet::with_capacity(MINIMUM_MENTIONS); // TODO IN GUILD OPTIONS
|
||||||
|
|
||||||
let guild = new_message.guild(&ctx).await.ok_or("Failed to get guild")?;
|
let guild = new_message.guild(&ctx).ok_or("Failed to get guild")?;
|
||||||
|
|
||||||
let mut iter_users = new_message.mentions.iter();
|
let mut iter_users = new_message.mentions.iter();
|
||||||
while user_mentioned.len() < MINIMUM_MENTIONS {
|
while user_mentioned.len() < MINIMUM_MENTIONS {
|
||||||
|
@ -274,7 +273,7 @@ async fn log_mentions(ctx: Context, new_message: &Message) -> CommandResult {
|
||||||
while user_mentioned.len() < MINIMUM_MENTIONS {
|
while user_mentioned.len() < MINIMUM_MENTIONS {
|
||||||
if let Some(r) = iter_roles.next() {
|
if let Some(r) = iter_roles.next() {
|
||||||
for member in members.iter() {
|
for member in members.iter() {
|
||||||
if let Some(roles) = member.roles(&ctx).await {
|
if let Some(roles) = member.roles(&ctx) {
|
||||||
if roles.iter().any(|role| role.id.0 == r.0) {
|
if roles.iter().any(|role| role.id.0 == r.0) {
|
||||||
log::debug!("{:?}", member);
|
log::debug!("{:?}", member);
|
||||||
user_mentioned.insert(member.user.id.0);
|
user_mentioned.insert(member.user.id.0);
|
||||||
|
@ -345,7 +344,7 @@ async fn normal_message(_ctx: &Context, msg: &Message) {
|
||||||
}
|
}
|
||||||
|
|
||||||
#[hook]
|
#[hook]
|
||||||
async fn dispatch_error(ctx: &Context, msg: &Message, error: DispatchError) {
|
async fn dispatch_error(ctx: &Context, msg: &Message, error: DispatchError, command_name: &str) {
|
||||||
debug!("Dispatch error : {:?}", error);
|
debug!("Dispatch error : {:?}", error);
|
||||||
match error {
|
match error {
|
||||||
DispatchError::Ratelimited(seconds) => {
|
DispatchError::Ratelimited(seconds) => {
|
||||||
|
|
|
@ -14,7 +14,7 @@ impl Presences {
|
||||||
pub(crate) async fn next(&mut self, ctx: &Context) -> Option<Activity> {
|
pub(crate) async fn next(&mut self, ctx: &Context) -> Option<Activity> {
|
||||||
let res: Activity = match self.index {
|
let res: Activity = match self.index {
|
||||||
0 => Activity::listening("?"),
|
0 => Activity::listening("?"),
|
||||||
1 => Activity::listening(&format!("{} servers", ctx.cache.guild_count().await)),
|
1 => Activity::listening(&format!("{} servers", ctx.cache.guild_count())),
|
||||||
2 => Activity::playing("praising the borrow checker"),
|
2 => Activity::playing("praising the borrow checker"),
|
||||||
_ => unimplemented!(),
|
_ => unimplemented!(),
|
||||||
};
|
};
|
||||||
|
|
|
@ -4,19 +4,19 @@ use serenity::{
|
||||||
model::{guild::Member, Permissions},
|
model::{guild::Member, Permissions},
|
||||||
};
|
};
|
||||||
|
|
||||||
pub(crate) async fn has_permission(
|
pub(crate) fn has_permission(
|
||||||
ctx: &Context,
|
ctx: &Context,
|
||||||
member: &Member,
|
member: &Member,
|
||||||
permissions: &[Permissions],
|
permissions: &[Permissions],
|
||||||
) -> CommandResult<bool> {
|
) -> CommandResult<bool> {
|
||||||
let p = member.permissions(ctx).await?;
|
let p = member.permissions(ctx)?;
|
||||||
for perm in permissions {
|
for perm in permissions {
|
||||||
if p.contains(*perm) {
|
if p.contains(*perm) {
|
||||||
return Ok(true);
|
return Ok(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
let roles = member.roles(ctx).await.unwrap();
|
let roles = member.roles(ctx).unwrap();
|
||||||
for role in roles {
|
for role in roles {
|
||||||
for perm in permissions {
|
for perm in permissions {
|
||||||
if role.has_permissions(*perm, false) {
|
if role.has_permissions(*perm, false) {
|
||||||
|
|
Loading…
Reference in New Issue