Бот в дискорде - как в конце кода при вводе "Да" запустить код заново?

import discord
from discord.ext import commands
import random
from random import randint, choice
import time
import os

bot = commands.Bot(command_prefix='$')

@bot.command('go')
# в start не указал ctx в скобках
async def start(ctx):
    result = 0
    result_bot = 0
    choice = True
    diler = True
    
    while diler:
        result_bot += randint(1, 10)
        await ctx.send(f'--У дилера выпало {result_bot}--')
        diler = False
    while choice:
        result += randint(1, 10)
        time.sleep(1)
        await ctx.send(f'_У вас {result} очков')
        time.sleep(0.6)
        if result > 21:
            await ctx.send('Вы проиграли')
            result = 0
            result_bot = 0
            choice = False
        else:
            await ctx.send('продолжать?(Go/stop)')
            answ = await bot.wait_for('message')
            if answ.content == 'stop':
                if result == 21:
                    await ctx.send('Вы выйграли')
                    result = 0
                    result_bot = 0
                    choice = False
                else:
                    while True:
                        result_bot += randint(1, 10)
                        await ctx.send(f'--У дилера выпало {result_bot}--')
                        time.sleep(1)
                        if result_bot > result and result_bot < 21 and result_bot != 21:
                            await ctx.send('Вы проиграли')
                            result = 0
                            result_bot = 0
                            choice = False
                            break
                        if result_bot > 21:
                            await ctx.send('Вы выйграли!')
                            result = 0
                            result_bot = 0
                            choice = False
                            break

        await ctx.send('Ещё раз?(Дa/Нет)')
        again = await bot.wait_for('message')
        again = again.content.lower()
        if again == "да":
            diler = True
            choice = True
        #Здесь код должен запуститься заново
        else:
            await ctx.send('Ладно')

Ответы (1 шт):

Автор решения: denisnumb

Прикладывать нужно только минимальный пример кода, а не весь. Поэтому ответ будет с минимальным примером.

Как вариант, можно вынести основную логику игры в отдельную функцию и вызывать ее при вызове команды:

# функция игры
async def game(ctx):
   . . .

@bot.command()
async def go(ctx):
   await game(ctx)

И при вводе "Да" из функции game() вызвать саму себя:

# функция игры
async def game(ctx):
   . . .
    await ctx.send('Ещё раз?(Дa/Нет)')
        again = await bot.wait_for('message')
        again = again.content.lower()
        if again == "да":
            await game(ctx)
   . . .

И не забудьте сменить токен — это не та вещь, которую следует выкладывать в общий доступ, т.к. к вашему боту может получить доступ любой человек.

→ Ссылка