MCPcopy Index your code
hub / github.com/FloatTech/ZeroBot-Plugin / createGame

Function createGame

plugin/chess/core.go:346–415  ·  view source on GitHub ↗

createGame 创建游戏

(isBlindfold bool, groupCode, senderUin int64, senderName string)

Source from the content-addressed store, hash-verified

344
345// createGame 创建游戏
346func createGame(isBlindfold bool, groupCode, senderUin int64, senderName string) (msg message.Message, err error) {
347 room, ok := chessRoomMap.Load(groupCode)
348 if !ok {
349 chessRoomMap.Store(groupCode, &chessRoom{
350 chessGame: chess.NewGame(),
351 whitePlayer: senderUin,
352 whiteName: senderName,
353 blackPlayer: 0,
354 blackName: "",
355 drawPlayer: 0,
356 lastMoveTime: time.Now().Unix(),
357 isBlindfold: isBlindfold,
358 whiteErr: false,
359 blackErr: false,
360 })
361 text := "已创建新的对局, 发送「下棋」或「chess」可加入对局。"
362 if isBlindfold {
363 text = "已创建新的盲棋对局, 发送「盲棋」或「blind」可加入对局。"
364 }
365 msg = append(msg, message.Text(text))
366 return
367 }
368 msg = message.Message{message.At(senderUin)}
369 if room.blackPlayer != 0 {
370 // 检测对局是否已存在超过 6 小时
371 if (time.Now().Unix() - room.lastMoveTime) > 21600 {
372 msg, err = abortGame(*room, groupCode, "对局已存在超过 6 小时, 游戏结束。")
373 msg = append(msg, message.Text("\n\n已有对局已被中断, 如需创建新对局请重新发送指令。"))
374 msg = append(msg, message.At(senderUin))
375 return
376 }
377 // 对局在进行
378 msg = append(msg, message.Text("对局已在进行中, 无法创建或加入对局, 当前对局玩家为: "))
379 if room.whitePlayer != 0 {
380 msg = append(msg, message.At(room.whitePlayer))
381 }
382 if room.blackPlayer != 0 {
383 msg = append(msg, message.At(room.blackPlayer))
384 }
385 msg = append(msg, message.Text(", 群主或管理员发送「中断」或「abort」可中断对局(自动判和)。"))
386 return
387 }
388 if senderUin == room.whitePlayer {
389 msg = append(msg, message.Text("请等候其他玩家加入游戏。"))
390 return
391 }
392 if room.isBlindfold && !isBlindfold {
393 msg = append(msg, message.Text("已创建盲棋对局, 请加入或等待盲棋对局结束之后创建普通对局。"))
394 return
395 }
396 if !room.isBlindfold && isBlindfold {
397 msg = append(msg, message.Text("已创建普通对局, 请加入或等待普通对局结束之后创建盲棋对局。"))
398 return
399 }
400 room.blackPlayer = senderUin
401 room.blackName = senderName
402 chessRoomMap.Store(groupCode, room)
403 var boardImgEle message.Segment

Callers 2

gameFunction · 0.85
blindfoldFunction · 0.85

Calls 2

abortGameFunction · 0.85
getBoardElementFunction · 0.85

Tested by

no test coverage detected