tasks.loop проблема с ctx
@tasks.loop(seconds=15)
async def startgame(ctx):
amount = random.randint(5, 20)
num1 = random.randint(1, 10)
num2 = random.randint(1, 10)
operator = random.choice(['+', '-', '*', '/'])
embed = disnake.Embed(color=0x00ebed, title=f'Чат игра!')
embed.add_field(name=F'Реши пример и получи {amount} билетиков ! У вас ровно 1 минута!\n',
value=f'{num1} {operator} {num2}=?\n')
embed.add_field(name=f'Решил пример?\n',
value=f'Напиши правильный ответ в чат!\n')
await ctx.send(embed=embed)
correct_answer = eval(f'{num1}{operator}{num2}')
async def check(message):
return message.author == ctx.author and message.content()
try:
message = await bot.wait_for('message', check=check, timeout=60.0)
except asyncio.TimeoutError:
embed = disnake.Embed(color=0xff0000, title=f'Чат игра!')
embed.add_field(name=F'Ой!\n',
value=f'Вы не успели ответить на пример!\n' , inline=True)
embed.add_field(name=f'Ожидайте следующей чат-игры!\n',
value=f'Правильный ответ:\n' + str(correct_answer) , inline=True)
await ctx.send(embed=embed)
if message.content == str(correct_answer):
member = message.author
await bot.db.create_table()
await bot.db.add_user(member)
await bot.db.update_money(member, amount, 0)
embed = disnake.Embed(color=0x00ff00, title=f'Чат игра!')
embed.add_field(name=F'Правильно!\n',
value=f'Вы правильно ответили на пример!\n' , inline=True)
embed.add_field(name=f'Ваша награда: {amount} билетиков, поздравляем!\n',
value=f'/balance - просмотреть свой баланс.\n' , inline=True)
await ctx.send(embed=embed)
else:
embed = disnake.Embed(color=0xff0000, title=f'Чат игра!')
embed.add_field(name=F'Ой!\n',
value=f'Вы ошиблись!\n' , inline=True)
embed.add_field(name=f'Ожидайте следующей чат-игры!\n',
value=f'Правильный ответ:\n' + str(correct_answer) , inline=True)
await ctx.send(embed=embed)
@bot.event
async def on_ready():
startgame.start()
Ошибка: Unhandled exception in internal background task 'startgame'. Traceback (most recent call last): File "C:\Users\kazti\AppData\Local\Programs\Python\Python38\lib\site-packages\disnake\ext\tasks\__init__.py", line 162, in _loop await self.coro(*args, **kwargs) TypeError: startgame() missing 1 required positional argument: 'ctx'
Ответы (1 шт):
Автор решения: q r t s
→ Ссылка
Функции startgame, при запуске, нужен аргумент который вы указали ctx
:
async def startgame(ctx):
Соответственно, его необходимо передать:
startgame.start(ctx)
Но, у Вас возникнет ошибка, т.к. ctx
в принципе нет у функции запуска бота.