@@ -109,6 +109,12 @@ func init() {
109109 ctx .SendChain (message .Text (err ))
110110 return
111111 }
112+ // 猜歌环节-提供猜歌选项
113+ files , err := os .ReadDir (pathOfMusic )
114+ if err != nil {
115+ return
116+ }
117+ getMusicSelect (ctx , files , musicName )
112118 // 进行猜歌环节
113119 ctx .SendChain (message .Record ("file:///" + file .BOTPATH + "/" + outputPath + "0.wav" ))
114120 var next * zero.FutureEvent
@@ -221,26 +227,8 @@ func musicLottery(musicPath, listName string) (pathOfMusic, musicName string, er
221227 }
222228 return
223229 }
224- // 进行随机抽取
225- if playlistID == 0 || ! cfg .API {
226- musicName = getLocalMusic (files , 10 )
227- } else {
228- switch rand .Intn (3 ) { // 三分二概率抽取API的
229- case 1 :
230- musicName = getLocalMusic (files , 10 )
231- default :
232- if cfg .APIURL == "" {
233- // 如果没有配置过API地址,尝试连接独角兽
234- musicName , err = downloadByOvooa (playlistID , pathOfMusic )
235- } else {
236- // 从API中抽取歌曲
237- musicName , err = drawByAPI (playlistID , pathOfMusic )
238- }
239- if err != nil {
240- musicName = getLocalMusic (files , 10 )
241- }
242- }
243- }
230+ // 只猜本地已经下好的歌曲
231+ musicName = getLocalMusic (files , 10 )
244232 if musicName == "" {
245233 err = errors .New ("抽取歌曲轮空了,请重试" )
246234 }
@@ -295,15 +283,13 @@ func cutMusic(musicName, pathOfMusic, outputPath string) (err error) {
295283// 数据匹配(结果信息,答题次数,提示次数,是否结束游戏)
296284func gameMatch (c * zero.Ctx , beginner int64 , musicInfo []string , answerTimes , tickTimes int ) (message.MessageSegment , int , int , bool ) {
297285 answer := strings .Replace (c .Event .Message .String (), "-" , "" , 1 )
298- // 大小写,简繁体转换
286+ // 回答内容转小写,比对时再把标准答案转小写
299287 answer = ConvertText (answer )
300- for i , element := range musicInfo {
301- musicInfo [i ] = ConvertText (element )
302- }
288+
303289 switch {
304290 case answer == "取消" :
305291 if c .Event .UserID == beginner {
306- return message .Text ("游戏已取消,猜歌答案是\n " , musicInfo [len (musicInfo )- 1 ], "\n \n \ n 下面欣赏猜歌的歌曲" ), answerTimes , tickTimes , true
292+ return message .Text ("游戏已取消,猜歌答案是\n " , musicInfo [len (musicInfo )- 1 ], "\n \n 下面欣赏猜歌的歌曲" ), answerTimes , tickTimes , true
307293 }
308294 return message .Text ("你无权限取消" ), answerTimes , tickTimes , false
309295 case answer == "提示" :
@@ -312,11 +298,11 @@ func gameMatch(c *zero.Ctx, beginner int64, musicInfo []string, answerTimes, tic
312298 return message .Text ("已经没有提示了哦" ), answerTimes , tickTimes , false
313299 }
314300 return message .Text ("再听这段音频,要仔细听哦" ), answerTimes , tickTimes , false
315- case strings .Contains (musicInfo [0 ], answer ) || strings .EqualFold (musicInfo [0 ], answer ):
301+ case strings .Contains (ConvertText ( musicInfo [0 ]) , answer ) || strings .EqualFold (ConvertText ( musicInfo [0 ]) , answer ):
316302 return message .Text ("太棒了,你猜对歌曲名了!答案是\n " , musicInfo [len (musicInfo )- 1 ], "\n \n 下面欣赏猜歌的歌曲" ), answerTimes , tickTimes , true
317- case strings .Contains (musicInfo [1 ], answer ) || strings .EqualFold (musicInfo [1 ], answer ):
303+ case strings .Contains (ConvertText ( musicInfo [1 ]) , answer ) || strings .EqualFold (ConvertText ( musicInfo [1 ]) , answer ):
318304 return message .Text ("太棒了,你猜对歌手名了!答案是\n " , musicInfo [len (musicInfo )- 1 ], "\n \n 下面欣赏猜歌的歌曲" ), answerTimes , tickTimes , true
319- case len (musicInfo ) == 4 && (strings .Contains (musicInfo [2 ], answer ) || strings .EqualFold (musicInfo [2 ], answer )):
305+ case len (musicInfo ) == 4 && (strings .Contains (ConvertText ( musicInfo [2 ]) , answer ) || strings .EqualFold (ConvertText ( musicInfo [2 ]) , answer )):
320306 return message .Text ("太棒了,你猜对相关信息了!答案是\n " , musicInfo [len (musicInfo )- 1 ], "\n \n 下面欣赏猜歌的歌曲" ), answerTimes , tickTimes , true
321307 default :
322308 answerTimes ++
@@ -343,3 +329,39 @@ func ConvertText(input string) string {
343329 }
344330 return toLower
345331}
332+
333+ func getMusicSelect (ctx * zero.Ctx , files []fs.DirEntry , musicName string ) {
334+ // 生成音乐选项
335+ var musicInfo []string
336+ musicInfo = append (musicInfo , musicName )
337+ for i := 1 ; i < 4 ; i ++ {
338+ musicInfo = append (musicInfo , getLocalMusic (files , 10 ))
339+ for musicInfo [0 ] == musicInfo [i ] {
340+ musicInfo [i ] = getLocalMusic (files , 10 )
341+ }
342+ }
343+ // 对调正确答案
344+ j := rand .Intn (len (musicInfo ))
345+ musicInfo [0 ], musicInfo [j ] = musicInfo [j ], musicInfo [0 ]
346+
347+ musicNameSelect := "请选出正确歌曲:\n "
348+ for i := 0 ; i < len (musicInfo ); i ++ {
349+ // 解析歌曲信息
350+ music := strings .Split (musicInfo [i ], "." )
351+ // 获取音乐后缀
352+ musicType := music [len (music )- 1 ]
353+ if ! strings .Contains (musictypelist , musicType ) {
354+ ctx .SendChain (message .Text ("抽取到了歌曲:\n " ,
355+ musicInfo [i ], "\n 该歌曲不是音乐后缀,请联系bot主人修改" ))
356+ }
357+ // 获取音乐信息
358+ musicInfo := strings .Split (strings .ReplaceAll (musicInfo [i ], "." + musicType , "" ), " - " )
359+ infoNum := len (musicInfo )
360+ if infoNum == 1 {
361+ ctx .SendChain (message .Text ("抽取到了歌曲:\n " ,
362+ musicInfo [i ], "\n 该歌曲命名不符合命名规则,请联系bot主人修改" ))
363+ }
364+ musicNameSelect += musicInfo [0 ] + " 歌手:" + musicInfo [1 ] + "\n "
365+ }
366+ ctx .SendChain (message .Text (musicNameSelect ))
367+ }
0 commit comments