Skip to content

Commit e1b0dc1

Browse files
authored
Merge pull request #78 from approvers/feat/ferris-say-meigen
feat: Ferris の ASCII アートで名言を表示できるオプションの追加
2 parents ab2e799 + 905dff2 commit e1b0dc1

File tree

2 files changed

+41
-9
lines changed

2 files changed

+41
-9
lines changed

src/bot/meigen/ferris.ascii

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
\
2+
\
3+
\
4+
_~^~^~_
5+
\) / o o \ (/
6+
'_ - _'
7+
/ '-----' \

src/bot/meigen/mod.rs

+34-9
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,10 @@ enum Command {
6363
/// 指定すると名言をGopherのASCIIアートで表示します
6464
#[clap(long)]
6565
gopher: bool,
66+
67+
/// 指定すると名言をFerrisのASCIIアートで表示します
68+
#[clap(long)]
69+
ferris: bool,
6670
},
6771

6872
/// 現在登録されている名言の数を表示します
@@ -127,9 +131,11 @@ impl<D: MeigenDatabase> BotService for MeigenBot<D> {
127131

128132
let res = match parsed.command {
129133
Command::Make { author, content } => self.make(author, content).await?,
130-
Command::Show { id, gopher } => {
134+
Command::Show { id, gopher, ferris } => {
131135
if gopher {
132136
self.gophersay(id).await?
137+
} else if ferris {
138+
self.ferrissay(id).await?
133139
} else {
134140
self.show(id).await?
135141
}
@@ -234,7 +240,16 @@ impl<D: MeigenDatabase> MeigenBot<D> {
234240
let meigen = self.db.load(id).await.context("failed to get meigen")?;
235241

236242
Ok(match meigen {
237-
Some(meigen) => format_gopher(&meigen),
243+
Some(meigen) => format_ascii_meigen(&meigen, include_str!("./gopher.ascii")),
244+
None => format!("No.{id} を持つ名言は見つかりませんでした。"),
245+
})
246+
}
247+
248+
async fn ferrissay(&self, id: MeigenId) -> Result<String> {
249+
let meigen = self.db.load(id).await.context("failed to get meigen")?;
250+
251+
Ok(match meigen {
252+
Some(meigen) => format_ascii_meigen(&meigen, include_str!("./ferris.ascii")),
238253
None => format!("No.{id} を持つ名言は見つかりませんでした。"),
239254
})
240255
}
@@ -283,7 +298,7 @@ fn list(meigens: &[Meigen]) -> String {
283298
res.trim().to_string()
284299
}
285300

286-
fn format_gopher(meigen: &Meigen) -> String {
301+
fn format_ascii_meigen(meigen: &Meigen, ascii_art: &str) -> String {
287302
let meigen = format!("{}\n --- {}", meigen.content, meigen.author)
288303
.lines()
289304
.collect::<Vec<_>>()
@@ -302,21 +317,31 @@ fn format_gopher(meigen: &Meigen) -> String {
302317

303318
let bar = "-".chars().cycle().take(bar_length).collect::<String>();
304319

305-
format!(
306-
"```\n{bar}\n {meigen}\n{bar}\n{}\n```",
307-
include_str!("./gopher.ascii")
308-
)
320+
format!("```\n{bar}\n {meigen}\n{bar}\n{}\n```", ascii_art)
309321
}
310322

311323
#[test]
312324
fn test_format_gopher() {
313325
assert_eq!(
314-
format_gopher(&Meigen {
326+
format_ascii_meigen(&Meigen {
315327
id: MeigenId(1),
316328
author: "あいうえお".to_string(),
317329
content: "abcdeあいうえおdddあ".to_string(),
318330
loved_user_id: vec![],
319-
}),
331+
}, include_str!("./gopher.ascii")),
320332
"```\n------------------------\n abcdeあいうえおdddあ\n --- あいうえお\n------------------------\n \\\n \\\n \\\n ,_---~~~~~----._ \n _,,_,*^____ _____``*g*\\\"*, \n / __/ /' ^. / \\ ^@q f \n[ @f | @)) | | @)) l 0 _/ \n \\`/ \\~____ / __ \\_____/ \\ \n | _l__l_ I \n } [______] I \n ] | | | | \n ] ~ ~ | \n | | \n | | \n\n```"
321333
);
322334
}
335+
336+
#[test]
337+
fn test_format_ferris() {
338+
assert_eq!(
339+
format_ascii_meigen(&Meigen {
340+
id: MeigenId(1),
341+
author: "あいうえお".to_string(),
342+
content: "abcdeあいうえおdddあ".to_string(),
343+
loved_user_id: vec![],
344+
}, include_str!("./ferris.ascii")),
345+
"```\n------------------------\n abcdeあいうえおdddあ\n --- あいうえお\n------------------------\n \\\n \\\n \\\n _~^~^~_\n \\) / o o \\ (/\n '_ - _'\n / '-----' \\\n\n```"
346+
);
347+
}

0 commit comments

Comments
 (0)