iT邦幫忙

2023 iThome 鐵人賽

DAY 25
0

今天要來介紹下一個實用的美化訊息的方式,下拉式表單

動機

原本我的rule只打算用embed來顯示就好但發現只用embed會很醜且很難看因為訊息太多,像這樣
https://ithelp.ithome.com.tw/upload/images/20231008/20161116T0V8pPY4ZQ.png
這還不是全部,因此我改用下拉式表單的方式,不僅可以美觀在查詢規則上也會更容易查詢

程式碼

這隻程式一樣有搭配tree.command()來使用

import discord
from discord.ext import commands
from discord import app_commands

MY_GUILD = discord.Object(id=Guild_ID)  # replace with your guild id

class MyClient(discord.Client):
    def __init__(self, *, intents: discord.Intents):
        super().__init__(intents=intents)
        self.tree = app_commands.CommandTree(self)

    async def setup_hook(self):
        self.tree.copy_global_to(guild=MY_GUILD)
        await self.tree.sync(guild=MY_GUILD)


class ButtonView(discord.ui.View):
    @discord.ui.select(placeholder = "選擇", min_values=1, max_values=1, options=[
            discord.SelectOption(label="大小", description="大小的規則及賠率"),
            discord.SelectOption(label="單雙", description="單雙的規則及賠率"),
            discord.SelectOption(label="圍骰", description="圍骰的規則及賠率"),
            discord.SelectOption(label="全圍", description="全圍的規則及賠率"),
            discord.SelectOption(label="下注在單一個點數", description="下注在單一個點數的規則及賠率"),
            discord.SelectOption(label="點數總和", description="點數總和的規則及賠率")
        ])
    async def select_callback(self, interaction:discord.Interaction,select:discord.ui.Select ):
            embed = discord.Embed(
                # title='骰寶歸則',
                # description='This is a rule',   
                colour=discord.Colour.purple()
            )
            self.disabled = True
            if select.values[0] == "大小":embed.add_field(name=":regional_indicator_b: 大", 
                    value="規則:總點數 11 至 17 ( 遇圍骰莊家通吃 )\n賠率:1 賠 1", 
                    inline=True) and embed.add_field(name=":regional_indicator_s:小" ,value="規則:總點數為 4 至 10 ( 遇圍骰莊家通吃 )\n賠率:1 賠 1\n",inline=True)
            elif select.values[0] == "單雙":embed.add_field(name="單", 
                    value="規則:總點數為 5, 7, 9, 11, 13, 15, 17 點 ( 遇圍骰莊家通吃 )\n賠率:1 賠 1\n", 
                    inline=True) and embed.add_field(name="雙",value="規則:總點數為 4, 6, 8, 10, 12, 14, 16 點 ( 遇圍骰莊家通吃 )賠率:1 賠 1\n",inline=True)
            elif select.values[0] == "圍骰":embed.add_field(name="圍骰", 
                    value="規則:3 顆骰子點數都一樣且是你指定的\n賠率:1 賠 180\n特別說明:「圍骰」跟「全圍」差別是在一個要指定點數一個不用。", 
                    inline=False)  
            elif select.values[0] == "全圍":embed.add_field(name="全圍(豹子)", 
                    value="規則:3 顆骰子點數都一樣但你不需指定點數\n賠率:1 賠 30\n特別說明:「圍骰」跟「全圍」差別是在一個要指定點數一個不用。", 
                    inline=True)  
            elif select.values[0] == "下注在單一個點數":embed.add_field(name="對子 ( 雙骰、長牌 )", 
                    value="規則:投注指定的雙骰 ( 如雙 1 點 ) ,至少開出 2 顆所投注的骰子\n賠率:1 賠 11\n", 
                    inline=True),embed.add_field(name="牌九式 ( 骨牌、短牌 )", 
                    value="規則:投注 15 種 2 顆骰子可能出現的組合 ( 如 1 、 2)\n賠率:1 賠 6\n", 
                    inline=True),embed.add_field(name="單骰", 
                    value="規則:投注每顆骰子 1 至 6 中指定的點數,點數出現 1 次\n賠率:1 賠 1\n", 
                    inline=False),embed.add_field(name="雙骰", 
                    value="規則:投注每顆骰子 1 至 6 中指定的點數,點數出現 2 次\n賠率:1 賠 2\n", 
                    inline=False),embed.add_field(name="全骰", 
                    value="規則:投注每顆骰子 1 至 6 中指定的點數,點數出現 3 次\n賠率:1 賠 3\n", 
                    inline=False) 
            elif select.values[0] == "點數總和":embed.add_field(name="點數總和", 
                    value="規則:4 或 17 點\n賠率:1 賠 60\n\n規則:5 或 16 點\n賠率:1 賠 20\n\n規則:6 或 15 點\n賠率:1 賠 18\n\n規則:7 或 14 點\n賠率:1 賠 12\n\n規則:8 或 13 點\n賠率:1 賠 8\n\n規則:9, 10, 11, 或 12點\n賠率:1 賠 6\n", 
                    inline=False)
            await interaction.response.send_message(embed=embed,view=ButtonView())

intents = discord.Intents.default()
client = MyClient(intents=intents)

@client.tree.command()
async def select(interaction):
    embed = discord.Embed(
        title='Rule',
        description='This is a rule',
        colour=discord.Colour.purple()
    )
    
    await interaction.response.send_message(embed=embed, view=ButtonView())


client.run("token")

執行結果

https://ithelp.ithome.com.tw/upload/images/20231008/20161116G2tif7eCsx.png
https://ithelp.ithome.com.tw/upload/images/20231008/20161116JcLepspzQf.png


上一篇
[Day24] 骰寶(下)之embed介紹
下一篇
[Day26] 骰寶(下)之功能整合最終篇
系列文
使用discord.py開發自己的機器人30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言