我感谢任何愿意看这个的人。我试图让我的机器人能够查看网站并从该网站获取数据并将其发布到我的不和谐频道。我也会尝试发布图片。我的node.js 都是最新的。令牌设置正确。
我的问题是机器人似乎无法访问特定频道。该机器人本身对服务器进行完全管理以进行测试。我也尝试过不同的渠道
const { Client, GatewayIntentBits } = require('discord.js');
const axios = require('axios');
const cheerio = require('cheerio');
const client = new Client({
intents: [
GatewayIntentBits.Guilds,
]
});
const token = process.env.BOT_TOKEN;
let messagesHistory = [];
const channelID = '11553938285183795999';
client.once('ready', () => {
console.log('Bot is online!');
checkWebsite();
setInterval(checkWebsite, 600000);
});
client.on('messageCreate', (message) => {
console.log(message.content);
if (message.content === '!checkBankruptcies') {
checkWebsite();
message.channel.send('Checking website for updates...');
}
if (message.content === '!lastCheckBankruptcies') {
const lastTenMessages = messagesHistory.slice(-10);
message.channel.send('Last 10 Check Bankruptcies:\n' + lastTenMessages.join('\n'));
}
});
async function checkWebsite() {
console.log('Checking website...');
try {
const response = await axios.get('https://stockanalysis.com/actions/bankruptcies/');
const $ = cheerio.load(response.data);
const tableRows = $('table.svelte-1jtwn20 tr').toArray();
tableRows.forEach((row) => {
const columns = $(row).find('td').toArray();
if (columns.length > 0) {
const data1 = $(columns[0]).text().trim();
const data2 = $(columns[1]).text().trim();
// Add more data extractions as needed
const message = `Data 1: ${data1}\nData 2: ${data2}`;
const channel = client.channels.cache.get(channelID);
if (channel && channel.type === 'text') {
console.log('Sending message to channel:', message);
channel.send(message);
messagesHistory.push(message);
} else {
console.error(`Text channel with ID ${channelID} not found.`);
}
}
});
} catch (error) {
console.error(error);
}
}
client.login(token);
我尝试删除机器人并将机器人重新添加到服务器。重做所有权限,重置令牌并使用文本通道名称(如“常规”)和通道 ID“12345678910”。
我期望的是机器人能够连接并读取用户的命令并显示数据。基本上,错误不会说“找不到通用文本通道名称。”
if (channel && channel.type === 'text') {
discord 开发者门户所示,频道没有您写下的类型。您应该写成 'text'
,而不是
0
,这相当于您搜索的公会文本类型。它应该看起来像这样:
if (channel && channel.type === 0) {
希望这个答案对你有用!