aboutsummaryrefslogtreecommitdiff
path: root/src/feature/tasterank.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/feature/tasterank.rs')
-rw-r--r--src/feature/tasterank.rs61
1 files changed, 61 insertions, 0 deletions
diff --git a/src/feature/tasterank.rs b/src/feature/tasterank.rs
new file mode 100644
index 0000000..c4a29f9
--- /dev/null
+++ b/src/feature/tasterank.rs
@@ -0,0 +1,61 @@
1use std::option::Option;
2use std::io;
3use std::io::prelude::*;
4use std::fs::File;
5
6use std::ascii::AsciiExt;
7
8extern crate telegram_bot;
9use telegram_bot::{Api, Message, MessageType};
10
11use feature::FeatureResult;
12use feature::Feature;
13
14pub struct Tasterank {
15 ranks: Vec<String>,
16}
17
18impl Feature for Tasterank {
19 fn name(&self) -> &'static str {
20 "Tasterank"
21 }
22 fn init(&mut self) {
23 if let Err(e) = self.update_ranks() {
24 panic!(e);
25 }
26 }
27 fn handle(&mut self, a: Api, m: Message) -> Result<FeatureResult, String> {
28 if let MessageType::Text(s) = m.msg {
29 if !(&s).to_ascii_lowercase().contains("luggas tasterank") {
30 return Ok(FeatureResult::Skip);
31 }
32 let mut msg = String::new();
33 for (i, rank) in self.ranks.iter().enumerate() {
34 msg.push_str(&format!("{}. {}\n", i + 1, rank));
35 }
36 a.send_message(m.chat.id(), msg, None, None, Some(m.message_id), None);
37 return Ok(FeatureResult::Handled);
38 }
39 Ok(FeatureResult::Skip)
40 }
41}
42
43impl Tasterank {
44 pub fn new() -> Tasterank {
45 let mut t = Tasterank { ranks: vec![] };
46 t.init();
47 t
48 }
49 fn update_ranks(&mut self) -> Result<(), io::Error> {
50 let mut f = try!(File::open("data/tasterank.list"));
51 let mut buf = String::new();
52 try!(f.read_to_string(&mut buf));
53 let temp: Vec<&str> = (&buf).split("\n").collect();
54 self.ranks.clear();
55 for r in &temp {
56 self.ranks.push(r.to_string());
57 }
58 self.ranks.pop().unwrap();
59 Ok(())
60 }
61}