From 9966242b228c90cd4ad7eb27bce1834ed3a7b3b6 Mon Sep 17 00:00:00 2001 From: Evann Date: Sat, 9 Dec 2023 20:59:50 +0100 Subject: [PATCH] v1.2.0 Added Case of user not having DMs Open --- Cargo.toml | 2 +- README.md | 5 ++++- src/main.rs | 20 ++++++++++++++++---- src/utils/i18n.rs | 18 ++++++++++++++++++ translations/en.json | 3 ++- translations/fr.json | 3 ++- 6 files changed, 43 insertions(+), 8 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 7660e36..7512086 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "captchuccino" -version = "1.1.0" +version = "1.2.0" edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html diff --git a/README.md b/README.md index d6a9fb0..f6bd721 100644 --- a/README.md +++ b/README.md @@ -15,6 +15,8 @@ To run this project, you will need to add the following environment variables to `ROLE_ID` : The ID of the Unverified role on your server. +`BOT_CHANNEL_ID` : The ID of the bot channel for logging messages + ## Deployment > ⚠️ The bot needs to have the SERVER MEMBERS INTENT enabled in the developper dashboard. @@ -31,6 +33,7 @@ Launch the docker image with environment variables -e DISCORD_TOKEN= \ -e LANG= \ -e GUILD_ID= \ - -e ROLE_ID= + -e ROLE_ID= \ + -e BOT_CHANNEL_ID= ``` diff --git a/src/main.rs b/src/main.rs index 6eae3de..8399831 100644 --- a/src/main.rs +++ b/src/main.rs @@ -12,11 +12,11 @@ use serenity::client::Context; use serenity::model::channel::{Message}; use serenity::model::gateway::Ready; use serenity::model::guild::Member; -use serenity::model::id::{RoleId, UserId}; +use serenity::model::id::{ChannelId, RoleId, UserId}; use serenity::model::prelude::Guild; use serenity::prelude::{EventHandler, GatewayIntents, TypeMapKey}; use crate::utils::captcha_builder::build_captcha; -use crate::utils::i18n::{get_translation, get_env_error_message, get_server_message}; +use crate::utils::i18n::{get_translation, get_env_error_message, get_server_message, get_user_send_error}; struct Handler; @@ -64,8 +64,15 @@ async fn send_captcha(_ctx: &Context, _new_member: Member, msg: &str) { let files = vec![(&file, file_name)]; - channel.send_files(&_ctx, files, |m| m.content(msg)).await - .expect(get_translation("server-cantsendmessage-error").as_str()); + match channel.send_files(&_ctx, files, |m| m.content(msg)).await { + Ok(_) => { + + } + Err(_) => { + ChannelId::from(get_bot_channel_id()) + .send_message(&_ctx, |m| m.content(get_user_send_error(_new_member.user.id.0).as_str())) + .await.expect(get_translation("server-cantsendmessage-error").as_str());} + } remove_file(file_name_string.as_str()) .expect(get_translation("delete-image-error").as_str()); @@ -158,6 +165,11 @@ fn get_guild_id() -> u64 { guild_id.parse::().expect("Cannot parse GUILD_ID to int") } +fn get_bot_channel_id() -> u64 { + let channel_id = env::var("BOT_CHANNEL_ID").expect(get_env_error_message("GUILD_ID").as_str()); + channel_id.parse::().expect("Cannot parse BOT_CHANNEL") +} + #[tokio::main] async fn main() { let token = env::var("DISCORD_TOKEN").expect(get_env_error_message("DISCORD_TOKEN").as_str()); diff --git a/src/utils/i18n.rs b/src/utils/i18n.rs index 1dd9413..54b0694 100644 --- a/src/utils/i18n.rs +++ b/src/utils/i18n.rs @@ -35,4 +35,22 @@ pub fn get_env_error_message(env_name: &str) -> String { true => {error_msg.to_string().replace("ENV_VAR", env_name)} false => panic!("Cannot find env-error") } +} + +pub fn get_user_send_error(user_id: u64) -> String { + let config: I18nConfig = I18nConfig{ + locales: &["en", "fr"], + directory: "translations" + }; + + let mut r_i18n = I18n::configure(&config); + let locale = env::var("LANG") + .expect("LANG ENV NOT SET"); + + r_i18n.set_current_lang(locale.as_str()); + let error_msg = r_i18n.t("server-userhasclosedDM-error"); + match error_msg.to_string().contains("USERID") { + true => {error_msg.to_string().replace("USERID", format!("{}", user_id).as_str())} + false => panic!("Cannot find env-error") + } } \ No newline at end of file diff --git a/translations/en.json b/translations/en.json index 7f8fad5..74b84a5 100644 --- a/translations/en.json +++ b/translations/en.json @@ -28,5 +28,6 @@ "server-cantaddrole-error": "Cannot add a role", "server-cantremoverole-error": "Cannot remove a role", "server-cantgetchannel-error": "Cannot get the channel", - "server-cantsendmessage-error": "Cannot send a message" + "server-cantsendmessage-error": "Cannot send a message", + "server-userhasclosedDM-error": "User <@USERID> has closed DM and cannot complete captcha" } \ No newline at end of file diff --git a/translations/fr.json b/translations/fr.json index 29a5c5e..b6e7e54 100644 --- a/translations/fr.json +++ b/translations/fr.json @@ -28,5 +28,6 @@ "server-cantaddrole-error": "Impossible d'ajouter un role", "server-cantremoverole-error": "Impossible de retirer un role", "server-cantgetchannel-error": "Impossible de récuperer le salon", - "server-cantsendmessage-error": "Impossible d'envoyer un message" + "server-cantsendmessage-error": "Impossible d'envoyer un message", + "server-userhasclosedDM-error": "L'utilisateur <@USERID> a ses DM fermé et ne pas pas remplir le captcha" } \ No newline at end of file