通过discord.py发送嵌入

时间:2020-02-16 05:02:52

标签: python discord discord.py

如果这个问题让您畏缩,我先向您道歉:)

我一直在做很多工作,通过带有discord.js的javascript用discord api创建discord机器人。

我正在尝试通过discord.py使用discord api和通过request.py的请求使用python创建我的第一个discord机器人。

我的目标是检查网站上的状态码,并且当发送包含“状态码”的消息时,它将以嵌入的形式回复该网站的状态码。

这是我的代码:

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时,它是什么意思。例如,有人可以向我解释“('以'{0}登录!'。format(self.user)))”吗?由于我是python和discord.py的新手,所以我对整行感到困惑。我知道结果是什么,但请原谅我的无知,这是否有必要?

  3. 在“ send(embed = embed)”中,为什么不能仅将send(embed)嵌入?

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

非常感谢您能提供帮助!

3 个答案:

答案 0 :(得分:0)

确定您的问题清单:

  1. 您不是在格式化{r.status_code},而是将其作为字符串发送,这就是为什么它如此显示。要解决此问题,您只需添加1“ f”。
embed.description = f'**Status Code:** {r.status_code}'

或者,如果您想使用一致的格式设置字符串格式:

embed.description = '**Status Code:** {0}'.format(r.status_code)
  1. 在Python中,字符串中的大括号“ {}”可用于格式化。这可以通过多种方式完成,包括您在代码中的操作方式。如果要格式化字符串中的不同值,str.format()可以采用多个参数。 0只是您要为其使用参数的索引。
  2. 我对discord库不太熟悉,但是快速浏览了一下文档,看来如果这样做,它将带上embed变量并将其作为{{1 }}变量。从而将其作为普通邮件发送,而不是将其嵌入。
  3. 我个人更喜欢f字符串进行格式化,因为它使您的代码更易于阅读。我不能真正评论您对discord库的使用,但除此之外,您的代码看起来还不错!纯粹出于美观/可读性考虑,我会在导入与定义变量之间以及变量与类之间留空线。

答案 1 :(得分:0)

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

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

  3. 当您使用send(embed)时,该机器人最终将以字符串形式发送嵌入,该字符串看起来非常不正确,如果尝试发送它,您将明白我的意思。在这种情况下,我们必须指定将值分配给哪个参数。此函数接受kwargs作为关键字参数,在这种情况下,embed是此kwargs函数中的send()之一。此功能也接受其他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()的参数。

答案 2 :(得分:0)

这是一个例子!

import discord

client = commands.Bot(command_prefix = '~')

@client.command()
async def embed(ctx):
   embed=discord.Embed(title="Hello!",description="Im a embed text!")
await ctx.send(embed=embed)

client.run("TOKEN")