Не удается прочитать свойство » кэш » неопределенного в discord.js

#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. Спасибо, это сработало. я этого не заметил.