将按钮组件添加到消息(discord.py)

2022-01-14 00:00:00 python api discord.py

问题描述

看到 this(消息组件)在 discord 的 API 参考中是否有任何方法可以使用 python 实现它?

I was wondering after seeing this (message components) on discord's API reference if there was any way to implement it using python ?

我尝试创建一个 json 数组并将其传递到我的消息中,但无法使其工作.

I tried making a json array and passing it in my message but couldn't make it work.

我也尝试查找 python 的参考,但找不到任何东西.

I also tried looking on the reference for python but couldn't find anything.

这是我的代码

components= [
  {
    "type": 2,
    "label": "Clear les kick",
    "style": 4,
    "custom_id": "clear_kick_button"
  }
]
@slash.slash(name="kicked", description="Voir qui a été kick et combien de fois.", guild_ids=guild_id)
async def kicked(ctx):
  await ctx.send("test", components= components)

如果你有任何信息谢谢你如果你分享它.

If you have any informations thank you if you share it.


解决方案

新答案


Discord.py 2.0 允许使用按钮和下拉菜单,尽管它不支持斜杠命令.请改用 Discord.py 2.0,但如果您需要斜线命令,请查看 discord_slash.

升级到 Discord.py 2.0:

To upgrade to Discord.py 2.0:

窗户:

pip install -U git+https://github.com/Rapptz/discord.py

MacOS 和 Linux:

MacOS and Linux:

pip3 install -U git+https://github.com/Rapptz/discord.py

旧答案:

(此答案已过时.)


到目前为止,您可以获得一个名为 discord_components 的库来使用按钮.

要安装这个库,请使用 pip install --upgrade discord-components (有时命令是 pip3 install --upgrade discord-components).

Old Answer:

(This Answer is OUTDATED.)


As of right now, you can get a library called discord_components to use buttons.

To install this library, use pip install --upgrade discord-components (Sometimes the command would be pip3 install --upgrade discord-components).

要导入 Discord 组件按钮,请使用

To import Discord Component Buttons, use

from discord_components import DiscordComponents, Button, ButtonStyle, InteractionType

然后只需将这段代码添加到机器人的 on_ready() 中:

Then just add this code in the bot's on_ready():

DiscordComponents(bot, change_discord_methods=True)

(确保将 bot 替换为您的机器人名称,与 @something.command() 使用的名称相同)

(Make sure to replace bot with the name of your bot, the same one you use for @something.command())

要为消息添加按钮,请执行以下操作:

To add a button to a message, do this:

await ctx.send(type=InteractionType.ChannelMessageWithSource, content="Message Here", components=[Button(style=ButtonStyle.URL, label="Example Invite Button", url="https://google.com"), Button(style=ButtonStyle.blue, label="Default Button", custom_id="button")])

(需要留言)

要在单击按钮时执行某些操作,您可以执行以下操作:

To do something when the button is clicked, you can do something like this:

@bot.event
async def on_button_click(interaction):
    if interaction.component.label.startswith("Default Button"):
        await interaction.respond(type=InteractionType.ChannelMessageWithSource, content='Button Clicked')

这种方法甚至可以在重新启动后继续存在!

This method even survives reboots!

如果您需要,我为您整理了一个示例:

Here's an example I put together for you if you need it:

import discord
from discord.ext import commands
from discord_components import DiscordComponents, Button, ButtonStyle, InteractionType

bot = commands.Bot(command_prefix=prefix, description="Desc", help_command=None)

@bot.event
async def on_ready():
    DiscordComponents(bot, change_discord_methods=True)
    await bot.change_presence(activity=discord.Game(name=f"{prefix}help"))
    print("Bot has successfully logged in as: {}".format(bot.user))
    print("Bot ID: {}
".format(bot.user.id))

@bot.command()
async def button(ctx):
    await ctx.send(type=InteractionType.ChannelMessageWithSource, content="Message Here", components=[Button(style=ButtonStyle.URL, label="Example Invite Button", url="https://google.com"), Button(style=ButtonStyle.blue, label="Default Button", custom_id="button")])

bot.run("token")

希望对您有所帮助!

提示:如果您希望按钮在一行中,请使用 [[]] 而不是仅使用 [] 例如:[[btn1, btn2],[btn3, btn4]] 将导致:

Tip: If you want the buttons to be in one row, use [[]] instead of just [] for Example: [[btn1, btn2],[btn3, btn4]] will result in:

[btn 1][btn 2]
[btn 3][btn 4]

额外提示:您也可以将变量设置为按钮然后发送变量

Extra Tip: You can also set a variable as a button then send the variable

相关文章