为初学者介绍Discord的Embed简介


简介

本文是DiscordBot到来日历2020的第六天。
这次,我将介绍Embed消息,这是DiscordBot

的消息输出方法之一。

嵌入开始

如您所知,Embed是一种消息格式,可让您在Discord上布置并发送诸如链接,字符和图像之类的复杂元素。
但是,您使用Embed多少?
机器人创建的大多数初学者都可以使用纯文本消息来实现其第一个机器人的输出,如下所示: 1。

1
await message.channel.send("Hello!")

Embed有很多物品,有些初学者说很难引入,但是不吃就讨厌它是浪费!
一旦使用了嵌入消息,您将被其魅力所束缚,不会放手。
这次,似乎是一篇文章,将Embed传播给那些刚创建机器人并主要输出上述代码的人。

嵌入只能由漫游器使用

这是一个非常好的功能,因此我们人类很愿意使用它,但是当前人类用户帐户无法创建Embed。
能够自由操纵Embed是机器人的特权。 2

我想将Embed用于Bot

的输出

除非有特殊原因,否则我建议使用Embed来将消息输出到bot。
为什么漫游器可以正常发送消息时嵌入它们,这是
可见性绝对高于正常消息。
正如我们将在下一节中看到的那样,Embed具有许多使其适合机器人输出的功能。
您为什么不通过充分利用赋予机器人的特权功能来使其成为易于使用的机器人?

嵌入福利

可以输出多种类型的信息

您最多可以在

嵌入中添加25套field(即一组名称和值),并且可以以imagethumbnail两种尺寸嵌入图像。

可以紧凑地存储Bot信息

Embed的作者区域可以包含漫游器和开发者信息,包括链接。链接联系人可以使您的反馈更轻松,更流畅。

您可以使用框架颜色设置(稍后描述)直观地对消息类型进行分类

嵌入的功能之一是最左侧的细条。实际上,您可以自由更改此栏的颜色。
您可以通过切换条形的颜色来使消息类型更易于理解,例如绿色表示正常的执行结果,蓝色表示信息输出,红色表示错误消息。

(图像:以红色框显示错误消息的示例
image.png

嵌入组件

我试图列出Embed具有什么样的参数的主要元素。

<表格>

说明

上限


<身体>

标题

嵌入标题

256个字符

说明

嵌入描述。用小写字母布置

2048个字符

颜色

嵌入框架左栏颜色


作者

嵌入作者的信息区

256个字符

缩略图

小图像区域


字段

嵌入由一组名称和值组成的主要内容

字段数:25套名称:256个字符值:1024个字符

图片

大图像区域


页脚

页脚。您可以输入开发者信息,许可证等。

2048个字符


将示例代码

嵌入discord.py中

embed.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
import discord

client = discord.Client()
@client.event
# 今回はon_readyでログイン時に指定チャンネルにEmbedを送信させていますが、on_messageでユーザー入力に反応するときも要領は同じです。
async def on_ready():
    embed = discord.Embed( # Embedを定義する
                          title="Example Embed",# タイトル
                          color=0x00ff00, # フレーム色指定(今回は緑)
                          description="Example Embed for Advent Calendar", # Embedの説明文 必要に応じて
                          url="https://example.com" # これを設定すると、タイトルが指定URLへのリンクになる
                          )
    embed.set_author(name=client.user, # Botのユーザー名
                     url="https://repo.exapmle.com/bot", # titleのurlのようにnameをリンクにできる。botのWebサイトとかGithubとか
                     icon_url=client.user.avatar_url # Botのアイコンを設定してみる
                     )

    embed.set_thumbnail(url="https://image.example.com/thumbnail.png") # サムネイルとして小さい画像を設定できる

    embed.set_image(url="https://image.example.com/main.png") # 大きな画像タイルを設定できる

    embed.add_field(name="フィールド1",value="値1") # フィールドを追加。
    embed.add_field(name="フィールド2",value="値2")

    embed.set_footer(text="made by nashiroaoi", # フッターには開発者の情報でも入れてみる
                     icon_url="https://dev.exapmple.com/profile.png")

    channel = client_get_channel(CHANNEL_ID)

    await channel.send(embed=embed) # embedの送信には、embed={定義したembed名}

client.run(TOKEN)

让我们实际输出上面的Embed。
(图像URL是示例代码中的占位符,因此我在其中输入了特定值)
embed

借用的图像URL用于测试
缩略图:维基百科python徽标
图片:Mikumo,这是壁纸 3

嵌入栏位详细说明

字段元素,它是Embed的主要内容之一。
Discord.py还允许您执行各种便于构建字段元素的操作。
让我们来看一些。

add_field()-添加字段

要将

字段添加到Embed,请使用add_embed()方法。此方法采用三个关键字参数:namevalueinlineinline的类型为bool,当它变为False时,一行上将放置1个字段。默认值为True

<表格>

内联= True

内联= False


<身体>

image.png

image.png


insert_field_at()-插入字段

add_field()创建的新字段将始终添加到嵌入的末尾。如果要在已创建的字段之间插入字段,请使用insert_field_at()方法。
除了与add_field()方法相同的三种类型的参数外,它还使用一个index参数指定插入点。
请注意,index的值从0开始。
即,第一个字段(第一个)为0,第二个字段为1。

1
2
3
embed.add_field(name="name1", value="value1")  # フィールド1を追加
embed.add_field(name="name2", value="value2")  # フィールド2を追加
embed.insert_field_at(1, name="name3", value="value3")  # フィールド3を先頭から 2 番めに挿入

结果,即使插入的field3是在field2之后写入的,它也位于开头的第二个位置。
image.png

set_field_at()-编辑字段

此方法用新数据覆盖添加的字段。除了三个add_field()参数外,还应使用一个index参数指定要覆盖的字段。

remove_field()-删除字段

此方法删除已创建的字段。使用index参数指定要删除的字段。

clear_fields()-删除所有字段

删除"嵌入"中的所有字段。它不带参数。

嵌入上瘾

嵌入很方便,但是使用它时需要注意一些要点。
让我们看一下Embed周围的麻烦,重点介绍我过去真正的经历。

嵌入式显示器在智能手机

上折叠

在智能手机(android)应用上显示Embed输出时,Embed显示可能会损坏,并且在垂直方向上会变得非常长。
不幸的是,就我的研究而言,我找不到解决方法。

我收到错误的请求错误,无法发送

有几种可能的原因。

字符数限制

嵌入也有一些限制,例如文本消息限制(2000个字符),以防止传输大量信息。
除了Embed组件的字符数限制外,如果Embed中的字符总数超过6000个字符,则会发生错误请求,您将无法发送。

缺少字段信息

add_field()方法需要两种类型的参数,namevalue(默认值True应用于内联)。
如果要表达一个要点,并尝试仅添加name,仅value字段,则会收到错误请求。
即使您想表达要点,也必须在两者中都添加一些价值。
我经常做的一件事是将表情符号和项目符号放在name中。

我想嵌入本地图像

嵌入图像缩略图和图像需要大量工作才能嵌入本地图像,因为图像是由URL指定的。
让我们看看实际的流程。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import discord

client = discord.Client()

@client.event
async def on_ready():
    embed = discord.Embed(title="Local Image") # まずは普通にEmbedを定義
    fname="upload.png " # アップロードするときのファイル名 自由に決めて良いですが、拡張子を忘れないように
    file = discord.File(fp="ローカル画像パス",filename=fname,spoiler=False) # ローカル画像からFileオブジェクトを作成
    embed.set_image(url=f"attachment://{fname}") # embedに画像を埋め込むときのURLはattachment://ファイル名
    channel = client_get_channel(CHANNEL_ID)
    await channel.send(file=file, embed=embed) # ファイルとembedを両方添えて送信する

client.run(TOKEN)

有关更多信息,请参考官方参考。

附言

这是一个草率的结局,原产地没有变化,但我正在考虑在上面涂上刷子。
使用Embed一点也不困难。如果是这样,我认为那是压倒性的,因为我无法弄清楚Embed的组成。
嵌入允许您设置许多项目,但不必使用所有元素。在某些情况下,有些元素不是必需的,并且根据输出内容,应省略这些元素,以免弄乱它们。
我认为不是从一开始就充分使用它,而是从一个简单的方法开始,将您要输出的内容嵌入到最低限度,这是一个好主意。
如果本文触发了纯文本消息,则全部与作者有关??。

还算早,但是圣诞快乐!

  • 并非纯文本消息不好。但是,这一次是一篇Embed的宣教文章,所以让我降低一下。 ?

  • 当人类用户发送链接时,链接目标的标题和缩略图会自动生成为Embed,但是不能说是自由操纵的,因此是不可能的。 ?

  • 这不是ConoHa项目。这是我的爱好。 ?