@@ -63,6 +63,10 @@ enum Command {
63
63
/// 指定すると名言をGopherのASCIIアートで表示します
64
64
#[ clap( long) ]
65
65
gopher : bool ,
66
+
67
+ /// 指定すると名言をFerrisのASCIIアートで表示します
68
+ #[ clap( long) ]
69
+ ferris : bool ,
66
70
} ,
67
71
68
72
/// 現在登録されている名言の数を表示します
@@ -127,9 +131,11 @@ impl<D: MeigenDatabase> BotService for MeigenBot<D> {
127
131
128
132
let res = match parsed. command {
129
133
Command :: Make { author, content } => self . make ( author, content) . await ?,
130
- Command :: Show { id, gopher } => {
134
+ Command :: Show { id, gopher, ferris } => {
131
135
if gopher {
132
136
self . gophersay ( id) . await ?
137
+ } else if ferris {
138
+ self . ferrissay ( id) . await ?
133
139
} else {
134
140
self . show ( id) . await ?
135
141
}
@@ -234,7 +240,16 @@ impl<D: MeigenDatabase> MeigenBot<D> {
234
240
let meigen = self . db . load ( id) . await . context ( "failed to get meigen" ) ?;
235
241
236
242
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" ) ) ,
238
253
None => format ! ( "No.{id} を持つ名言は見つかりませんでした。" ) ,
239
254
} )
240
255
}
@@ -283,7 +298,7 @@ fn list(meigens: &[Meigen]) -> String {
283
298
res. trim ( ) . to_string ( )
284
299
}
285
300
286
- fn format_gopher ( meigen : & Meigen ) -> String {
301
+ fn format_ascii_meigen ( meigen : & Meigen , ascii_art : & str ) -> String {
287
302
let meigen = format ! ( "{}\n --- {}" , meigen. content, meigen. author)
288
303
. lines ( )
289
304
. collect :: < Vec < _ > > ( )
@@ -302,21 +317,31 @@ fn format_gopher(meigen: &Meigen) -> String {
302
317
303
318
let bar = "-" . chars ( ) . cycle ( ) . take ( bar_length) . collect :: < String > ( ) ;
304
319
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)
309
321
}
310
322
311
323
#[ test]
312
324
fn test_format_gopher ( ) {
313
325
assert_eq ! (
314
- format_gopher ( & Meigen {
326
+ format_ascii_meigen ( & Meigen {
315
327
id: MeigenId ( 1 ) ,
316
328
author: "あいうえお" . to_string( ) ,
317
329
content: "abcdeあいうえおdddあ" . to_string( ) ,
318
330
loved_user_id: vec![ ] ,
319
- } ) ,
331
+ } , include_str! ( "./gopher.ascii" ) ) ,
320
332
"```\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 ```"
321
333
) ;
322
334
}
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