Artifact
5b733710635f8dee7d59c9f7cdaf04a4340bbfa9f438c89e8c6d7858d441349d:
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 75 73 65 20 74 65 6c 65 67 tokio;.use teleg
0050: 72 61 6d 5f 62 6f 74 3b 0a 0a 23 5b 6d 61 63 72 ram_bot;..#[macr
0060: 6f 5f 75 73 65 5d 0a 65 78 74 65 72 6e 20 63 72 o_use].extern cr
0070: 61 74 65 20 6c 61 7a 79 5f 73 74 61 74 69 63 3b ate lazy_static;
0080: 0a 0a 75 73 65 20 61 6e 79 68 6f 77 3a 3a 52 65 ..use anyhow::Re
0090: 73 75 6c 74 3b 0a 0a 23 5b 74 6f 6b 69 6f 3a 3a sult;..#[tokio::
00a0: 6d 61 69 6e 5d 0a 61 73 79 6e 63 20 66 6e 20 6d main].async fn m
00b0: 61 69 6e 28 29 20 2d 3e 20 52 65 73 75 6c 74 3c ain() -> Result<
00c0: 28 29 3e 20 7b 0a 09 6c 65 74 20 6d 75 74 20 73 ()> {..let mut s
00d0: 65 74 74 69 6e 67 73 20 3d 20 63 6f 6e 66 69 67 ettings = config
00e0: 3a 3a 43 6f 6e 66 69 67 3a 3a 64 65 66 61 75 6c ::Config::defaul
00f0: 74 28 29 3b 0a 09 73 65 74 74 69 6e 67 73 2e 6d t();..settings.m
0100: 65 72 67 65 28 63 6f 6e 66 69 67 3a 3a 46 69 6c erge(config::Fil
0110: 65 3a 3a 77 69 74 68 5f 6e 61 6d 65 28 22 72 73 e::with_name("rs
0120: 73 74 67 22 29 29 3f 3b 0a 0a 09 6c 65 74 20 63 stg"))?;...let c
0130: 6f 72 65 20 3d 20 63 6f 72 65 3a 3a 43 6f 72 65 ore = core::Core
0140: 3a 3a 6e 65 77 28 73 65 74 74 69 6e 67 73 29 2e ::new(settings).
0150: 61 77 61 69 74 3f 3b 0a 0a 09 6c 65 74 20 6d 75 await?;...let mu
0160: 74 20 73 74 72 65 61 6d 20 3d 20 63 6f 72 65 2e t stream = core.
0170: 73 74 72 65 61 6d 28 29 3b 0a 09 73 74 72 65 61 stream();..strea
0180: 6d 2e 61 6c 6c 6f 77 65 64 5f 75 70 64 61 74 65 m.allowed_update
0190: 73 28 26 5b 74 65 6c 65 67 72 61 6d 5f 62 6f 74 s(&[telegram_bot
01a0: 3a 3a 41 6c 6c 6f 77 65 64 55 70 64 61 74 65 3a ::AllowedUpdate:
01b0: 3a 4d 65 73 73 61 67 65 5d 29 3b 0a 09 6c 65 74 :Message]);..let
01c0: 20 6d 75 74 20 72 65 70 6c 79 5f 74 6f 3a 20 4f mut reply_to: O
01d0: 70 74 69 6f 6e 3c 74 65 6c 65 67 72 61 6d 5f 62 ption<telegram_b
01e0: 6f 74 3a 3a 55 73 65 72 49 64 3e 3b 0a 0a 09 6c ot::UserId>;...l
01f0: 6f 6f 70 20 7b 0a 09 09 72 65 70 6c 79 5f 74 6f oop {...reply_to
0200: 20 3d 20 4e 6f 6e 65 3b 0a 09 09 6d 61 74 63 68 = None;...match
0210: 20 73 74 72 65 61 6d 2e 6e 65 78 74 28 29 2e 61 stream.next().a
0220: 77 61 69 74 20 7b 0a 09 09 09 53 6f 6d 65 28 75 wait {....Some(u
0230: 70 64 61 74 65 29 20 3d 3e 20 7b 0a 09 09 09 09 pdate) => {.....
0240: 69 66 20 6c 65 74 20 45 72 72 28 65 72 72 29 20 if let Err(err)
0250: 3d 20 68 61 6e 64 6c 65 28 75 70 64 61 74 65 3f = handle(update?
0260: 2c 20 26 63 6f 72 65 2c 20 26 6d 75 74 20 72 65 , &core, &mut re
0270: 70 6c 79 5f 74 6f 29 2e 61 77 61 69 74 20 7b 0a ply_to).await {.
0280: 09 09 09 09 09 63 6f 72 65 2e 73 65 6e 64 28 26 .....core.send(&
0290: 66 6f 72 6d 61 74 21 28 22 f0 9f 9b 91 20 7b 3a format!("🛑 {:
02a0: 3f 7d 22 2c 20 65 72 72 29 2c 20 72 65 70 6c 79 ?}", err), reply
02b0: 5f 74 6f 2c 20 4e 6f 6e 65 29 3f 3b 0a 09 09 09 _to, None)?;....
02c0: 09 7d 3b 0a 09 09 09 7d 2c 0a 09 09 09 4e 6f 6e .};....},....Non
02d0: 65 20 3d 3e 20 7b 0a 09 09 09 09 63 6f 72 65 2e e => {.....core.
02e0: 73 65 6e 64 28 26 66 6f 72 6d 61 74 21 28 22 f0 send(&format!("ð
02f0: 9f 9b 91 20 4e 6f 6e 65 20 65 72 72 6f 72 2e 22 Ÿ›‘ None error."
0300: 29 2c 20 4e 6f 6e 65 2c 20 4e 6f 6e 65 29 3f 3b ), None, None)?;
0310: 0a 09 09 09 7d 0a 09 09 7d 3b 0a 09 7d 0a 0a 09 ....}...};..}...
0320: 2f 2f 4f 6b 28 28 29 29 0a 7d 0a 0a 61 73 79 6e //Ok(()).}..asyn
0330: 63 20 66 6e 20 68 61 6e 64 6c 65 28 75 70 64 61 c fn handle(upda
0340: 74 65 3a 20 74 65 6c 65 67 72 61 6d 5f 62 6f 74 te: telegram_bot
0350: 3a 3a 55 70 64 61 74 65 2c 20 63 6f 72 65 3a 20 ::Update, core:
0360: 26 63 6f 72 65 3a 3a 43 6f 72 65 2c 20 6d 75 74 &core::Core, mut
0370: 20 5f 72 65 70 6c 79 5f 74 6f 3a 20 26 4f 70 74 _reply_to: &Opt
0380: 69 6f 6e 3c 74 65 6c 65 67 72 61 6d 5f 62 6f 74 ion<telegram_bot
0390: 3a 3a 55 73 65 72 49 64 3e 29 20 2d 3e 20 52 65 ::UserId>) -> Re
03a0: 73 75 6c 74 3c 28 29 3e 20 7b 0a 09 6d 61 74 63 sult<()> {..matc
03b0: 68 20 75 70 64 61 74 65 2e 6b 69 6e 64 20 7b 0a h update.kind {.
03c0: 09 09 74 65 6c 65 67 72 61 6d 5f 62 6f 74 3a 3a ..telegram_bot::
03d0: 55 70 64 61 74 65 4b 69 6e 64 3a 3a 4d 65 73 73 UpdateKind::Mess
03e0: 61 67 65 28 6d 65 73 73 61 67 65 29 20 3d 3e 20 age(message) =>
03f0: 7b 0a 09 09 09 6d 61 74 63 68 20 6d 65 73 73 61 {....match messa
0400: 67 65 2e 6b 69 6e 64 20 7b 0a 09 09 09 09 74 65 ge.kind {.....te
0410: 6c 65 67 72 61 6d 5f 62 6f 74 3a 3a 4d 65 73 73 legram_bot::Mess
0420: 61 67 65 4b 69 6e 64 3a 3a 54 65 78 74 20 7b 20 ageKind::Text {
0430: 72 65 66 20 64 61 74 61 2c 20 2e 2e 20 7d 20 3d ref data, .. } =
0440: 3e 20 7b 0a 09 09 09 09 09 6c 65 74 20 73 65 6e > {......let sen
0450: 64 65 72 20 3d 20 6d 65 73 73 61 67 65 2e 66 72 der = message.fr
0460: 6f 6d 2e 69 64 3b 0a 09 09 09 09 09 6c 65 74 20 om.id;......let
0470: 77 6f 72 64 73 3a 20 56 65 63 3c 26 73 74 72 3e words: Vec<&str>
0480: 20 3d 20 64 61 74 61 2e 73 70 6c 69 74 5f 77 68 = data.split_wh
0490: 69 74 65 73 70 61 63 65 28 29 2e 63 6f 6c 6c 65 itespace().colle
04a0: 63 74 28 29 3b 0a 09 09 09 09 09 6d 61 74 63 68 ct();......match
04b0: 20 6d 61 74 63 68 20 77 6f 72 64 73 5b 30 5d 20 match words[0]
04c0: 7b 0a 09 09 09 09 09 09 22 2f 63 68 65 63 6b 22 {......."/check"
04d0: 20 7c 20 22 2f 63 6c 65 61 6e 22 20 7c 20 22 2f | "/clean" | "/
04e0: 65 6e 61 62 6c 65 22 20 7c 20 22 2f 64 65 6c 65 enable" | "/dele
04f0: 74 65 22 20 7c 20 22 2f 64 69 73 61 62 6c 65 22 te" | "/disable"
0500: 20 3d 3e 20 63 6f 6d 6d 61 6e 64 3a 3a 63 6f 6d => command::com
0510: 6d 61 6e 64 28 63 6f 72 65 2c 20 73 65 6e 64 65 mand(core, sende
0520: 72 2c 20 77 6f 72 64 73 29 2e 61 77 61 69 74 2c r, words).await,
0530: 0a 09 09 09 09 09 09 22 2f 73 74 61 72 74 22 20 ......."/start"
0540: 3d 3e 20 63 6f 6d 6d 61 6e 64 3a 3a 73 74 61 72 => command::star
0550: 74 28 63 6f 72 65 2c 20 73 65 6e 64 65 72 29 2e t(core, sender).
0560: 61 77 61 69 74 2c 0a 09 09 09 09 09 09 22 2f 6c await,......."/l
0570: 69 73 74 22 20 3d 3e 20 63 6f 6d 6d 61 6e 64 3a ist" => command:
0580: 3a 6c 69 73 74 28 63 6f 72 65 2c 20 73 65 6e 64 :list(core, send
0590: 65 72 29 2e 61 77 61 69 74 2c 0a 09 09 09 09 09 er).await,......
05a0: 09 22 2f 61 64 64 22 20 7c 20 22 2f 75 70 64 61 ."/add" | "/upda
05b0: 74 65 22 20 3d 3e 20 63 6f 6d 6d 61 6e 64 3a 3a te" => command::
05c0: 75 70 64 61 74 65 28 63 6f 72 65 2c 20 73 65 6e update(core, sen
05d0: 64 65 72 2c 20 77 6f 72 64 73 29 2e 61 77 61 69 der, words).awai
05e0: 74 2c 0a 09 09 09 09 09 09 5f 20 3d 3e 20 4f 6b t,......._ => Ok
05f0: 28 28 29 29 2c 0a 09 09 09 09 09 7d 20 7b 0a 09 (()),......} {..
0600: 09 09 09 09 09 45 72 72 28 65 72 72 29 20 3d 3e .....Err(err) =>
0610: 20 63 6f 72 65 2e 73 65 6e 64 28 26 66 6f 72 6d core.send(&form
0620: 61 74 21 28 22 f0 9f 9b 91 20 7b 3a 3f 7d 22 2c at!("🛑 {:?}",
0630: 20 65 72 72 29 2c 20 53 6f 6d 65 28 73 65 6e 64 err), Some(send
0640: 65 72 29 2c 20 4e 6f 6e 65 29 3f 2c 0a 09 09 09 er), None)?,....
0650: 09 09 09 4f 6b 28 28 29 29 20 3d 3e 20 7b 7d 2c ...Ok(()) => {},
0660: 0a 09 09 09 09 09 7d 3b 0a 09 09 09 09 7d 2c 0a ......};.....},.
0670: 09 09 09 09 5f 20 3d 3e 20 7b 0a 09 09 09 09 7d ...._ => {.....}
0680: 2c 0a 09 09 09 7d 3b 0a 09 09 7d 2c 0a 09 09 5f ,....};...},..._
0690: 20 3d 3e 20 7b 7d 2c 0a 09 7d 3b 0a 0a 09 4f 6b => {},..};...Ok
06a0: 28 28 29 29 0a 7d 0a (()).}.