forked from DiscordBots/Rustendo
65 lines
2 KiB
Rust
65 lines
2 KiB
Rust
|
use serenity::all::GuildId;
|
||
|
|
||
|
pub struct MusicQueue { // God this sucks. This needs to be reprogrammed properly.
|
||
|
guild_id: GuildId,
|
||
|
pub queue: Vec<String>,
|
||
|
pub now_playing: String,
|
||
|
}
|
||
|
|
||
|
static mut MUSIC_QUEUE: Vec<MusicQueue> = Vec::new();
|
||
|
|
||
|
pub unsafe fn get_queue(guild_id: &GuildId) -> &MusicQueue {
|
||
|
let queue = MUSIC_QUEUE.iter().find(|q| q.guild_id == *guild_id);
|
||
|
match queue {
|
||
|
Some(queue) => queue,
|
||
|
None => {
|
||
|
let new_queue = MusicQueue {
|
||
|
guild_id: *guild_id,
|
||
|
queue: Vec::new(),
|
||
|
now_playing: "".to_string(),
|
||
|
};
|
||
|
MUSIC_QUEUE.push(new_queue);
|
||
|
MUSIC_QUEUE.iter().find(|q| q.guild_id == *guild_id).expect("Cannot get queue")
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
unsafe fn update_queue(guild_id: &GuildId, queue: Vec<String>, now_playing: String) {
|
||
|
let index = MUSIC_QUEUE.iter().position(|q| q.guild_id == *guild_id).expect("Cannot get index");
|
||
|
MUSIC_QUEUE[index] = MusicQueue{
|
||
|
guild_id: *guild_id,
|
||
|
queue,
|
||
|
now_playing,
|
||
|
};
|
||
|
}
|
||
|
|
||
|
pub unsafe fn delete_queue(guild_id: &GuildId) {
|
||
|
let index = MUSIC_QUEUE.iter().position(|q| q.guild_id == *guild_id).expect("Cannot get index");
|
||
|
MUSIC_QUEUE.remove(index);
|
||
|
}
|
||
|
|
||
|
pub unsafe fn add_to_queue(guild_id: &GuildId, input: String) {
|
||
|
let queue = get_queue(guild_id);
|
||
|
let mut new_queue = queue.queue.clone();
|
||
|
new_queue.push(input);
|
||
|
update_queue(guild_id, new_queue, queue.now_playing.clone());
|
||
|
}
|
||
|
|
||
|
pub unsafe fn get_head(guild_id: &GuildId) -> Option<String> {
|
||
|
let queue = get_queue(guild_id);
|
||
|
let mut q = queue.queue.clone();
|
||
|
let result = q.first().map(|s| s.clone());
|
||
|
q.remove(0);
|
||
|
update_queue(guild_id, q, queue.now_playing.clone());
|
||
|
result
|
||
|
}
|
||
|
|
||
|
pub unsafe fn set_now_playing(guild_id: &GuildId, now_playing: String) {
|
||
|
let queue = get_queue(guild_id);
|
||
|
update_queue(guild_id, queue.queue.clone(), now_playing);
|
||
|
}
|
||
|
|
||
|
pub unsafe fn get_now_playing(guild_id: &GuildId) -> String {
|
||
|
let queue = get_queue(guild_id);
|
||
|
queue.now_playing.clone()
|
||
|
}
|