Как сделать чтобы бот от игрока мог выполнять две команды одновременно
Делаю мини-игру в боте. Когда я пытаюсь сделать доход с бизнесов возникает ошибка в том, что при выполнении одной команды, а она должна работать всегда - невозможно активировать другую. Мне нужно, чтобы человек мог активировать функцию dd командой start и спокойно продолжать работать с ботом, используя другие команды.
Привёл к примеру две команды:
@commands.command()
async def givemedd(self, ctx):
await ctx.channel.purge(limit=1)
db = sqlite3.connect('bomj.db')
cursor = db.cursor()
cursor.execute(f"SELECT user_id, guild_id, dd FROM bomj WHERE guild_id = '{ctx.message.guild.id}' and user_id = '{ctx.message.author.id}'")
result2 = cursor.fetchone()
sql = ("UPDATE bomj SET dd = ? WHERE guild_id = ? and user_id = ?")
val = (500, str(ctx.message.guild.id), str(ctx.message.author.id))
cursor.execute(sql, val)
db.commit()
cursor.close()
db.close()
@commands.command()
async def start(self, ctx):
dd.dd()
# Эту функцию вызывает команда start в другом файле
def dd():
db = sqlite3.connect('bomj.db')
cursor = db.cursor()
cursor.execute(f"SELECT user_id FROM bomj")
result1 = cursor.fetchone()
cursor.execute(f"SELECT user_id, guild_id, moneyy, dd FROM bomj")
result = cursor.fetchone()
if result1 is None:
return
if result[2] is None:
return
if result[3] is None:
return
else:
new_money = float(result[2] + result[3])
sql = ("UPDATE bomj SET moneyy = ? WHERE guild_id = ? and user_id = ?")
val = (new_money, str(result[2]), str(result[3]))
cursor.execute(sql, val)
db.commit()
cursor.close()
db.close()
print('f')
print(new_money)
time.sleep(10)
dd()
Ответы (1 шт):
Автор решения: eri
→ Ссылка
Вместо рекурсии с time.sleep используйте
loop = asyncio.get_event_loop()
loop.call_later(10, dd)
Там где без сна
loop.call_soon(dd)