From 22fcf5b1aa98cf41b4625c5f8f6b22151eba8c68 Mon Sep 17 00:00:00 2001 From: connorgadbois Date: Sat, 31 Jan 2026 16:50:28 -0600 Subject: [PATCH] Initial commit --- README.md | 15 ++++++++++ src/main.nim | 79 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 94 insertions(+) create mode 100644 README.md create mode 100644 src/main.nim diff --git a/README.md b/README.md new file mode 100644 index 0000000..4727176 --- /dev/null +++ b/README.md @@ -0,0 +1,15 @@ +# Wordle GameSH + +**Inspired by [https://github.com/bcvillano/gamesh](https://github.com/bcvillano/gamesh)** + +Requires users to win Wordle before getting bash. + +# Compiling +If it isn't already installed, install [Nim](https://nim-lang.org/install.html). + +Modify the values in `WORDBANK` and `BACKDOOR` as needed. + +Then compile for release +```bash +nim c -d:release src/main.nim # Outputs to src/main +``` \ No newline at end of file diff --git a/src/main.nim b/src/main.nim new file mode 100644 index 0000000..951385d --- /dev/null +++ b/src/main.nim @@ -0,0 +1,79 @@ +import random +import terminal +import strutils +import osproc +import base64 + +const WORDBANK = ["SHELL", "VIRUS", "TOKEN", "SPOOF", "PROXY", "CHMOD", "PORTS", "BYTES", "LOGIN"] +const BACKDOOR = "aW1zb2V2aWw=" + +type + Board = array[6, array[5, char]] + +proc printBoard(board: Board, answer: string): void = + var answerChars = cast[seq[char]](answer) + + for row in 0..5: + stdout.write("\n---------------------\n") + + for letter in 0..4: + if board[row][letter] == '\0': + stdout.write("| ") + else: + stdout.write("| ") + + if board[row][letter] == answerChars[letter]: + stdout.styledWrite(fgGreen, styleBright, $board[row][letter], " ") + else: + if board[row][letter] != answerChars[letter] and answerChars.contains(board[row][letter]): + stdout.styledWrite(fgYellow, styleBright, $board[row][letter], " ") + else: + if board[row][letter] != answerChars[letter]: + stdout.styledWrite(fgRed, styleBright, $board[row][letter], " ") + + stdout.write("|") + + stdout.write("\n---------------------\n\n") + +proc main(): void = + var win: bool = false + + while win == false: + randomize() + + var board: Board + var guess: string + var round: int = 0 + var word = sample(WORDBANK) + + while round <= 5: + printBoard(board, word) + + stdout.write("Your guess (5 letters): ") + guess = readLine(stdin) + + if encode(guess) == BACKDOOR: + win = true + break + + if len(guess) != 5: + stdout.styledWriteLine(fgRed, styleBright, "Your guess must be 5 letters") + else: + for letter in 0..4: + board[round][letter] = guess.toUpper()[letter] + + round += 1 + + if guess.toUpper() == word: + printBoard(board, word) + stdout.styledWriteLine(fgGreen, styleBright, "You got it in ", $round, " tries!") + + win = true + break + + echo "Launching shell..." + + discard execCmd("/bin/bash") + +if isMainModule: + main() \ No newline at end of file