Discord Botu için 'cooldowns' komutu yapma

Katılım
16 Temmuz 2021
Mesajlar
528
Çözümler
11
Yer
Ankara - Türkiye
Daha fazla  
Cinsiyet
Erkek
Meslek
Öğrenci
Bir Discord botu üzerinde çalışıyorum. Epey ilerledim fakat bir yerde takıldım. Cooldown sistemini komut çalıştığı anda hatayı alarak yaptım fakat benim istediğim bütün cooldown'ları tek bir komutla görmek. Tıpkı bunun gibi;

cooldowns.jpg


Bunun için database işine girmek lazım mı yoksa cooldown değerlerini herhangi bir şekilde alıp bu komuta aktarabilir miyiz?
 
Database işine girmek şart mı değil ancak programı şişirir. List içinde tutulabilir çalışacaktır da ancak sağlıklı değil ve güvenli de değil. En basitinden restart bile denge bozar.
Tek bir JSON dosyasında da tutabilirsin bitiş tarihi ve saati olarak. Her kategoriye ayrı JSON açtırman eğer başlangıç halindeysen akıl sağlığı açısından daha iyi olacaktır.
Ayrıca Python projelerinizde "pycord" kullanmanız çok daha iyi.
 
Bu değerleri bir list içinde tutabilirsiniz gibi ama DB en sağlıklısı olur.

@özgün deniz
Database işine girmek şart mı değil ancak programı şişirir. List içinde tutulabilir çalışacaktır da ancak sağlıklı değil ve güvenli de değil. En basitinden restart bile denge bozar.
Tek bir JSON dosyasında da tutabilirsin bitiş tarihi ve saati olarak. Her kategoriye ayrı JSON açtırman eğer başlangıç halindeysen akıl sağlığı açısından daha iyi olacaktır.
Ayrıca Python projelerinizde "pycord" kullanmanız çok daha iyi.
Farklı bir yöntemle çözdüm hocam. Yine de zaman ayırdığınız için teşekkürler.

Python:
@Bot.command(aliases=["cd", "c"])
async def cooldown(ctx):
    claim_c = Bot.get_command("claim")
    cooldown_claim = claim_c.get_cooldown_retry_after(ctx)
    beg_c = Bot.get_command("beg")
    cooldown_beg = beg_c.get_cooldown_retry_after(ctx)

    embed = nextcord.Embed(title="COOLDOWNS", colour=nextcord.Colour.from_rgb(255, 0, 0))

    if cooldown_claim >= 3600:
        cd = round(cooldown_claim)
        hours = str(cd // 3600)
        minute = int(cd // 60)
        minutes = str(minute % 60)
        seconds = str(cd % 60)
        embed.add_field(name="Claim", value=f"`{hours} hours {minutes} minutes {seconds} seconds`", inline=False)

    elif int(cooldown_claim) >= 60 and int(cooldown_claim) < 3600:
        cd = round(cooldown_claim)
        minutes = str(cd // 60)
        seconds = str(cd % 60)
        embed.add_field(name="Claim", value=f"`{minutes} minutes {seconds} seconds`", inline=False)

    elif int(cooldown_claim) < 60 and int(cooldown_claim) > 0:
        embed.add_field(name="Claim", value=f"`{cooldown_claim} seconds`", inline=False)

    elif int(cooldown_claim) == 0:
        embed.add_field(name="Claim", value="`Ready`", inline=False)

    if cooldown_beg >= 3600:
        cd = round(cooldown_beg)
        hours = str(cd // 3600)
        minute = int(cd // 60)
        minutes = str(minute % 60)
        seconds = str(cd % 60)
        embed.add_field(name="Beg", value=f"`{hours} hours {minutes} minutes {seconds} seconds`", inline=False)

    elif int(cooldown_beg) >= 60 and int(cooldown_beg) < 3600:
        cd = round(cooldown_beg)
        minutes = str(cd // 60)
        seconds = str(cd % 60)
        embed.add_field(name="Beg", value=f"`{minutes} minutes {seconds} seconds`", inline=False)

    elif int(cooldown_beg) < 60 and int(cooldown_beg) > 0:
        cd = round(cooldown_beg)
        embed.add_field(name="Beg", value=f"`{cd} seconds`", inline=False)

    elif int(cooldown_beg) == 0.0:
        embed.add_field(name="Beg", value="`Ready`", inline=False)
    await ctx.send(embed=embed)

Önce beg ve claim adlı komutları alıp cooldown'larını çektim. Ardından değerleri yuvarlayıp saat, dakika, saniye olacak şekilde ayırdım ve embed'lara yazdırdım.

Sorunum çözüldü fakat başkasına yardımı olur diye gönderdim. İyi sosyaller :)

NOT: nextcord eklentisi kullanıyorum.
 

Yeni mesajlar

Geri
Yukarı