koishi-plugin-wordle-game 1.3.0 → 1.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/lib/index.js +32 -26
  2. package/package.json +1 -1
package/lib/index.js CHANGED
@@ -546,6 +546,30 @@ function apply(ctx, config) {
546
546
  await setGuessRunningStatus(channelId, false);
547
547
  return await sendMessage(session, `【@${username}】\n你确定存在这样的单词吗?`);
548
548
  }
549
+ // 困难模式
550
+ if (isHardMode) {
551
+ let isInputWordWrong = false;
552
+ // 包含
553
+ const containsAllLetters = lowercaseInputWord.split('').filter(letter => presentLetters.includes(letter) && letter !== '*');
554
+ if (mergeSameLetters(containsAllLetters).length !== presentLetters.length && presentLetters.length !== 0) {
555
+ isInputWordWrong = true;
556
+ }
557
+ // 不包含
558
+ if (absentLetters.length !== 0 && lowercaseInputWord.split('').some(letter => absentLetters.includes(letter))) {
559
+ isInputWordWrong = true;
560
+ }
561
+ // 正确
562
+ for (let i = 0; i < lowercaseInputWord.length; i++) {
563
+ if (correctLetters[i] !== '*' && correctLetters[i] !== lowercaseInputWord[i] && correctLetters.some(letter => letter !== '*')) {
564
+ isInputWordWrong = true;
565
+ break;
566
+ }
567
+ }
568
+ if (isInputWordWrong) {
569
+ await setGuessRunningStatus(channelId, false);
570
+ return await sendMessage(session, `【@${username}】\n当前难度为:【困难】\n【困难】:后续猜单词需要使用之前正确或出现的字母。\n您输入的单词字母不符合要求!\n您的输入为:【${inputWord}】\n单词字母要求:【${correctLetters.join('')}】${presentLetters.length === 0 ? `` : `\n包含字母:【${presentLetters}】`}${absentLetters.length === 0 ? `` : `\n不包含字母:【${absentLetters}】`}`);
571
+ }
572
+ }
549
573
  // 初始化输
550
574
  let isLose = false;
551
575
  // 变态模式
@@ -583,6 +607,11 @@ function apply(ctx, config) {
583
607
  isLose = !longestRemainingWordList.includes(targetWord);
584
608
  }
585
609
  }
610
+ if (longestRemainingWordList.length === 0) {
611
+ await updatePlayerRecordsLose(channelId, gameInfo);
612
+ await endGame(channelId);
613
+ return await sendMessage(session, `【@${username}】\n根据透露出的信息!\n已经无任何可用单词!\n很遗憾,你们输了!`);
614
+ }
586
615
  let randomWord = longestRemainingWordList[Math.floor(Math.random() * longestRemainingWordList.length)];
587
616
  const foundWord = findWord(randomWord);
588
617
  if (isLose && isChallengeMode) {
@@ -592,7 +621,7 @@ function apply(ctx, config) {
592
621
  const styledHtml = generateStyledHtml(gameInfo.guessWordLength + 1);
593
622
  // 图
594
623
  const imageBuffer = await generateImage(styledHtml, `${gameInfo.wordGuessHtmlCache}${letterTilesHtml}`);
595
- await sendMessage(session, `【@${username}】\n目标单词为:【${targetWord}】\n它不再是可能的秘密单词!\n${koishi_1.h.image(imageBuffer, `image/${config.imageType}`)}\n您可选择的操作有:【撤销】和【结束】\n【撤销】:回到上一步。\n\n注意:无效输入将自动选择【撤销】操作。`);
624
+ await sendMessage(session, `【@${username}】\n目标单词为:【${targetWord}】\n它不再是可能的秘密单词!\n${koishi_1.h.image(imageBuffer, `image/${config.imageType}`)}\n您可选择的操作有:【撤销】和【结束】\n\n【撤销】:回到上一步。\n\n注意:无效输入将自动选择【撤销】操作。`);
596
625
  let userInput = await session.prompt();
597
626
  // 生成 html 字符串
598
627
  // 图
@@ -617,30 +646,6 @@ function apply(ctx, config) {
617
646
  });
618
647
  gameInfo = await getGameInfo(channelId);
619
648
  }
620
- // 困难模式
621
- if (isHardMode) {
622
- let isInputWordWrong = false;
623
- // 包含
624
- const containsAllLetters = lowercaseInputWord.split('').filter(letter => presentLetters.includes(letter) && letter !== '*');
625
- if (mergeSameLetters(containsAllLetters).length !== presentLetters.length && presentLetters.length !== 0) {
626
- isInputWordWrong = true;
627
- }
628
- // 不包含
629
- if (absentLetters.length !== 0 && lowercaseInputWord.split('').some(letter => absentLetters.includes(letter))) {
630
- isInputWordWrong = true;
631
- }
632
- // 正确
633
- for (let i = 0; i < lowercaseInputWord.length; i++) {
634
- if (correctLetters[i] !== '*' && correctLetters[i] !== lowercaseInputWord[i] && correctLetters.some(letter => letter !== '*')) {
635
- isInputWordWrong = true;
636
- break;
637
- }
638
- }
639
- if (isInputWordWrong) {
640
- await setGuessRunningStatus(channelId, false);
641
- return await sendMessage(session, `【@${username}】\n当前难度为:【困难】\n【困难】:后续猜单词需要使用之前正确或出现的字母。\n您输入的单词字母不符合要求!\n您的输入为:【${inputWord}】\n单词字母要求:【${correctLetters.join('')}】${presentLetters.length === 0 ? `` : `\n包含字母:【${presentLetters}】`}${absentLetters.length === 0 ? `` : `\n不包含字母:【${absentLetters}】`}`);
642
- }
643
- }
644
649
  // 判断胜
645
650
  let isWin = false;
646
651
  if (lowercaseInputWord === gameInfo.wordGuess) {
@@ -656,9 +661,10 @@ function apply(ctx, config) {
656
661
  const styledHtml = generateStyledHtml(gameInfo.guessWordLength + 1);
657
662
  // 图
658
663
  const imageBuffer = await generateImage(styledHtml, `${gameInfo.wordGuessHtmlCache}${letterTilesHtml}\n${emptyGridHtml}`);
664
+ const remainingGuessesCount = isAbsurd ? gameInfo.remainingGuessesCount : gameInfo.remainingGuessesCount - 1;
659
665
  // 更新游戏记录
660
666
  await ctx.database.set('wordle_game_records', { channelId }, {
661
- remainingGuessesCount: gameInfo.remainingGuessesCount - 1,
667
+ remainingGuessesCount: remainingGuessesCount,
662
668
  wordGuessHtmlCache: `${gameInfo.wordGuessHtmlCache}${letterTilesHtml}\n`,
663
669
  });
664
670
  // 处理赢
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "koishi-plugin-wordle-game",
3
3
  "description": "欢迎来到 Wordle 猜单词小游戏,包含多种模式、多种词库、多种游戏设置和排行榜系统。",
4
- "version": "1.3.0",
4
+ "version": "1.3.2",
5
5
  "main": "lib/index.js",
6
6
  "typings": "lib/index.d.ts",
7
7
  "files": [