python - 将按钮组件添加到消息(discord.py)
问题描述
在 discord 的 API 参考上看到这个(消息组件)后,我想知道是否有任何方法可以使用 python 来实现它?
我尝试制作一个 json 数组并将其传递到我的消息中,但无法使其工作。
我还尝试查看 python 的参考,但找不到任何东西。
这是我的代码
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)
如果你有任何信息谢谢你如果你分享它。
解决方案
新答案
Discord.py 2.0 允许使用按钮和下拉菜单,尽管它不支持斜线命令。请改用 Discord.py 2.0,但如果您需要斜杠命令,请查看discord_slash
.
要升级到 Discord.py 2.0:
视窗:
pip install -U git+https://github.com/Rapptz/discord.py
MacOS 和 Linux:
pip3 install -U git+https://github.com/Rapptz/discord.py
老答案:
(此答案已过时。)
截至目前,您可以获得一个调用discord_components
按钮的库。
要安装这个库,请使用pip install --upgrade discord-components
(有时命令是pip3 install --upgrade discord-components
)。
要导入 Discord 组件按钮,请使用
from discord_components import DiscordComponents, Button, ButtonStyle, InteractionType
然后只需将此代码添加到机器人的on_ready()
:
DiscordComponents(bot, change_discord_methods=True)
(确保替换bot
为您的机器人名称,与您使用的名称相同@something.command()
)
要向消息添加按钮,请执行以下操作:
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.event
async def on_button_click(interaction):
if interaction.component.label.startswith("Default Button"):
await interaction.respond(type=InteractionType.ChannelMessageWithSource, content='Button Clicked')
这种方法甚至可以在重新启动后幸存!
如果您需要,这是我为您整理的示例:
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: {}\n".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]] 将导致:
[btn 1][btn 2]
[btn 3][btn 4]
额外提示:您也可以将变量设置为按钮,然后发送变量
推荐阅读
- python - ModuleNotFoundError:加载到我的 Heroku 应用程序时没有名为“streamlit”的模块
- c# - System.InvalidOperationException:'没有找到类型 CommandContext 的类型读取器,必须指定一个'
- python - 计算某些文本中多字子串的出现次数
- assembly - 使用时间和对齐 NASM 指令将指令放置在复位向量指向的地址中
- xbee - xbee 使用哪些渠道进行通信?
- azure-active-directory - 无法在 Excel Web Addin VS2019 中打开弹出窗口
- api - TrendMicro Deep Security 11 - 根据反恶意软件检索处于“受保护”状态的计算机
- html - 这可能与线性背景吗?
- php - PHP 导入到 Wordpress 脚本卡在 504Null 错误
- node.js - 仅在刷新页面时令牌过期时注销?为什么?