基本語法

1
2
3
4
@bot.tree.command()
async def picture(interaction:discord.Interaction):
file = discord.File("路徑")
await interaction.response.send_message(file = file)

可以把圖片放在同一個資料夾裡面,用./ 開頭做相對路徑
這個路徑寫法是從這個資料夾開始延伸的意思,如果直接使用./圖片.jpg可以選到同一個資料夾的檔案

其實你會發現,discord.File是一個物件
又扣回類別的內容,python到處都是物件

應用:隨機圖片(編號)

這裡我們將使用os套件來進行系統相關操作,random套件來隨機取一個圖片
請先將三張圖片放入main.py的同一個資料夾,並且依照數字順序命名

如果有3張圖片,就個別命名成123
不用特別命名的方式在下一段

1
2
3
4
5
6
7
8
9
10
import random

@bot.tree.command()
async def randompic(interaction:discord.Interaction):
await interaction.response.defer()

number = random.randint(1,3) # 取1到3隨機數
file = discord.File(f"./{number}.jpg") # 開啟相對應的圖片

await interaction.followup.send(file=file) # 送出

random.randint()
這個函數會取範圍內的隨機一個數字,而我們可以利用這個方法對應到圖片的名稱開啟,達成隨機取一個的效果

應用:隨機圖片(不要求命名)

可以把圖片的名字改成非數字來測試
請在這裡創建一個資料夾,把圖片都放進去

這裡假設叫做pics

1
2
3
4
5
6
7
8
9
10
11
import os

@bot.tree.command()
async def randompic(interaction:discord.Interaction):
await interaction.response.defer()

file_list = os.listdir("./pics") # 列出資料夾內所有檔案
file_path = "pics/" + random.choice(file_list) # 從列表裡面隨機取一個
file = discord.File(file_path)

await interaction.followup.send(file=file) # 送出
  • os.listdir()

這個函式可以列出某一個資料夾裡面所有的檔案,包成一個list
如同開頭提到的,os模組主管跟系統有互動的操作,讀取檔案也在內

  • random.choice()

可以從列表裡面隨機挑一項出來
此處是由檔案列表裡面挑一項出來,達成隨機取圖片的效果

哪一個方法比較好?

我會推薦第二個方法

第一個方法會需要命名圖片,以及預先知道圖片有多少,但是如果臨時新增圖片,就必須修改機器人再重啟
第二個方法是每次都重新讀取資料夾,檔案有變更就可以重新讀取,而且名稱也是由os模組取得,不需要編號才能讓我們掌控

加場:超簡單方法

如果想發送網路上的圖片,只需要取得圖片的網址然後直接發出去就好了
上面兩個方法是便於管理

給你一些網址測試

Google

Discord