iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 13
1
AI & Data

用Node.js製作後台零負擔的DiscordBot系列 第 13

Day13 - 嵌入式訊息embed與 bot 的指令表(額外)

以下文章已於 2021/09/16 轉移至 微笑之家
對於discord.js更新,或是有其他問題,都歡迎到以下網址查看喔
本站
本主題
本文章


今天說說Discord的另一種訊息方式,embed

13-1

在Discord.js中被稱為MessageEmbed,訊息嵌入元素,總之就是嵌入式訊息

13-2

跟一般傳送訊息的手段一樣是使用 send ,但是傳送的屬性從原本的文字(string)轉成是嵌入元素(Embed)

13-3

embed宣告後,透過其文檔底下的各個方法(methods)來賦予嵌入式訊息本身,要放入哪些資訊

14-4

將一個一個訊息嵌入embed元素後,最後從send方法傳送到discord上,就是一則embed訊息了

14-5

底下附上標準版的embed,請各位嘗試在最初教學的 ! 方法中新增一則help觸發句,將底下範例套入後,試著替換成自己的指令文檔吧!

const embed = new Discord.MessageEmbed()
      .setColor('#0099ff')
      .setTitle('Some title')
      .setURL('https://discord.js.org/')
      .setAuthor('Some name', 'https://i.imgur.com/wSTFkRM.png', 'https://discord.js.org')
      .setDescription('Some description here')
      .setThumbnail('https://i.imgur.com/wSTFkRM.png')
      .addField('Regular field title', 'Some value here')
      .addField('\u200B', '\u200B')
      .addField('Inline field title', 'Some value here', true)
      .addField('Inline field title', 'Some value here', true)
      .addField('Inline field title', 'Some value here', true)
      .setImage('https://i.imgur.com/wSTFkRM.png')
      .setTimestamp()
      .setFooter('Some footer text here', 'https://i.imgur.com/wSTFkRM.png');
msg.channel.send(embed);

上一篇
Day12 - Discord的訊息刪除與更新事件(額外)
下一篇
Day14 - Heroku與Git,介紹與安裝
系列文
用Node.js製作後台零負擔的DiscordBot31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 則留言

0
wifon
iT邦新手 5 級 ‧ 2020-12-09 22:57:09

前輩,是這樣貼嗎?打~help T 它沒反應耶,要怎麼弄help

看更多先前的回應...收起先前的回應...
微笑 iT邦研究生 5 級 ‧ 2020-12-11 16:42:32 檢舉

你把 case 'T' 改成 case '3'
這樣只要打 ~ 就會出現訊息了

如果希望只對 ~help 有反應的話就要像 case '0' 一樣,之後再判斷 switch (cmd[0]) 的值
要再將判斷精準到 ~help T 的話則是再多判斷 switch (cmd[1])

這一篇我有點偷懶,拿了本體已經寫好的程式來用,所以程式碼截的比較片段,抱歉抱歉/images/emoticon/emoticon14.gif

wifon iT邦新手 5 級 ‧ 2020-12-15 11:02:33 檢舉

我需要一點時間..

微笑 iT邦研究生 5 級 ‧ 2020-12-15 17:29:39 檢舉

具體來說

case 'T':
    messageManager.HelpMessage4(....
    break;

改成


case '2':
    const cmd = msg.content.substring(prefix[tempPrefix].Value.length).split(' '); //以空白分割前綴以後的字串
    switch(cmd[0]){
        case 'help':
            messageManager.HelpMessage4(....
            break;
    }
    break;
    

試試看吧~

微笑 iT邦研究生 5 級 ‧ 2020-12-16 18:02:37 檢舉

阿,你好像把兩段程式放在同一個檔案裏面

這樣的話messageManager.HelpMessage4前面的messageManager.可以拿掉看看

exports.HelpMessage4前面的exports.也拿掉

1
wei901006
iT邦新手 5 級 ‧ 2021-07-17 01:27:17

不好意思,可以指點一下哪裡有錯誤嗎

case '2':
                cmd = msg.content.substring(prefix[tempPrefix].Value.length).split(' '); //以空白分割前綴以後的字串
                switch(cmd[0]){
                    case 'help':
                        MessageManager.HelpMessage4(Discord.RichEmbed, function
                        (embed) {
                             msg.channel.send(embed);
                        })
                        break;
exports.HelpMessage4 = function (RichEmbed, callback) {
    const embed = new Discord.MessageEmbed()
      .setColor('#0099ff')
      .setTitle('Some title')
      .setURL('https://discord.js.org/')
      .setAuthor('Some name', 'https://i.imgur.com/wSTFkRM.png', 'https://discord.js.org')
      .setDescription('Some description here')
      .setThumbnail('https://i.imgur.com/wSTFkRM.png')
      .addField('Regular field title', 'Some value here')
      .addField('\u200B', '\u200B')
      .addField('Inline field title', 'Some value here', true)
      .addField('Inline field title', 'Some value here', true)
      .addField('Inline field title', 'Some value here', true)
      .setImage('https://i.imgur.com/wSTFkRM.png')
      .setTimestamp()
      .setFooter('Some footer text here', 'https://i.imgur.com/wSTFkRM.png');
msg.channel.send(embed);
}
微笑 iT邦研究生 5 級 ‧ 2021-07-19 11:26:08 檢舉

下次有問題問別人請記得附上錯誤訊息喔,對方會比較好回答/images/emoticon/emoticon47.gif
這段文章的Embed寫法被discord.js更新
宣告Embed元素的方法已經不是Discord.MessageEmbed
可參考官方文檔範例https://discord.js.org#/docs/main/stable/examples/embed

wei901006 iT邦新手 5 級 ‧ 2021-07-22 18:08:03 檢舉

原來如此,謝謝您詳細的回覆,造成困擾實在不好意思!!!

我要留言

立即登入留言