iT邦幫忙

2023 iThome 鐵人賽

DAY 30
0
自我挑戰組

Python Discord Bot(DC機器人)系列 第 30

Python Discord Bot#30- 貼圖反應 (二)

  • 分享至 

  • xImage
  •  

根據前篇的方式,
試做一個類式投票的內容。

觸發方式

本人想用slash_command去觸發,
因為如果有錯誤,不會像command留有命令字樣。
但slash_command 在輸入參數時,
如有換行的內容比較處理不利,
所以想用discord.ui.Modal 來處理內容。

https://ithelp.ithome.com.tw/upload/images/20230928/20106071zN1eSdfF3o.png
https://ithelp.ithome.com.tw/upload/images/20230928/2010607146QGK4j08g.png

結果

https://ithelp.ithome.com.tw/upload/images/20230928/20106071WRBUv21jWk.png

有關 add_reaction

在實作時,我找尋了不依靠新套件來觸發,
但偶爾會出現 沒有 add_reaction 的function 所以無法添加的訊息。

所以我找了原檔整理一下可以觸發的情境,
首先:
add_reaction 只有是訊息才能觸發
discord.Message.add_reaction

@command 觸發時

callback ctx: discord.ext.commands.context
傳出訊息的函式為 send ,
而 RETURN TYPE: Message
所以是可以直接操作的。


@slash_command 觸發時

callback ctx:discord.ApplicationContext
而在函式裡面為傳出訊息我認識的有大概3個:
respond
send_modal
send_response
(這三個一定要發一個,要不然 Interaction 會判斷沒回傳,但也可以額外再發ctx.send())

回傳皆為 Interaction 是一個互動而非訊息。
所以需要取得它的訊息。

original_response()
original_message()
皆可。

Example:
    class MyModal(discord.ui.Modal):
        def __init__(self, title, embTitle, embNum):
            super().__init__(title=title)
    
            self.add_item(discord.ui.InputText(label="標題", value=embTitle, required=True))
            self.add_item(discord.ui.InputText(label="內容", style=discord.InputTextStyle.long, placeholder="詳細介紹投票內容", required=True))
            self.add_item(discord.ui.InputText(label="選項數量", value=embNum, required=True))
    
        async def callback(self, interaction: discord.Interaction):
            embed = discord.Embed(title=f"{self.children[0].value}", description=f"{self.children[1].value}")
            resp = await interaction.response.send_message(embeds=[embed])
            
            request = await resp.original_response()
          
            for emoji in range(int(self.children[2].value)):
                await request.add_reaction(emojis[emoji + 1])

上一篇
Python Discord Bot#29- 貼圖反應 (一)
下一篇
Python Discord Bot#Fin - 賽後心得
系列文
Python Discord Bot(DC機器人)31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言