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.
- package/lib/index.js +32 -26
- 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:
|
|
667
|
+
remainingGuessesCount: remainingGuessesCount,
|
|
662
668
|
wordGuessHtmlCache: `${gameInfo.wordGuessHtmlCache}${letterTilesHtml}\n`,
|
|
663
669
|
});
|
|
664
670
|
// 处理赢
|