Discord.py Tempmute Command - PullRequest
       74

Discord.py Tempmute Command

0 голосов
/ 20 апреля 2020

Я пытаюсь сделать команду tempmute в discord.py. Я сделал настоящую команду, но я хочу иметь возможность использовать 1 с в течение одной секунды, 1 м в течение одной минуты, 1 ч в течение одного часа и 1 д в течение одного дня.

В настоящее время я могу использовать только аргумент времени в секундах. Как мне сделать так, как я уже говорил?

Вот мой код:

@client.command()
@commands.has_any_role(569518553112510475, 641312393447866398, 673530318166294550, 670694992314105927, 680137747822018560, 689135000414715980, 677844825004834827, 677848974224392192)
async def tempmute(ctx, member : discord.Member, time=0, reason=None):
    if not member or time == 0 or time == str:
        await ctx.channel.send(embed=commanderror)
        return
    elif reason == None:
        reason = "No Reason Provided"

    muteRole = discord.utils.get(ctx.guild.roles, id=663076470180151339)
    await member.add_roles(muteRole)

    tempMuteEmbed = discord.Embed(colour=embedcolour, description=f"**Reason:** {reason}")
    tempMuteEmbed.set_author(name=f"{member} Has Been Muted", icon_url=f"{member.avatar_url}")
    tempMuteEmbed.set_footer(text=embedfooter)

    await ctx.channel.send(embed=tempMuteEmbed)

    tempMuteModLogEmbed = discord.Embed(color=embedcolour)
    tempMuteModLogEmbed.set_author(name=f"[MUTE] {member}", icon_url=f"{member.avatar_url}")
    tempMuteModLogEmbed.add_field(name="User", value=f"{member.mention}")
    tempMuteModLogEmbed.add_field(name="Moderator", value=f"{ctx.message.author}")
    tempMuteModLogEmbed.add_field(name="Reason", value=f"{reason}")
    tempMuteModLogEmbed.add_field(name="Duration", value=f"{str(time)}")
    tempMuteModLogEmbed.set_footer(text=embedfooter)
    modlog = client.get_channel(638783464438759464)
    await modlog.send(embed=tempMuteModLogEmbed)

    tempMuteDM = discord.Embed(color=embedcolour, title="Mute Notification", description="You Were Muted In **The Official Vanmanyo Discord Server**")
    tempMuteDM.set_footer(text=embedfooter)
    tempMuteDM.add_field(name="Reason", value=f"{reason}")
    tempMuteDM.add_field(name="Duration", value=f"{time}")

    userToDM = client.get_user(member.id)
    await userToDM.send(embed=tempMuteDM)

    await asyncio.sleep(time)
    await member.remove_roles(muteRole)

    unMuteModLogEmbed = discord.Embed(color=embedcolour)
    unMuteModLogEmbed.set_author(name=f"[UNMUTE] {member}", icon_url=f"{member.avatar_url}")
    unMuteModLogEmbed.add_field(name="User", value=f"{member.mention}")
    unMuteModLogEmbed.set_footer(text=embedfooter)
    modlog = client.get_channel(638783464438759464)
    await modlog.send(embed=unMuteModLogEmbed)

1 Ответ

1 голос
/ 20 апреля 2020

Вы можете создать отдельную функцию, которая преобразует значения в нужные секунды.

Например:

time_convert = {"s": 1, "m": 60, "h": 3600, "d": 86400}

def convert_time_to_seconds(time):
    try:
        return int(time[:-1]) * time_convert[time[-1]]
    except:
        return time

Это попытается преобразовать время. Если он не может конвертировать его, он просто вернет исходное значение. Таким образом, вы можете использовать «40 с» или «40».

...