#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