11import genSongInfoButtons from '../utils/genSongInfoButtons' ;
22import { Song } from '@clansty/maibot-types/src' ;
33import LyricsHelper from '../utils/LyricsHelper' ;
4- import { BotTypes , MessageButtonSwitchInline , MessageButtonUrl , SendMessageAction } from '@clansty/maibot-firm' ;
4+ import { BotTypes , BundledMessageBase , MessageButtonSwitchInline , MessageButtonUrl , SendMessageAction } from '@clansty/maibot-firm' ;
55import { BuilderEnv } from '../botBuilder' ;
66import { MESSAGE_TEMPLATE } from '../MessageTemplate' ;
77
@@ -68,6 +68,17 @@ export default <T extends BotTypes>({ bot, env, getContext, musicToFile }: Build
6868 return true ;
6969 } ) ;
7070
71+ const makeBundledMessageForSong = ( bundle : BundledMessageBase < T > , song : Song ) => {
72+ const msgTitle = song . display . substring ( 0 , song . display . indexOf ( '\n' ) ) ;
73+ const msgText = song . display . substring ( song . display . indexOf ( '\n' ) + 1 ) . trim ( ) ;
74+ bundle . addNode ( ) . addPhoto ( song . coverUrl ) ;
75+ bundle . setTitle ( msgTitle ) . setPrompt ( msgTitle ) . setDescription ( song . basicInfo . substring ( song . basicInfo . indexOf ( '\n' ) + 1 ) ) . setSummary ( '点击查看歌曲和谱面详情' ) ;
76+ bundle . addNode ( ) . setText ( msgText ) ;
77+ for ( const sheet of song . sheets ) {
78+ bundle . addNode ( ) . setText ( `${ sheet . type === 'dx' ? 'DX ' : '标准' } 谱面\n` + sheet . display . trim ( ) ) ;
79+ }
80+ } ;
81+
7182 const sendSong = async ( req : SendMessageAction < T > , song : Song ) => {
7283 if ( ! song ) return ;
7384
@@ -85,14 +96,9 @@ export default <T extends BotTypes>({ bot, env, getContext, musicToFile }: Build
8596 content : msgText ,
8697 image : song . coverUrl
8798 } ) ;
88- bundle . addNode ( ) . addPhoto ( song . coverUrl ) ;
89- }
90- bundle . setTitle ( msgTitle ) . setPrompt ( msgTitle ) . setDescription ( song . basicInfo . substring ( song . basicInfo . indexOf ( '\n' ) + 1 ) ) . setSummary ( '点击查看歌曲和谱面详情' ) ;
91- bundle . addNode ( ) . setText ( msgText ) ;
92- for ( const sheet of song . sheets ) {
93- bundle . addNode ( ) . setText ( `${ sheet . type === 'dx' ? 'DX ' : '标准' } 谱面\n` + sheet . display . trim ( ) ) ;
9499 }
95100
101+ makeBundledMessageForSong ( bundle , song ) ;
96102 const message = await req . setText ( song . display ) . setButtons ( buttons ) . dispatch ( ) ;
97103 // 异步获取歌词,只在 undefined 的时候
98104 if ( ! lyrics && bot . isEditMessageSupported ) {
@@ -130,10 +136,18 @@ export default <T extends BotTypes>({ bot, env, getContext, musicToFile }: Build
130136 return true ;
131137 }
132138 if ( results . length > 1 ) {
133- await event . reply ( )
139+ const req = event . reply ( )
134140 . setText ( `共找到 ${ results . length } 个结果:\n\n` + results . map ( song => ( song . id ? song . id + '. ' : '' ) + song . title ) . join ( '\n' ) )
135- . addButtons ( new MessageButtonSwitchInline ( '选择结果' , kw ) )
136- . dispatch ( ) ;
141+ . addButtons ( new MessageButtonSwitchInline ( '选择结果' , kw ) ) ;
142+
143+ const bundle = req . addBundledMessage ( ) ;
144+ bundle . setTitle ( `共找到 ${ results . length } 个结果` ) . setDescription ( results . map ( song => ( song . id ? song . id + '. ' : '' ) + song . title ) . join ( '\n' ) ) . setSummary ( '点击展开' ) . setPrompt ( `歌曲搜索:${ results . length } 个结果` ) ;
145+ for ( const result of results ) {
146+ bundle . addNode ( ) . addPhoto ( result . coverUrl ) ;
147+ makeBundledMessageForSong ( bundle . addNode ( ) . addBundledMessage ( ) , result ) ;
148+ }
149+
150+ await req . dispatch ( ) ;
137151 return true ;
138152 }
139153
0 commit comments