#javascript #node.js #discord.js
Вопрос:
Я пишу некоторый код для анализа сообщений для измерения токсичности (с помощью API Perspective) и предпринимаю для этого действия. Для этого мне нужны журналы. У меня есть приведенный ниже код для измерения всех сообщений и результатов регистрации без каких-либо действий, но он выдает эту ошибку:
Cannot read property 'cache' of undefined
Это часть кода, которая выдает ошибку:
const {google} = require('googleapis');
const fs = require('fs');
client.on('message', (msg) => {
if(msg.author.id === client.user.id) return;
API_KEY = process.env['PERSPECTIVE_API_KEY'];
DISCOVERY_URL = 'https://commentanalyzer.googleapis.com/$discovery/rest?version=v1alpha1';
google.discoverAPI(DISCOVERY_URL)
.then(client => {
const analyzeRequest = {
"comment": {
"text": msg.content,
},
"requestedAttributes": {
"TOXICITY": {},
},
"doNotStore": true
};
client.comments.analyze(
{
key: API_KEY,
resource: analyzeRequest,
},
(err, response) => {
if (err) throw err;
let raw_analyzeResult = JSON.stringify(response.data, null, 2)
const analyzeResult = Math.round(JSON.parse(raw_analyzeResult).attributeScores.TOXICITY.summaryScore.value * 100)
console.log("Message: " msg.content "nSent by: <@" msg.author.id ">n Toxicity Level: %" analyzeResult);
client.channels.cache.get("836242342872350790").send("Message: " msg.content "nSent by: <@" msg.author.id ">n Toxicity Level: %" analyzeResult)
});
})
.catch(err => {
throw err;
});
});
Кроме того, это моя часть переменных:
let discord = require("discord.js")
let client = new discord.Client()
let prefix = ";"
Как я мог это исправить?
Ответ №1:
Вы смешиваете две client
переменные. Вы используете один для бота ( let client = new discord.Client()
) и один для Google API ( .then(client => {
). У client
возвращенного из файла discoverAPI
нет channels
свойства, есть только у бота.
Как client.channels
не определено, вы получаете сообщение об ошибке «Не удается прочитать свойство» кэш «неопределенного».
Попробуйте переименовать один из них, например google.discoverAPI().then((discoveryClient) => ...)
:
client.on('message', (msg) => {
if (msg.author.id === client.user.id) return;
API_KEY = process.env['PERSPECTIVE_API_KEY'];
DISCOVERY_URL = 'https://commentanalyzer.googleapis.com/$discovery/rest?version=v1alpha1';
google
.discoverAPI(DISCOVERY_URL)
.then((discoveryClient) => {
const analyzeRequest = {
comment: { text: msg.content },
requestedAttributes: { TOXICITY: {} },
doNotStore: true,
};
discoveryClient.comments.analyze(
{
key: API_KEY,
resource: analyzeRequest,
},
(err, response) => {
if (err) throw err;
let raw_analyzeResult = JSON.stringify(response.data, null, 2);
const analyzeResult = Math.round(
JSON.parse(raw_analyzeResult).attributeScores.TOXICITY.summaryScore
.value * 100,
);
console.log(
'Message: '
msg.content
'nSent by: <@'
msg.author.id
'>n Toxicity Level: %'
analyzeResult,
);
client.channels.cache
.get('836242342872350790')
.send(
'Message: '
msg.content
'nSent by: <@'
msg.author.id
'>n Toxicity Level: %'
analyzeResult,
);
},
);
})
.catch((err) => {
throw err;
});
});
Комментарии:
1. Спасибо, это сработало. я этого не заметил.