bot works

This commit is contained in:
Ryan Voots 2020-08-28 11:23:19 -07:00
parent dbf1201081
commit 3d21e47ecc
3 changed files with 499 additions and 101 deletions

395
Cargo.lock generated
View file

@ -18,12 +18,39 @@ dependencies = [
"memchr",
]
[[package]]
name = "ansi_term"
version = "0.12.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2"
dependencies = [
"winapi 0.3.9",
]
[[package]]
name = "arc-swap"
version = "0.4.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4d25d88fd6b8041580a654f9d0c581a047baee2b3efee13275f2fc392fc75034"
[[package]]
name = "arrayref"
version = "0.3.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a4c527152e37cf757a3f78aae5a06fbeefdb07ccc535c980a3208ee3060dd544"
[[package]]
name = "arrayvec"
version = "0.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cff77d8686867eceff3105329d4698d96c2391c176d5d03adc90c7389162b5b8"
[[package]]
name = "assign"
version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4af5687fe33aec5e70ef14caac5e0d363e335e5e5d6385fb75978d0c241b1d67"
[[package]]
name = "async-native-tls"
version = "0.3.3"
@ -70,9 +97,12 @@ dependencies = [
[[package]]
name = "atomic"
version = "0.4.6"
version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "64f46ca51dca4837f1520754d1c8c36636356b81553d928dc9c177025369a06e"
checksum = "c3410529e8288c463bedb5930f82833bc0c90e5d2fe639a56582a4d09220b281"
dependencies = [
"autocfg",
]
[[package]]
name = "autocfg"
@ -92,6 +122,17 @@ version = "1.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693"
[[package]]
name = "blake2b_simd"
version = "0.5.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d8fb2d74254a3a0b5cac33ac9f8ed0e44aa50378d9dbb2e5d83bd21ed1dc2c8a"
dependencies = [
"arrayref",
"arrayvec",
"constant_time_eq",
]
[[package]]
name = "bumpalo"
version = "3.4.0"
@ -122,6 +163,17 @@ version = "0.1.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822"
[[package]]
name = "chrono"
version = "0.4.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "942f72db697d8767c22d46a598e01f2d3b475501ea43d0db4f16d90259182d0b"
dependencies = [
"num-integer",
"num-traits",
"time",
]
[[package]]
name = "cjson"
version = "0.1.1"
@ -154,6 +206,12 @@ dependencies = [
"proc-macro-hack",
]
[[package]]
name = "constant_time_eq"
version = "0.1.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc"
[[package]]
name = "core-foundation"
version = "0.7.0"
@ -203,6 +261,26 @@ dependencies = [
"num_cpus",
]
[[package]]
name = "dirs"
version = "3.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "142995ed02755914747cc6ca76fc7e4583cd18578746716d0508ea6ed558b9ff"
dependencies = [
"dirs-sys",
]
[[package]]
name = "dirs-sys"
version = "0.3.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8e93d7f5705de3e49895a2b5e0b8855a1c27f080192ae9c32a6432d50741a57a"
dependencies = [
"libc",
"redox_users",
"winapi 0.3.9",
]
[[package]]
name = "dotenv"
version = "0.15.0"
@ -271,12 +349,6 @@ version = "0.3.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7"
[[package]]
name = "futures"
version = "0.1.29"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1b980f2816d6ee8673b6517b52cb0e808a180efc92e5c19d02cdda79066703ef"
[[package]]
name = "futures"
version = "0.3.5"
@ -327,11 +399,22 @@ checksum = "de27142b013a8e869c14957e6d2edeef89e97c289e69d042ee3a49acd8b51789"
[[package]]
name = "futures-locks"
version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e4297dd1d9d6268237e4f93aeb9c90fc1bf0d8cec7e1cef22798939e4c43a251"
version = "0.5.1-pre"
source = "git+https://github.com/asomers/futures-locks#c380ff6ef44ee77f502b4feec2a83cb2dbae99cb"
dependencies = [
"futures 0.1.29",
"futures",
]
[[package]]
name = "futures-macro"
version = "0.3.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d0b5a30a4328ab5473878237c447333c093297bded83a4983d10f4deea240d39"
dependencies = [
"proc-macro-hack",
"proc-macro2",
"quote",
"syn",
]
[[package]]
@ -368,11 +451,14 @@ dependencies = [
"futures-channel",
"futures-core",
"futures-io",
"futures-macro",
"futures-sink",
"futures-task",
"memchr",
"pin-project",
"pin-utils",
"proc-macro-hack",
"proc-macro-nested",
"slab",
]
@ -637,6 +723,15 @@ version = "1.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3e2e65a1a2e43cfcb47a895c4c8b10d1f4a61097f9f254f183aee60cad9c651d"
[[package]]
name = "matchers"
version = "0.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f099785f7595cc4b4553a174ce30dd7589ef93391ff414dbb67f62392b9e0ce1"
dependencies = [
"regex-automata",
]
[[package]]
name = "matches"
version = "0.1.8"
@ -647,21 +742,31 @@ checksum = "7ffc5c5338469d4d3ea17d269fa8ea3512ad247247c30bd2df69e68309ed0a08"
name = "matrix-perlbot-bridge"
version = "0.1.0"
dependencies = [
"async-trait",
"dirs",
"matrix-sdk",
"matrix-sdk-base",
"matrix-sdk-common",
"matrix-sdk-common-macros",
"reqwest",
"serde_json",
"tokio",
"tracing-subscriber",
"url",
]
[[package]]
name = "matrix-sdk"
version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "59d9ccbfce4bffc992f0677095e57c37b23f99479c4425fcbca61166b6ebec7f"
source = "git+https://github.com/simcop2387/matrix-rust-sdk#ddd32ec4cfdee998fc1f18f36fa2c609957b5ad5"
dependencies = [
"async-trait",
"dashmap",
"futures-timer",
"http",
"matrix-sdk-base",
"matrix-sdk-common",
"matrix-sdk-common-macros",
"reqwest",
"serde_json",
"thiserror",
@ -673,47 +778,54 @@ dependencies = [
[[package]]
name = "matrix-sdk-base"
version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "55109f3f4c3f6becf39e17b2827415c74eee378f4538fba36e695af2658361fa"
source = "git+https://github.com/simcop2387/matrix-rust-sdk#ddd32ec4cfdee998fc1f18f36fa2c609957b5ad5"
dependencies = [
"async-trait",
"matrix-sdk-common",
"matrix-sdk-common-macros",
"matrix-sdk-crypto",
"serde",
"serde_json",
"thiserror",
"tokio",
"tracing",
"zeroize",
]
[[package]]
name = "matrix-sdk-common"
version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f84c944b357af4f81b14bf434ead2fdeaaa143dd9d8202a8b7ee0b4380370f76"
source = "git+https://github.com/simcop2387/matrix-rust-sdk#ddd32ec4cfdee998fc1f18f36fa2c609957b5ad5"
dependencies = [
"assign",
"futures-locks",
"instant",
"js_int",
"ruma-api",
"ruma-client-api",
"ruma-events",
"ruma-identifiers",
"ruma",
"tokio",
"uuid",
]
[[package]]
name = "matrix-sdk-common-macros"
version = "0.1.0"
source = "git+https://github.com/simcop2387/matrix-rust-sdk#ddd32ec4cfdee998fc1f18f36fa2c609957b5ad5"
dependencies = [
"quote",
"syn",
]
[[package]]
name = "matrix-sdk-crypto"
version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "510016e90136a28de947ad9102ca865ae8c68f09d160e1092f1cb9912fffa0d7"
source = "git+https://github.com/simcop2387/matrix-rust-sdk#ddd32ec4cfdee998fc1f18f36fa2c609957b5ad5"
dependencies = [
"async-trait",
"atomic",
"cjson",
"dashmap",
"matrix-sdk-common",
"matrix-sdk-common-macros",
"olm-rs",
"serde",
"serde_json",
@ -846,6 +958,25 @@ dependencies = [
"winapi 0.3.9",
]
[[package]]
name = "num-integer"
version = "0.1.43"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8d59457e662d541ba17869cf51cf177c0b5f0cbf476c66bdc90bf1edac4f875b"
dependencies = [
"autocfg",
"num-traits",
]
[[package]]
name = "num-traits"
version = "0.2.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ac267bcc07f48ee5f8935ab0d24f316fb722d7a1292e2913f0cc196b29ffd611"
dependencies = [
"autocfg",
]
[[package]]
name = "num_cpus"
version = "1.13.0"
@ -858,9 +989,8 @@ dependencies = [
[[package]]
name = "olm-rs"
version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "033e81431ecd7c359ab02e4c3f08ebe803acbcccf92765ae56252e95561038c9"
version = "0.6.0"
source = "git+https://gitlab.gnome.org/jhaye/olm-rs/#af483ef1715c3071fcd6da4958ee2216288b1e14"
dependencies = [
"getrandom",
"olm-sys",
@ -871,9 +1001,9 @@ dependencies = [
[[package]]
name = "olm-sys"
version = "0.1.5"
version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7d77deffdae89bf5b2ff17a9c54fab4b3b92c5440e9e4645e8bb08d7c6ace8fc"
checksum = "38da14ca5e2ca81f3c0a91f0bf7cade30ec256f162f8be6929a26bbfca065bb1"
[[package]]
name = "once_cell"
@ -964,12 +1094,27 @@ version = "0.2.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c36fa947111f5c62a733b652544dd0016a43ce89619538a8ef92724a6f501a20"
[[package]]
name = "proc-macro-crate"
version = "0.1.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1d6ea3c4595b96363c13943497db34af4460fb474a95c43f4446ad341b8c9785"
dependencies = [
"toml",
]
[[package]]
name = "proc-macro-hack"
version = "0.5.18"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "99c605b9a0adc77b7211c6b1f722dcb613d68d66859a44f3d485a6da332b0598"
[[package]]
name = "proc-macro-nested"
version = "0.1.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "eba180dafb9038b050a4c280019bbedf9f2467b61e5d892dcad585bb57aadc5a"
[[package]]
name = "proc-macro2"
version = "1.0.19"
@ -1035,6 +1180,17 @@ version = "0.1.57"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "41cc0f7e4d5d4544e8861606a285bb08d3e70712ccc7d2b84d7c0ccfaf4b05ce"
[[package]]
name = "redox_users"
version = "0.3.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "de0737333e7a9502c789a36d7c7fa6092a49895d4faa31ca5df163857ded2e9d"
dependencies = [
"getrandom",
"redox_syscall",
"rust-argon2",
]
[[package]]
name = "regex"
version = "1.3.9"
@ -1047,6 +1203,16 @@ dependencies = [
"thread_local",
]
[[package]]
name = "regex-automata"
version = "0.1.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ae1ded71d66a4a97f5e961fd0cb25a5f366a42a41570d16a763a69c092c26ae4"
dependencies = [
"byteorder",
"regex-syntax",
]
[[package]]
name = "regex-syntax"
version = "0.6.18"
@ -1098,11 +1264,23 @@ dependencies = [
"winreg",
]
[[package]]
name = "ruma"
version = "0.0.1"
source = "git+https://github.com/ruma/ruma?rev=409fbcc9d745fb7290327cb7f5defc714229ab30#409fbcc9d745fb7290327cb7f5defc714229ab30"
dependencies = [
"ruma-api",
"ruma-client-api",
"ruma-common",
"ruma-events",
"ruma-identifiers",
"ruma-serde",
]
[[package]]
name = "ruma-api"
version = "0.16.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "82ffdb7fb9cf6af2b1d0d8254d922560ecb70081d7e70931c9b996b6b4839db5"
version = "0.17.0-alpha.1"
source = "git+https://github.com/ruma/ruma?rev=409fbcc9d745fb7290327cb7f5defc714229ab30#409fbcc9d745fb7290327cb7f5defc714229ab30"
dependencies = [
"http",
"percent-encoding",
@ -1116,10 +1294,10 @@ dependencies = [
[[package]]
name = "ruma-api-macros"
version = "0.16.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "52b82b4567b9af9b40a86f7778821c016ea961f55e4fee255f8f24bb28ee7452"
version = "0.17.0-alpha.1"
source = "git+https://github.com/ruma/ruma?rev=409fbcc9d745fb7290327cb7f5defc714229ab30#409fbcc9d745fb7290327cb7f5defc714229ab30"
dependencies = [
"proc-macro-crate",
"proc-macro2",
"quote",
"syn",
@ -1127,12 +1305,13 @@ dependencies = [
[[package]]
name = "ruma-client-api"
version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "082913ad135ca55ee06a55d295bea954982f2ac5e0150adc09024f5cbb8cb6cf"
version = "0.10.0-alpha.1"
source = "git+https://github.com/ruma/ruma?rev=409fbcc9d745fb7290327cb7f5defc714229ab30#409fbcc9d745fb7290327cb7f5defc714229ab30"
dependencies = [
"assign",
"http",
"js_int",
"percent-encoding",
"ruma-api",
"ruma-common",
"ruma-events",
@ -1145,11 +1324,12 @@ dependencies = [
[[package]]
name = "ruma-common"
version = "0.1.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6cb49e83277e82c69cc258cedc7e68b3d72ba378f1cb6105cbfcc8831e422b4d"
version = "0.2.0"
source = "git+https://github.com/ruma/ruma?rev=409fbcc9d745fb7290327cb7f5defc714229ab30#409fbcc9d745fb7290327cb7f5defc714229ab30"
dependencies = [
"matches",
"js_int",
"ruma-api",
"ruma-identifiers",
"ruma-serde",
"serde",
"serde_json",
@ -1158,9 +1338,8 @@ dependencies = [
[[package]]
name = "ruma-events"
version = "0.21.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6ddf82c2231e4c53443424df34e868e4b09c20de7a76780d47a133a3b3f8ad9c"
version = "0.22.0-alpha.1"
source = "git+https://github.com/ruma/ruma?rev=409fbcc9d745fb7290327cb7f5defc714229ab30#409fbcc9d745fb7290327cb7f5defc714229ab30"
dependencies = [
"js_int",
"ruma-common",
@ -1169,14 +1348,15 @@ dependencies = [
"ruma-serde",
"serde",
"serde_json",
"strum",
]
[[package]]
name = "ruma-events-macros"
version = "0.21.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "88e5c5b242fe4ee0cc56879057353621196d0988dd359579cad8f43471e483b7"
version = "0.22.0-alpha.1"
source = "git+https://github.com/ruma/ruma?rev=409fbcc9d745fb7290327cb7f5defc714229ab30#409fbcc9d745fb7290327cb7f5defc714229ab30"
dependencies = [
"proc-macro-crate",
"proc-macro2",
"quote",
"syn",
@ -1184,18 +1364,39 @@ dependencies = [
[[package]]
name = "ruma-identifiers"
version = "0.16.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6316cb248e3e0323a5a269b8eaed571404fb4f65c81848549e9ba99fd9b8e9de"
version = "0.17.4"
source = "git+https://github.com/ruma/ruma?rev=409fbcc9d745fb7290327cb7f5defc714229ab30#409fbcc9d745fb7290327cb7f5defc714229ab30"
dependencies = [
"ruma-identifiers-macros",
"ruma-identifiers-validation",
"serde",
"strum",
]
[[package]]
name = "ruma-identifiers-macros"
version = "0.17.4"
source = "git+https://github.com/ruma/ruma?rev=409fbcc9d745fb7290327cb7f5defc714229ab30#409fbcc9d745fb7290327cb7f5defc714229ab30"
dependencies = [
"proc-macro2",
"quote",
"ruma-identifiers-validation",
"syn",
]
[[package]]
name = "ruma-identifiers-validation"
version = "0.1.1"
source = "git+https://github.com/ruma/ruma?rev=409fbcc9d745fb7290327cb7f5defc714229ab30#409fbcc9d745fb7290327cb7f5defc714229ab30"
dependencies = [
"serde",
"strum",
]
[[package]]
name = "ruma-serde"
version = "0.2.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6a50045b7e93329085488c88aee95e109c32d53c89d0f4882791e2cc81eb10ce"
source = "git+https://github.com/ruma/ruma?rev=409fbcc9d745fb7290327cb7f5defc714229ab30#409fbcc9d745fb7290327cb7f5defc714229ab30"
dependencies = [
"form_urlencoded",
"itoa",
@ -1204,6 +1405,18 @@ dependencies = [
"serde_json",
]
[[package]]
name = "rust-argon2"
version = "0.8.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9dab61250775933275e84053ac235621dfb739556d5c54a2f2e9313b7cf43a19"
dependencies = [
"base64",
"blake2b_simd",
"constant_time_eq",
"crossbeam-utils",
]
[[package]]
name = "ryu"
version = "1.0.5"
@ -1292,6 +1505,15 @@ dependencies = [
"url",
]
[[package]]
name = "sharded-slab"
version = "0.0.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "06d5a3f5166fb5b42a5439f2eee8b9de149e235961e3eb21c5808fc3ea17ff3e"
dependencies = [
"lazy_static",
]
[[package]]
name = "signal-hook-registry"
version = "1.2.1"
@ -1308,6 +1530,12 @@ version = "0.4.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c111b5bd5695e56cffe5129854aa230b39c93a305372fdbb2668ca2394eea9f8"
[[package]]
name = "smallvec"
version = "1.4.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fbee7696b84bbf3d89a1c2eccff0850e3047ed46bfcd2e92c29a2d074d57e252"
[[package]]
name = "socket2"
version = "0.3.12"
@ -1374,7 +1602,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "de2ae78b783af5922d811b14665a5a3755e531c3087bb805cf24cf71f15e6780"
dependencies = [
"dotenv",
"futures 0.3.5",
"futures",
"heck",
"lazy_static",
"proc-macro2",
@ -1387,18 +1615,18 @@ dependencies = [
[[package]]
name = "strum"
version = "0.18.0"
version = "0.19.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "57bd81eb48f4c437cadc685403cad539345bf703d78e63707418431cecd4522b"
checksum = "3924a58d165da3b7b2922c667ab0673c7b5fd52b5c19ea3442747bcb3cd15abe"
dependencies = [
"strum_macros",
]
[[package]]
name = "strum_macros"
version = "0.18.0"
version = "0.19.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "87c85aa3f8ea653bfd3ddf25f7ee357ee4d204731f6aa9ad04002306f6e2774c"
checksum = "2d2ab682ecdcae7f5f45ae85cd7c1e6c8e68ea42c8a612d47fedf831c037146a"
dependencies = [
"heck",
"proc-macro2",
@ -1548,6 +1776,15 @@ dependencies = [
"tokio",
]
[[package]]
name = "toml"
version = "0.5.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ffc92d160b1eef40665be3a05630d003936a3bc7da7421277846c2613e92c71a"
dependencies = [
"serde",
]
[[package]]
name = "tower-service"
version = "0.3.0"
@ -1596,6 +1833,48 @@ dependencies = [
"tracing",
]
[[package]]
name = "tracing-log"
version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5e0f8c7178e13481ff6765bd169b33e8d554c5d2bbede5e32c356194be02b9b9"
dependencies = [
"lazy_static",
"log",
"tracing-core",
]
[[package]]
name = "tracing-serde"
version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b6ccba2f8f16e0ed268fc765d9b7ff22e965e7185d32f8f1ec8294fe17d86e79"
dependencies = [
"serde",
"tracing-core",
]
[[package]]
name = "tracing-subscriber"
version = "0.2.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "abd165311cc4d7a555ad11cc77a37756df836182db0d81aac908c8184c584f40"
dependencies = [
"ansi_term",
"chrono",
"lazy_static",
"matchers",
"regex",
"serde",
"serde_json",
"sharded-slab",
"smallvec",
"thread_local",
"tracing-core",
"tracing-log",
"tracing-serde",
]
[[package]]
name = "try-lock"
version = "0.2.3"

View file

@ -7,6 +7,14 @@ edition = "2018"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
"matrix-sdk" = "*"
matrix-sdk = { git = "https://github.com/simcop2387/matrix-rust-sdk", features = ["encryption"]}
matrix-sdk-base = { git = "https://github.com/simcop2387/matrix-rust-sdk"}
matrix-sdk-common-macros = { git = "https://github.com/simcop2387/matrix-rust-sdk"}
matrix-sdk-common = { git = "https://github.com/simcop2387/matrix-rust-sdk"}
reqwest = { version = "0.10", features = ["json"] }
url = "*"
dirs = "*"
async-trait = "*"
serde_json = "*"
tracing-subscriber = "*"
tokio = { version = "0.2", features = ["full"] }

View file

@ -1,17 +1,42 @@
use reqwest;
use std::{collections::HashMap, env, process::exit};
use async_trait::async_trait;
use matrix_sdk::{
self,
events::{
room::message::{MessageEventContent, TextMessageEventContent},
AnyMessageEventContent, SyncMessageEvent,
},
Client, ClientConfig, EventEmitter, JsonStore, SyncRoom, SyncSettings,
identifiers::RoomId,
locks::RwLock,
Client, ClientConfig, EventEmitter, JsonStore, Room, SyncRoom, SyncSettings,
};
use matrix_sdk_common_macros::async_trait;
use reqwest;
use serde_json;
use std::{collections::HashMap, env, process::exit, sync::Arc};
use url::Url;
// {
// "saidobj": {
// "raw_body": "hi",
// "body": "hi",
// "host": "*special",
// "ircname": "simcop2387",
// "pci_id": "POE::Component::Server::SimpleHTTP::Response=HASH(0x55e61cb82d70)",
// "should_mention": "",
// "recommended_args": [
// "2+2"
// ],
// "parent_session": "18",
// "addressed": 1,
// "name": "simcop2387",
// "nolearn": 1,
// "server": "discord",
// "channel": "#perl",
// "my_name": "perlbot"
// },
// "body": "hello"
// }
struct CommandBot {
/// This clone of the `Client` will send requests to the server,
/// while the other keeps us in sync with the server using `sync_forever`.
@ -20,41 +45,128 @@ struct CommandBot {
impl CommandBot {
pub fn new(client: Client) -> Self { Self { client } }
}
#[async_trait]
impl EventEmitter for CommandBot {
async fn on_room_message(&self, room: SyncRoom, event: &SyncMessageEvent<MessageEventContent>) {
if let SyncRoom::Joined(room) = room {
let msg_body = if let SyncMessageEvent {
content: MessageEventContent::Text(TextMessageEventContent { body: msg_body, .. }),
..
} = event
{
msg_body.clone()
} else {
String::new()
};
async fn handle_command(&self, room: Arc<RwLock<Room>>, user_id: String, user_name: String, message: String) {
let room = room.read().await;
let member_count = room.joined_members.len();
// we clone here to hold the lock for as little time as possible.
let room_id = room.room_id.clone();
if msg_body.contains("!party") {
let content = AnyMessageEventContent::RoomMessage(MessageEventContent::Text(TextMessageEventContent {
body: "🎉🎊🥳 let's PARTY!! 🥳🎊🎉".to_string(),
formatted: None,
relates_to: None,
}));
// we clone here to hold the lock for as little time as possible.
let room_id = room.read().await.room_id.clone();
let myself = self.client.user_id().await.unwrap();
let addressed = if (member_count == 2) || (message.starts_with(myself.localpart())) {
true
} else {
false
};
println!("sending");
let resp = reqwest::Client::new()
.post("http://192.168.196.2:1092/request")
.json(&serde_json::json!({
"body": message,
"orig_body": message,
"who": user_id,
"channel": format!("#{}:{}", room_id.localpart(), room_id.server_name()),
"server": "matrix.org",
"addressed": addressed
self.client
}))
.send()
.await;
match resp {
Ok(success) => {
// .json::<HashMap<String, String>>()
// .await?;
// println!("{:#?}", resp);
let decoded = success.json::<HashMap<String, serde_json::Value>>().await;
match decoded {
Ok(hashmap) => {
let debug_str = format!("{:?}", &hashmap);
if let Some(serde_json::Value::String(output)) = hashmap.get("body") {
if output.len() > 0 {
let formatted_out = if let Some(serde_json::Value::Object(saidobj)) = hashmap.get("saidobj") {
println!("Got saidobj: {:?}", saidobj);
if let Some(serde_json::Value::Number(should_mention)) = saidobj.get("should_mention") {
println!("mention: {:?}", should_mention);
if let Some(do_mention) = should_mention.as_i64() {
if do_mention != 0 {
format!("@{}: {}", user_name, output)
} else {
output.to_string()
}
} else {
output.to_string()
}
} else {
output.to_string()
}
} else {
output.to_string()
};
let content = AnyMessageEventContent::RoomMessage(MessageEventContent::Text(TextMessageEventContent {
body: formatted_out,
formatted: None,
relates_to: None,
}));
println!("sending: {:?}", debug_str);
self.client
// send our message to the room we found the "!party" command in
// the last parameter is an optional Uuid which we don't care about.
.room_send(&room_id, content, None)
.await
.unwrap();
println!("message sent");
println!("message sent");
}
} else {
println!("Body wasn't a string: {}", debug_str);
}
}
Err(error) => {
println!("Error parsing json: {:?}", error);
}
}
}
Err(failure) => {
println!("Failed to get respone: {:?}", failure);
}
}
}
}
#[async_trait]
impl EventEmitter for CommandBot {
async fn on_room_message(&self, room: SyncRoom, event: &SyncMessageEvent<MessageEventContent>) {
if let SyncRoom::Joined(room) = room {
if let SyncMessageEvent {
content: MessageEventContent::Text(TextMessageEventContent { body: msg_body, .. }),
sender,
..
} = event
{
let user_name = sender.localpart();
let user_server = sender.server_name();
let user_id = format!("{}:{}", &user_name, &user_server); // construct a canonical user_id for them
let myself = self.client.user_id().await.unwrap();
println!("Checking message: {} {} {} {:?}", msg_body, sender.localpart(), sender.server_name(), sender);
if (myself.localpart() == user_name && myself.server_name() == user_server) {
println!("Saw my own message, ignoring it");
} else {
// TODO make this configurable on which servers
println!("Got a real message, handling");
self
.handle_command(room, user_id.to_string(), user_name.to_string(), msg_body.to_string())
.await;
}
} else {
println!("Not the right kind of room message somehow");
}
}
}
@ -63,19 +175,18 @@ impl EventEmitter for CommandBot {
async fn login_and_sync(homeserver_url: String, username: String, password: String) -> Result<(), matrix_sdk::Error> {
// the location for `JsonStore` to save files to
let mut home = dirs::home_dir().expect("no home directory found");
home.push("party_bot");
home.push(".perlbot-matrix-bridge");
let store = JsonStore::open(&home)?;
let client_config = ClientConfig::new()
.proxy("http://localhost:8080")?
.disable_ssl_verification()
.state_store(Box::new(store));
let client_config = ClientConfig::new().state_store(Box::new(store));
let homeserver_url = Url::parse(&homeserver_url).expect("Couldn't parse the homeserver URL");
// create a new Client with the given homeserver url and config
let mut client = Client::new_with_config(homeserver_url, client_config).unwrap();
client.login(&username, &password, None, Some("command bot")).await?;
client
.login(&username, &password, None, Some("Perlbot matrix bridge"))
.await?;
println!("logged in as {}", username);
@ -102,13 +213,13 @@ async fn login_and_sync(homeserver_url: String, username: String, password: Stri
async fn main() -> Result<(), matrix_sdk::Error> {
tracing_subscriber::fmt::init();
let (homeserver_url, username, password) = match (env::args().nth(1), env::args().nth(2), env::args().nth(3)) {
(Some(a), Some(b), Some(c)) => (a, b, c),
let homeserver_url = "https://matrix.org/".to_string();
let username = "perlbot".to_string();
let password = match env::args().nth(1) {
Some(a) => a,
_ => {
eprintln!(
"Usage: {} <homeserver_url> <username> <password>",
env::args().next().unwrap()
);
eprintln!("Usage: {} <password>", env::args().next().unwrap());
exit(1)
}
};