Discord botu sadece bir komuta cevap veriyor

AlphaDeniz

Hectopat
Katılım
24 Nisan 2021
Mesajlar
195
Çözümler
1
Daha fazla  
Cinsiyet
Erkek
Arkadaşlar, ben bir Discord botu yaptım Visual Studio Code uygulamasında.
Çok güzel oldu ama sadece 1 komut yazarsam ona cevap veriyor, yani başka komut ekleyip ona cevap vermesini sağlayamıyorum.
 
client = discord.Client()

@client.event
async def on_ready():
print('We have logged in as {0.user}'.format(client))

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

if message.content.startswith(''):
await message.channel.send('')
u

client.run
Bir de normalde
if message.content.startswith await message.channel.send kısmı yazıyordu ben sildim
 
Öncelikle geç cevap verdiğim için üzgünüm. Kodunuza baktım ve sizin botunuza hiç komut eklememiş olduğunuzu gördüm. Hangi kaynağı kullanıyorsanız tekrardan bir dikkatlice gözden geçirmenizi öneririm. Ayrıca kodlarınızı atarken lütfen Sosyal'de nasıl kod paylaşılır? rehberine uygun olarak paylaşın. Okunması inanın ki çok daha kolay oluyor. Şimdi, botlara nasıl komut eklendiğine gelirsek:

[CODE lang="python" title="Örnek komut"]@client.command()
async def deneme(ctx):
em = discord.Embed(description=':eek:range_square:'*25)
await ctx.send(embed=em)[/CODE]

Bu şekilde ekliyoruz. Her bir komut için aynı şekilde yeni bir fonksiyon açman ve fonksiyonları @client.command() olarak belirtmen gerekiyor. Diyelim ki botun prefix'i "!" olsun. !deneme yazdığında bu komut gerçekleşecek.

[CODE lang="python" title="Örnek komut 2"]@bot.command(name='embedyolla', aliases=['eyolla', 'şekilliyolla'])
async def deneme(ctx):
em = discord.Embed(description=':eek:range_square:'*25)
await ctx.send(embed=em)[/CODE]
Ayrıca hemen yukarıdaki koddaki gibi @bot.command()'a argümanları ekleyerek komutun ismini değiştirebilirsin. Aynı şekilde komuta birden fazla isim de bağlayabilirsin. Örneğin !embedyolla, !eyolla ve !şekilliyolla komutları yukarıdaki kodu çalıştıracak ve tamamen aynı şeyi yapacaklar.

[CODE lang="python" title="Örnek komut 3"]class Admin(commands.Cog):

@commands.command(name="ban")
async def ban(self, ctx, k_adi: discord.User = None, *, sebep: str = "Yargı!"):
log_kanali = bot.get_channel(BOT_LOG_KANALI)
msg = ctx.message
if k_adi is None or k_adi == ctx.author:
await ctx.send("Kendini banlayamazsın!")
return
await msg.delete()
await ctx.guild.ban(k_adi, reason=sebep)
await ctx.send(f"**{k_adi}** adlı kullanıcı banlandı. Adam ol.")
await log_kanali.send(f"**{ctx.author}** adlı yetkili, **{k_adi}** kullanısını banladı. Sebep: *{sebep}*")[/CODE]
Bir de örnek komut 3'te olduğu gibi komutları Cog'lara ekleyerek kendine kolaylık sağlayabilirsin. Ayrıca daha derli toplu bir kodun olmuş olur. Cog'ların eklediği ekstra özellikler de var tabii ama onları kendin araştırıp bulsan çok daha iyi olur.

Edit: Eklediğin her komuta ctx değerini vermelisin. Ctx, bota komut yollanan mesajla (örneğin !deneme) ilgili bilgileri depolayan context diye bir objedir. Mesajın içeriği, yollandığı kanal, sunucu ile ilgili bilgileri, yollayan kullanıcıyı ve birkaç ekstra bilgiyi sağlıyor.
 
Öncelikle geç cevap verdiğim için üzgünüm. Kodunuza baktım ve sizin botunuza hiç komut eklememiş olduğunuzu gördüm. Hangi kaynağı kullanıyorsanız tekrardan bir dikkatlice gözden geçirmenizi öneririm. Ayrıca kodlarınızı atarken lütfen Sosyal'de nasıl kod paylaşılır? rehberine uygun olarak paylaşın. Okunması inanın ki çok daha kolay oluyor. Şimdi, botlara nasıl komut eklendiğine gelirsek:

[CODE lang="python" title="Örnek komut"]@client.command()
async def deneme(ctx):
em = discord.Embed(description=':eek:range_square:'*25)
await ctx.send(embed=em)[/CODE]

Bu şekilde ekliyoruz. Her bir komut için aynı şekilde yeni bir fonksiyon açman ve fonksiyonları @client.command() olarak belirtmen gerekiyor. Diyelim ki botun prefix'i "!" olsun. !deneme yazdığında bu komut gerçekleşecek.

[CODE lang="python" title="Örnek komut 2"]@bot.command(name='embedyolla', aliases=['eyolla', 'şekilliyolla'])
async def deneme(ctx):
em = discord.Embed(description=':eek:range_square:'*25)
await ctx.send(embed=em)[/CODE]
Ayrıca hemen yukarıdaki koddaki gibi @bot.command()'a argümanları ekleyerek komutun ismini değiştirebilirsin. Aynı şekilde komuta birden fazla isim de bağlayabilirsin. Örneğin !embedyolla, !eyolla ve !şekilliyolla komutları yukarıdaki kodu çalıştıracak ve tamamen aynı şeyi yapacaklar.

[CODE lang="python" title="Örnek komut 3"]class Admin(commands.Cog):

@commands.command(name="ban")
async def ban(self, ctx, k_adi: discord.User = None, *, sebep: str = "Yargı!"):
log_kanali = bot.get_channel(BOT_LOG_KANALI)
msg = ctx.message
if k_adi is None or k_adi == ctx.author:
await ctx.send("Kendini banlayamazsın!")
return
await msg.delete()
await ctx.guild.ban(k_adi, reason=sebep)
await ctx.send(f"**{k_adi}** adlı kullanıcı banlandı. Adam ol.")
await log_kanali.send(f"**{ctx.author}** adlı yetkili, **{k_adi}** kullanısını banladı. Sebep: *{sebep}*")[/CODE]
Bir de örnek komut 3'te olduğu gibi komutları Cog'lara ekleyerek kendine kolaylık sağlayabilirsin. Ayrıca daha derli toplu bir kodun olmuş olur. Cog'ların eklediği ekstra özellikler de var tabii ama onları kendin araştırıp bulsan çok daha iyi olur.

Edit: Eklediğin her komuta ctx değerini vermelisin. Ctx, bota komut yollanan mesajla (örneğin !deneme) ilgili bilgileri depolayan context diye bir objedir. Mesajın içeriği, yollandığı kanal, sunucu ile ilgili bilgileri, yollayan kullanıcıyı ve birkaç ekstra bilgiyi sağlıyor.
Ben aslında o boş yere metin yazmıştım ama onu buraya eklerken sildim.
Ayrıca çok teşekkürler
[CODE lang="python" title="Bot"]client = discord.Client()

@client.event
async def on_ready():
print('We have logged in as {0.user}'.format(client))

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

if message.content.startswith('!selam'):
await message.channel.send('Merhaba')
u

client.run[/CODE]
Öncelikle geç cevap verdiğim için üzgünüm. Kodunuza baktım ve sizin botunuza hiç komut eklememiş olduğunuzu gördüm. Hangi kaynağı kullanıyorsanız tekrardan bir dikkatlice gözden geçirmenizi öneririm. Ayrıca kodlarınızı atarken lütfen Sosyal'de nasıl kod paylaşılır? rehberine uygun olarak paylaşın. Okunması inanın ki çok daha kolay oluyor. Şimdi, botlara nasıl komut eklendiğine gelirsek:

[CODE lang="python" title="Örnek komut"]@client.command()
async def deneme(ctx):
em = discord.Embed(description=':eek:range_square:'*25)
await ctx.send(embed=em)[/CODE]

Bu şekilde ekliyoruz. Her bir komut için aynı şekilde yeni bir fonksiyon açman ve fonksiyonları @client.command() olarak belirtmen gerekiyor. Diyelim ki botun prefix'i "!" olsun. !deneme yazdığında bu komut gerçekleşecek.

[CODE lang="python" title="Örnek komut 2"]@bot.command(name='embedyolla', aliases=['eyolla', 'şekilliyolla'])
async def deneme(ctx):
em = discord.Embed(description=':eek:range_square:'*25)
await ctx.send(embed=em)[/CODE]
Ayrıca hemen yukarıdaki koddaki gibi @bot.command()'a argümanları ekleyerek komutun ismini değiştirebilirsin. Aynı şekilde komuta birden fazla isim de bağlayabilirsin. Örneğin !embedyolla, !eyolla ve !şekilliyolla komutları yukarıdaki kodu çalıştıracak ve tamamen aynı şeyi yapacaklar.

[CODE lang="python" title="Örnek komut 3"]class Admin(commands.Cog):

@commands.command(name="ban")
async def ban(self, ctx, k_adi: discord.User = None, *, sebep: str = "Yargı!"):
log_kanali = bot.get_channel(BOT_LOG_KANALI)
msg = ctx.message
if k_adi is None or k_adi == ctx.author:
await ctx.send("Kendini banlayamazsın!")
return
await msg.delete()
await ctx.guild.ban(k_adi, reason=sebep)
await ctx.send(f"**{k_adi}** adlı kullanıcı banlandı. Adam ol.")
await log_kanali.send(f"**{ctx.author}** adlı yetkili, **{k_adi}** kullanısını banladı. Sebep: *{sebep}*")[/CODE]
Bir de örnek komut 3'te olduğu gibi komutları Cog'lara ekleyerek kendine kolaylık sağlayabilirsin. Ayrıca daha derli toplu bir kodun olmuş olur. Cog'ların eklediği ekstra özellikler de var tabii ama onları kendin araştırıp bulsan çok daha iyi olur.

Edit: Eklediğin her komuta ctx değerini vermelisin. Ctx, bota komut yollanan mesajla (örneğin !deneme) ilgili bilgileri depolayan context diye bir objedir. Mesajın içeriği, yollandığı kanal, sunucu ile ilgili bilgileri, yollayan kullanıcıyı ve birkaç ekstra bilgiyi sağlıyor.
Ayrıca o ne programlama dili?
 
Son düzenleme:

Yeni konular

Geri
Yukarı