让 Discord Bot 通过 Google Sheets API 在 JavaScript 中读取和更新电子表格
Get Discord Bot to read and update spreadsheet in JavaScript via Google Sheets API
我在 glitch.com 上托管了一个 Discord 机器人,其目的是为用户存储、读取和更新一些基本统计数据。由于此设置会导致每次项目进入休眠状态时重置变量,因此我成功设置了 Google 工作表 API,以便我可以将用户的统计数据永久存储在其他地方。但是,看在上帝的份上,我无法弄清楚如何让我的 JavaScript 变量从电子表格中获取它们的值。
我的初始代码只有很多变量,用于存储每个成员的各种统计数据,例如:
var User1Gold = 0
var User2Gold = 0
等等。对于像我这样的新手爱好者来说,这很容易上手,但现在我发现自己一遍又一遍地阅读文档(我怀疑我寻求的答案是 here),却一无所获。有没有办法让我的变量等于某个电子表格的某个单元格并完成它,或者它远没有那么容易?也许是这样的:
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.');
}
});
}
这按预期工作,但我显然想从我的电子表格中引用多个值(用户健康点数、硬币等)。但是当我第二次复制粘贴上面的内容,给变量和函数另一个名字时,它就不起作用了。我收到错误消息:
(node:2930) UnhandledPromiseRejectionWarning: DiscordAPIError: Missing
Permissions
我做错了什么?为什么我的第一个函数看似有权限,而第二个完全相同的函数却没有?有没有比为每个我想获得的值声明一个函数更简单的方法?
编辑 2
我能够修复错误(不知道如何说实话),但我的问题仍然存在。我无法创建第二个函数来从我的电子表格中检索第二个值并将其分配给第二个变量。我在控制台中没有收到任何错误,但程序根本没有这样做,而第一个功能(示例中的那个)工作得很好。
好的,我设法修复了它,所以我把它留在这里以防其他人遇到同样的问题。为了让它工作,我只需要在原始函数(returns 一个数组)中调用我需要的所有值,然后将我想要的每个变量设置为数组中的特定值。
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];
});
}
我在 glitch.com 上托管了一个 Discord 机器人,其目的是为用户存储、读取和更新一些基本统计数据。由于此设置会导致每次项目进入休眠状态时重置变量,因此我成功设置了 Google 工作表 API,以便我可以将用户的统计数据永久存储在其他地方。但是,看在上帝的份上,我无法弄清楚如何让我的 JavaScript 变量从电子表格中获取它们的值。
我的初始代码只有很多变量,用于存储每个成员的各种统计数据,例如:
var User1Gold = 0
var User2Gold = 0
等等。对于像我这样的新手爱好者来说,这很容易上手,但现在我发现自己一遍又一遍地阅读文档(我怀疑我寻求的答案是 here),却一无所获。有没有办法让我的变量等于某个电子表格的某个单元格并完成它,或者它远没有那么容易?也许是这样的:
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.');
}
});
}
这按预期工作,但我显然想从我的电子表格中引用多个值(用户健康点数、硬币等)。但是当我第二次复制粘贴上面的内容,给变量和函数另一个名字时,它就不起作用了。我收到错误消息:
(node:2930) UnhandledPromiseRejectionWarning: DiscordAPIError: Missing Permissions
我做错了什么?为什么我的第一个函数看似有权限,而第二个完全相同的函数却没有?有没有比为每个我想获得的值声明一个函数更简单的方法?
编辑 2
我能够修复错误(不知道如何说实话),但我的问题仍然存在。我无法创建第二个函数来从我的电子表格中检索第二个值并将其分配给第二个变量。我在控制台中没有收到任何错误,但程序根本没有这样做,而第一个功能(示例中的那个)工作得很好。
好的,我设法修复了它,所以我把它留在这里以防其他人遇到同样的问题。为了让它工作,我只需要在原始函数(returns 一个数组)中调用我需要的所有值,然后将我想要的每个变量设置为数组中的特定值。
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];
});
}