Загрузите 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];
});
}