feat: test avec message pour dar

This commit is contained in:
Max batleforc 2024-06-29 16:18:26 +02:00
parent 57ef7c0679
commit 1b2f0e25ac
No known key found for this signature in database
GPG Key ID: 25D243AB4B6AC9E7
5 changed files with 44 additions and 5 deletions

View File

@ -6,7 +6,7 @@ use crate::botv2::{
init::{Context, Error},
};
use poise::{
serenity_prelude::{model::colour, CreateEmbed, CreateEmbedFooter},
serenity_prelude::{model::colour, CreateEmbed, CreateEmbedFooter, Mentionable, RoleId},
CreateReply,
};
use tracing::instrument;
@ -57,7 +57,7 @@ pub async fn start(ctx: Context<'_>) -> Result<(), Error> {
return Ok(());
}
};
let (concour, success) = match start_concour(
let (concour, text, success) = match start_concour(
guild.get(),
ctx.channel_id().get(),
&mut cron_schedule,
@ -71,12 +71,33 @@ pub async fn start(ctx: Context<'_>) -> Result<(), Error> {
CreateEmbed::new()
.title("No concour created")
.color(colour::Color::RED),
"".to_string(),
false,
)
} else {
let concour = concour.unwrap();
let keyword_index = concour.index_keyword as usize;
let keyword = concour.keywords.get(keyword_index).unwrap();
// TODO : condition pour returner ou non le texte ? ou transformer les annonce obligatoirement en texte ? ou permettre de choisir entre embed ou texte ?
let ping_concour = match concour.ping_concour {
Some(role) => RoleId::new(role).mention().to_string(),
None => "".to_string(),
};
let text = format!("
Bonsoir !
👹 Le thème de ce soir est : {}
📜 Les règles : Pas de loli, ni de shoota, ni de irl, ni de zoo.
Celui ou celle qui a le plus de votes gagne, comme récompense elle aura le rôle @ROLE pour une durée de 48h.
Le concours ce termine dans deux jours.
Ceux qui votent pour leur propre photo, cela ne sera pas pris en compte, une photo par personne.
À vos photos !
{}
", keyword.to_string(),ping_concour);
let output = CreateEmbed::new()
.title(format!(
"Concour: {} Jour : {}",
@ -92,7 +113,7 @@ pub async fn start(ctx: Context<'_>) -> Result<(), Error> {
false,
)
.color(colour::Color::DARK_GREEN);
(output, true)
(output, text, true)
}
}
Err(err) => (
@ -118,11 +139,16 @@ pub async fn start(ctx: Context<'_>) -> Result<(), Error> {
.field("Your concour is possibly not initied correctly", "", false)
.color(colour::Color::RED),
},
"".to_string(),
false,
),
};
let mut builder = CreateReply::default().ephemeral(!success);
builder = builder.embed(concour.footer(footer));
if !text.is_empty() {
builder = builder.content(text);
} else {
builder = builder.embed(concour.footer(footer));
}
match ctx.send(builder).await {
Ok(handler) => {
if success {

View File

@ -25,6 +25,7 @@ pub async fn update(
#[description = "Description du concour"] description: Option<String>,
#[description = "Banniére du concour"] banner: Option<String>,
#[description = "Role récompense"] role_recompense: Option<Role>,
#[description = "Role ping concour"] ping_concour: Option<Role>,
) -> Result<(), Error> {
let guild = match ctx.guild_id() {
Some(guild) => guild,
@ -66,12 +67,17 @@ pub async fn update(
Some(role) => Some(role.id.get()),
None => None,
};
let ping_concour = match ping_concour {
Some(role) => Some(role.id.get()),
None => None,
};
let concour = match update_concour(
guild.get(),
ctx.channel_id().get(),
title,
description,
role,
ping_concour,
banner,
)
.await

View File

@ -17,6 +17,7 @@ pub async fn update_concour(
title: Option<String>,
description: Option<String>,
role_recopense: Option<u64>,
role_ping_concour: Option<u64>,
banner: Option<String>,
) -> Result<Option<Concour>, UpdateConcourError> {
let concour = match Concour::find_by_server_id_channel_id(&server_id, &channel_id).await {
@ -47,6 +48,9 @@ pub async fn update_concour(
if let Some(banner) = banner {
concour.banner = Some(banner);
}
if let Some(role_ping_concour) = role_ping_concour {
concour.ping_concour = Some(role_ping_concour);
}
match concour.update().await {
Ok(_) => {}

View File

@ -1,6 +1,6 @@
use super::check_if_server_enable::{check_if_server_enable, CheckIfServerEnableError};
use crate::db::server_config::ServerConfig;
use poise::serenity_prelude::{self, CacheHttp, RoleId, UserId};
use poise::serenity_prelude::{self, RoleId, UserId};
use tracing::{info, instrument};
#[instrument(level = "info", skip(http))]

View File

@ -51,6 +51,7 @@ pub struct Concour {
pub status: ConcourStatus,
pub winner: Vec<ConcourWinner>,
pub last_message_id: Option<u64>,
pub ping_concour: Option<u64>,
}
impl Default for Concour {
@ -69,6 +70,7 @@ impl Default for Concour {
status: ConcourStatus::Created,
winner: Vec::new(),
last_message_id: None,
ping_concour: None,
}
}
}
@ -89,6 +91,7 @@ impl Concour {
status: ConcourStatus::Created,
winner: Vec::new(),
last_message_id: None,
ping_concour: None,
})
}
#[instrument(level = "info")]