properly implement discord channels, dry up code
This commit is contained in:
parent
bb25846566
commit
2c0e5170f4
@ -67,6 +67,40 @@ impl Debug for DiscordMessageSender {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn make_channel_object (discord: Arc<Discord>, channel: discord::model::Channel) -> Option<Channel> {
|
||||||
|
match channel {
|
||||||
|
discord::model::Channel::Group(group) => {
|
||||||
|
Some(Channel {
|
||||||
|
name: group.name.unwrap_or_else(|| String::from("Group channel")),
|
||||||
|
description: String::from(""),
|
||||||
|
topic: String::from(""),
|
||||||
|
sender: Box::new(DiscordMessageSender {
|
||||||
|
discord: discord,
|
||||||
|
channel_id: group.channel_id
|
||||||
|
})
|
||||||
|
})
|
||||||
|
},
|
||||||
|
discord::model::Channel::Private(private_channel) => {
|
||||||
|
None
|
||||||
|
},
|
||||||
|
discord::model::Channel::Public(public_channel) => {
|
||||||
|
Some(channel_from_public_channel(discord, public_channel))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn channel_from_public_channel (discord: Arc<Discord>, channel: discord::model::PublicChannel) -> Channel {
|
||||||
|
Channel {
|
||||||
|
name: channel.name,
|
||||||
|
description: String::from(""),
|
||||||
|
topic: channel.topic.unwrap_or_else(|| String::new()),
|
||||||
|
sender: Box::new(DiscordMessageSender {
|
||||||
|
discord: discord,
|
||||||
|
channel_id: channel.id
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl EventLoop for DiscordModule {
|
impl EventLoop for DiscordModule {
|
||||||
fn run (&self, sender: Box<ExtSender<event::Envelope>>, _: Receiver<Arc<event::Envelope>>) {
|
fn run (&self, sender: Box<ExtSender<event::Envelope>>, _: Receiver<Arc<event::Envelope>>) {
|
||||||
let discord = Arc::new(Discord::from_bot_token(&self.token[..]).expect("Discord module: Login failed"));
|
let discord = Arc::new(Discord::from_bot_token(&self.token[..]).expect("Discord module: Login failed"));
|
||||||
@ -88,15 +122,7 @@ impl EventLoop for DiscordModule {
|
|||||||
info!(" - Joined channel: {}", channel.name);
|
info!(" - Joined channel: {}", channel.name);
|
||||||
|
|
||||||
match sender.send(Envelope::new(event::Event::SelfJoin {
|
match sender.send(Envelope::new(event::Event::SelfJoin {
|
||||||
channel: Channel {
|
channel: channel_from_public_channel(discord.clone(), channel)
|
||||||
name: channel.name,
|
|
||||||
description: String::from(""),
|
|
||||||
topic: channel.topic.unwrap_or_else(|| String::from("")),
|
|
||||||
sender: Box::new(DiscordMessageSender {
|
|
||||||
discord: discord.clone(),
|
|
||||||
channel_id: channel.id
|
|
||||||
})
|
|
||||||
}
|
|
||||||
})) {
|
})) {
|
||||||
Err(err) => error!("Error sending selfjoin event: {:?}", err),
|
Err(err) => error!("Error sending selfjoin event: {:?}", err),
|
||||||
Ok(_) => {}
|
Ok(_) => {}
|
||||||
@ -115,20 +141,10 @@ impl EventLoop for DiscordModule {
|
|||||||
})
|
})
|
||||||
};
|
};
|
||||||
|
|
||||||
let channel = Channel {
|
|
||||||
name: String::from("channel"),
|
|
||||||
description: String::from(""),
|
|
||||||
topic: String::from(""),
|
|
||||||
sender: Box::new(DiscordMessageSender {
|
|
||||||
discord: discord.clone(),
|
|
||||||
channel_id: message.channel_id
|
|
||||||
})
|
|
||||||
};
|
|
||||||
|
|
||||||
let message = Message {
|
let message = Message {
|
||||||
author: author,
|
author: author,
|
||||||
content: message.content,
|
content: message.content,
|
||||||
channel: Some(channel)
|
channel: discord.get_channel(message.channel_id).ok().and_then(|channel| make_channel_object(discord.clone(), channel))
|
||||||
};
|
};
|
||||||
|
|
||||||
match sender.send(Envelope::new(event::Event::Message { message: message })) {
|
match sender.send(Envelope::new(event::Event::Message { message: message })) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user