diff options
| author | Austin Hellyer <[email protected]> | 2016-11-13 19:28:13 -0800 |
|---|---|---|
| committer | Austin Hellyer <[email protected]> | 2016-11-14 18:32:10 -0800 |
| commit | 7d22fb2a9c70e5e517b359875a0157f72e352e43 (patch) | |
| tree | ca3bcb3a76f68960563d3c38d45e21f493ce32f8 /examples | |
| parent | Add internal module (diff) | |
| download | serenity-7d22fb2a9c70e5e517b359875a0157f72e352e43.tar.xz serenity-7d22fb2a9c70e5e517b359875a0157f72e352e43.zip | |
Add voice connection support
Diffstat (limited to 'examples')
| -rw-r--r-- | examples/07_voice.rs | 168 |
1 files changed, 168 insertions, 0 deletions
diff --git a/examples/07_voice.rs b/examples/07_voice.rs new file mode 100644 index 0000000..d4357c2 --- /dev/null +++ b/examples/07_voice.rs @@ -0,0 +1,168 @@ +extern crate serenity; + +use serenity::client::{STATE, Client, Context}; +use serenity::model::{Channel, ChannelId, Message}; +use std::env; + +fn main() { + // Configure the client with your Discord bot token in the environment. + let token = env::var("DISCORD_TOKEN") + .expect("Expected a token in the environment"); + let mut client = Client::login_bot(&token); + + client.with_framework(|f| + f.configure(|c| c.prefix("~")) + .on("deafen", deafen) + .on("join", join) + .on("leave", leave) + .on("mute", mute) + .on("ping", ping)); + + client.on_ready(|_context, ready| { + println!("{} is connected!", ready.user.name); + }); + + let _ = client.start(); +} + +fn deafen(context: Context, message: Message, _args: Vec<String>) { + let guild_id = match STATE.lock().unwrap().find_channel(message.channel_id) { + Some(Channel::Public(channel)) => channel.guild_id, + Some(_) => { + let _ = message.reply("Groups and DMs not supported"); + + return; + }, + None => { + let _ = context.say("Can't find guild"); + + return; + }, + }; + + let mut connection = context.connection.lock().unwrap(); + + let handler = match connection.manager.get(guild_id) { + Some(handler) => handler, + None => { + let _ = message.reply("Not in a voice channel"); + + return; + }, + }; + + if handler.is_deafened() { + let _ = context.say("Already deafened"); + } else { + handler.deafen(true); + + let _ = context.say("Deafened"); + } +} + +fn join(context: Context, message: Message, args: Vec<String>) { + let connect_to = match args.get(0) { + Some(arg) => match arg.parse::<u64>() { + Ok(id) => ChannelId(id), + Err(_why) => { + let _ = message.reply("Invalid voice channel ID given"); + + return; + }, + }, + None => { + let _ = message.reply("Requires a voice channel ID be given"); + + return; + }, + }; + + let guild_id = match STATE.lock().unwrap().find_channel(message.channel_id) { + Some(Channel::Public(channel)) => channel.guild_id, + Some(_) => { + let _ = context.say("Groups and DMs not supported"); + + return; + }, + None => { + let _ = context.say("Can't find guild"); + + return; + }, + }; + + let mut connection = context.connection.lock().unwrap(); + let ref mut manager = connection.manager; + + let _handler = manager.join(Some(guild_id), connect_to); + + let _ = context.say(&format!("Joined {}", connect_to.mention())); +} + +fn leave(context: Context, message: Message, _args: Vec<String>) { + let guild_id = match STATE.lock().unwrap().find_channel(message.channel_id) { + Some(Channel::Public(channel)) => channel.guild_id, + Some(_) => { + let _ = context.say("Groups and DMs not supported"); + + return; + }, + None => { + let _ = context.say("Can't find guild"); + + return; + }, + }; + + let is_connected = match context.connection.lock().unwrap().manager.get(guild_id) { + Some(handler) => handler.channel().is_some(), + None => false, + }; + + if is_connected { + context.connection.lock().unwrap().manager.remove(guild_id); + + let _ = context.say("Left voice channel"); + } else { + let _ = message.reply("Not in a voice channel"); + } +} + +fn mute(context: Context, message: Message, _args: Vec<String>) { + let guild_id = match STATE.lock().unwrap().find_channel(message.channel_id) { + Some(Channel::Public(channel)) => channel.guild_id, + Some(_) => { + let _ = message.reply("Groups and DMs not supported"); + + return; + }, + None => { + let _ = context.say("Can't find guild"); + + return; + }, + }; + + let mut connection = context.connection.lock().unwrap(); + + let handler = match connection.manager.get(guild_id) { + Some(handler) => handler, + None => { + let _ = message.reply("Not in a voice channel"); + + return; + }, + }; + + if handler.is_muted() { + let _ = context.say("Already muted"); + } else { + handler.mute(true); + + let _ = context.say("Now muted"); + } +} + +fn ping(context: Context, _message: Message, _args: Vec<String>) { + let _ = context.say("Pong!"); +} |