大神們辛苦了,小弟又來發問了...
如題,我已用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,機器人成功登入,但是卻無法在我輸入關鍵字後回應我,請問是發生了什麼事?
首先我的文章已經過時,很抱歉造成了您使用上的疑問
教學文當下,使用的是discord.js 12.5.3版
13版多了許多需要設置的內容,12版的配置基本上不能用了。
而且,不止是程式要調整,bot developers也有需要開啟的功能,因為我也不是完全摸熟13版的內容,後續並沒有特地寫一篇文章介紹該如何改動..
關於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玩得愉快
在執行這個程式前,你有做過哪些事情?
例如:權限只有Bot嗎?有註冊新命令嗎?
我給它的權限是administrator,基本上應該是可以發言才對,至於您所謂的「註冊新命令」是指?
...你好好把discord.js文件看一看,他有解說這個範例。我猜你只把github上的範例貼上不會動就來問了。你在跑這個範例前,跳過很多步驟。
我也沒寫過discord bot,是要確認你的問題才去翻文件的...範例在我加入的某discord guild會跑喔。
scopes裡面,bot跟applications.commands都要勾。
然後透過URL Generator產生的網址,在瀏覽器貼上來取得授權。
在你貼的範例之前,有一段程式是註冊新命令的,沒註冊的話新命令不能用。global命令應該很容易衝突,用guild命令就好,他的範例也是guild。
另外,discord api改版改很多,跟你參考的鐵人賽文章已經不太一樣,不過作者的blog上也有提到就是了。
https://nalocal.github.io/2021/09/27/aboutDiscordJs13/
看起來是因為discord.js改版,所以on('message')這種寫法會有問題,所以可能的解法是改用12版(目前是13),或是宣告partials跟intents再使用...