Загрузите Discord Bot для чтения и обновления электронных таблиц в JavaScript с помощью API Google Sheets - PullRequest
0 голосов
/ 24 декабря 2018

У меня есть бот Discord, который я размещаю на glitch.com, цель которого - хранить, читать и обновлять некоторые основные статистические данные для пользователей.Так как эта настройка заставляла переменные сбрасываться каждый раз, когда проект переходил в спящий режим, я успешно настроил API Google Sheets, чтобы можно было постоянно сохранять статистику пользователя в другом месте.Однако, ради бога, я не могу понять, как заставить мои переменные JavaScript получить свое значение из электронной таблицы.

В моем исходном коде просто было много переменных, в которых хранилась различная статистика каждого члена, например:

var User1Gold = 0 
var User2Gold = 0

и так далее.С таким новичком, как я, было очень легко работать, но теперь я снова и снова перечитываю документацию (подозреваю, что ищу ответ здесь ) и ничего не получаю в открытом виде.Есть ли способ сделать мои переменные равными определенной ячейке определенной электронной таблицы и просто покончить с этим, или это далеко не так просто?Возможно, что-то вроде этого:

var User1Gold = {spreadsheetId: 'iD', range: 'B3',};

Редактировать

Хорошо!Я двинулся вперед!Я смог заставить своего бота получить доступ к электронной таблице, чтобы найти определенное значение, а затем отправить сообщение с этим значением.Как раз то, что я хотел, кроме того, что, кажется, он мог сделать это только один раз?Это пример кода, который поставляется с API, который я настроил так, чтобы моя переменная равнялась одной ячейке из моей электронной таблицы.

var myvariable

function getvalue(auth) {
  const sheets = google.sheets({version: 'v4', auth});
  sheets.spreadsheets.values.get({
    spreadsheetId: 'SpreadsheetId',
    range: 'Sheet1!B3',
  }, (err, res) => {
    if (err) return console.log('The API returned an error: ' + err);
    const rows = res.data.values;
    if (rows.length) {
      rows.map((row) => {
      myvariable = (`${row[0]}`);
      });
    } else {
      console.log('No data found.');
    }
  });
} 

Это работает так, как задумано, но я, очевидно, хочу сослаться на несколько значений измоя таблица (очки здоровья пользователя, монеты и т. д.).Но когда я скопировал вышеизложенное во второй раз, присвоив переменной и функции другое имя, это просто не сработало.Я получаю сообщение об ошибке:

(узел: 2930) UnhandledPromiseRejectionWarning: DiscordAPIError: Отсутствуют разрешения

Что я делаю неправильно?Почему у моей первой функции, по-видимому, есть разрешения, а у второй, которая идентична, нет?Есть ли более простой способ сделать это, чем объявить функцию для каждого значения, которое я хочу получить?

Редактировать 2

Мне удалось исправить ошибку (не знаю, как быть честным), но моя проблема сохраняется.Я не могу создать вторую функцию для извлечения второго значения из моей электронной таблицы и присвоения его второй переменной.Я не получаю ошибок в консоли, но программа просто не делает этого, в то время как первая функция (та, что в примере) работает просто отлично.

1 Ответ

0 голосов
/ 26 декабря 2018

Хорошо, мне удалось это исправить, поэтому я оставляю это здесь на случай, если у кого-то еще возникнет такая же проблема.Чтобы это работало, мне просто нужно было вызвать все значения, которые мне были нужны в исходной функции (которая возвращает массив), а затем установить для каждой переменной, которую я хотел, конкретное значение внутри массива.

var myvar1
var myvar2

    function getvalue(auth) {
      const sheets = google.sheets({version: 'v4', auth});
      sheets.spreadsheets.values.get({
        spreadsheetId: 'SpreadsheetId';
        range: 'Copa!B2:B3',
      },(err, res) => {
        if (err) return console.log('The API returned an error: ' + err);
        myvar1 = res.data.values[0];
        myvar2 = res.data.values[1];
        });
    }
...