Çözüldü Python Discord.py "Sa" yazınca "As" yazan komut

Bu konu çözüldü olarak işaretlenmiştir. Çözülmediğini düşünüyorsanız konuyu rapor edebilirsiniz.

Lykoss

Decapat
Katılım
23 Mayıs 2021
Mesajlar
957
Çözümler
6
Daha fazla  
Cinsiyet
Erkek
Meslek
Öğrenci
[CODE lang="python" title="A"]import discord
from discord.ext import commands
import random
from webserver import keep_alive
import saas
keep_alive()
Bot = commands.Bot(command_prefix='!m ')

@Bot.event
async def on_ready():
print("Bot çalışıyor." + str(Bot.user))
#------------------------------------------------------------------------

@Bot.command()
async def yardım(msg):
await msg.send('YARDIM')

@Bot.command()
async def musty(msg):
await msg.send('Merhaba ben MusTy')

#temizleme
@Bot.command()
async def temizle(ctx,amount=15):
await ctx.channel.purge(limit=amount)

#zaratma
@Bot.command()
async def zar(msg):
zar = random.randint(1,6)
await msg.send("Zar {} geldi.".format(zar))

#Ders programı
@Bot.command()
async def dersprogramı(msg):
await msg.send('A')

#Ödevler
@Bot.command()
async def ödevler(msg):
await msg.send('A')

#------------------------------------------------------------------------
Bot.run('(TOKEN)')
[/CODE]



[CODE lang="python" title="Sa-as"]import discord
from discord.ext.commands import Bot

TOKEN = "Sansür"

client = discord.Client()
bot = Bot(command_prefix="!m ")

@bot.event
async def on_ready():
print("Bot Hazır " + str(bot.user))


@bot.event
async def on_message(message):
if message.author == client.user:
return

if message.content == ("Sa"):
await message.channel.send("as")

if message.content == ("sa"):
await message.channel.send("as")

bot.run(TOKEN)
[/CODE]
Sınıf Sunucumuz için bir bot yapmıştım. Kullanıcı Sa yazınca As yazmasını istiyorum. Kendim yaptığımda !m komutları çalışmıyor. İkisi de nasıl çalışabilir?
 
Son düzenleme:
Çözüm
Her action'dan sonra break kullanmayın lütfen.
Python:
import discord
from discord.ext  import commands

client = discord.Client()
Bot = commands.Bot(command_prefix='!m ')
selam = ["selam","Selam","slm","SELAM"]


@Bot.event
async def on_ready():
 print("Bot çalışıyor." + str(Bot.user))
#------------------------------------------------------------------------

@Bot.event
async def on_message(message):
    if message.author.id == Bot.user.id:
        return
    if message.content in selam:
        await message.channel.send("Selam Gardaşım")
    await Bot.process_commands(message)


Bot.run("")

Şu kullandığınız for döngüsünü de anlayamadım ne gerek var. Python'da listeyi if a in list şeklinde kontrol edebiliyorsunuz.
Ha eğer mesaj içeriğinin herhangi bir yerinde selam bulunmasını kontrol etmek istiyorsan
Split = msg.content.split() kullan.
Cevap veremeden geçemeceğim.

1. ve 3. Söylediklerinizi bende söyleyecektim 2. Yeni öğrendim.
Şu an bilgisayarda olsam yardım edebilirdim, ama değilim :/
Bu gibi içsel söylemlerinizi yazarak açılan konunun yalnızca sayfa sayısını arttırmış olursunuz. Böyle yazmaktansa müsait olduğunuz anda ve hazır olduğunuzu hissettiğiniz anda yardım etmeye başlarsanız, herşey daha anlamlı ve güzel olabilir.
 
Selam mesajının oraya lower() eklerseniz yukardaki selam listesinden gereksiz büyük versiyonlarını kaldırabilirsiniz. Birisi Selam da yazsa SeLam da yazsa veya selam yazsa yine algılamasını sağlarsınız. Upper kısımlarınında lower olarak değiştirilmesi gerektiğini düşünüyorum. Bu aslında size kalmış fakat mesajı bir upper() yapıp daha sonra lower() yapmanız arada ı ve i gibi harflerin birbirine karışmasına sebep olabiliyor.

@Bot.command() larda parantezlerin içi boş. Bottada attığınız kodu kullanıyorsanız bu şekilde çalışmayacaktır. @bot.command(name="yardım") şeklinde yaparsanız örnek olarak o komut artık !m yardım yazdığınızda çalışacaktır. name="" kısımlarınıda küçük harflerle yazın, zaten büyük harfte kullansanız küçük harfte kullansanız çalışabilir hale gelicek komutlar.

Onun haricinde sürekli alt alta if kullanmak iyi olmayabilir. Birisi örneğin hem selam ı hemde günaydını aynı mesajda kullanırsa sizin botunuz art arda 2 mesaj atıcak, 2 sine yanıt olarak. Bunun olmasını istemiyorsanız, ilk if aynı kalsın ondan sonraki if leri elif olarak değiştirin. Bunu yaptığınızda sadece birine yanıt verdikten sonra diğer if lere bakmayacak.

Başka bir sorunda göremedim. Eğer varsada yazarsınız. Kolay gelsin.
Kodu düzenleyip aşşağı bırakabilirdim ama hazıra kaçıp bir şeyler öğrenmenizi engellemek istemedim.
Token çıktığı için sildim.
Python:
import discord
from discord.ext  import commands
import random
from webserver import keep_alive


client = discord.Client()
keep_alive()
Bot = commands.Bot(command_prefix='!m ')
selam = ["selam","Selam","slm","SELAM"]


@Bot.event
async def on_ready():
 print("Bot çalışıyor." + str(Bot.user))
#------------------------------------------------------------------------
@Bot.command()
async def yardım(msg):
  await msg.send('.')

@Bot.event
async def on_message(message):
 
  if message.content.upper() == ("MUSTY"):
    await message.channel.send(".")
 
  elif message.content.upper() == ("GÜNAYDIN"):
    await message.channel.send("Sabah şerifleriniz hayrolsun.")
 
  elif message.content.lower() == ("iyi geceler"):
    await message.channel.send("İyi geceler,tatlı rüyalar.")
 
  elif message.content.upper() == ("SA"):
        await message.channel.send("Aleyküm selam hoşgeldiniz.")
 
  for i in selam:
    if i in message.content:
      await  message.channel.send("Selam")
    break
  await Bot.process_commands(message)
 

@Bot.command()
async def musty(msg):
  await msg.send('Merhaba ben MusTy')

#temizleme
@Bot.command()
async def temizle(ctx,amount=15):
    await ctx.channel.purge(limit=amount)

#zaratma
@Bot.command()
async def zar(msg):
  zar = random.randint(1,6)
  await msg.send("Zar {} geldi.".format(zar))

#Ders programı
@Bot.command()
async def dersprogramı(msg):
  await msg.send('jpg')

#Ödevler
@Bot.command()
async def ödevler(msg):
  await msg.send('ÖDEV')

Bot.run("TOKEN")
@FazliBasturk bakabilir misiniz?
1648065661680.png

1648065723942.png
 
Son düzenleme:
Hocam 2 kere Sa'yı tetikleyen satır var. hangisini kullanıcaksanız diğerini silin. Üstteki tarafı silmeniz daha iyi olur. Alttaki bir çok kelimeyi tetiklemeyi sağlıyor. Üstteki selam = [] listesini düzenleyerek bir sürü selam varyantı yazabilirsiniz.

1648065874790.png
 
Hocam 2 kere Sa'yı tetikleyen satır var. Hangisini kullanıcaksanız diğerini silin. Üstteki tarafı silmeniz daha iyi olur. Alttaki birçok kelimeyi tetiklemeyi sağlıyor. Üstteki selam = [] listesini düzenleyerek bir sürü selam varyantı yazabilirsiniz.

Eki Görüntüle 1340456

Selam yazdığımda cevap alamıyorum. Listenin bir elemanına cevap veriyor. Diğerlerini yazdığımda cevap gelmiyor.

Üstekini sildim ama selam listesi içerisindeki elemanları yazdığımda cevap gelmiyor.
selam = ["selam","Selam","slm","SELAM"]
 
Son düzenleme:
Selam yazdığımda cevap alamıyorum. Listenin bir elemanına cevap veriyor. Diğerlerini yazdığımda cevap gelmiyor.
Hocam dediğim gibi yukarda da bahsettim. tüm upper() leri lower() yapıp yanındaki parantez içindekileri küçük harfle yazın. mesajı yukarda lower() a çevirdiğiniz için cümle küçük harfliye dönüşüyor. sizin kodda listeye bakıyor ama nerdeyse hiçbiri uymuyor çünkü sizin cümleniz Selam dan selam a dönüyor mesela ama yukardaki listede selam yok gibi.

1648066339194.png

Bunları lower() yapıp yanındakileride küçük harfle yazdıktan sonra üstteki listeyide şu şekilde küçük harflilerle yazın.
Eğer ordaki seçeneklerin hepsini lower() yaparsanız üstteki listeyi şöyle yapmanız yeterli olacaktır.

selam = ["selam", "slm"]

Bu sayede adam Selam da yazsa SELAM da yazsa SLM da yazsa harfleri bi büyük bi küçükte yazsa bot onu lower() ile selam yapıyor ve algılıyor.
 

Dosya Ekleri

  • 1648066285470.png
    1648066285470.png
    29,2 KB · Görüntüleme: 33
tüm upper() leri lower() yapıp yanındaki parantez içindekileri küçük harfle yazın. mesajı yukarda lower() a çevirdiğiniz için cümle küçük harfliye dönüşüyor.
Aslında tüm koşullu ifadeleri silse ve benzer kelimeleri yukarıdaki listeye eklese ve döngü ile de listenin elemanlarına ulaşsa(yine başa dönüyoruz 😅) belki de bahsettiğiniz bug'ı hiç yaşamamış olur 🤷‍♂️

Bu sayede adam Selam da yazsa SELAM da yazsa SLM da yazsa harfleri bi büyük bi küçükte yazsa bot onu lower() ile selam yapıyor ve algılıyor.

Böylelikle listeye daha az ve ayrıntıda boğulmadan eleman belirleyebilir. Doğru.
 
Hocam dediğim gibi yukarda da bahsettim. tüm upper() leri lower() yapıp yanındaki parantez içindekileri küçük harfle yazın. mesajı yukarda lower() a çevirdiğiniz için cümle küçük harfliye dönüşüyor. sizin kodda listeye bakıyor ama nerdeyse hiçbiri uymuyor çünkü sizin cümleniz Selam dan selam a dönüyor mesela ama yukardaki listede selam yok gibi.

Eki Görüntüle 1340479
Bunları lower() yapıp yanındakileride küçük harfle yazdıktan sonra üstteki listeyide şu şekilde küçük harflilerle yazın.
Eğer ordaki seçeneklerin hepsini lower() yaparsanız üstteki listeyi şöyle yapmanız yeterli olacaktır.

selam = ["selam", "slm"]

Bu sayede adam Selam da yazsa SELAM da yazsa SLM da yazsa harfleri bi büyük bi küçükte yazsa bot onu lower() ile selam yapıyor ve algılıyor.
[CODE lang="python" title="import discord from discord.ext import commands import random from webserver import keep_alive client = discord.Client() keep_alive() Bot = commands.Bot(command_prefix='!m ') selam = ["selam","Selam","slm","SELAM"] @Bot.event async def on_ready(): print("Bot çalışıyor." + str(Bot.user)) #------------------------------------------------------------------------ @Bot.command(name="yardım") async def yardım(msg): await msg.send('**!m musty |** Deneme komutudur.\n**!m zar |** Zar atar.\n**!m temizle |** Kendi de dahil mesajları temizler.(15 limit)\n**!m dersprogramı |** Ders programı drive dosyası linkini paylaşır.') @Bot.event async def on_message(message): if message.content.lower() == ("musty"): await message.channel.send("**!m musty |** Deneme komutudur.\n**!m zar |** Zar atar.\n**!m temizle |** Kendi de dahil mesajları temizler.(15 limit)\n**!m dersprogramı |** Ders programı drive dosyası linkini paylaşır.") elif message.content.lower() == ("günaydın"): await message.channel.send("Sabah şerifleriniz hayrolsun.") elif message.content.lower() == ("iyi geceler"): await message.channel.send("İyi geceler,tatlı rüyalar.") for i in selam: if i in message.content: await message.channel.send("Selam") break await Bot.process_commands(message) @Bot.command(name="musty") async def musty(msg): await msg.send('Merhaba ben MusTy') #temizleme @Bot.command(name="temizle") async def temizle(ctx,amount=15): await ctx.channel.purge(limit=amount) #zaratma"]import discord
from discord.ext import commands
import random
from webserver import keep_alive


client = discord.Client()
keep_alive()
Bot = commands.Bot(command_prefix='!m ')
selam = ["selam","Selam","slm","SELAM"]


@Bot.event
async def on_ready():
print("Bot çalışıyor." + str(Bot.user))
#------------------------------------------------------------------------
@Bot.command(name="yardım")
async def yardım(msg):
await msg.send('.')

@Bot.event
async def on_message(message):

if message.content.lower() == ("musty"):
await message.channel.send(".")

elif message.content.lower() == ("günaydın"):
await message.channel.send("Sabah şerifleriniz hayrolsun.")

elif message.content.lower() == ("iyi geceler"):
await message.channel.send("İyi geceler,tatlı rüyalar.")



for i in selam:
if i in message.content:
await message.channel.send("Selam")
break
await Bot.process_commands(message)


@Bot.command(name="musty")
async def musty(msg):
await msg.send('Merhaba ben MusTy')

#temizleme
@Bot.command(name="temizle")
async def temizle(ctx,amount=15):
await ctx.channel.purge(limit=amount)

#zaratma
@Bot.command(name="zar")
async def zar(msg):
zar = random.randint(1,6)
await msg.send("Zar {} geldi.".format(zar))

#Ders programı
@Bot.command()
async def dersprogramı(msg):
await msg.send('jpg')

#Ödevler
@Bot.command()
async def ödevler(msg):
await msg.send('.')

Bot.run(".")[/CODE]
Nerede hata var?
 
Aslında tüm koşullu ifadeleri silse ve benzer kelimeleri yukarıdaki listeye eklese ve döngü ile de listenin elemanlarına ulaşsa(yine başa dönüyoruz 😅) belki de bahsettiğiniz Bug'ı hiç yaşamamış olur 🤷‍♂️

İlk kez bot yaptığı için ilk önce şu anki amacını bitirebilmesine uğraşıyorum :D Onları Python'u öğrendikçe veya kodları inceledikçe neden böyle yapmıyorum diye kendide deneyebilir.
 
Python:
import discord
from discord.ext  import commands
import random
from webserver import keep_alive


client = discord.Client()
keep_alive()
Bot = commands.Bot(command_prefix='!m ')
selam = ["selam","Selam","slm","SELAM"]


@Bot.event
async def on_ready():
 print("Bot çalışıyor." + str(Bot.user))
#------------------------------------------------------------------------
@Bot.command(name="yardım")
async def yardım(msg):
  await msg.send('.')

@Bot.event
async def on_message(message):
  for i in selam:
    if i in message.content:
      await  message.channel.send("Selam")
    break
  await Bot.process_commands(message)
 

@Bot.command(name="musty")
async def musty(msg):
  await msg.send('Merhaba ben MusTy')

#temizleme
@Bot.command(name="temizle")
async def temizle(ctx,amount=15):
    await ctx.channel.purge(limit=amount)

#zaratma
@Bot.command(name="zar")
async def zar(msg):
  zar = random.randint(1,6)
  await msg.send("Zar {} geldi.".format(zar))

#Ders programı
@Bot.command()
async def dersprogramı(msg):
  await msg.send('hjpg')

#Ödevler
@Bot.command()
async def ödevler(msg):
  await msg.send('.')

Bot.run("")
Denemek için böyle yaptım.Sadece selam'a cevap geliyor.SELAM ya da slm yazınca gelmiyor.
Hocam soruma cevap verebilir misiniz müsait olduğunuzda? Fark etmişsinizdir amatörün de amatörüyüm.Aciliyeti yok. @FazliBasturk @Aerosteon
 
Son düzenleme:
async def on_message(message): for i in selam: if i in message.content: await message.channel.send("Selam") break await Bot.process_commands(message)
Python:
async def on_message(message):
    async for i in selam:
        if i in message.content:
            await  message.channel.send("Selam")
            break
    await Bot.process_commands(message)
Olarak düzenlermisiniz
 

Technopat Haberler

Geri
Yukarı