Как я могу использовать данные API google листов в файле discord.js? - PullRequest
0 голосов
/ 05 июля 2019

Я настраиваю своего первого бота разногласий, который сможет брать данные из таблицы Google, из официального API и выводить их в виде сообщения разногласия. Проблема на уровне .addField (), где я не могу ввести значение ячейки. Как я могу это сделать?

const { Client, RichEmbed } = require('discord.js');
const client= new Client();
const GoogleSpreadsheet = require('google-spreadsheet');
const {promisify} = require('util');
const creds = require('./client_secret.json');

client.on('message', message => {
    if (message.content === '!bot'){

        async function accessSpreadsheet() {
            const doc = new GoogleSpreadsheet('1qA11t460-ceILmwu6RtfiPGb_n9MUD_7z6Ld7I_Z6yc');
            await promisify(doc.useServiceAccountAuth)(creds);
            const info = await promisify(doc.getInfo)();
            var sheet = info.worksheets[0];

            var cells = await promisify(sheet.getCells)({
                'min-row': 2,
                'max-row': 5,
                'min-col': 3,
                'max-col': 3,
                'return-empty': true,
            })
            for (var cell of cells) {
                message.author.send(cell.value)
            }
        }

        accessSpreadsheet();
        const embede = new RichEmbed()
    .setColor('#0099ff')
    .setTitle("My Title")
    .addBlankField()
    .setDescription('Some description')
    .addBlankField()
    .addField('Name', '•'+ cell[1].value , true)
    .setTimestamp();

        message.author.send(embede) }
})
client.login('xxx')

Я ожидаю вывод "Terrassycup 3", но фактический вывод - "ReferenceError: ячейка не определена" в console.log

1 Ответ

0 голосов
/ 06 июля 2019

Я вижу несколько проблем с вашим кодом:

  • accessSpreadsheet() не возвращает никаких значений, к которым он обращается.
  • accessSpreadhseet() возвращает Обещание , поскольку оно объявлено как async , но оно никогда не ожидается.
  • Область действия из cell находится внутри цикла for...of внутри функции accessSpreadsheet(), но вы пытаетесь использовать ее далеко за ее пределами.

Вместо того, чтобы отправлять каждое отдельное значение пользователю, вы можете добавить их как поля для встраивания (ограничение 25) в пределах функции, которую вы объявляете.

async function accessSpreadsheet(embed) {
  // Insert the code already being used up to the for loop.

  for (let i = 0; i < 25 && cells[i]; i++) embed.addField('Name', `•${cells[i].value}`, true);
}

var embed = new RichEmbed()
  .setColor('#0099ff')
  .setTitle('**Spreadsheet Info**')
  .setDescription('Showing as many values as possible...');

accessSpreadsheet(embed)
  .then(() => message.author.send(embed))
  .catch(console.error);
...