pikadick/commands/
stop.rs

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