Hex Artifact Content
Logged in as anonymous

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(()).}.