extern crate telegram_bot; use telegram_bot::{Api, ListeningMethod, ParseMode, MessageType, ListeningAction}; extern crate rustc_serialize; use std::ascii::AsciiExt; mod feature; use feature::{Feature, FeatureResult}; fn main() { let api = Api::from_env("TELEGRAM_BOT_TOKEN").unwrap(); println!("api started: {:?}", api.get_me()); let mut features = feature::init(); let mut listener = api.listener(ListeningMethod::LongPoll(None)); let res = listener.listen(|u| { if let Some(m) = u.message { if let &MessageType::Text(ref s) = &m.msg { if (s).to_ascii_lowercase().contains("luggas zeig mir deine features") { let mut msg = String::new(); for f in &features { msg.push_str(&format!("`{}`, ", f.name())); } let msg = msg; let pos = msg.len() - 2; let mut msg = msg; msg.remove(pos); if let Err(e) = api.send_message(m.chat.id(), msg, Some(ParseMode::Markdown), None, Some(m.message_id), None) { println!("{}", e); } return Ok(ListeningAction::Continue); } } for f in &mut features { match f.handle(api.clone(), m.clone()) { Ok(r) => { match r { FeatureResult::Handled => break, FeatureResult::Skip => continue, }; } Err(e) => { println!("Error in feature {}: {}", f.name(), e); } }; } }; Ok(ListeningAction::Continue) }); if let Err(e) = res { panic!(e); } }