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

У меня есть бот 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 ответ

Решение

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

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];
        });
    }
Другие вопросы по тегам