From 31bb63a77a039a554abdac2fc2ff05da475d007c Mon Sep 17 00:00:00 2001 From: Rafael Bradley Date: Mon, 18 Aug 2025 19:17:37 -0300 Subject: [PATCH] Add more words to the censored words list --- Cargo.lock | 292 +++++++++++++++++- Cargo.toml | 3 +- Dockerfile | 1 + playbooks/00-vault.yml | 26 +- playbooks/08-payphone.yml | 5 + src/framework/cache/mod.rs | 3 + src/framework/commands/mod.rs | 7 + src/framework/mod.rs | 1 + .../calls/lists/explicit-sexual-language.txt | 4 +- src/groups/servers/mod.rs | 1 + src/groups/servers/permissions.rs | 36 +++ 11 files changed, 363 insertions(+), 16 deletions(-) create mode 100644 src/framework/cache/mod.rs create mode 100644 src/groups/servers/permissions.rs diff --git a/Cargo.lock b/Cargo.lock index 1196bd6..0f02bd0 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -363,7 +363,11 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ba5a308b75df32fe02788e748662718f03fde005016435c444eea572398219fd" dependencies = [ "bytes", + "futures-core", "memchr", + "pin-project-lite", + "tokio", + "tokio-util", ] [[package]] @@ -467,6 +471,36 @@ dependencies = [ "parking_lot_core", ] +[[package]] +name = "deadpool" +version = "0.12.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ed5957ff93768adf7a65ab167a17835c3d2c3c50d084fe305174c112f468e2f" +dependencies = [ + "deadpool-runtime", + "num_cpus", + "tokio", +] + +[[package]] +name = "deadpool-redis" +version = "0.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0965b977f1244bc3783bb27cd79cfcff335a8341da18f79232d00504b18eb1a" +dependencies = [ + "deadpool", + "redis", +] + +[[package]] +name = "deadpool-runtime" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "092966b41edc516079bdf31ec78a2e0588d1d0c08f78b91d8307215928642b2b" +dependencies = [ + "tokio", +] + [[package]] name = "deranged" version = "0.4.0" @@ -476,6 +510,17 @@ dependencies = [ "powerfmt", ] +[[package]] +name = "displaydoc" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "dotenvy" version = "0.15.7" @@ -726,6 +771,12 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" +[[package]] +name = "hermit-abi" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc0fef456e4baa96da950455cd02c081ca953b141298e41db3fc7e36b1da849c" + [[package]] name = "http" version = "1.3.1" @@ -861,12 +912,119 @@ dependencies = [ "cc", ] +[[package]] +name = "icu_collections" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "200072f5d0e3614556f94a9930d5dc3e0662a652823904c3a75dc3b0af7fee47" +dependencies = [ + "displaydoc", + "potential_utf", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_locale_core" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0cde2700ccaed3872079a65fb1a78f6c0a36c91570f28755dda67bc8f7d9f00a" +dependencies = [ + "displaydoc", + "litemap", + "tinystr", + "writeable", + "zerovec", +] + +[[package]] +name = "icu_normalizer" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "436880e8e18df4d7bbc06d58432329d6458cc84531f7ac5f024e93deadb37979" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_normalizer_data", + "icu_properties", + "icu_provider", + "smallvec", + "zerovec", +] + +[[package]] +name = "icu_normalizer_data" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00210d6893afc98edb752b664b8890f0ef174c8adbb8d0be9710fa66fbbf72d3" + +[[package]] +name = "icu_properties" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "016c619c1eeb94efb86809b015c58f479963de65bdb6253345c1a1276f22e32b" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_locale_core", + "icu_properties_data", + "icu_provider", + "potential_utf", + "zerotrie", + "zerovec", +] + +[[package]] +name = "icu_properties_data" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "298459143998310acd25ffe6810ed544932242d3f07083eee1084d83a71bd632" + +[[package]] +name = "icu_provider" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03c80da27b5f4187909049ee2d72f276f0d9f99a42c306bd0131ecfe04d8e5af" +dependencies = [ + "displaydoc", + "icu_locale_core", + "stable_deref_trait", + "tinystr", + "writeable", + "yoke", + "zerofrom", + "zerotrie", + "zerovec", +] + [[package]] name = "ident_case" version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" +[[package]] +name = "idna" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" +dependencies = [ + "idna_adapter", + "smallvec", + "utf8_iter", +] + +[[package]] +name = "idna_adapter" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344" +dependencies = [ + "icu_normalizer", + "icu_properties", +] + [[package]] name = "include_dir" version = "0.7.4" @@ -1045,6 +1203,12 @@ dependencies = [ "memchr", ] +[[package]] +name = "litemap" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "241eaef5fd12c88705a01fc1066c48c4b36e0dd4377dcdc7ec3942cea7a69956" + [[package]] name = "lock_api" version = "0.4.13" @@ -1146,12 +1310,31 @@ version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5e0826a989adedc2a244799e823aece04662b66609d96af8dff7ac6df9a8925d" +[[package]] +name = "num-bigint" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" +dependencies = [ + "num-integer", + "num-traits", +] + [[package]] name = "num-conv" version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" +[[package]] +name = "num-integer" +version = "0.1.46" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" +dependencies = [ + "num-traits", +] + [[package]] name = "num-traits" version = "0.2.19" @@ -1161,6 +1344,16 @@ dependencies = [ "autocfg", ] +[[package]] +name = "num_cpus" +version = "1.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91df4bbde75afed763b708b7eee1e8e7651e02d97f6d5dd763e89367e957b23b" +dependencies = [ + "hermit-abi", + "libc", +] + [[package]] name = "num_threads" version = "0.1.7" @@ -1238,13 +1431,14 @@ checksum = "df94ce210e5bc13cb6651479fa48d14f601d9858cfe0467f43ae157023b938d3" [[package]] name = "payphone" -version = "4.0.2" +version = "4.0.4" dependencies = [ "async-trait", "axum", "clap", "colored", "csv", + "deadpool-redis", "dotenvy", "include_dir", "itertools", @@ -1296,6 +1490,15 @@ version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" +[[package]] +name = "potential_utf" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5a7c30837279ca13e7c867e9e40053bc68740f988cb07f7ca6df43cc734b585" +dependencies = [ + "zerovec", +] + [[package]] name = "powerfmt" version = "0.2.0" @@ -1373,6 +1576,27 @@ dependencies = [ "rand_core", ] +[[package]] +name = "redis" +version = "0.32.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7cd3650deebc68526b304898b192fa4102a4ef0b9ada24da096559cb60e0eef8" +dependencies = [ + "bytes", + "cfg-if", + "combine", + "futures-util", + "itoa", + "num-bigint", + "percent-encoding", + "pin-project-lite", + "ryu", + "socket2 0.6.0", + "tokio", + "tokio-util", + "url", +] + [[package]] name = "redox_syscall" version = "0.5.17" @@ -1942,6 +2166,16 @@ dependencies = [ "time-core", ] +[[package]] +name = "tinystr" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d4f6d1145dcb577acf783d4e601bc1d76a13337bb54e6233add580b07344c8b" +dependencies = [ + "displaydoc", + "zerovec", +] + [[package]] name = "tokio" version = "1.47.1" @@ -2243,6 +2477,23 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" +[[package]] +name = "url" +version = "2.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60" +dependencies = [ + "form_urlencoded", + "idna", + "percent-encoding", +] + +[[package]] +name = "utf8_iter" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" + [[package]] name = "utf8parse" version = "0.2.2" @@ -2693,6 +2944,12 @@ dependencies = [ "bitflags 2.9.1", ] +[[package]] +name = "writeable" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea2f10b9bb0928dfb1b42b65e1f9e36f7f54dbdf08457afefb38afcdec4fa2bb" + [[package]] name = "yoke" version = "0.8.0" @@ -2763,3 +3020,36 @@ name = "zeroize" version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" + +[[package]] +name = "zerotrie" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "36f0bbd478583f79edad978b407914f61b2972f5af6fa089686016be8f9af595" +dependencies = [ + "displaydoc", + "yoke", + "zerofrom", +] + +[[package]] +name = "zerovec" +version = "0.11.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7aa2bd55086f1ab526693ecbe444205da57e25f4489879da80635a46d90e73b" +dependencies = [ + "yoke", + "zerofrom", + "zerovec-derive", +] + +[[package]] +name = "zerovec-derive" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b96237efa0c878c64bd89c436f661be4e46b2f3eff1ebb976f7ef2321d2f58f" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] diff --git a/Cargo.toml b/Cargo.toml index 0246b7f..0d2fad6 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "payphone" -version = "4.0.2" +version = "4.0.4" edition = "2024" default-run = "payphone" @@ -10,6 +10,7 @@ axum = "0.8.4" clap = { version = "4.5.42", features = ["derive", "env", "string"] } colored = "3.0.0" csv = "1.3.1" +deadpool-redis = "0.22.0" dotenvy = "0.15.7" include_dir = "0.7.4" itertools = "0.14.0" diff --git a/Dockerfile b/Dockerfile index 2a2c2ea..003ccc6 100644 --- a/Dockerfile +++ b/Dockerfile @@ -11,6 +11,7 @@ RUN cargo build --release FROM debian:bookworm COPY --from=builder /app/target/release/payphone /usr/local/bin/payphone +COPY --from=builder /app/target/release/migrate /usr/local/bin/migrate RUN apt-get update && apt-get install -y ca-certificates RUN update-ca-certificates diff --git a/playbooks/00-vault.yml b/playbooks/00-vault.yml index 09c7dbd..b437142 100644 --- a/playbooks/00-vault.yml +++ b/playbooks/00-vault.yml @@ -1,14 +1,14 @@ $ANSIBLE_VAULT;1.1;AES256 -64383938373964633864663939326162613166363733633038656536363736366364373563323434 -3963373162646637646130323638336635653136383331610a346261313864373935616636326630 -30353034333466323861633034306530383162383331616234333463366434303238613435373436 -6130643663666336620a316633316266336264356432623432353331613661633965316263666131 -35633263346462383366636363326464323164633033623335353631396638363538373531626463 -37356662376532323162306463643334333430323632656265613334343562343966356634393334 -31393432646363396161653266306433623133396366626362663665336333636564393864363633 -63383665383631306463653937623132376332313966303361343364663539346633303164323463 -38343139373765323333653839303639383363326337656336333834633735353463633862333835 -36343530353639653962313932656433316666373337636266396339646364653838636465646430 -64393864653139663233653832646630643036373062306337383235383235343636323238646333 -32393036666432303532663264623437313735313864326437303361613362383138356665393739 -32326138326434386264343561613664636564336238393937333333343161306231 +31353838363564633532353539313763643561396661313030346466653839663931323961663362 +6333376338336336346562643136316439393962356236640a653836643066346564663363633364 +30616634363430646335663339613333616334393037333065336664396338346135353239346261 +3366303231616166300a613566643231303066373266646665343637353364303939346464323633 +37623565643063353435376238326564353563653735393164616136373531356135666337353765 +39326463633965383463353335306432326433313132373461633666343934616638346666306339 +36313561363965663662313163663362333466663135363731643737386466643134396564353439 +32313936316432313433336235643337386430633434363764666439386234323933313465306638 +65396532396533303662326338376661343962613432393735356130613165626465656464343434 +63646265333064623735646161656236623366623265626664313564316665396331616631613536 +38646264656563353934383237626534663563666335666430326562303862616461343935393737 +62343637336563383864383732303861633634303061376666353231323331643538333633643762 +35623539303562643763336232353633666661626539356465383631336261363532 diff --git a/playbooks/08-payphone.yml b/playbooks/08-payphone.yml index 2bf009d..45cc447 100644 --- a/playbooks/08-payphone.yml +++ b/playbooks/08-payphone.yml @@ -118,3 +118,8 @@ imagePullSecrets: - name: payphone-git-credentials kubeconfig: /etc/rancher/k3s/k3s.yaml + + - name: Rollout New Version + ansible.builtin.command: + kubectl set image -n payphone sts/payphone payphone=registry.nyeki.dev/payphone/payphone:{{ hostvars['localhost'].app_version }} + changed_when: false diff --git a/src/framework/cache/mod.rs b/src/framework/cache/mod.rs new file mode 100644 index 0000000..aacafb6 --- /dev/null +++ b/src/framework/cache/mod.rs @@ -0,0 +1,3 @@ +pub struct RedisCache { + +} \ No newline at end of file diff --git a/src/framework/commands/mod.rs b/src/framework/commands/mod.rs index 57504d6..507aa64 100644 --- a/src/framework/commands/mod.rs +++ b/src/framework/commands/mod.rs @@ -2,6 +2,7 @@ use std::fmt::Debug; use async_trait::async_trait; use thiserror::Error; +use twilight_http::response::DeserializeBodyError; use crate::framework::commands::{ arguments::Argument, context::CommandContext, permissions::Permission, @@ -26,6 +27,12 @@ pub enum CommandError { #[error("The command was used in DMs, but it can only be used in servers")] ServerCommandRunInDMs, + + #[error(transparent)] + DiscordAPIFailed(#[from] twilight_http::Error), + + #[error(transparent)] + DiscordDeserializationFailed(#[from] DeserializeBodyError), } #[async_trait] diff --git a/src/framework/mod.rs b/src/framework/mod.rs index 3823c8e..d806d86 100644 --- a/src/framework/mod.rs +++ b/src/framework/mod.rs @@ -158,6 +158,7 @@ //! ``` pub mod bot; +pub mod cache; pub mod commands; pub mod events; pub mod interactions; diff --git a/src/groups/calls/lists/explicit-sexual-language.txt b/src/groups/calls/lists/explicit-sexual-language.txt index b0bc46f..ac608a7 100644 --- a/src/groups/calls/lists/explicit-sexual-language.txt +++ b/src/groups/calls/lists/explicit-sexual-language.txt @@ -85,4 +85,6 @@ faping masturbate masturbating masterbating -masterbaiting \ No newline at end of file +masterbaiting +horny +hrny diff --git a/src/groups/servers/mod.rs b/src/groups/servers/mod.rs index 6d110dc..3c451a8 100644 --- a/src/groups/servers/mod.rs +++ b/src/groups/servers/mod.rs @@ -5,3 +5,4 @@ pub mod commands; pub mod events; +pub mod permissions; diff --git a/src/groups/servers/permissions.rs b/src/groups/servers/permissions.rs new file mode 100644 index 0000000..f4aa83f --- /dev/null +++ b/src/groups/servers/permissions.rs @@ -0,0 +1,36 @@ +use async_trait::async_trait; + +use crate::{ + framework::commands::{CommandError, context::CommandContext, permissions::Permission}, + state::State, +}; + +#[derive(Debug)] +pub struct GuildOnlyPermission; + +#[async_trait] +impl Permission for GuildOnlyPermission { + async fn check(&self, ctx: &CommandContext) -> Result { + Ok(ctx.event.guild_id.is_none()) + } +} + +#[derive(Debug)] +pub struct ServerModeratorPermission; + +#[async_trait] +impl Permission for ServerModeratorPermission { + async fn check(&self, ctx: &CommandContext) -> Result { + let member = ctx + .rt + .http + .guild_member(ctx.event.guild_id.unwrap(), ctx.event.author.id) + .await + .map_err(CommandError::DiscordAPIFailed)? + .model() + .await + .map_err(CommandError::DiscordDeserializationFailed)?; + + Ok(true) + } +}