[精讚] [會員登入]
984

【JDA/discord bot】如何獲得訊息中的圖片和影片並儲存或轉傳

如何將訊息中的圖片或影片之類的多媒體提取出來之後,再進行相關的處理

分享此文連結 //n.sfs.tw/16358

分享連結 【JDA/discord bot】如何獲得訊息中的圖片和影片並儲存或轉傳@小編過路君子
(文章歡迎轉載,務必尊重版權註明連結來源)
2024-02-13 12:44:58 最後編修
2024-02-13 03:30:51 By 過路君子
 

哈囉大家好,這裡是持續翻看文檔的小編過路君子

不太確定網路上其他人是否有發類似的文章,但這是小編看著 javadoc 寫出來的程式碼

 

 

小編所使用的 JDA 版本是:5.0.0-alpha.20

因為 JDA 更新快速,請各位先行確認目前使用的版本是否兼容小編所使用的版本。

如果一切都沒問題的話,簡單來說,以下:

import java.util.List;
import net.dv8tion.jda.api.hooks.ListenerAdapter;
import net.dv8tion.jda.api.entities.Message.Attachment;
import net.dv8tion.jda.api.events.message.MessageReceivedEvent;
import net.dv8tion.jda.api.entities.channel.concrete.TextChannel;


public class DiscordEvents extends ListenerAdapter
{
    @Override
    public void onMessageReceived(MessageReceivedEvent event)
    {
        // Fetch the new channel
        long channelID = 900000000000000000L;
        TextChannel channel = event.getJDA().getTextChannelById(channelID);

        // Getting message attachments
        List<Attachment> attachemnts = event.getMessage().getAttachments();
        if(attachemnts.size() == 0) return;

        // Download attachments and send it to new channel
        for(Attachment attachment : attachemnts)
        {
            try {channel.sendFiles(FileUpload.fromData(attachment.getProxy().download().get(), attachment.getFileName())).queue();}
            catch(Exception error) {System.out.println(error);}
        }
    }
}

上方的程式碼會將檔案從 Discord 伺服器下載下來,且以 java.io.InputStream 的狀態呈現。

緊接著小編再將其轉換成 net.dv8tion.jda.api.utils.FileUpload 的格式以符合 sendFiles 所規範要傳入值的型態。

最後在用 sendFiles 這個函數並配合 queue() 將處理完成的多媒體傳送至新的頻道內。

 

那上面的範例小編是單純的將讀取到的多媒體一個一個的相繼傳送至新頻道。

如果各位需要一次性的將所有的多媒體傳送至新頻道的話,可以先將所有的多媒體先丟到 Collection<? extends FileUpload> 內。

之後在丟入 sendFiles 這個函數就可以囉~(注意單次最大檔案傳送上限!)

 

如果各位需要將檔案存檔另成 java.io.File、 net.dv8tion.jda.api.entities.Icon 或是 java.nio.file.Path 等等其他的格式話。

可以參考以下頁面來自行完成轉檔的動作:JDA5.0.0-alpha.20_AttachmentProxy

那麼,祝各位好運了,希望各位都能成功取得位於訊息中的多媒體!

 

 

 

後記

同場加映,同樣的功能如何使用 discord.py 實現,換句話說就是用 Python 寫。

但小編覺得會來看這篇文章的人應該都不會需要以下的程式碼吧。

反正就都放後記了,就當讓各位客官品個茶香吧~!

class event():
    @commands.Cog.listener()
    async def on_message(self, msg):
        # fetch the new channel
        channelID = 900000000000000000
        channel = await self.bot.fetch_channel(channelID)

        # Getting message attachments
        files = []
        for attachment in msg.attachments:
            files.append(await attachment.to_file())

        # Sending it to new channel
        if len(files) != 0:
            await channel.send(files=files)
END

你可能感興趣的文章

【Vim】解決貼上文字時出現過多空格的問題 換了新系統,有時候就算重裝軟體並且複製了設定檔也還是會出現非常奇怪的現象

【Stable Diffusion web UI】[AI 作畫](Linux)無 NVIDIA 顯卡之伺服器運行測試 凡事就是要試試看,才知道最後的結果

【JDA/discord bot】如何獲得訊息中的圖片和影片並儲存或轉傳 如何將訊息中的圖片或影片之類的多媒體提取出來之後,再進行相關的處理

【Discord bot 2.0.1】(discord.ui.View)如何將舊機器人升級至目前最新版本 很多時候升級軟體是為了讓別人覺得你的程式很先進,但這次卻是因為要使用某個新功能

【Java】[debug]多維泛型的大坑 incompatible types error

【Discord bot】(ERROR)await self.bot.wait_for() 大坑 今天真的是採到大坑,只找到解決方法,具體原因不明

隨機好文

高捷少女:地下城的探險少女⑤ 小穹寫好後,耐耐看了一遍。「我想我應該辦得到。」她說完跪坐在地上,然後把古箏安放在大腿上,並將樂譜放在前面的地板。「要開始囉。」耐耐閉上眼睛,深呼吸一口氣,小穹等人在一旁看著她,心中暗自替她打氣。

高捷少女:購票大作戰① 「各位乘客,本班機即將降落,感謝各位乘客的搭乘……」隨著空中小姐的廣播音,那架飛機逐漸降落在地面,裡面的乘客們也紛紛開始整理自己的行李。 那個有著歐美人五官的少女抓緊包包,看著外面的小港機場,臉上緩緩

【歌評】蓮台野夜行 -月之妖鳥、化貓之幻 月の妖鳥、化猫の幻 這是一個很好的問題,現實與幻覺的界線從來沒有如此的模糊,沒有一條明確的界線將其畫開

【數學】徐氏數學簡明講義(三) 第二章 直線與園 P2.1-15 Q13 13.若阿強解方程式得;   小饅頭解方程式得,則數對(a,b) = ___ 解: 各將她們兩個求得的答案代回去 將第二

【英翻中歌詞】(二創歌)佐渡的二岩 Outside, inside, inside, outside 由外而內,由內而外 Find the line and watch me