pikadick/commands/
leave.rs

1use crate::checks::ENABLED_CHECK;
2use anyhow::Context as _;
3use serenity::{
4    client::Context,
5    framework::standard::{
6        macros::command,
7        CommandResult,
8    },
9    model::prelude::*,
10};
11
12#[command]
13#[only_in(guilds)]
14#[bucket("default")]
15#[checks(Enabled)]
16async fn leave(ctx: &Context, msg: &Message) -> CommandResult {
17    let guild_id: GuildId = msg.guild(&ctx.cache).context("missing server data")?.id;
18
19    let manager = songbird::get(ctx)
20        .await
21        .expect("missing songbird data")
22        .clone();
23    let has_handler = manager.get(guild_id).is_some();
24
25    if has_handler {
26        if let Err(e) = manager.remove(guild_id).await {
27            msg.channel_id.say(&ctx.http, format!("{:?}", e)).await?;
28        }
29
30        msg.channel_id.say(&ctx.http, "Left voice channel").await?;
31    } else {
32        msg.reply(ctx, "Not in a voice channel").await?;
33    }
34
35    Ok(())
36}