我无法使用heroku运行!giveaway命令,但是当我使用cmd时,一切正常吗?

时间:2020-10-18 19:30:36

标签: python python-3.x heroku discord discord.py

使用主机时,我不能使用!giveaway命令。

当我使用cmd运行此命令时,它很好用,但是当我尝试使用Heroku主机运行此命令时,它不起作用并且 heroku日志命令不返回我有什么错误。我不知道该怎么办。 如何解决?请帮帮我。

这是命令代码:

@bot.command(aliases=["giveaway-start", "розыгрыш-начать"])
async def __giveaway_start(ctx, duration: int, sign: str, channel: discord.TextChannel, *, prize: str):

    with open('C:\\bot1\\giveaways.json', 'r') as f:
        givs = json.load(f)

    async def new_id(givs,g_id):
        if g_id in givs:
            new_g_id += random.choice(giveaway_id)

    giveaway_id = '1234567890'
    for n in range(1):
        g_id = ''
        for i in range(16):
            g_id += random.choice(giveaway_id)
            if g_id in givs:
                await ctx.send("Попробуйте позже")

    if sign == "с":
        wait = 1 * duration
    elif sign == "м":
        wait = 60 * duration
    elif sign == "ч":
        wait = 3600 * duration
    elif sign == "д":
        wait = 86400 * duration
    emoji = "?"
    if duration == 0:
        return
    embed = discord.Embed(title=prize, description=f"Автор - {ctx.author.mention}\n"f"**Нажмите на :tada: чтобы принять участие!**\n"f"Времени осталось: {wait} секунд",color=discord.Color.blue(),timestamp=datetime.utcnow())
    message = await channel.send(embed=embed)
    async def update_data(givs,g_away):
        if not g_away in givs:
            givs[g_away] = {}
            givs[g_away]["msg_id"] = message.id
    await ctx.send(f"Розыгрыш в канале {channel.mention} успешно создан! ID розыгрыша: `{g_id}`. Я напишу Вам в ЛС когда розыгрыш закончится.\nТак же можете присоединиться к нашему серверу тех. поддержки! https://discord.gg/YUzE6rB")
    await message.add_reaction(emoji)
    await update_data(givs,str(g_id))
    with open('C:\\bot1\\giveaways.json', 'w') as f:
        json.dump(givs,f)
    while wait:
        await asyncio.sleep(1)
        if wait == 0:
            await ctx.send("Giveaway is over!")
        else:
            wait -= 1
            if wait > 86400:
                cld = wait / 86400
                time = "дней"
                cooldown = round(cld, 1)
            elif wait > 3600:
                cld = wait / 3600
                time = "часов"
                cooldown = round(cld, 1)
            elif wait > 60:
                cld = wait / 60
                time = "минут"
                cooldown = round(cld, 1)
            else:
                cld = wait / 1
                time = "секунд"
                cooldown = round(cld, 1)
            embed.description = f"Автор - {ctx.author.mention}\n"f"**Нажмите на :tada: чтобы принять участие!**\n"f"Времени осталось: {cooldown} {time}"
            await message.edit(embed=embed)
    await asyncio.sleep(duration)
    message = await message.channel.fetch_message(message.id)
    reaction = get(message.reactions, emoji=emoji)
    users = [user async for user in reaction.users() if user.id != bot.user.id]
    if len(users) == 0:
        embed.description = f"Автор - {ctx.author.mention}\n"f"Нет победителей"
        await message.edit(embed=embed)
        return
    else:
        winner = random.choice(users)
        embed.description = f"**Автор - {ctx.author.mention}**\n"f"**Победитель - {winner.mention}**"
        await message.edit(embed=embed)
    embed_end=discord.Embed(color=discord.Color.gold())
    embed_end.add_field(name=f"Розыгрыш окончен!", value=f"[Ссылка на розыгрыш]({message.jump_url})", inline=False)
    await ctx.author.send(embed=embed_end)
    await channel.send(winner.mention, embed=embed)
    win_embed=discord.Embed(title="Вы победили в розыгрыше!", color=discord.Color.gold())
    win_embed.add_field(name=f"Вы выйграли: {prize}", value=f"[Ссылка на розыгрыш]({message.jump_url})",inline=False)
    await winner.send(embed=win_embed)

1 个答案:

答案 0 :(得分:0)

免费的Heroku不支持JSON编写,因此您的命令包含json.dump,因此不会执行。