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"]
|
||||
|
||||
[dependencies]
|
||||
serenity = { version = "0.10.10", features = ["unstable_discord_api"] }
|
||||
serenity = { version = "0.11", features = ["unstable_discord_api"] }
|
||||
toml = "0.5"
|
||||
serde = { version = "1.0", features = ["derive"] }
|
||||
reqwest = "0.11"
|
||||
|
@ -25,6 +25,6 @@ serde_json = "1.0"
|
|||
log = "0.4"
|
||||
log4rs = "1.0"
|
||||
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" }
|
||||
anyhow = "1.0.56"
|
|
@ -20,10 +20,10 @@ async fn kick(ctx: &Context, msg: &Message) -> CommandResult {
|
|||
// TODO CACHE ? + error message
|
||||
if let Ok(sender_member) = msg.member(ctx).await {
|
||||
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);
|
||||
let kick = if let Some(role_member) = sender_member.highest_role_info(ctx).await {
|
||||
if let Some(role) = 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) {
|
||||
role_member.1 > role.1
|
||||
} else {
|
||||
true
|
||||
|
@ -62,10 +62,10 @@ async fn ban(ctx: &Context, msg: &Message) -> CommandResult {
|
|||
// TODO CACHE ? + Error message
|
||||
if let Ok(sender_member) = msg.member(ctx).await {
|
||||
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);
|
||||
let kick = if let Some(role_member) = sender_member.highest_role_info(ctx).await {
|
||||
if let Some(role) = 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) {
|
||||
role_member.1 > role.1
|
||||
} else {
|
||||
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 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();
|
||||
}
|
||||
|
||||
|
|
|
@ -46,7 +46,7 @@ async fn command(
|
|||
let permissions = Permissions::from_bits_truncate(
|
||||
author
|
||||
.permissions
|
||||
.map(|v| v.bits)
|
||||
.map(|v| v.bits())
|
||||
.ok_or("Failed to get permission")?,
|
||||
);
|
||||
|
||||
|
@ -60,7 +60,7 @@ async fn command(
|
|||
response
|
||||
.kind(InteractionResponseType::ChannelMessageWithSource)
|
||||
.interaction_response_data(|message| {
|
||||
message.create_embed(|e| {
|
||||
message.embed(|e| {
|
||||
embed_author(e, Some(author))
|
||||
.title("Error")
|
||||
.description("You don't have the right to do that")
|
||||
|
@ -108,7 +108,6 @@ async fn goulag(
|
|||
let mut member = ctx
|
||||
.cache
|
||||
.guild(guild_id)
|
||||
.await
|
||||
.ok_or("Failed to get guild")?
|
||||
.member(&ctx.http, user_id)
|
||||
.await?;
|
||||
|
@ -120,7 +119,7 @@ async fn goulag(
|
|||
response
|
||||
.kind(InteractionResponseType::ChannelMessageWithSource)
|
||||
.interaction_response_data(|message| {
|
||||
message.create_embed(|e| {
|
||||
message.embed(|e| {
|
||||
embed_author(e, Some(author))
|
||||
.title("Mute")
|
||||
.description(format!("{} was muted", member.display_name()))
|
||||
|
@ -138,7 +137,7 @@ async fn goulag(
|
|||
response
|
||||
.kind(InteractionResponseType::ChannelMessageWithSource)
|
||||
.interaction_response_data(|message| {
|
||||
message.create_embed(|e| {
|
||||
message.embed(|e| {
|
||||
embed_author(e, Some(author))
|
||||
.title("Error")
|
||||
.description("Unknown mute role")
|
||||
|
@ -167,7 +166,6 @@ async fn message_interact(
|
|||
let role = match ctx
|
||||
.cache
|
||||
.guild(guild_id)
|
||||
.await
|
||||
.unwrap()
|
||||
.role_by_name("mute")
|
||||
{
|
||||
|
|
|
@ -10,7 +10,7 @@ use serenity::{
|
|||
Args, CommandResult,
|
||||
},
|
||||
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};
|
||||
|
||||
|
@ -66,7 +66,7 @@ struct Music;
|
|||
#[description("Join the channel you are connected")]
|
||||
#[aliases("j")]
|
||||
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,
|
||||
None => {
|
||||
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 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 {
|
||||
is_mute(ctx, member, guild.id).await.unwrap_or(false) && !can_manage_guild
|
||||
} else {
|
||||
|
@ -184,7 +184,6 @@ async fn leave(ctx: &Context, msg: &Message) -> CommandResult {
|
|||
let guild_id = match ctx
|
||||
.cache
|
||||
.guild_channel_field(msg.channel_id, |channel| channel.guild_id)
|
||||
.await
|
||||
{
|
||||
Some(id) => id,
|
||||
None => {
|
||||
|
@ -240,7 +239,7 @@ async fn leave(ctx: &Context, msg: &Message) -> CommandResult {
|
|||
#[description("Play a music (require an url)")]
|
||||
#[aliases("p")]
|
||||
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,
|
||||
None => {
|
||||
msg.channel_id
|
||||
|
@ -274,7 +273,7 @@ async fn play(ctx: &Context, msg: &Message, mut args: Args) -> CommandResult {
|
|||
Ok(c) => match c.as_str() {
|
||||
"clear" => {
|
||||
let member = &msg.member(ctx).await.unwrap();
|
||||
has_permission(ctx, member, &[Permissions::MANAGE_GUILD]).await?
|
||||
has_permission(ctx, member, &[Permissions::MANAGE_GUILD])?
|
||||
}
|
||||
_ => false,
|
||||
},
|
||||
|
@ -471,7 +470,7 @@ async fn play(ctx: &Context, msg: &Message, mut args: Args) -> CommandResult {
|
|||
#[command]
|
||||
#[description("Next music")]
|
||||
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,
|
||||
None => {
|
||||
msg.channel_id
|
||||
|
@ -517,7 +516,7 @@ async fn next(ctx: &Context, msg: &Message) -> CommandResult {
|
|||
#[command]
|
||||
#[description("Stop the music")]
|
||||
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,
|
||||
None => {
|
||||
msg.channel_id
|
||||
|
@ -567,7 +566,7 @@ async fn stop(ctx: &Context, msg: &Message) -> CommandResult {
|
|||
#[command]
|
||||
#[description("Pause the music")]
|
||||
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,
|
||||
None => {
|
||||
msg.channel_id
|
||||
|
@ -617,7 +616,7 @@ async fn pause(ctx: &Context, msg: &Message) -> CommandResult {
|
|||
#[command]
|
||||
#[description("Resume the music")]
|
||||
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,
|
||||
None => {
|
||||
msg.channel_id
|
||||
|
@ -660,7 +659,7 @@ async fn resume(ctx: &Context, msg: &Message) -> CommandResult {
|
|||
#[command]
|
||||
#[description("Remove a song from the track")]
|
||||
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,
|
||||
None => {
|
||||
msg.channel_id
|
||||
|
@ -763,7 +762,7 @@ async fn remove(ctx: &Context, msg: &Message, mut args: Args) -> CommandResult {
|
|||
#[command]
|
||||
#[description("Get the queue")]
|
||||
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,
|
||||
None => {
|
||||
msg.channel_id
|
||||
|
|
|
@ -43,11 +43,11 @@ pub(crate) async fn can_use_voice_command(
|
|||
msg: &Message,
|
||||
member: &Member,
|
||||
) -> Result<(), UseVoiceError> {
|
||||
if has_permission(ctx, member, &[Permissions::MANAGE_GUILD]).await? {
|
||||
if has_permission(ctx, member, &[Permissions::MANAGE_GUILD])? {
|
||||
return Ok(());
|
||||
}
|
||||
|
||||
let guild = match msg.guild(&ctx.cache).await {
|
||||
let guild = match msg.guild(&ctx.cache) {
|
||||
Some(guild) => guild,
|
||||
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 {
|
||||
format!(
|
||||
"Mute role is @{}",
|
||||
RoleId(role_id).to_role_cached(&ctx).await.unwrap().name
|
||||
RoleId(role_id).to_role_cached(&ctx).unwrap().name
|
||||
)
|
||||
} else {
|
||||
"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 http = Http::new_with_token(&token);
|
||||
let http = Http::new(&token);
|
||||
|
||||
// We will fetch your bot's owners and id
|
||||
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()
|
||||
.configure(|c| {
|
||||
c.with_whitespace(true)
|
||||
.on_mention(Some(bot_id))
|
||||
.on_mention(Some(serenity::model::id::UserId(bot_id.0)))
|
||||
.prefix(PREFIX)
|
||||
// In this case, if "," would be first, a message would never
|
||||
// be delimited at ", ", forcing you to trim your arguments if you
|
||||
|
@ -138,7 +138,7 @@ async fn main() -> anyhow::Result<()> {
|
|||
.unrecognised_command(unknown_command)
|
||||
}
|
||||
|
||||
let mut client = Client::builder(&token)
|
||||
let mut client = Client::builder(&token, GatewayIntents::default())
|
||||
.application_id(conf.bot.application_id)
|
||||
.event_handler(Messages {})
|
||||
.framework(framework);
|
||||
|
@ -191,7 +191,7 @@ impl EventHandler for Messages {
|
|||
info!("{} connected to discord", ready.user.name);
|
||||
|
||||
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)
|
||||
|
@ -239,8 +239,7 @@ async fn log_mentions(ctx: Context, new_message: &Message) -> CommandResult {
|
|||
&ctx,
|
||||
&new_message.member(&ctx).await?,
|
||||
&[Permissions::ADMINISTRATOR],
|
||||
)
|
||||
.await?
|
||||
)?
|
||||
{
|
||||
return Ok(());
|
||||
}
|
||||
|
@ -252,7 +251,7 @@ async fn log_mentions(ctx: Context, new_message: &Message) -> CommandResult {
|
|||
} else {
|
||||
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();
|
||||
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 {
|
||||
if let Some(r) = iter_roles.next() {
|
||||
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) {
|
||||
log::debug!("{:?}", member);
|
||||
user_mentioned.insert(member.user.id.0);
|
||||
|
@ -345,7 +344,7 @@ async fn normal_message(_ctx: &Context, msg: &Message) {
|
|||
}
|
||||
|
||||
#[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);
|
||||
match error {
|
||||
DispatchError::Ratelimited(seconds) => {
|
||||
|
|
|
@ -14,7 +14,7 @@ impl Presences {
|
|||
pub(crate) async fn next(&mut self, ctx: &Context) -> Option<Activity> {
|
||||
let res: Activity = match self.index {
|
||||
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"),
|
||||
_ => unimplemented!(),
|
||||
};
|
||||
|
|
|
@ -4,19 +4,19 @@ use serenity::{
|
|||
model::{guild::Member, Permissions},
|
||||
};
|
||||
|
||||
pub(crate) async fn has_permission(
|
||||
pub(crate) fn has_permission(
|
||||
ctx: &Context,
|
||||
member: &Member,
|
||||
permissions: &[Permissions],
|
||||
) -> CommandResult<bool> {
|
||||
let p = member.permissions(ctx).await?;
|
||||
let p = member.permissions(ctx)?;
|
||||
for perm in permissions {
|
||||
if p.contains(*perm) {
|
||||
return Ok(true);
|
||||
}
|
||||
}
|
||||
|
||||
let roles = member.roles(ctx).await.unwrap();
|
||||
let roles = member.roles(ctx).unwrap();
|
||||
for role in roles {
|
||||
for perm in permissions {
|
||||
if role.has_permissions(*perm, false) {
|
||||
|
|
Loading…
Reference in New Issue