aboutsummaryrefslogtreecommitdiff
path: root/examples
diff options
context:
space:
mode:
authorAustin Hellyer <[email protected]>2016-11-13 19:28:13 -0800
committerAustin Hellyer <[email protected]>2016-11-14 18:32:10 -0800
commit7d22fb2a9c70e5e517b359875a0157f72e352e43 (patch)
treeca3bcb3a76f68960563d3c38d45e21f493ce32f8 /examples
parentAdd internal module (diff)
downloadserenity-7d22fb2a9c70e5e517b359875a0157f72e352e43.tar.xz
serenity-7d22fb2a9c70e5e517b359875a0157f72e352e43.zip
Add voice connection support
Diffstat (limited to 'examples')
-rw-r--r--examples/07_voice.rs168
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!");
+}