这是一个刽子手游戏,但消息没有定义[discord.py]

2024-04-23 06:42:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我想做的事:使用discord.py-rewrite制作一个刽子手游戏

问题:我不确定此错误来自何处

discord.ext.commands.errors.CommandInvokeError: Command raised an exception: 
NameError: name 'message' is not defined

此外,我还希望对代码进行评估,以防我遗漏了其他内容

主代码(bot.py):

#other imports here
from hangman import Hangman

game = Hangman()

@client.command(aliases=["hm"])
async def hangman(ctx, args):
    game_message = ""
    if len(args) > 1:
        if args[1] == 'start':
            game.start_game()
            game_message = f"A word has been randomly selected (all lowercase). Guess letters by using `{prefix}hangman x` (x is the guessed letter)"
            await ctx.send(game_message)
        else:
            game.guess(message.content)

client.run('token')

hangman.py:

#imports and all that jazz

class Hangman:
    chosen_word = ""
    guessed_letters = ""
    remaining_guesses = 6
    with open("hangman.txt", 'r') as f:
        read = f.read()
        words = read.split('\n')
    has_ended = False
    has_won = False

    def start_game(self):
        random.seed()
        key = random.randint(1, len(self.words))
        self.chosen_word = self.words[key]
        new_string = ""
        for i in range(0, len(self.chosen_word)):
            new_string += "?"
        self.guessed_letters = new_string

    def get_game_status(self):
        # return a string containing the current game status and if the player has won or not
        message = ""

        if not self.has_ended:
            # print each letter followed by a space
            letters = ""
            for i in range(0, len(self.guessed_letters)):
                letters += self.guessed_letters[i] + ' '
            message = '{} guesses left \n'.format(self.remaining_guesses)
            message += letters

        if self.has_ended and self.has_won:
            message += '\n You won! You correctly guessed ' + '`{}`'.format(self.chosen_word)
        elif self.has_ended and not self.has_won:
            message += '\n You lost! The correct word was ' + '`{}`'.format(self.chosen_word)
    
        return message

    def guess(self, message):
        args = message.split(' ')
        guess = ""
        contains_guess = False

        if len(args) > 1:
            guess = args[1]

        for i in range(0, len(self.chosen_word)):
            if guess[0] == self.chosen_word[i]:
                self.guessed_letters = self.guessed_letters[:i] + guess[0] + self.guessed_letters[i + 1:]
                contains_guess = True
        if not contains_guess:
            self.remaining_guesses -= 1

        # check for letters that haven't been guessed
        unguessed_letters = False
        for letter in self.guessed_letters:
            if letter == '?':
                unguessed_letters = True

        # player has won the game
        if not unguessed_letters:
            self.has_ended = True
            self.has_won = True

        # no more guesses, so the player has lost
        if self.remaining_guesses < 0:
            self.has_ended = True
            self.has_won = False

Tags: selfgamemessagelenifnotargsword