v1.2.0 Added Case of user not having DMs Open

This commit is contained in:
Evann Regnault 2023-12-09 20:59:50 +01:00
parent 5619a27101
commit 9966242b22
6 changed files with 43 additions and 8 deletions

View file

@ -1,6 +1,6 @@
[package] [package]
name = "captchuccino" name = "captchuccino"
version = "1.1.0" version = "1.2.0"
edition = "2021" edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

View file

@ -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. `ROLE_ID` : The ID of the Unverified role on your server.
`BOT_CHANNEL_ID` : The ID of the bot channel for logging messages
## Deployment ## Deployment
> ⚠️ The bot needs to have the SERVER MEMBERS INTENT enabled in the developper dashboard. > ⚠️ 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=<TOKEN> \ -e DISCORD_TOKEN=<TOKEN> \
-e LANG=<LANG> \ -e LANG=<LANG> \
-e GUILD_ID=<GUILD_ID> \ -e GUILD_ID=<GUILD_ID> \
-e ROLE_ID=<ROLE_ID> -e ROLE_ID=<ROLE_ID> \
-e BOT_CHANNEL_ID=<BOT_CHANNEL_ID>
``` ```

View file

@ -12,11 +12,11 @@ use serenity::client::Context;
use serenity::model::channel::{Message}; use serenity::model::channel::{Message};
use serenity::model::gateway::Ready; use serenity::model::gateway::Ready;
use serenity::model::guild::Member; 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::model::prelude::Guild;
use serenity::prelude::{EventHandler, GatewayIntents, TypeMapKey}; use serenity::prelude::{EventHandler, GatewayIntents, TypeMapKey};
use crate::utils::captcha_builder::build_captcha; 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; struct Handler;
@ -64,8 +64,15 @@ async fn send_captcha(_ctx: &Context, _new_member: Member, msg: &str) {
let files = vec![(&file, file_name)]; let files = vec![(&file, file_name)];
channel.send_files(&_ctx, files, |m| m.content(msg)).await match channel.send_files(&_ctx, files, |m| m.content(msg)).await {
.expect(get_translation("server-cantsendmessage-error").as_str()); 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()) remove_file(file_name_string.as_str())
.expect(get_translation("delete-image-error").as_str()); .expect(get_translation("delete-image-error").as_str());
@ -158,6 +165,11 @@ fn get_guild_id() -> u64 {
guild_id.parse::<u64>().expect("Cannot parse GUILD_ID to int") guild_id.parse::<u64>().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::<u64>().expect("Cannot parse BOT_CHANNEL")
}
#[tokio::main] #[tokio::main]
async fn main() { async fn main() {
let token = env::var("DISCORD_TOKEN").expect(get_env_error_message("DISCORD_TOKEN").as_str()); let token = env::var("DISCORD_TOKEN").expect(get_env_error_message("DISCORD_TOKEN").as_str());

View file

@ -36,3 +36,21 @@ pub fn get_env_error_message(env_name: &str) -> String {
false => panic!("Cannot find env-error") 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")
}
}

View file

@ -28,5 +28,6 @@
"server-cantaddrole-error": "Cannot add a role", "server-cantaddrole-error": "Cannot add a role",
"server-cantremoverole-error": "Cannot remove a role", "server-cantremoverole-error": "Cannot remove a role",
"server-cantgetchannel-error": "Cannot get the channel", "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"
} }

View file

@ -28,5 +28,6 @@
"server-cantaddrole-error": "Impossible d'ajouter un role", "server-cantaddrole-error": "Impossible d'ajouter un role",
"server-cantremoverole-error": "Impossible de retirer un role", "server-cantremoverole-error": "Impossible de retirer un role",
"server-cantgetchannel-error": "Impossible de récuperer le salon", "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"
} }