give the discord module the ability to recieve events and transmit messages

This commit is contained in:
Adrian Malacoda 2018-02-22 23:43:46 -06:00
parent a37b6ab627
commit 93ee23c831

View File

@ -14,6 +14,8 @@ use transformable_channels::mpsc::ExtSender;
use std::fmt;
use std::fmt::{Debug, Formatter};
use crossbeam;
use {MessageSender, Message, User, Channel};
pub struct DiscordModule {
@ -96,13 +98,31 @@ fn channel_from_public_channel (discord: Arc<Discord>, channel: discord::model::
}
impl EventLoop for DiscordModule {
fn run (&self, sender: Box<ExtSender<event::Event>>, _: Receiver<Arc<event::Envelope>>) {
fn run (&self, sender: Box<ExtSender<event::Event>>, receiver: Receiver<Arc<event::Envelope>>) {
let discord = Arc::new(Discord::from_bot_token(&self.token[..]).expect("Discord module: Login failed"));
let (mut connection, _) = discord.connect().expect("Discord module: Connection failed");
info!("Playing {}", self.playing);
connection.set_game_name(self.playing.clone());
crossbeam::scope(|scope| {
let discord_sender = discord.clone();
scope.spawn(move || {
loop {
if let Ok(envelope) = receiver.recv() {
if let event::Event::Message { ref message } = envelope.event {
if let Some(ref channel) = message.channel {
if let Ok(channel_id) = channel.name.parse::<u64>() {
discord_sender.send_message(discord::model::ChannelId(channel_id), &message.content, "", false);
}
}
}
} else {
break;
}
}
});
loop {
let event = connection.recv_event();
debug!("Received event: {:?}", event);
@ -153,5 +173,6 @@ impl EventLoop for DiscordModule {
Err(err) => error!("Received error: {:?}", err)
}
}
});
}
}