通过discord.py发送嵌入

2022-02-23 00:00:00 python discord discord.py

问题描述

我做了很多工作,通过带有discord.js的javascript,用discordAPI创建不和谐机器人。

我正在尝试使用python通过discord.py使用discord API和通过requests.py使用请求来创建我的第一个Discordbot。

我的目标是检查网站上的状态代码,当发送包含";状态代码的邮件时,它将在嵌入中回复网站的状态代码。

以下是我执行此操作的代码:

import discord
import requests
r = requests.get('redactedurl')
test = r.status_code
class MyClient(discord.Client):
    async def on_ready(self):
        print('Logged on as {0}!'.format(self.user))

    async def on_message(self, message):
        if (message.channel.id == redacted):
                if "status code" in message.content:
                    print('Message from {0.author}: {0.content}'.format(message))
                    
                    embed = discord.Embed(color=0x00ff00)
                    embed.title = "test" 
                    embed.description = '**Status Code:** {r.status_code}'
                    await message.channel.send(embed=embed)


client = MyClient()
client.run('redacted')

以下是我希望任何人都能回答的问题列表,以帮助我:)

  1. 正如您在此处看到的:https://gyazo.com/f6ae7082486cade72389534a05655fec,这只会在嵌入中发送";{r.status_code}";,而不是实际的状态代码,这说明我做错了什么?

  2. 当我在花括号中看到0是什么意思。例如,是否有人可以向我解释&q;(‘以{0}!’.format(self.user)身份登录)(&q;)?因为我是python和discord.py的新手,所以我对这一行感到困惑。我知道结果是什么,但请原谅我的无知,这一切都有必要吗?

  3. 在&Quot;Send(Embed=Embed)中,为什么不能直接将SEND(Embed)放入(&q>)?

  4. 最后,我还可以做些什么来改进代码?

如果您能帮忙,非常感谢!


解决方案

  1. 在该行中设置嵌入描述,将r.status_code输出为字符串,而不是它包含的值。尝试embed.description = '**Status Code:** {0}'.format(r.status_code)

  2. 0类似于应该在那里的值的索引。例如,'{1}'.format(10, 20)将打印出索引1处的值,在本例中为20。

    /li>
  3. 当您使用send(embed)时,机器人将以字符串形式发送嵌入内容,这看起来非常糟糕,如果您尝试发送它,您将明白我的意思。在本例中,我们必须指定要将该值赋给哪个参数。此函数接受kwargs,它们是关键字参数,在本例中,Embed是此send()函数中的kwargs之一。此函数还接受其他kwargs,如content, tts, delete_after, etc.都有文档记录。

  4. 您可以通过传入kwargs来简化创建嵌入,例如:discord.Embed(title='whatever title', color='whatever color') 如果您查看文档,discord.Embed()可以支持更多参数。

以下是指向文档的链接:https://discordpy.readthedocs.io/en/latest/index.html 如果搜索TextChannel并查找send()函数,则可以找到更多受支持的参数以及discord.Embed()

相关文章