diff options
author | jan <jan@ruken.pw> | 2016-04-06 17:54:12 (UTC) |
---|---|---|
committer | jan <jan@ruken.pw> | 2016-04-06 17:54:12 (UTC) |
commit | 314047dda73387fff1fd4ccdb35f5db6ea6d7d5a (patch) | |
tree | f6b0d4c52db0a93c9afa9989b4624f23193b3a28 /src/feature/tasterank.rs | |
parent | ac1f32f068a8c1e856b6db00a8058d9bf372a006 (diff) |
FEATURES!
Diffstat (limited to 'src/feature/tasterank.rs')
-rw-r--r-- | src/feature/tasterank.rs | 61 |
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 @@ | |||
1 | use std::option::Option; | ||
2 | use std::io; | ||
3 | use std::io::prelude::*; | ||
4 | use std::fs::File; | ||
5 | |||
6 | use std::ascii::AsciiExt; | ||
7 | |||
8 | extern crate telegram_bot; | ||
9 | use telegram_bot::{Api, Message, MessageType}; | ||
10 | |||
11 | use feature::FeatureResult; | ||
12 | use feature::Feature; | ||
13 | |||
14 | pub struct Tasterank { | ||
15 | ranks: Vec<String>, | ||
16 | } | ||
17 | |||
18 | impl 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 | |||
43 | impl 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 | } | ||