Artifact
8ac82f2233d70a153badd677892d2006e57c34aee06010d58b8688477f03c99d:
0000: 6d 6f 64 20 63 6f 6d 6d 61 6e 64 3b 0a 6d 6f 64 mod command;.mod
0010: 20 63 6f 72 65 3b 0a 0a 75 73 65 20 63 6f 6e 66 core;..use conf
0020: 69 67 3b 0a 75 73 65 20 66 75 74 75 72 65 73 3a ig;.use futures:
0030: 3a 53 74 72 65 61 6d 45 78 74 3b 0a 75 73 65 20 :StreamExt;.use
0040: 74 6f 6b 69 6f 3b 0a 0a 75 73 65 20 74 65 6c 65 tokio;..use tele
0050: 67 72 61 6d 5f 62 6f 74 3a 3a 2a 3b 0a 0a 23 5b gram_bot::*;..#[
0060: 6d 61 63 72 6f 5f 75 73 65 5d 0a 65 78 74 65 72 macro_use].exter
0070: 6e 20 63 72 61 74 65 20 6c 61 7a 79 5f 73 74 61 n crate lazy_sta
0080: 74 69 63 3b 0a 0a 75 73 65 20 61 6e 79 68 6f 77 tic;..use anyhow
0090: 3a 3a 52 65 73 75 6c 74 3b 0a 0a 23 5b 74 6f 6b ::Result;..#[tok
00a0: 69 6f 3a 3a 6d 61 69 6e 5d 0a 61 73 79 6e 63 20 io::main].async
00b0: 66 6e 20 6d 61 69 6e 28 29 20 2d 3e 20 52 65 73 fn main() -> Res
00c0: 75 6c 74 3c 28 29 3e 20 7b 0a 09 6c 65 74 20 6d ult<()> {..let m
00d0: 75 74 20 73 65 74 74 69 6e 67 73 20 3d 20 63 6f ut settings = co
00e0: 6e 66 69 67 3a 3a 43 6f 6e 66 69 67 3a 3a 64 65 nfig::Config::de
00f0: 66 61 75 6c 74 28 29 3b 0a 09 73 65 74 74 69 6e fault();..settin
0100: 67 73 2e 6d 65 72 67 65 28 63 6f 6e 66 69 67 3a gs.merge(config:
0110: 3a 46 69 6c 65 3a 3a 77 69 74 68 5f 6e 61 6d 65 :File::with_name
0120: 28 22 72 73 73 74 67 22 29 29 3f 3b 0a 0a 09 6c ("rsstg"))?;...l
0130: 65 74 20 63 6f 72 65 20 3d 20 63 6f 72 65 3a 3a et core = core::
0140: 43 6f 72 65 3a 3a 6e 65 77 28 73 65 74 74 69 6e Core::new(settin
0150: 67 73 29 2e 61 77 61 69 74 3f 3b 0a 0a 09 6c 65 gs).await?;...le
0160: 74 20 6d 75 74 20 73 74 72 65 61 6d 20 3d 20 63 t mut stream = c
0170: 6f 72 65 2e 73 74 72 65 61 6d 28 29 3b 0a 09 73 ore.stream();..s
0180: 74 72 65 61 6d 2e 61 6c 6c 6f 77 65 64 5f 75 70 tream.allowed_up
0190: 64 61 74 65 73 28 26 5b 41 6c 6c 6f 77 65 64 55 dates(&[AllowedU
01a0: 70 64 61 74 65 3a 3a 4d 65 73 73 61 67 65 5d 29 pdate::Message])
01b0: 3b 0a 09 6c 65 74 20 6d 75 74 20 72 65 70 6c 79 ;..let mut reply
01c0: 5f 74 6f 3a 20 4f 70 74 69 6f 6e 3c 55 73 65 72 _to: Option<User
01d0: 49 64 3e 3b 0a 0a 09 6c 6f 6f 70 20 7b 0a 09 09 Id>;...loop {...
01e0: 72 65 70 6c 79 5f 74 6f 20 3d 20 4e 6f 6e 65 3b reply_to = None;
01f0: 0a 09 09 6d 61 74 63 68 20 73 74 72 65 61 6d 2e ...match stream.
0200: 6e 65 78 74 28 29 2e 61 77 61 69 74 20 7b 0a 09 next().await {..
0210: 09 09 53 6f 6d 65 28 75 70 64 61 74 65 29 20 3d ..Some(update) =
0220: 3e 20 7b 0a 09 09 09 09 69 66 20 6c 65 74 20 45 > {.....if let E
0230: 72 72 28 65 72 72 29 20 3d 20 68 61 6e 64 6c 65 rr(err) = handle
0240: 28 75 70 64 61 74 65 3f 2c 20 26 63 6f 72 65 2c (update?, &core,
0250: 20 26 6d 75 74 20 72 65 70 6c 79 5f 74 6f 29 2e &mut reply_to).
0260: 61 77 61 69 74 20 7b 0a 09 09 09 09 09 63 6f 72 await {......cor
0270: 65 2e 73 65 6e 64 28 26 66 6f 72 6d 61 74 21 28 e.send(&format!(
0280: 22 f0 9f 9b 91 20 7b 3a 3f 7d 22 2c 20 65 72 72 "🛑 {:?}", err
0290: 29 2c 20 72 65 70 6c 79 5f 74 6f 29 3f 3b 0a 09 ), reply_to)?;..
02a0: 09 09 09 7d 3b 0a 09 09 09 7d 2c 0a 09 09 09 4e ...};....},....N
02b0: 6f 6e 65 20 3d 3e 20 7b 0a 09 09 09 09 63 6f 72 one => {.....cor
02c0: 65 2e 73 65 6e 64 28 26 66 6f 72 6d 61 74 21 28 e.send(&format!(
02d0: 22 f0 9f 9b 91 20 4e 6f 6e 65 20 65 72 72 6f 72 "🛑 None error
02e0: 2e 22 29 2c 20 4e 6f 6e 65 29 3f 3b 0a 09 09 09 ."), None)?;....
02f0: 7d 0a 09 09 7d 3b 0a 09 7d 0a 0a 09 2f 2f 4f 6b }...};..}...//Ok
0300: 28 28 29 29 0a 7d 0a 0a 61 73 79 6e 63 20 66 6e (()).}..async fn
0310: 20 68 61 6e 64 6c 65 28 75 70 64 61 74 65 3a 20 handle(update:
0320: 74 65 6c 65 67 72 61 6d 5f 62 6f 74 3a 3a 55 70 telegram_bot::Up
0330: 64 61 74 65 2c 20 63 6f 72 65 3a 20 26 63 6f 72 date, core: &cor
0340: 65 3a 3a 43 6f 72 65 2c 20 6d 75 74 20 5f 72 65 e::Core, mut _re
0350: 70 6c 79 5f 74 6f 3a 20 26 4f 70 74 69 6f 6e 3c ply_to: &Option<
0360: 55 73 65 72 49 64 3e 29 20 2d 3e 20 52 65 73 75 UserId>) -> Resu
0370: 6c 74 3c 28 29 3e 20 7b 0a 09 6d 61 74 63 68 20 lt<()> {..match
0380: 75 70 64 61 74 65 2e 6b 69 6e 64 20 7b 0a 09 09 update.kind {...
0390: 55 70 64 61 74 65 4b 69 6e 64 3a 3a 4d 65 73 73 UpdateKind::Mess
03a0: 61 67 65 28 6d 65 73 73 61 67 65 29 20 3d 3e 20 age(message) =>
03b0: 7b 0a 09 09 09 6d 61 74 63 68 20 6d 65 73 73 61 {....match messa
03c0: 67 65 2e 6b 69 6e 64 20 7b 0a 09 09 09 09 4d 65 ge.kind {.....Me
03d0: 73 73 61 67 65 4b 69 6e 64 3a 3a 54 65 78 74 20 ssageKind::Text
03e0: 7b 20 72 65 66 20 64 61 74 61 2c 20 2e 2e 20 7d { ref data, .. }
03f0: 20 3d 3e 20 7b 0a 09 09 09 09 09 6c 65 74 20 73 => {......let s
0400: 65 6e 64 65 72 20 3d 20 6d 65 73 73 61 67 65 2e ender = message.
0410: 66 72 6f 6d 2e 69 64 3b 0a 09 09 09 09 09 6c 65 from.id;......le
0420: 74 20 77 6f 72 64 73 3a 20 56 65 63 3c 26 73 74 t words: Vec<&st
0430: 72 3e 20 3d 20 64 61 74 61 2e 73 70 6c 69 74 5f r> = data.split_
0440: 77 68 69 74 65 73 70 61 63 65 28 29 2e 63 6f 6c whitespace().col
0450: 6c 65 63 74 28 29 3b 0a 09 09 09 09 09 6d 61 74 lect();......mat
0460: 63 68 20 77 6f 72 64 73 5b 30 5d 20 7b 0a 09 09 ch words[0] {...
0470: 09 09 09 09 22 2f 63 68 65 63 6b 22 20 7c 20 22 ...."/check" | "
0480: 2f 63 6c 65 61 6e 22 20 7c 20 22 2f 65 6e 61 62 /clean" | "/enab
0490: 6c 65 22 20 7c 20 22 2f 64 65 6c 65 74 65 22 20 le" | "/delete"
04a0: 7c 20 22 2f 64 69 73 61 62 6c 65 22 20 3d 3e 20 | "/disable" =>
04b0: 63 6f 6d 6d 61 6e 64 3a 3a 63 6f 6d 6d 61 6e 64 command::command
04c0: 28 63 6f 72 65 2c 20 73 65 6e 64 65 72 2c 20 77 (core, sender, w
04d0: 6f 72 64 73 29 2e 61 77 61 69 74 3f 2c 0a 09 09 ords).await?,...
04e0: 09 09 09 09 22 2f 73 74 61 72 74 22 20 3d 3e 20 ...."/start" =>
04f0: 63 6f 6d 6d 61 6e 64 3a 3a 73 74 61 72 74 28 63 command::start(c
0500: 6f 72 65 2c 20 73 65 6e 64 65 72 29 2e 61 77 61 ore, sender).awa
0510: 69 74 3f 2c 0a 09 09 09 09 09 09 22 2f 6c 69 73 it?,......."/lis
0520: 74 22 20 3d 3e 20 63 6f 6d 6d 61 6e 64 3a 3a 6c t" => command::l
0530: 69 73 74 28 63 6f 72 65 2c 20 73 65 6e 64 65 72 ist(core, sender
0540: 29 2e 61 77 61 69 74 3f 2c 0a 09 09 09 09 09 09 ).await?,.......
0550: 22 2f 61 64 64 22 20 7c 20 22 2f 75 70 64 61 74 "/add" | "/updat
0560: 65 22 20 3d 3e 20 63 6f 6d 6d 61 6e 64 3a 3a 75 e" => command::u
0570: 70 64 61 74 65 28 63 6f 72 65 2c 20 73 65 6e 64 pdate(core, send
0580: 65 72 2c 20 77 6f 72 64 73 29 2e 61 77 61 69 74 er, words).await
0590: 3f 2c 0a 09 09 09 09 09 09 5f 20 3d 3e 20 7b 0a ?,......._ => {.
05a0: 09 09 09 09 09 09 7d 2c 0a 09 09 09 09 09 7d 3b ......},......};
05b0: 0a 09 09 09 09 7d 2c 0a 09 09 09 09 5f 20 3d 3e .....},....._ =>
05c0: 20 7b 0a 09 09 09 09 7d 2c 0a 09 09 09 7d 3b 0a {.....},....};.
05d0: 09 09 7d 2c 0a 09 09 5f 20 3d 3e 20 7b 7d 2c 0a ..},..._ => {},.
05e0: 09 7d 3b 0a 0a 09 4f 6b 28 28 29 29 0a 7d 0a .};...Ok(()).}.