參考讀物: 官方
class SelectView(discord.ui.View):
def __init__(self, *, timeout=180):
super().__init__(timeout=timeout)
@discord.ui.select(placeholder="選擇", min_values=1, max_values=1, options=[
discord.SelectOption(label="A", description="說明a"),
discord.SelectOption(label="B", description="說明b"),
discord.SelectOption(label="C", description="說明c"),
])
async def select_callback(self, select, interation):
await interation.response.send_message(f"收到你的選擇{select.values[0]}")
@Bot.command(name="選單")
async def click_click(ctx):
await ctx.send('選單題目', view=SelectView())
結果:
此與前篇相同,
使用 discord.ext.commands 註冊了 command
並在回傳時,原本
await ctx.send("回傳的文字")
變成了...
await ctx.send("回傳的文字", view=你宣告的discord.ui.view)
並且,discord.ui.view
使用 class 宣告內容
真正的選單主體 @discord.ui.select
參數 | 內容 |
---|---|
select_type | 創建的選擇類型 |
custom_id | 選擇選單ID。 |
placeholder | 未選擇任何內容時顯示的文字 |
min_values | 此選擇選單最少選擇的數量1~25 |
max_values | 此選擇選單最多選擇的數量1~25 |
options | 選項列表 (List[discord.SelectOption]) |
channel_types | 可以在此菜單中選擇的頻道類型列表 |
disabled | 是否禁用 |
row | 按鈕所屬相對行數,DC組件最多五行 |
@discord.SelectOption
參數 | 內容 |
---|---|
label | 向用戶顯示的值 |
value | 不會向用戶顯示的值 |
description | 附加說明 |
default | 是否默認選擇此選項 |
emoji | 符號 |
而 callback 回傳 interaction
在按下按鈕後,不想讓按鈕再有作用時,在@discord.ui.select callback 宣告
並在回傳結果時,把更改的參數再回傳回去顯示
class ButtonView(discord.ui.View):
@discord.ui.select(placeholder = "選擇", min_values=1, max_values=1, options=[
discord.SelectOption(label="A", description="讓他告訴你未來一年間發生的事"),
discord.SelectOption(label="B", description="讓他告訴你明天發生的事"),
discord.SelectOption(label="C", description="讓他什麼都不要說")
])
async def select_callback(self, select:discord.ui.Select, interaction:discord.Interaction):
select.disabled = True
msg = None
if select.values[0] is "A": msg = "你的外表看起來隨和、好相處,但內裡其實有點固執,意志非常的堅強,面對自己在乎的事情會非常執著。"
elif select.values[0] is "B": msg = "你的個性有點急躁,想到什麼就做什麼,但也非常的單純,從來不記仇,社交能力很強,是大家的開心果。"
else : msg = "你總是非常的小心謹慎,個性有點內向,不太懂得如何表達自己的情感面,很多時候你更喜歡自己待著,會讓你感到相較自在。"
await interaction.response.edit_message(content=msg ,view=None)
我是google "interaction.response.edit_message" 時查到這篇來的
我想請問一下如何編輯訊息
我看內文的示範代碼好像跟我看的api也沒不一樣
但就是執行失敗
一直都是卡在無法編輯,我想請問一下我是哪裡誤會了嗎?
代碼:
prefix = "d-"
commandname = (f'{prefix}name')
@app_commands.command(name = commandname, description = 'description')
async def name(self,interaction:discord.Integration):
await interaction.response.send_message("123")
print("1")
await asyncio.sleep(1)
print("2")
await interaction.response.edit_message(content="1234")
print("3")
################### 回 傳 結 果 ###################
#O 有print"1"
#O 有回復"123"
#O 有print"2"
#X 沒有將回復編輯為"1234"
#X 沒有prine"3"
不曉得現在你還需不需要
interaction.response只能被進行一次操作
之後要使用interaction.followup
followup本質上是一個webhook,可以去翻文檔查看webhook的操左方法