Update deps

This commit is contained in:
oupson 2022-08-09 19:19:05 +02:00
parent 48b37a1ee3
commit a957455a97
Signed by: oupson
GPG Key ID: 3BD88615552EFCB7
11 changed files with 756 additions and 695 deletions

1369
Cargo.lock generated

File diff suppressed because it is too large Load Diff

View File

@ -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"

View File

@ -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

View File

@ -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();
} }

View File

@ -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")
{ {

View File

@ -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

View File

@ -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),
}; };

View File

@ -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()

View File

@ -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) => {

View File

@ -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!(),
}; };

View File

@ -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) {