我试图用node.js创建一个discord bot 我想只在特定频道发帖子 我尝试这样做是为了在变量中保存一个频道,但这不起作用:
const Discord = require('discord.js');
const fs = require("fs");
var bot = new Discord.Client();
var myToken = 'NDQ2OTQ1...................................................';
//client.msg = require ("./char.json");
var prefix = ("/");
//let preset = JSON.parse(fs.readFileSync('preset.json', 'utf8')); // This calls the JSON file.
var offTopic = bot.channels.find("id","448400100591403024"); //.get("448392061415325697");
console.log(offTopic);

每当我运行我的机器人时,它都会返回' null'找到和' undefined'得到。 我在互联网上搜索帮助,即使我按照这篇文章发布我的代码也不起作用:Discord Bot Can't Get Channel by Name 我也试图通过名字找到我的频道,但我得到了#undefined'也是:/
答案 0 :(得分:7)
该库的新版本似乎使用.fetch
而不是.get
,并且返回了一个Promise:
const Discord = require('discord.js');
const client = new Discord.Client();
client.on('ready', () => {
client.channels.fetch('448400100591403024')
.then(channel => console.log(channel.name));
});
答案 1 :(得分:1)
从客户端检索信息的方式在 discordjs v12 中发生了变化,如果信息被缓存,则适用。
var offTopic = bot.channels.cache.get('448400100591403024'); //.get('448392061415325697');
console.log(offTopic);
如果信息未缓存,则需要使用 Taylan 建议的 fetch 方法。此方法使用 Discord API 通过 ID 获取 Discord 对象。
client.channels.fetch('448400100591403024')
.then(channel => console.log(channel.name));
您可以阅读更多关于 discordjs v12 here
答案 2 :(得分:0)
确保您已放置"发现"事件监听器中的行。 例如,假设您想在机器人成功连接时找到特定通道:
bot.on('ready', () => {
console.log(`Logged in as ${bot.user.tag}!`);
var offTopic = bot.channels.get("448400100591403024");
console.log(offTopic);
});
当然,有大量的事件监听器可用,这将适合您想要找到频道的场景。您将在Events section of the Client Class in the DiscordJS docs.中找到事件监听器 试试这个,让我知道它是否有效。