Çö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.
Hata veriyor. Ignoring exception in on_message Traceback (most recent call last): File "/home/runner/FirstGlamorousMetric/venv/lib/python3.8/site-packages/discord/client.py", line 343, in _run_event await coro(*args, **kwargs) File "main.py", line 23, in on_message async for i in selam: TypeError: 'async for' requires an object with __aiter__ method, got list
 
Hata veriyor. Ignoring exception in on_message Traceback (most recent call last): File "/home/runner/FirstGlamorousMetric/venv/lib/python3.8/site-packages/discord/client.py", line 343, in _run_event await coro(*args, **kwargs) File "main.py", line 23, in on_message async for i in selam: TypeError: 'async for' requires an object with __aiter__ method, got list

Eski düzene geri dönüp bilen birinden yardım beklemeniz gerekecek benim bilgim buraya kadar maalesef 😕. Birden fazla asenkron çalışan fonksiyonlar var bunların nasıl çalıştığını kavradığınız vakit await anahtar kelimesininde neden kullanıldığını anlamış olacaksınız. Neden asenkron çalışan bir for döngüsünü soracak olursanız internetten bakınırken sanırım işe yarayabilir düşüncesiyle (denemeden) iletmek istedim fakat hata yaptım. Sizinde bir an önce bot yapmaktansa ya baştaki dediğim gibi birinin cevap vermesini bekleyin ya da Python'u öğrenip kendiniz üstesinden gelin. Çünkü sizin bu forumda açtığınız konuları incelediğimde emeklemeden direk koşmaya çalıştığınızı görür gibiyim. Kolay gelsin. Yine herhangi bir yardım olursa destek vermeye yine bilgim doğrusunda hazırı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.
 
Son düzenleyen: Moderatör:
Çözüm
for döngüsünü de anlayamadım ne gerek var
Genelde liste işlemlerinde bir for döngüsü kullanılır ve liste elemanlarına oluşturulan döngünün değişkeni sayesinde erişildiğinden 3. sayfada 26.post olarak verdiğim listedeki elemanın olup olmadığını kontrol etme örneklerini hatta bu örneklerin çoğaltılabileceği bunlarında "şunlar şunlar OLABİLİR"liğini açıklamıştım görmüşsünüzdür.
if message.content in selam: await message.channel.send("Selam Gardaşım")
Bu da o örneklerin arasına girebilecek kalitede bir kod.

Test etmek gerekiyor. Umarım for döngüsü ile liste içinde bir işlem yapmaktansa bir koşul ifadesi işe yarar.
 
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.
Çözüm bu emeği geçenlere teşekkür ederim.
[CODE lang="python" title="kodun_bilmemkaçıncı_son_hali" highlight="20-26"]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 = ("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.author.id == Bot.user.id:
return
if message.content.lower() in selam:
await message.channel.send("Selamlar efenim.")
await Bot.process_commands(message)


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

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

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

if message.content.upper() == ("SA"):
await message.channel.send("Aleyküm selam hoşgeldiniz.")
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("<token>")[/CODE]
Lower kullanmamın sebebi slm'ın farklı hallerini yazmaya üşenmem.Şöyle de yapılabilir:
selam = ("selam","Selam","sLm","Slm"..........)
 

Technopat Haberler

Yeni konular

Geri
Yukarı