Aynı sınıfta olan iki methodu,birini birinde çağırırken argüman eksik/Fazla hataları alıyorum.Discord.py

Metodlarım ve parametreleri şunlar:

@commands.command(description="Mutes the specified user.")
@commands.has_permissions(manage_messages=True)
async def mute(self,ctx, member: discord.Member, time = None, *, reason = None):
       try:

          seconds = float(time[:-1])  # Gets the numbers from the time argument, start to -1
          duration = time[-1]  # Gets the timed maniulation, s, m, h, d
          if duration == "s":
              seconds = seconds * 1
          elif duration == "m":           #Bu ifadeler bu methodun küçük bir  bölümü.
              seconds = seconds * 60
          elif duration == "h":
              seconds = seconds * 60 * 60
        
               

Yukarıdaki ve aşağıdaki iki methodlarda aynı sınıftalar.

Amacım discord server’ında bir kullanıcı 3 ten fazla küfür yazdığında yukarıdaki mute metodunu kullanarak onu belli bir süre için susturmak.Discord Botum her mesaja bakıyor ve küfür varsa kufur_sayisi adlı sınıf değişkenini 1 arttırıyor.

@commands.Cog.listener()
async def on_message(self,message):

    if self.swearword_count[str(message.author.id)] > self.kufur_sayisi: 
   
        await message.author.send("Sunucudan Çok fazla küfür ettiğiniz için susturuldunuz.")
        await self.mute(message.guild,message.author, "1d", "For too many badwords")  #1         #Bu satır çalıştığında 'TypeError: mute() takes from 3 to 4 positional arguments but 5 were given' hatasını alıyorum.
                           

Yukarıdaki ifade çalıştığında yukarıda yazan hatayı alıyorum.

Ama en sağında #1 yazan satırda olan argümanlardan soldan ilk olan message.guild ifadesini silip, await self.mute(message.author, “1d”, “For too many badwords”) şeklinde methodu çağırdığımda
'could not convert string to float: ‘For too many badwords’ hatasını alıyorum buradan;

“For too many badwords” argümanının time parametresine denk geldiğini görüyoruz.Yani ctx parametresi için birinde bizim argümanları kullanıyor birinde kullanmıyor.

Programın mute methodunu düzgünce çağırmasını nasıl sağlarım acaba?OOP bilen arkadaşlar yardımcı olabilir misiniz lütfen,teşşekkür ederim.

reason'i, *'dan sonra geldigi icin, keyword argumani olarak vermen lazim (reason=“hede”).

Edit: Arguman, parametre degil.

Yani hocam ‘*’ dan sonra gelen parametreler keyword mu oluyor yoksa reason = None şeklnde verildiği için mi.Cevap için teşşekkürler bu arada :smiley:

Isimle verilenler keyword argument oluyor. *'dan sonra geldigi icin isimle verilmek zorunda. Default degeri (None) tanimlandigi icin verilmek zorunda degil. 8. Compound statements — Python 3.10.0 documentation

Teşşekkür ederim :slight_smile: anladım