iT邦幫忙

0

用vscode完成程式碼後,我的discord機器人還是不會動...

大神們辛苦了,小弟又來發問了...
如題,我已用VSCode完成了程式碼:

const { Client, Intents } = require('discord.js');
const client = new Client({ intents: [Intents.FLAGS.GUILDS] });

client.on('ready', () => {
  console.log(`Logged in as ${client.user.tag}!`);
});

client.on('interactionCreate', async interaction => {
  if (!interaction.isCommand()) return;

  if (interaction.commandName === 'Google') {
    await interaction.reply('Yahoo!');
  }
});


client.login('TOKEN不給你看');

也已在終端機輸入node bot,機器人成功登入,但是卻無法在我輸入關鍵字後回應我,請問是發生了什麼事?

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

6
微笑
iT邦新手 1 級 ‧ 2021-12-06 14:19:59
最佳解答

首先我的文章已經過時,很抱歉造成了您使用上的疑問
教學文當下,使用的是discord.js 12.5.3版
13版多了許多需要設置的內容,12版的配置基本上不能用了

而且,不止是程式要調整,bot developers也有需要開啟的功能,因為我也不是完全摸熟13版的內容,後續並沒有特地寫一篇文章介紹該如何改動..
/images/emoticon/emoticon06.gif

關於13版的想法,我前陣子有發一篇文章與模板專案在自己的blog,雖然理論上只要developer設置正常就可以使用,但改動上需要對13版與js有一定的基礎,也因此不確定合不合樓主的需求,最好的方案應該還是如 fillano 大大所說的轉回12版會更好,這也是因為目前網站上流通的中文教學,仍然以12版以下的教學為多。


感謝並補充 fillano 的說明
其中有提到幾點,我一一提供我的看法,希望能有幫助

client.on('interactionCreate'...

這個是13版的功能,他是斜線指令
與以往針對訊息流,判斷文字本身不同
他需要在程式中用json先宣告我要註冊的指令,之後再註冊這個監聽事件,當有人使用你的指令時,執行對應的行為
Ex:
json

[
  {
    "name": "ping",
    "description": "Replies with Pong!"
  }
]

js

exports.DiscordInteraction = (async (interaction) => {
    if (!interaction.isCommand()) return;

    if (interaction.commandName === 'ping') {
        await interaction.reply('Pong!');
    }
});

exports.InsertSlash = (async (guildID) => {
    try {
        CatchF.LogDo('Started refreshing application (/) commands.');

        await rest.put(
            Routes.applicationGuildCommands(auth.botID, guildID),
            { body: commandDatas }, //json在這
        );

        CatchF.LogDo('Successfully reloaded application (/) commands.');
    } catch (err) {
        CatchF.EmptyDo(err);
    }
})();

以上程式擷取自文章專案片段

如果要與以往一樣使用message行為的話,可以使用client.on('messageCreate'...


或是宣告partials跟intents再使用...

13版的discord.js要求開發人員,必須在啟動時告訴discord,這個bot今天會用到哪些功能,然後我就只開放這些功能給你,讓我不敢發文的很大一部分原因就是這個,很害怕誤導到人

目前我是使用
const client = new Client({ intents: 32767, partials: ["MESSAGE", "CHANNEL", "REACTION"] });
樓主可以參考使用。

最後希望您bot玩得愉快/images/emoticon/emoticon37.gif

3
fillano
iT邦超人 1 級 ‧ 2021-12-06 09:11:03

在執行這個程式前,你有做過哪些事情?

看更多先前的回應...收起先前的回應...
fillano iT邦超人 1 級 ‧ 2021-12-06 09:14:55 檢舉

例如:權限只有Bot嗎?有註冊新命令嗎?

棕熊 iT邦新手 5 級 ‧ 2021-12-06 10:21:32 檢舉

我給它的權限是administrator,基本上應該是可以發言才對,至於您所謂的「註冊新命令」是指?

fillano iT邦超人 1 級 ‧ 2021-12-06 11:07:05 檢舉

https://discordjs.guide/

...你好好把discord.js文件看一看,他有解說這個範例。我猜你只把github上的範例貼上不會動就來問了。你在跑這個範例前,跳過很多步驟。

我也沒寫過discord bot,是要確認你的問題才去翻文件的...範例在我加入的某discord guild會跑喔。

https://ithelp.ithome.com.tw/upload/images/20211206/20000108ctzu0UUVVR.png

fillano iT邦超人 1 級 ‧ 2021-12-06 11:17:03 檢舉

scopes裡面,bot跟applications.commands都要勾。

然後透過URL Generator產生的網址,在瀏覽器貼上來取得授權。

在你貼的範例之前,有一段程式是註冊新命令的,沒註冊的話新命令不能用。global命令應該很容易衝突,用guild命令就好,他的範例也是guild。

fillano iT邦超人 1 級 ‧ 2021-12-06 11:18:21 檢舉

另外,discord api改版改很多,跟你參考的鐵人賽文章已經不太一樣,不過作者的blog上也有提到就是了。

fillano iT邦超人 1 級 ‧ 2021-12-06 11:30:01 檢舉

https://nalocal.github.io/2021/09/27/aboutDiscordJs13/

看起來是因為discord.js改版,所以on('message')這種寫法會有問題,所以可能的解法是改用12版(目前是13),或是宣告partials跟intents再使用...

我要發表回答

立即登入回答