-
Notifications
You must be signed in to change notification settings - Fork 5
/
language.rs
96 lines (92 loc) · 2.84 KB
/
language.rs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
use std::borrow::Cow;
use poise::CreateReply;
use scripty_bot_utils::available_language_autocomplete;
use scripty_i18n::InvalidLanguageError;
use serenity::builder::CreateEmbed;
use crate::{Context, Error};
/// Set your user language to one of the available languages.
///
/// Note: this only modifies your user language, not your guild language. See `guild_language` for that.
#[poise::command(prefix_command, slash_command)]
pub async fn user_language(
ctx: Context<'_>,
// implements FromStr
#[description = "The language you want to set your user language to."]
#[autocomplete = "available_language_autocomplete"]
language: String,
) -> Result<(), Error> {
let resolved_language = scripty_i18n::get_user_language(ctx.author().id.get())
.await
.unwrap_or_else(|| "en".parse().expect("en invalid language?"));
match scripty_i18n::set_user_language(ctx.author().id.get(), language.as_str()).await {
Ok(_) => {
ctx.send(
CreateReply::default().ephemeral(true).embed(
CreateEmbed::default()
.title(format_message!(
resolved_language,
"user-language-set-success",
language: language.as_str()
))
.description(format_message!(
resolved_language,
"user-language-set-success-description",
contextPrefix: ctx.prefix()
))
.field(
Cow::Borrowed("\u{200B}"),
format_message!(
resolved_language,
"language-set-partially-translated-help",
),
false,
),
),
)
.await?;
}
Err(InvalidLanguageError::Invalid(e)) => {
ctx.send(
CreateReply::default().ephemeral(true).embed(
CreateEmbed::default()
.title(format_message!(
resolved_language,
"language-set-failure-title-invalid",
language: language
))
.description(format_message!(
resolved_language,
"language-set-failure-description-invalid",
error: e.to_string()
)),
),
)
.await?;
}
Err(InvalidLanguageError::Unsupported) => {
ctx.send( CreateReply::default().ephemeral(true)
.embed( CreateEmbed::default()
.title(format_message!(resolved_language, "language-set-failure-title-unsupported"))
.description(format_message!(resolved_language, "language-set-failure-description-unsupported", supportServerInvite: scripty_config::get_config().support_invite.clone()))
)
)
.await?;
}
Err(InvalidLanguageError::Db(e)) => {
ctx.send(
CreateReply::default().ephemeral(true).embed(
CreateEmbed::default()
.title(format_message!(
resolved_language,
"language-set-failure-title-db"
))
.description(
format_message!(resolved_language, "language-set-failure-description-db", error: e.to_string()),
),
),
)
.await?;
}
}
Ok(())
}