Python ile Discord botunda eğik çizgi komutlarının bekleme sürelerini alma

Katılım
16 Temmuz 2021
Mesajlar
528
Çözümler
11
Yer
Ankara - Türkiye
Daha fazla  
Cinsiyet
Erkek
Meslek
Öğrenci
Merhaba. Uzun zamandır bir bot üzerinde çalışıyorum. Takıldığım yer ise komutun bekleme süresini çekme. Kütüphane olarak nextcord (bkz: documentation) kullandım. Ayrıyeten bekleme süresi için cooldowns (bkz: documentation) kütüphanesini kullandım.

Komutlar ve bekleme süresi için gerekli kütüphaneler:
Python:
import nextcord
from nextcord import Interaction, SlashOption, ChannelType
from nextcord.abc import GuildChannel
from nextcord.ext import commands, tasks
import cooldowns
from cooldowns import SlashBucket, CallableOnCooldown, CooldownBucket, cooldown, get_cooldown
Hepsini indirdim ve gayet stabil bir şekilde çalışıyor.

Eğik çizgi komutu olarak şöyle bir şey yazdım ve bekleme süresini ekledim:
Python:
@Bot.slash_command(guild_ids=[test_guild], name="test", description="test")
@cooldowns.cooldown(1, 60, bucket=cooldowns.SlashBucket.author, cooldown_id="test_cd")
async def test(interaction: Interaction):

1 dakikalık bekleme süresi gayet düzgün çalışıyor. Ayrıyeten komut bekleme süresinde iken çalıştırıldığında hata çıktısını da aldım fakat istediğim şeye halen ulaşamadım.

Bunun gibi bir tane daha komut olduğunu varsayalım. Onun da cooldown_id'si test_cd2 , zamanı 1 saat olsun:
Python:
@Bot.slash_command(guild_ids=[test_guild], name="test2", description="test2")
@cooldowns.cooldown(1, 3600, bucket=cooldowns.SlashBucket.author, cooldown_id="test_cd2")
async def test2(interaction: Interaction):

Ben bu test_cd ve test_cd2 id'si verilmiş olan iki bekleme süresini tek bir komut altında toplamak istiyorum.
Örnek:
technopat.jpg


Zaman dilimlerine ayırmaya gerek yok. sadece saniye olarak alsam yeter. Bunu yapmak için sanırım burayı anlamak gerekiyor. Pek anlamış değilim açıkçası. Bunun nerede kullanılması gerektiği hakkında pek bir bilgim yok.

Eğer ki bu farklı bir kütüphane ile yapılabilir ise alternatiflere yönelebilirim. Her türlü öneriye açığım.

Şimdiden yardımlarınız için teşekkürler.
 
Test1 ve test2 fonksiyonlarındaki cooldownların anlık değerini tek bir fonksiyon üzerinde görüntülemek istiyorsunuz yanlış mıyım?
Yani test1 kullanmak için 38 dakikam kalmış olsun test2 kullanmak için 12 dakikam kalmış olsun. Yani cooldowns fonksiyonum da test1 = 38, test2 = 12 verecek.

Kesinlikle pycord kütüphanesine geçmelisiniz. Eğer tamam diyorsanız yardımcı olurum.
 
Son düzenleme:
Test1 ve test2 fonksiyonlarındaki cooldownların anlık değerini tek bir fonksiyon üzerinde görüntülemek istiyorsunuz yanlış mıyım?
Yani test1 kullanmak için 38 dakikam kalmış olsun test2 kullanmak için 12 dakikam kalmış olsun. Yani cooldowns fonksiyonum da test1 = 38, test2 = 12 verecek.

Kesinlikle pycord kütüphanesine geçmelisiniz. Eğer tamam diyorsanız yardımcı olurum.
Öneri için teşekkür ederim. Gayet doğru anlamışsınız.

Aslında ilk başta nextcord ile pycord arasında kalmıştım. Sonrasında nextcord seçtim.

Şu anki bot üzerinde pycord'a geçmem pek mümkün gözükmüyor çünkü yaklaşık 3000 satır kod bulunuyor. Sonraki hedefim ise eğer bir tane daha bot yaparsam pycord kullanmak.

Soruna gelecek olursak: Database işi ile çözdüm. Ağır çalışacağını biliyorum fakat profestonel bir şey olmadığı için sıkıntı değil. Kişisel sunucum için kullanacağım zaten.

Pycord ile sorunum olursa bilgilendiririm. Tekrardan teşekkürler.
 
O zaman nextcord'da;
get_command ve
get_cooldown_retry_after fonksiyonlarına bakın. Database ile işiniz kalmaz. Tabi nextcordda varsa. get command ile komutu alıp retry_after ile çekebiliyorsunuz süreyi. Tabii pycordda cooldown için ayrı bir modül yok. Nextcordda olduğu için dediğim fonksiyonlar olmayabilir.
 
O zaman nextcord'da;
get_command ve
get_cooldown_retry_after fonksiyonlarına bakın. Database ile işiniz kalmaz. Tabi nextcordda varsa. get command ile komutu alıp retry_after ile çekebiliyorsunuz süreyi. Tabii pycordda cooldown için ayrı bir modül yok. Nextcordda olduğu için dediğim fonksiyonlar olmayabilir.
Evet nextcord'da var fakat ctx: commands.Context gerektiriyor. Daha önce yapmıştım fakat eğik çizgi komutlarına geçince ctx yerine interaction kullanmak zorunda kaldım. O da interaction kabul etmiyor.

Tek seçenek database gibi.
 

Yeni konular

Geri
Yukarı