Я пытаюсь, чтобы мое свободное время, скажем, 5 дней, напоминало о 432000 секундах

#python #discord.py

Вопрос:

 def convert(time):
    pos = ["s", "m", "h", "d"]

    time_dict = {"s": 1, "m": 60, "h": 3600, "d": 3600 * 24}

    unit = time[-1]

    if unit not in pos:
        return -1
    try:
        val = int(time[:-1])
    except:
        return -2

    return val * time_dict[unit]


@client.command()
@commands.has_permissions(manage_messages=True)
async def gcreate(ctx, time: str, *, prize: str):
    time = convert(time)

    embed = discord.Embed(title=prize,
                          description=f"Hosted by - {ctx.author.mention} React with :tada: to enter! Time Remaining: **{time}** seconds",
                          colour = discord.Colour.purple())

    msg = await ctx.channel.send(content=":tada: **GIVEAWAY** :tada:", embed=embed)
    await msg.add_reaction("🎉")

    await asyncio.sleep(3)
    await asyncio.sleep(int(time))

    new_msg = await ctx.channel.fetch_message(msg.id)

    user_list = [user for user in await new_msg.reactions[0].users().flatten() if
                 user != client.user]  
    if len(user_list) == 0:
        await ctx.send("No one reacted.")
    else:
        winner = random.choice(user_list)
        await ctx.send(f"{winner.mention} You have won the {prize}!")
 

введите описание изображения здесь

Комментарии:

1. Измените уравнение преобразования, чтобы вместо этого сохранить значения как есть, но отформатировать его по-другому. Как бы то ни было, ваши функции преобразования преобразуют любую временную строку в секунды. Зачем беспокоиться? Возьмите 5d , превратите его в 5 Days , получив 5 , найдя, что unit == 'd' это, а затем добавив 'Days' для 'd' .

2. @Frontear Я не знаю, как это сделать, я только начал discord.py Я знаю основы.

Ответ №1:

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

 def convert(time):
    time_dict = {"s": "seconds", "m": "minutes", "h": "hours", "d": "days"} # pulling your idea, but replacing the seconds with the full name of the acronym.
    
    val = time[:-1] # everything before the last character
    unit = time[-1] # the last character

    return f"{val} {time_dict[unit]}" self explanatory, returns a string of your preference.

convert("5d") # 5 days
convert("10s") # 10 seconds