feat(discord): Commands description
- Added english commands description - Added russian commands description - Changed override option on /quest update to reset dates - Commented out all deadline functionality
This commit is contained in:
parent
787118309a
commit
60aa5fcb34
8 changed files with 191 additions and 22 deletions
|
|
@ -36,6 +36,7 @@ fn make_quest_message_content(ctx: Context<'_>, quest: &Quest) -> String {
|
|||
guild_only,
|
||||
subcommands("list", "create", "update", "publish", "delete"),
|
||||
required_permissions = "ADMINISTRATOR",
|
||||
name_localized("ru", "квесты"),
|
||||
)]
|
||||
pub async fn quest(
|
||||
_ctx: Context<'_>,
|
||||
|
|
@ -43,11 +44,14 @@ pub async fn quest(
|
|||
Ok(())
|
||||
}
|
||||
|
||||
/// List all quests
|
||||
#[poise::command(
|
||||
prefix_command,
|
||||
slash_command,
|
||||
guild_only,
|
||||
required_permissions = "ADMINISTRATOR",
|
||||
name_localized("ru", "список"),
|
||||
description_localized("ru", "Вывести все квесты")
|
||||
)]
|
||||
pub async fn list(
|
||||
ctx: Context<'_>,
|
||||
|
|
@ -73,7 +77,6 @@ pub enum DifficultyWrapper {
|
|||
Secret,
|
||||
}
|
||||
|
||||
|
||||
impl From<DifficultyWrapper> for QuestDifficulty {
|
||||
fn from(value: DifficultyWrapper) -> Self {
|
||||
match &value {
|
||||
|
|
@ -105,28 +108,47 @@ impl From<DateWrapper> for Date {
|
|||
}
|
||||
}
|
||||
|
||||
/// Create quest and print its identifier
|
||||
#[poise::command(
|
||||
prefix_command,
|
||||
slash_command,
|
||||
required_permissions = "ADMINISTRATOR",
|
||||
guild_only,
|
||||
name_localized("ru", "создать"),
|
||||
description_localized("ru", "Создать квест и получить его идентификатор"),
|
||||
)]
|
||||
pub async fn create(
|
||||
ctx: Context<'_>,
|
||||
#[description = "Quest difficulty"]
|
||||
#[name_localized("ru", "сложность")]
|
||||
#[description_localized("ru", "Сложность квеста")]
|
||||
difficulty: DifficultyWrapper,
|
||||
#[description = "Reward for the quest"]
|
||||
#[name_localized("ru", "награда")]
|
||||
#[description_localized("ru", "Награда за квест")]
|
||||
reward: u32,
|
||||
#[description = "Quest name"]
|
||||
#[name_localized("ru", "название")]
|
||||
#[description_localized("ru", "Название квеста")]
|
||||
name: String,
|
||||
#[description = "Quest description"]
|
||||
#[name_localized("ru", "описание")]
|
||||
#[description_localized("ru", "Описание квеста")]
|
||||
description: String,
|
||||
#[description = "Quest answer, visible to admins"]
|
||||
#[description = "Expected answer, visible when user posts their answer for review"]
|
||||
#[name_localized("ru", "ответ")]
|
||||
#[description_localized("ru", "Ожидаемый результат, отображаемый при проверке ответа игрока")]
|
||||
answer: String,
|
||||
#[description = "Optional date of publication (in format of YYYY-MM-DD, e.g. 2025-12-24)"]
|
||||
#[description = "Date of publication (in format of YYYY-MM-DD, e.g. 2025-12-24)"]
|
||||
#[name_localized("ru", "доступен")]
|
||||
#[description_localized("ru", "Дата публикации (в формате ГГГГ-ММ-ДД, напр. 2025-12-24)")]
|
||||
available: Option<DateWrapper>,
|
||||
#[description = "Optional deadline (in format of YYYY-MM-DD, e.g. 2025-12-24)"]
|
||||
/*
|
||||
#[description = "Deadline (in format of YYYY-MM-DD, e.g. 2025-12-24)"]
|
||||
#[name_localized("ru", "дедлайн")]
|
||||
#[description_localized("ru", "Дедлайн (в формате ГГГГ-ММ-ДД), напр. 2025-12-24")]
|
||||
deadline: Option<DateWrapper>,
|
||||
*/
|
||||
) -> Result<(), Error> {
|
||||
let conf = &ctx.data().config;
|
||||
let mut quests = conf.load_quests();
|
||||
|
|
@ -141,10 +163,12 @@ pub async fn create(
|
|||
None => None,
|
||||
};
|
||||
|
||||
/*
|
||||
let deadline = match deadline {
|
||||
Some(dl) => Some(dl.into()),
|
||||
None => None,
|
||||
};
|
||||
*/
|
||||
|
||||
let quest = Quest {
|
||||
id: next_id,
|
||||
|
|
@ -155,7 +179,8 @@ pub async fn create(
|
|||
answer,
|
||||
public: false,
|
||||
available_on,
|
||||
deadline,
|
||||
//deadline,
|
||||
..Default::default()
|
||||
};
|
||||
|
||||
let path = conf.full_quests_path();
|
||||
|
|
@ -171,33 +196,57 @@ pub async fn create(
|
|||
Ok(())
|
||||
}
|
||||
|
||||
/// Update quest values by its identifier and new given values
|
||||
#[poise::command(
|
||||
prefix_command,
|
||||
slash_command,
|
||||
required_permissions = "ADMINISTRATOR",
|
||||
guild_only,
|
||||
name_localized("ru", "обновить"),
|
||||
description_localized("ru", "Обновить выбранные значения указанного квеста"),
|
||||
)]
|
||||
pub async fn update(
|
||||
ctx: Context<'_>,
|
||||
#[description = "Quest identifier"]
|
||||
#[name_localized("ru", "идентификатор")]
|
||||
#[description_localized("ru", "Идентификатор квеста")]
|
||||
id: u16,
|
||||
#[description = "Quest difficulty"]
|
||||
#[name_localized("ru", "сложность")]
|
||||
#[description_localized("ru", "Сложность квеста")]
|
||||
difficulty: Option<DifficultyWrapper>,
|
||||
#[description = "Reward for the quest"]
|
||||
#[name_localized("ru", "награда")]
|
||||
#[description_localized("ru", "Награда за квест")]
|
||||
reward: Option<u32>,
|
||||
#[description = "Quest name"]
|
||||
#[name_localized("ru", "название")]
|
||||
#[description_localized("ru", "Название квеста")]
|
||||
name: Option<String>,
|
||||
#[description = "Quest description"]
|
||||
#[name_localized("ru", "описание")]
|
||||
#[description_localized("ru", "Описание квеста")]
|
||||
description: Option<String>,
|
||||
#[description = "Quest answer, visible to admins"]
|
||||
#[description = "Expected answer, visible when user posts their answer for review"]
|
||||
#[name_localized("ru", "ответ")]
|
||||
#[description_localized("ru", "Ожидаемый результат, отображаемый при проверке ответа игрока")]
|
||||
answer: Option<String>,
|
||||
#[description = "Date of publication (in format of YYYY-MM-DD, e.g. 2025-12-24)"]
|
||||
#[name_localized("ru", "доступен")]
|
||||
#[description_localized("ru", "Дата публикации (в формате ГГГГ-ММ-ДД, напр. 2025-12-24")]
|
||||
available: Option<DateWrapper>,
|
||||
/*
|
||||
#[description = "Quest deadline (in format of YYYY-MM-DD, e.g. 2025-12-24)"]
|
||||
#[name_localized("ru", "дедлайн")]
|
||||
#[description_localized("ru", "Дедлайн (в формате ГГГГ-ММ-ДД, напр. 2025-12-24)")]
|
||||
deadline: Option<DateWrapper>,
|
||||
#[description = "Clear availability and deadline if checked"]
|
||||
#[rename = "override"]
|
||||
should_override: Option<bool>,
|
||||
#[description = "Reset availability and deadline if checked"]
|
||||
#[description_localized("ru", "Если выбрано, сбросить доступность и дедлайн")]
|
||||
*/
|
||||
#[description = "Reset availability if checked"]
|
||||
#[description_localized("ru", "Если выбрано, сбросить доступность")]
|
||||
#[name_localized("ru", "сброс")]
|
||||
reset: Option<bool>,
|
||||
) -> Result<(), Error> {
|
||||
let conf = &ctx.data().config;
|
||||
let quests = conf.load_quests();
|
||||
|
|
@ -211,16 +260,16 @@ pub async fn update(
|
|||
};
|
||||
|
||||
let available_on: Option<Date>;
|
||||
let dead_line: Option<Date>;
|
||||
//let dead_line: Option<Date>;
|
||||
|
||||
match should_override.unwrap_or(false) {
|
||||
match reset.unwrap_or(false) {
|
||||
true => {
|
||||
available_on = available.map(|v| v.into());
|
||||
dead_line = deadline.map(|v| v.into());
|
||||
available_on = None;
|
||||
//dead_line = None;
|
||||
},
|
||||
false => {
|
||||
available_on = available.map_or_else(|| quest.available_on.clone(), |v| Some(v.into()));
|
||||
dead_line = deadline.map_or_else(|| quest.deadline.clone(), |v| Some(v.into()));
|
||||
//dead_line = deadline.map_or_else(|| quest.deadline.clone(), |v| Some(v.into()));
|
||||
},
|
||||
}
|
||||
|
||||
|
|
@ -233,7 +282,8 @@ pub async fn update(
|
|||
answer: answer.unwrap_or(quest.answer.clone()),
|
||||
public: quest.public,
|
||||
available_on,
|
||||
deadline: dead_line,
|
||||
//deadline: dead_line,
|
||||
..Default::default()
|
||||
};
|
||||
|
||||
let strings = &ctx.data().strings;
|
||||
|
|
@ -260,15 +310,20 @@ pub async fn update(
|
|||
Ok(())
|
||||
}
|
||||
|
||||
/// Mark quest as public and send its message in quests channel
|
||||
#[poise::command(
|
||||
prefix_command,
|
||||
slash_command,
|
||||
required_permissions = "ADMINISTRATOR",
|
||||
guild_only
|
||||
guild_only,
|
||||
name_localized("ru", "опубликовать"),
|
||||
description_localized("ru", "Отметить квест как публичный и отправить его сообщение в канал квестов"),
|
||||
)]
|
||||
pub async fn publish(
|
||||
ctx: Context<'_>,
|
||||
#[description = "Identifier of the quest to publish"]
|
||||
#[description = "Quest identifier"]
|
||||
#[name_localized("ru", "идентификатор")]
|
||||
#[description_localized("ru", "Идентификатор квеста")]
|
||||
id: u16,
|
||||
) -> Result<(), Error> {
|
||||
let mut quests = ctx.data().config.load_quests();
|
||||
|
|
@ -308,14 +363,20 @@ pub async fn publish(
|
|||
Ok(())
|
||||
}
|
||||
|
||||
/// Delete quest (and its message, if published)
|
||||
#[poise::command(
|
||||
prefix_command,
|
||||
slash_command,
|
||||
required_permissions = "ADMINISTRATOR",
|
||||
guild_only,
|
||||
name_localized("ru", "удалить"),
|
||||
description_localized("ru", "Удалить квест (и его сообщение, если он был опубликован)"),
|
||||
)]
|
||||
pub async fn delete(
|
||||
ctx: Context<'_>,
|
||||
#[description = "Quest identifier"]
|
||||
#[name_localized("ru", "идентификатор")]
|
||||
#[description_localized("ru", "Идентификатор квеста")]
|
||||
id: u16,
|
||||
) -> Result<(), Error> {
|
||||
if let Some(msg) = find_quest_message(ctx, id).await? {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue