# 零、前言 我是一個非常偏執的人,所以當大家都在使用python的時候,我卻想用C++ 來寫Discord的機器人,所以我找到了一個套件——D++ 。 ## 優點 他的好處是可以用C++ 來製作機器人,使用python也有的套件,而且效率也不會很低,且幾乎適用市面上的所有作業系統,本篇僅有使用Windows系統的介紹,但其餘系統D++ 原文官網上幾乎都有,基本上使用翻譯可以慢慢裝,但Windows是最推薦的系統,在待會的安裝時就可以理解為什麼。 (D++官網:https://dpp.dev/) ## 缺點 由於這個東西在中文圈幾乎沒有任何的討論,我也沒有聽說有誰用C++ 來寫這個東西,所以網路上一個中文教學都沒有(如果你找D++ 或DPP,除了英文官網,就會出現Dev-C++ 了),我這篇就是希望用最簡單的文字來教你如何使用。 ## 需求 * 需要一台電腦(約莫需要30GB的空間,但是是Visual Studio搶走的QQ) * Visual Studio 2022(官網說可以使用2019,但我非常不建議使用) * C++非常基礎的語法(大約到迴圈即可) * Discord帳號 * 有靈感的腦袋 # 一、安裝D++ ## 1. 安裝Visual Studio 2022(這個有中文,所以我不再贅述,我用的套件如下) * 適用Windows平台開發 * 使用C++的桌面開發 * 使用C++進行桌面開發 ## 2. 進入官網(https://dpp.dev/) #### 點開Supported Operating Systems,選擇 Windows Bot Template repository ![](https://hackmd.io/_uploads/Bk30iayep.png) #### 點選code複製連結 ![](https://hackmd.io/_uploads/B1J5nTkea.png) ## 3.複製存取庫 #### 打開Visual Studio 2022,點選複製存取庫,將剛剛的連結貼入 可能需要10-30分鐘 ![](https://hackmd.io/_uploads/rJAe1Ryla.png) 這個是Windows有的優勢,其他系統都需要下載後解壓縮等複雜的操作,而且容易失誤或有Bug,這樣複製幾乎不會出錯。 # 二、邀請機器人 ### 1.開啟這個網站:https://discord.com/developers/applications ### 2.點選"New Application" ![](https://hackmd.io/_uploads/r1kVfRJl6.png) ### 3.寫你的名字、簡介等 ![](https://hackmd.io/_uploads/SJTLQC1ep.png) ### 4.選取權限 上面的至少要有bot 下面的可以開翻譯選你想要的 最後將打開得到的連結,就可以邀請你的機器人囉 ![](https://hackmd.io/_uploads/B1HcE01g6.png) # 三、獲得令牌(bot-taken) ### 1.開啟這個網站:https://discord.com/developers/applications ### 2.獲得令牌 點這個按鈕,你會得到一個獨一無二的令牌,請找一個安全只有你和你團隊的人可以看到的地方收好,這是整個機器人的核心。 ![](https://hackmd.io/_uploads/HyFeXygla.png) # 四、製作你的第一個機器人 這就像是我們第一個C++的程式的"hello world"一樣,簡單卻是所有機器人的基礎。 ### 開啟剛剛安裝的套件 * 如果你是按照預設的資料夾裡面那麼檔案會位於以下路徑 C槽->「使用者」->你的電腦名字->「source」->「repos」->「windows-bot-template」 * 如果你是自訂資料夾那麼會在那個資料夾裏頭 最後能看到這個頁面,點開圈選的檔案 ![](https://hackmd.io/_uploads/HJUxI4WeT.png) 應該會有這個程式碼(為了接下來複製的方便,將會使用程式碼,而不使用截圖) ```cpp= #include <dpp/dpp.h> const std::string BOT_TOKEN = "在這裡放入令牌";//由於是字串,那兩個引號要留著! int main() { dpp::cluster bot(BOT_TOKEN); bot.on_log(dpp::utility::cout_logger()); bot.on_slashcommand([](const dpp::slashcommand_t& event) { if (event.command.get_command_name() == "ping") { event.reply("Pong!"); } }); bot.on_ready([&bot](const dpp::ready_t& event) { if (dpp::run_once<struct register_bot_commands>()) { bot.global_command_create( dpp::slashcommand("ping", "Ping pong!", bot.me.id) ); } }); bot.start(dpp::st_wait); } ``` 那麼我將會盡量拆解程式碼,但其實理解大致功能,活用才是困難的地方! ## 程式碼拆解 ```cpp= dpp::cluster bot(BOT_TOKEN); ``` 這一行是使用令牌,就是整個機器人的核心,你可以想成是地契 ```cpp= bot.on_ready([&bot](const dpp::ready_t& event) { if (dpp::run_once<struct register_bot_commands>()) { bot.global_command_create( dpp::slashcommand("ping", "Ping pong!", bot.me.id) ); } }); ``` 這幾行的功能是註冊一個名叫"ping"的指令,並且指令的介紹叫做"Ping pong!",這就像是進入一個遊戲要先創建帳號一樣 ```cpp= bot.on_slashcommand([](const dpp::slashcommand_t& event) { if (event.command.get_command_name() == "ping") { event.reply("Pong!"); } }); ``` 這就是使用剛剛註冊的那個指令,在使用使用指令前要先注意是否"/"後是我所規定的名字,是的話就輸出"pong" ## 收尾 正常會出現這個畫面 ![](https://hackmd.io/_uploads/Hk-_aEWxp.png) 這樣就可以去伺服器玩耍囉,記得黑框框要開著喔 ## 可能的Bug 按照這個步驟基本不會出現缺失dll的bug,如果出現記憶體錯誤,那可能是令牌放到自己的而不是機器人的,記得要有連接網路! ### 使用Big-O #### 修改成英文配置 不知道為什麼,中文配置無法解決這個問題,只好先切換成英文設置,在"Visual Studio Installer"中下載英文模組 1. 找到你使用的Visual Studio版本點選"修改"(這裡用Visual Studio Community 2022")示範 ![](https://hackmd.io/_uploads/ByH5zoMl6.png) ![](https://hackmd.io/_uploads/H1mEXiMe6.png) 2. 等待下載 3. 點選"不使用程式碼繼續" ![](https://hackmd.io/_uploads/ryhMVifep.png) 4. 選取"工具"->"選項" ![](https://hackmd.io/_uploads/Byu8Vizla.png) 5. "環境"->"國際化設定"->"English" ![](https://hackmd.io/_uploads/rJ8AXW7gp.png) 之後重登即可 #### 使用utf-8 1. 選取"tool"->"Costomize"(倒數第二個) ![](https://hackmd.io/_uploads/HyoZdW7lp.png) 2. 點下"Commands"->"Add Commands"(點下去後會出現右側的框框)->"File"(若無改版為第六個)->"Add Save Options..."->點"OK"後關掉專案重開 ![](https://hackmd.io/_uploads/r1UfKbml6.png) 3. 選取左上角Add Save Options...,將Encoding改成utf-8 ![](https://hackmd.io/_uploads/ryp9cZ7gp.png) 4. 選擇"Project"->"My bot Properties" ![](https://hackmd.io/_uploads/rJYuCZ7l6.png) 5. 選擇"C/C++"->"Command Line"->在下面欄位輸入"/utf-8",而後點套用 ![](https://hackmd.io/_uploads/rJ9xef7xp.png) 再跑過一次應該就沒有這個問題了 #### 修改回中文配置 中文依舊是母語,還是相對英文習慣的多。 4. 選取"tools"->"Options" ![](https://hackmd.io/_uploads/HyNubfQep.png) 5. "Options"->"International Settings"->"繁體中文" ![](https://hackmd.io/_uploads/B1sxWMQlT.png) 之後重登即可 恭喜,終於完成這個浩大的工程了,沒辦法,中文真的是一個在程式的世界很麻煩的東西。