Discord.py Embed kullanımı

Aşağıdaki gibi bir hata alıyorum.
TypeError: 'EmbedProxy' object is not callable
Yazmış olduğum kod ise şöyle.

my_img = discord.Embed(title=title, url=url, description=description, colour=0x00FF00)
                x = discord.File("./Main/Saved/saved.png")
                my_img.image(proxy_url="file:///C:/x/x/x/Main/Saved/saved.png", 
width=w, height=h)

konuyla alakalı bir çok kaynağa baktım fakat çözüme ulaşamadım burada kaynakçasının linkinide koyuyorum yardım edebilirseniz çok sevnirim =)

discord.py kaynakçası https://discordpy.readthedocs.io/en/latest/api.html?highlight=embedproxy#embed

Ben su hatayi aliyorum:

  File "a.py", line 2
    x = discord.File("./Main/Saved/saved.png")
    ^
IndentationError: unexpected indent

Indentasyonu duzelttikten sonra sunu:

  File "a.py", line 1, in <module>
    my_img = discord.Embed(title=title, url=url, description=description, colour=0x00FF00)
NameError: name 'discord' is not defined

import’lari duzelltikten sonra bunu:

  File "a.py", line 3, in <module>
    my_img = discord.Embed(title=title, url=url, description=description, colour=0x00FF00)
NameError: name 'title' is not defined

image metodu, embed sınıfına set_image metodu ile yerleştirdiğin görüntünün bir takım özelliklerini döndürür. Herhangi bir argüman vs. almaz.

import discord

embed = discord.Embed()
embed.color = 0xFF0000
embed.title = "title"
embed.description = "description"
embed.set_image(url="https://i.imgur.com/4AiXzf8.jpg")

print(embed.image)
>>> EmbedProxy(url='https://i.imgur.com/4AiXzf8.jpg')

Ne yapmaya çalıştığını açıklarsan daha iyi yardımcı olabilirim @Heyopa.

Resimdeki kahverengi olan resmi embed’in içerisinde paylaşmak istiyorum @adlgrbz

edit: resimleri bot web sayfasından aldığı bilgilerle kendisi oluşturuyor ve saved klasörüne atıyor sonrasında resmi alıp embed’in içinde msj olarak göndermesini istiyorum.

title ve digerlerini string olarak başka bir yerden otomatik oluşturuyor sorun olan kısım resim’i embed e nasıl ekleyeceğimi bilemedim

@Heyopa set_image metodu görselleri url yoluyla alıyor. Yani embed içine herhangi bir görsel dosyasını yerleştiremezsin. Eğer embed yukarıda, görselin alt tarafında ayrı biçimlerde olmasını tercih edersen. İlk önce embed mesajını gönder daha sonra görsel dosyasını gönder.

await ctx.send(embed=discord.Embed())
await ctx.send(file=discord.File())

@adlgrbz peki elimdeki resmi nasıl otomatik bir şekilde web’e yükleyip url’sini alabilirim. Yani diğer şekilde görüntü hoş durmuyor daha düzgün ve net bir görüntü elde etmek istiyorum da

Evet bunun için aklımda farklı bir yöntem var. Yazıyorum…

Şimdi biraz çakallık yapacağız :slight_smile: Görseli web ortamına yüklemek yerine direk botun bulunduğu bir sunucuda bir kanal açıp görseli o kanala göndereceğiz. Görsel Discord’a yüklendiğinde web’e yüklenmiş olacak dolayısıyla silinmediği sürece kendine ait bir URL’si olacak. Daha sonra bu mesajdan URL bilgisini alıp komutun verildiği kanala embed içinde gönderebiliriz.

Şu kodları yazdım örnek olması açısından. Sen kendine göre uyarlarsın.

@commands.command()
async def test(self, ctx):
    # Görsel dosyalarını göndereceğimiz kanalı ID'sini girerek tanımlıyoruz
    image_channel = await self.bot.fetch_channel(675019780561960960)
        
    file = discord.File("image.png")
    # Görseli tanımladığımız kanala mesaj olara gönderiyoruz ve mesaj
    # bilgilerini alabilmek açısından bir değişkene atıyoruz.
    image_message = await image_channel.send(file=file)
        
    embed = discord.Embed()
    # Mesajın eklerine ulaşıyoruz ve görselin URL'sini alıyoruz.
    embed.set_image(url=image_message.attachments[0].url)
    await ctx.send(embed=embed)

attachments metodu bir liste içinde döndüğü için ilk olarak liste içine girdim.

Metodlar: attachment.url, fetch_channel

Umarım anlamışsındır mantığını. Ek olarak görsellerin silindiği zaman URL adreslerinin kaybolduğunu düşünüyordum. Evet doğrudan ulaşılmıyor ama embed içinde görsel hala görünür durumda…

Ek: image_channel değişkenini fonksiyon dışında tanımlamak daha mantıklı olacaktır…

Siz yazarken benimde aklıma aynı şey geldi tam onunla alakalı uğraşıyordum ilaç oldu resmen çok teşekkür ederim. Şimdi benim yazma tarzımda bot online olarak hiç bir zaman discord’da gözükmüyor o yüzden async ve await özelliklerini kullanmıyorum ama örnek için çok teşekkür ederim şimdi inceleyip kendi koduma uyarlayacağım aşağıya bütün kodun github üzerinden paylaştığım linki koyacağım incelemek isterseniz diye. Discord kısmını upload etmedim ettiğimde editleyerek belirteceğim. :sweat_smile:

Github kod reposu = https://github.com/Heyopa/Heyopa-KillBot

Rica ederim bizde küçük bir topluluk için bot yazıyoruz. Kaynak kodları açık. Faydalanmak isterseniz buyurun…

https://github.com/ymy-discord/ymybot

Mutlaka bakacağım tekrardan çok teşekkür ederim

Rica ederim, kolay gelsin…

@adlgrbz aşağıdaki gibi bir hata alıyorum yukarıda verdiğiniz kodu neredeyse birebir koduma uyarladım ama işin içinden çıkamadım tekrar rahatsız ettim sizi de kusura bakmayın.

Ignoring exception in command heyobot:
Traceback (most recent call last):
  File "C:\Users\Batuh\AppData\Local\Programs\Python\Python38-32\lib\site-packages\discord\ext\commands\bot.py", line 892, in invoke
    await ctx.command.invoke(ctx)
  File "C:\Users\Batuh\AppData\Local\Programs\Python\Python38-32\lib\site-packages\discord\ext\commands\core.py", line 790, in invoke
    await self.prepare(ctx)
  File "C:\Users\Batuh\AppData\Local\Programs\Python\Python38-32\lib\site-packages\discord\ext\commands\core.py", line 751, in prepare
    await self._parse_arguments(ctx)
  File "C:\Users\Batuh\AppData\Local\Programs\Python\Python38-32\lib\site-packages\discord\ext\commands\core.py", line 670, in _parse_arguments
    transformed = await self.transform(ctx, param)
  File "C:\Users\Batuh\AppData\Local\Programs\Python\Python38-32\lib\site-packages\discord\ext\commands\core.py", line 516, in transform
    raise MissingRequiredArgument(param)
discord.ext.commands.errors.MissingRequiredArgument: message is a required argument that is missing.

Gerekli olan, eksik bir argüman olduğunu söylüyor. Kodu neredeyse birebir kullandığınızı söylediniz.
Kodu görmeden tam bir sonuca varamadım.

Dilersen kodu şuraya bi’ yükleyip at eğer çok uzunsa…
https://paste.ofcode.org/

https://paste.ofcode.org/jw62r7thgXnNNTcqdktLue
token ve idleri kaldırdım yasak sanırım paylaşması emin olmadığım için

edit: Bot aktif oluyor komutu girince yukarıda yazdığım hatayı veriyor.

Bu kısımda self.Bot yerine client kullanın sanarım siz bot değişkenini client olarak tanımladınız. Ve onun önündede await deyimi olmalı. Ayrıca tek argüman alıyor fonksiyon. Sadece channel ID’sini verin fonksiyona.

resim

Send işlemlerinde await deyimi kullanmalısın. message.channel.send yerine message.send kullan.

resim

Kodu çalıştırmadım sadece bakarak yorumladım. Bunları değiştir baklım sonuç ne olacak…
Ek olarak bu fonksiyon bir sınıf yapısı içerisinde mi? Eğer değil ise self deymini falan kaldır.

Bitti vallaha bitti oldu sonunda çalıştı. :crazy_face: github’da tamamen bütün kodlarıyla yayında tabii sizin yardımınız sayesinde @adlgrbz çok teşekkür ederim tekrar tekrar bir buçuk aydır uğraşıyordum